/******/ (function() { // webpackBootstrap
/******/ 	var __webpack_modules__ = ({

/***/ "./node_modules/@babel/runtime/helpers/typeof.js":
/*!*******************************************************!*\
  !*** ./node_modules/@babel/runtime/helpers/typeof.js ***!
  \*******************************************************/
/***/ (function(module) {

function _typeof(obj) {
  "@babel/helpers - typeof";

  if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
    module.exports = _typeof = function _typeof(obj) {
      return typeof obj;
    };

    module.exports["default"] = module.exports, module.exports.__esModule = true;
  } else {
    module.exports = _typeof = function _typeof(obj) {
      return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
    };

    module.exports["default"] = module.exports, module.exports.__esModule = true;
  }

  return _typeof(obj);
}

module.exports = _typeof;
module.exports["default"] = module.exports, module.exports.__esModule = true;

/***/ }),

/***/ "./node_modules/chart.js/dist/Chart.js":
/*!*********************************************!*\
  !*** ./node_modules/chart.js/dist/Chart.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

/*!
 * Chart.js v2.8.0
 * https://www.chartjs.org
 * (c) 2019 Chart.js Contributors
 * Released under the MIT License
 */
(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' ? module.exports = factory(function () {
    try {
      return __webpack_require__(/*! moment */ "./node_modules/moment/moment.js");
    } catch (e) {}
  }()) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require) {
    return factory(function () {
      try {
        return __webpack_require__(/*! moment */ "./node_modules/moment/moment.js");
      } catch (e) {}
    }());
  }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict';

  moment = moment && moment.hasOwnProperty('default') ? moment['default'] : moment;
  /* MIT license */

  var conversions = {
    rgb2hsl: rgb2hsl,
    rgb2hsv: rgb2hsv,
    rgb2hwb: rgb2hwb,
    rgb2cmyk: rgb2cmyk,
    rgb2keyword: rgb2keyword,
    rgb2xyz: rgb2xyz,
    rgb2lab: rgb2lab,
    rgb2lch: rgb2lch,
    hsl2rgb: hsl2rgb,
    hsl2hsv: hsl2hsv,
    hsl2hwb: hsl2hwb,
    hsl2cmyk: hsl2cmyk,
    hsl2keyword: hsl2keyword,
    hsv2rgb: hsv2rgb,
    hsv2hsl: hsv2hsl,
    hsv2hwb: hsv2hwb,
    hsv2cmyk: hsv2cmyk,
    hsv2keyword: hsv2keyword,
    hwb2rgb: hwb2rgb,
    hwb2hsl: hwb2hsl,
    hwb2hsv: hwb2hsv,
    hwb2cmyk: hwb2cmyk,
    hwb2keyword: hwb2keyword,
    cmyk2rgb: cmyk2rgb,
    cmyk2hsl: cmyk2hsl,
    cmyk2hsv: cmyk2hsv,
    cmyk2hwb: cmyk2hwb,
    cmyk2keyword: cmyk2keyword,
    keyword2rgb: keyword2rgb,
    keyword2hsl: keyword2hsl,
    keyword2hsv: keyword2hsv,
    keyword2hwb: keyword2hwb,
    keyword2cmyk: keyword2cmyk,
    keyword2lab: keyword2lab,
    keyword2xyz: keyword2xyz,
    xyz2rgb: xyz2rgb,
    xyz2lab: xyz2lab,
    xyz2lch: xyz2lch,
    lab2xyz: lab2xyz,
    lab2rgb: lab2rgb,
    lab2lch: lab2lch,
    lch2lab: lch2lab,
    lch2xyz: lch2xyz,
    lch2rgb: lch2rgb
  };

  function rgb2hsl(rgb) {
    var r = rgb[0] / 255,
        g = rgb[1] / 255,
        b = rgb[2] / 255,
        min = Math.min(r, g, b),
        max = Math.max(r, g, b),
        delta = max - min,
        h,
        s,
        l;
    if (max == min) h = 0;else if (r == max) h = (g - b) / delta;else if (g == max) h = 2 + (b - r) / delta;else if (b == max) h = 4 + (r - g) / delta;
    h = Math.min(h * 60, 360);
    if (h < 0) h += 360;
    l = (min + max) / 2;
    if (max == min) s = 0;else if (l <= 0.5) s = delta / (max + min);else s = delta / (2 - max - min);
    return [h, s * 100, l * 100];
  }

  function rgb2hsv(rgb) {
    var r = rgb[0],
        g = rgb[1],
        b = rgb[2],
        min = Math.min(r, g, b),
        max = Math.max(r, g, b),
        delta = max - min,
        h,
        s,
        v;
    if (max == 0) s = 0;else s = delta / max * 1000 / 10;
    if (max == min) h = 0;else if (r == max) h = (g - b) / delta;else if (g == max) h = 2 + (b - r) / delta;else if (b == max) h = 4 + (r - g) / delta;
    h = Math.min(h * 60, 360);
    if (h < 0) h += 360;
    v = max / 255 * 1000 / 10;
    return [h, s, v];
  }

  function rgb2hwb(rgb) {
    var r = rgb[0],
        g = rgb[1],
        b = rgb[2],
        h = rgb2hsl(rgb)[0],
        w = 1 / 255 * Math.min(r, Math.min(g, b)),
        b = 1 - 1 / 255 * Math.max(r, Math.max(g, b));
    return [h, w * 100, b * 100];
  }

  function rgb2cmyk(rgb) {
    var r = rgb[0] / 255,
        g = rgb[1] / 255,
        b = rgb[2] / 255,
        c,
        m,
        y,
        k;
    k = Math.min(1 - r, 1 - g, 1 - b);
    c = (1 - r - k) / (1 - k) || 0;
    m = (1 - g - k) / (1 - k) || 0;
    y = (1 - b - k) / (1 - k) || 0;
    return [c * 100, m * 100, y * 100, k * 100];
  }

  function rgb2keyword(rgb) {
    return reverseKeywords[JSON.stringify(rgb)];
  }

  function rgb2xyz(rgb) {
    var r = rgb[0] / 255,
        g = rgb[1] / 255,
        b = rgb[2] / 255; // assume sRGB

    r = r > 0.04045 ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92;
    g = g > 0.04045 ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92;
    b = b > 0.04045 ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92;
    var x = r * 0.4124 + g * 0.3576 + b * 0.1805;
    var y = r * 0.2126 + g * 0.7152 + b * 0.0722;
    var z = r * 0.0193 + g * 0.1192 + b * 0.9505;
    return [x * 100, y * 100, z * 100];
  }

  function rgb2lab(rgb) {
    var xyz = rgb2xyz(rgb),
        x = xyz[0],
        y = xyz[1],
        z = xyz[2],
        l,
        a,
        b;
    x /= 95.047;
    y /= 100;
    z /= 108.883;
    x = x > 0.008856 ? Math.pow(x, 1 / 3) : 7.787 * x + 16 / 116;
    y = y > 0.008856 ? Math.pow(y, 1 / 3) : 7.787 * y + 16 / 116;
    z = z > 0.008856 ? Math.pow(z, 1 / 3) : 7.787 * z + 16 / 116;
    l = 116 * y - 16;
    a = 500 * (x - y);
    b = 200 * (y - z);
    return [l, a, b];
  }

  function rgb2lch(args) {
    return lab2lch(rgb2lab(args));
  }

  function hsl2rgb(hsl) {
    var h = hsl[0] / 360,
        s = hsl[1] / 100,
        l = hsl[2] / 100,
        t1,
        t2,
        t3,
        rgb,
        val;

    if (s == 0) {
      val = l * 255;
      return [val, val, val];
    }

    if (l < 0.5) t2 = l * (1 + s);else t2 = l + s - l * s;
    t1 = 2 * l - t2;
    rgb = [0, 0, 0];

    for (var i = 0; i < 3; i++) {
      t3 = h + 1 / 3 * -(i - 1);
      t3 < 0 && t3++;
      t3 > 1 && t3--;
      if (6 * t3 < 1) val = t1 + (t2 - t1) * 6 * t3;else if (2 * t3 < 1) val = t2;else if (3 * t3 < 2) val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;else val = t1;
      rgb[i] = val * 255;
    }

    return rgb;
  }

  function hsl2hsv(hsl) {
    var h = hsl[0],
        s = hsl[1] / 100,
        l = hsl[2] / 100,
        sv,
        v;

    if (l === 0) {
      // no need to do calc on black
      // also avoids divide by 0 error
      return [0, 0, 0];
    }

    l *= 2;
    s *= l <= 1 ? l : 2 - l;
    v = (l + s) / 2;
    sv = 2 * s / (l + s);
    return [h, sv * 100, v * 100];
  }

  function hsl2hwb(args) {
    return rgb2hwb(hsl2rgb(args));
  }

  function hsl2cmyk(args) {
    return rgb2cmyk(hsl2rgb(args));
  }

  function hsl2keyword(args) {
    return rgb2keyword(hsl2rgb(args));
  }

  function hsv2rgb(hsv) {
    var h = hsv[0] / 60,
        s = hsv[1] / 100,
        v = hsv[2] / 100,
        hi = Math.floor(h) % 6;
    var f = h - Math.floor(h),
        p = 255 * v * (1 - s),
        q = 255 * v * (1 - s * f),
        t = 255 * v * (1 - s * (1 - f)),
        v = 255 * v;

    switch (hi) {
      case 0:
        return [v, t, p];

      case 1:
        return [q, v, p];

      case 2:
        return [p, v, t];

      case 3:
        return [p, q, v];

      case 4:
        return [t, p, v];

      case 5:
        return [v, p, q];
    }
  }

  function hsv2hsl(hsv) {
    var h = hsv[0],
        s = hsv[1] / 100,
        v = hsv[2] / 100,
        sl,
        l;
    l = (2 - s) * v;
    sl = s * v;
    sl /= l <= 1 ? l : 2 - l;
    sl = sl || 0;
    l /= 2;
    return [h, sl * 100, l * 100];
  }

  function hsv2hwb(args) {
    return rgb2hwb(hsv2rgb(args));
  }

  function hsv2cmyk(args) {
    return rgb2cmyk(hsv2rgb(args));
  }

  function hsv2keyword(args) {
    return rgb2keyword(hsv2rgb(args));
  } // http://dev.w3.org/csswg/css-color/#hwb-to-rgb


  function hwb2rgb(hwb) {
    var h = hwb[0] / 360,
        wh = hwb[1] / 100,
        bl = hwb[2] / 100,
        ratio = wh + bl,
        i,
        v,
        f,
        n; // wh + bl cant be > 1

    if (ratio > 1) {
      wh /= ratio;
      bl /= ratio;
    }

    i = Math.floor(6 * h);
    v = 1 - bl;
    f = 6 * h - i;

    if ((i & 0x01) != 0) {
      f = 1 - f;
    }

    n = wh + f * (v - wh); // linear interpolation

    switch (i) {
      default:
      case 6:
      case 0:
        r = v;
        g = n;
        b = wh;
        break;

      case 1:
        r = n;
        g = v;
        b = wh;
        break;

      case 2:
        r = wh;
        g = v;
        b = n;
        break;

      case 3:
        r = wh;
        g = n;
        b = v;
        break;

      case 4:
        r = n;
        g = wh;
        b = v;
        break;

      case 5:
        r = v;
        g = wh;
        b = n;
        break;
    }

    return [r * 255, g * 255, b * 255];
  }

  function hwb2hsl(args) {
    return rgb2hsl(hwb2rgb(args));
  }

  function hwb2hsv(args) {
    return rgb2hsv(hwb2rgb(args));
  }

  function hwb2cmyk(args) {
    return rgb2cmyk(hwb2rgb(args));
  }

  function hwb2keyword(args) {
    return rgb2keyword(hwb2rgb(args));
  }

  function cmyk2rgb(cmyk) {
    var c = cmyk[0] / 100,
        m = cmyk[1] / 100,
        y = cmyk[2] / 100,
        k = cmyk[3] / 100,
        r,
        g,
        b;
    r = 1 - Math.min(1, c * (1 - k) + k);
    g = 1 - Math.min(1, m * (1 - k) + k);
    b = 1 - Math.min(1, y * (1 - k) + k);
    return [r * 255, g * 255, b * 255];
  }

  function cmyk2hsl(args) {
    return rgb2hsl(cmyk2rgb(args));
  }

  function cmyk2hsv(args) {
    return rgb2hsv(cmyk2rgb(args));
  }

  function cmyk2hwb(args) {
    return rgb2hwb(cmyk2rgb(args));
  }

  function cmyk2keyword(args) {
    return rgb2keyword(cmyk2rgb(args));
  }

  function xyz2rgb(xyz) {
    var x = xyz[0] / 100,
        y = xyz[1] / 100,
        z = xyz[2] / 100,
        r,
        g,
        b;
    r = x * 3.2406 + y * -1.5372 + z * -0.4986;
    g = x * -0.9689 + y * 1.8758 + z * 0.0415;
    b = x * 0.0557 + y * -0.2040 + z * 1.0570; // assume sRGB

    r = r > 0.0031308 ? 1.055 * Math.pow(r, 1.0 / 2.4) - 0.055 : r = r * 12.92;
    g = g > 0.0031308 ? 1.055 * Math.pow(g, 1.0 / 2.4) - 0.055 : g = g * 12.92;
    b = b > 0.0031308 ? 1.055 * Math.pow(b, 1.0 / 2.4) - 0.055 : b = b * 12.92;
    r = Math.min(Math.max(0, r), 1);
    g = Math.min(Math.max(0, g), 1);
    b = Math.min(Math.max(0, b), 1);
    return [r * 255, g * 255, b * 255];
  }

  function xyz2lab(xyz) {
    var x = xyz[0],
        y = xyz[1],
        z = xyz[2],
        l,
        a,
        b;
    x /= 95.047;
    y /= 100;
    z /= 108.883;
    x = x > 0.008856 ? Math.pow(x, 1 / 3) : 7.787 * x + 16 / 116;
    y = y > 0.008856 ? Math.pow(y, 1 / 3) : 7.787 * y + 16 / 116;
    z = z > 0.008856 ? Math.pow(z, 1 / 3) : 7.787 * z + 16 / 116;
    l = 116 * y - 16;
    a = 500 * (x - y);
    b = 200 * (y - z);
    return [l, a, b];
  }

  function xyz2lch(args) {
    return lab2lch(xyz2lab(args));
  }

  function lab2xyz(lab) {
    var l = lab[0],
        a = lab[1],
        b = lab[2],
        x,
        y,
        z,
        y2;

    if (l <= 8) {
      y = l * 100 / 903.3;
      y2 = 7.787 * (y / 100) + 16 / 116;
    } else {
      y = 100 * Math.pow((l + 16) / 116, 3);
      y2 = Math.pow(y / 100, 1 / 3);
    }

    x = x / 95.047 <= 0.008856 ? x = 95.047 * (a / 500 + y2 - 16 / 116) / 7.787 : 95.047 * Math.pow(a / 500 + y2, 3);
    z = z / 108.883 <= 0.008859 ? z = 108.883 * (y2 - b / 200 - 16 / 116) / 7.787 : 108.883 * Math.pow(y2 - b / 200, 3);
    return [x, y, z];
  }

  function lab2lch(lab) {
    var l = lab[0],
        a = lab[1],
        b = lab[2],
        hr,
        h,
        c;
    hr = Math.atan2(b, a);
    h = hr * 360 / 2 / Math.PI;

    if (h < 0) {
      h += 360;
    }

    c = Math.sqrt(a * a + b * b);
    return [l, c, h];
  }

  function lab2rgb(args) {
    return xyz2rgb(lab2xyz(args));
  }

  function lch2lab(lch) {
    var l = lch[0],
        c = lch[1],
        h = lch[2],
        a,
        b,
        hr;
    hr = h / 360 * 2 * Math.PI;
    a = c * Math.cos(hr);
    b = c * Math.sin(hr);
    return [l, a, b];
  }

  function lch2xyz(args) {
    return lab2xyz(lch2lab(args));
  }

  function lch2rgb(args) {
    return lab2rgb(lch2lab(args));
  }

  function keyword2rgb(keyword) {
    return cssKeywords[keyword];
  }

  function keyword2hsl(args) {
    return rgb2hsl(keyword2rgb(args));
  }

  function keyword2hsv(args) {
    return rgb2hsv(keyword2rgb(args));
  }

  function keyword2hwb(args) {
    return rgb2hwb(keyword2rgb(args));
  }

  function keyword2cmyk(args) {
    return rgb2cmyk(keyword2rgb(args));
  }

  function keyword2lab(args) {
    return rgb2lab(keyword2rgb(args));
  }

  function keyword2xyz(args) {
    return rgb2xyz(keyword2rgb(args));
  }

  var cssKeywords = {
    aliceblue: [240, 248, 255],
    antiquewhite: [250, 235, 215],
    aqua: [0, 255, 255],
    aquamarine: [127, 255, 212],
    azure: [240, 255, 255],
    beige: [245, 245, 220],
    bisque: [255, 228, 196],
    black: [0, 0, 0],
    blanchedalmond: [255, 235, 205],
    blue: [0, 0, 255],
    blueviolet: [138, 43, 226],
    brown: [165, 42, 42],
    burlywood: [222, 184, 135],
    cadetblue: [95, 158, 160],
    chartreuse: [127, 255, 0],
    chocolate: [210, 105, 30],
    coral: [255, 127, 80],
    cornflowerblue: [100, 149, 237],
    cornsilk: [255, 248, 220],
    crimson: [220, 20, 60],
    cyan: [0, 255, 255],
    darkblue: [0, 0, 139],
    darkcyan: [0, 139, 139],
    darkgoldenrod: [184, 134, 11],
    darkgray: [169, 169, 169],
    darkgreen: [0, 100, 0],
    darkgrey: [169, 169, 169],
    darkkhaki: [189, 183, 107],
    darkmagenta: [139, 0, 139],
    darkolivegreen: [85, 107, 47],
    darkorange: [255, 140, 0],
    darkorchid: [153, 50, 204],
    darkred: [139, 0, 0],
    darksalmon: [233, 150, 122],
    darkseagreen: [143, 188, 143],
    darkslateblue: [72, 61, 139],
    darkslategray: [47, 79, 79],
    darkslategrey: [47, 79, 79],
    darkturquoise: [0, 206, 209],
    darkviolet: [148, 0, 211],
    deeppink: [255, 20, 147],
    deepskyblue: [0, 191, 255],
    dimgray: [105, 105, 105],
    dimgrey: [105, 105, 105],
    dodgerblue: [30, 144, 255],
    firebrick: [178, 34, 34],
    floralwhite: [255, 250, 240],
    forestgreen: [34, 139, 34],
    fuchsia: [255, 0, 255],
    gainsboro: [220, 220, 220],
    ghostwhite: [248, 248, 255],
    gold: [255, 215, 0],
    goldenrod: [218, 165, 32],
    gray: [128, 128, 128],
    green: [0, 128, 0],
    greenyellow: [173, 255, 47],
    grey: [128, 128, 128],
    honeydew: [240, 255, 240],
    hotpink: [255, 105, 180],
    indianred: [205, 92, 92],
    indigo: [75, 0, 130],
    ivory: [255, 255, 240],
    khaki: [240, 230, 140],
    lavender: [230, 230, 250],
    lavenderblush: [255, 240, 245],
    lawngreen: [124, 252, 0],
    lemonchiffon: [255, 250, 205],
    lightblue: [173, 216, 230],
    lightcoral: [240, 128, 128],
    lightcyan: [224, 255, 255],
    lightgoldenrodyellow: [250, 250, 210],
    lightgray: [211, 211, 211],
    lightgreen: [144, 238, 144],
    lightgrey: [211, 211, 211],
    lightpink: [255, 182, 193],
    lightsalmon: [255, 160, 122],
    lightseagreen: [32, 178, 170],
    lightskyblue: [135, 206, 250],
    lightslategray: [119, 136, 153],
    lightslategrey: [119, 136, 153],
    lightsteelblue: [176, 196, 222],
    lightyellow: [255, 255, 224],
    lime: [0, 255, 0],
    limegreen: [50, 205, 50],
    linen: [250, 240, 230],
    magenta: [255, 0, 255],
    maroon: [128, 0, 0],
    mediumaquamarine: [102, 205, 170],
    mediumblue: [0, 0, 205],
    mediumorchid: [186, 85, 211],
    mediumpurple: [147, 112, 219],
    mediumseagreen: [60, 179, 113],
    mediumslateblue: [123, 104, 238],
    mediumspringgreen: [0, 250, 154],
    mediumturquoise: [72, 209, 204],
    mediumvioletred: [199, 21, 133],
    midnightblue: [25, 25, 112],
    mintcream: [245, 255, 250],
    mistyrose: [255, 228, 225],
    moccasin: [255, 228, 181],
    navajowhite: [255, 222, 173],
    navy: [0, 0, 128],
    oldlace: [253, 245, 230],
    olive: [128, 128, 0],
    olivedrab: [107, 142, 35],
    orange: [255, 165, 0],
    orangered: [255, 69, 0],
    orchid: [218, 112, 214],
    palegoldenrod: [238, 232, 170],
    palegreen: [152, 251, 152],
    paleturquoise: [175, 238, 238],
    palevioletred: [219, 112, 147],
    papayawhip: [255, 239, 213],
    peachpuff: [255, 218, 185],
    peru: [205, 133, 63],
    pink: [255, 192, 203],
    plum: [221, 160, 221],
    powderblue: [176, 224, 230],
    purple: [128, 0, 128],
    rebeccapurple: [102, 51, 153],
    red: [255, 0, 0],
    rosybrown: [188, 143, 143],
    royalblue: [65, 105, 225],
    saddlebrown: [139, 69, 19],
    salmon: [250, 128, 114],
    sandybrown: [244, 164, 96],
    seagreen: [46, 139, 87],
    seashell: [255, 245, 238],
    sienna: [160, 82, 45],
    silver: [192, 192, 192],
    skyblue: [135, 206, 235],
    slateblue: [106, 90, 205],
    slategray: [112, 128, 144],
    slategrey: [112, 128, 144],
    snow: [255, 250, 250],
    springgreen: [0, 255, 127],
    steelblue: [70, 130, 180],
    tan: [210, 180, 140],
    teal: [0, 128, 128],
    thistle: [216, 191, 216],
    tomato: [255, 99, 71],
    turquoise: [64, 224, 208],
    violet: [238, 130, 238],
    wheat: [245, 222, 179],
    white: [255, 255, 255],
    whitesmoke: [245, 245, 245],
    yellow: [255, 255, 0],
    yellowgreen: [154, 205, 50]
  };
  var reverseKeywords = {};

  for (var key in cssKeywords) {
    reverseKeywords[JSON.stringify(cssKeywords[key])] = key;
  }

  var convert = function convert() {
    return new Converter();
  };

  for (var func in conversions) {
    // export Raw versions
    convert[func + "Raw"] = function (func) {
      // accept array or plain args
      return function (arg) {
        if (typeof arg == "number") arg = Array.prototype.slice.call(arguments);
        return conversions[func](arg);
      };
    }(func);

    var pair = /(\w+)2(\w+)/.exec(func),
        from = pair[1],
        to = pair[2]; // export rgb2hsl and ["rgb"]["hsl"]

    convert[from] = convert[from] || {};

    convert[from][to] = convert[func] = function (func) {
      return function (arg) {
        if (typeof arg == "number") arg = Array.prototype.slice.call(arguments);
        var val = conversions[func](arg);
        if (typeof val == "string" || val === undefined) return val; // keyword

        for (var i = 0; i < val.length; i++) {
          val[i] = Math.round(val[i]);
        }

        return val;
      };
    }(func);
  }
  /* Converter does lazy conversion and caching */


  var Converter = function Converter() {
    this.convs = {};
  };
  /* Either get the values for a space or
    set the values for a space, depending on args */


  Converter.prototype.routeSpace = function (space, args) {
    var values = args[0];

    if (values === undefined) {
      // color.rgb()
      return this.getValues(space);
    } // color.rgb(10, 10, 10)


    if (typeof values == "number") {
      values = Array.prototype.slice.call(args);
    }

    return this.setValues(space, values);
  };
  /* Set the values for a space, invalidating cache */


  Converter.prototype.setValues = function (space, values) {
    this.space = space;
    this.convs = {};
    this.convs[space] = values;
    return this;
  };
  /* Get the values for a space. If there's already
    a conversion for the space, fetch it, otherwise
    compute it */


  Converter.prototype.getValues = function (space) {
    var vals = this.convs[space];

    if (!vals) {
      var fspace = this.space,
          from = this.convs[fspace];
      vals = convert[fspace][space](from);
      this.convs[space] = vals;
    }

    return vals;
  };

  ["rgb", "hsl", "hsv", "cmyk", "keyword"].forEach(function (space) {
    Converter.prototype[space] = function (vals) {
      return this.routeSpace(space, arguments);
    };
  });
  var colorConvert = convert;
  var colorName = {
    "aliceblue": [240, 248, 255],
    "antiquewhite": [250, 235, 215],
    "aqua": [0, 255, 255],
    "aquamarine": [127, 255, 212],
    "azure": [240, 255, 255],
    "beige": [245, 245, 220],
    "bisque": [255, 228, 196],
    "black": [0, 0, 0],
    "blanchedalmond": [255, 235, 205],
    "blue": [0, 0, 255],
    "blueviolet": [138, 43, 226],
    "brown": [165, 42, 42],
    "burlywood": [222, 184, 135],
    "cadetblue": [95, 158, 160],
    "chartreuse": [127, 255, 0],
    "chocolate": [210, 105, 30],
    "coral": [255, 127, 80],
    "cornflowerblue": [100, 149, 237],
    "cornsilk": [255, 248, 220],
    "crimson": [220, 20, 60],
    "cyan": [0, 255, 255],
    "darkblue": [0, 0, 139],
    "darkcyan": [0, 139, 139],
    "darkgoldenrod": [184, 134, 11],
    "darkgray": [169, 169, 169],
    "darkgreen": [0, 100, 0],
    "darkgrey": [169, 169, 169],
    "darkkhaki": [189, 183, 107],
    "darkmagenta": [139, 0, 139],
    "darkolivegreen": [85, 107, 47],
    "darkorange": [255, 140, 0],
    "darkorchid": [153, 50, 204],
    "darkred": [139, 0, 0],
    "darksalmon": [233, 150, 122],
    "darkseagreen": [143, 188, 143],
    "darkslateblue": [72, 61, 139],
    "darkslategray": [47, 79, 79],
    "darkslategrey": [47, 79, 79],
    "darkturquoise": [0, 206, 209],
    "darkviolet": [148, 0, 211],
    "deeppink": [255, 20, 147],
    "deepskyblue": [0, 191, 255],
    "dimgray": [105, 105, 105],
    "dimgrey": [105, 105, 105],
    "dodgerblue": [30, 144, 255],
    "firebrick": [178, 34, 34],
    "floralwhite": [255, 250, 240],
    "forestgreen": [34, 139, 34],
    "fuchsia": [255, 0, 255],
    "gainsboro": [220, 220, 220],
    "ghostwhite": [248, 248, 255],
    "gold": [255, 215, 0],
    "goldenrod": [218, 165, 32],
    "gray": [128, 128, 128],
    "green": [0, 128, 0],
    "greenyellow": [173, 255, 47],
    "grey": [128, 128, 128],
    "honeydew": [240, 255, 240],
    "hotpink": [255, 105, 180],
    "indianred": [205, 92, 92],
    "indigo": [75, 0, 130],
    "ivory": [255, 255, 240],
    "khaki": [240, 230, 140],
    "lavender": [230, 230, 250],
    "lavenderblush": [255, 240, 245],
    "lawngreen": [124, 252, 0],
    "lemonchiffon": [255, 250, 205],
    "lightblue": [173, 216, 230],
    "lightcoral": [240, 128, 128],
    "lightcyan": [224, 255, 255],
    "lightgoldenrodyellow": [250, 250, 210],
    "lightgray": [211, 211, 211],
    "lightgreen": [144, 238, 144],
    "lightgrey": [211, 211, 211],
    "lightpink": [255, 182, 193],
    "lightsalmon": [255, 160, 122],
    "lightseagreen": [32, 178, 170],
    "lightskyblue": [135, 206, 250],
    "lightslategray": [119, 136, 153],
    "lightslategrey": [119, 136, 153],
    "lightsteelblue": [176, 196, 222],
    "lightyellow": [255, 255, 224],
    "lime": [0, 255, 0],
    "limegreen": [50, 205, 50],
    "linen": [250, 240, 230],
    "magenta": [255, 0, 255],
    "maroon": [128, 0, 0],
    "mediumaquamarine": [102, 205, 170],
    "mediumblue": [0, 0, 205],
    "mediumorchid": [186, 85, 211],
    "mediumpurple": [147, 112, 219],
    "mediumseagreen": [60, 179, 113],
    "mediumslateblue": [123, 104, 238],
    "mediumspringgreen": [0, 250, 154],
    "mediumturquoise": [72, 209, 204],
    "mediumvioletred": [199, 21, 133],
    "midnightblue": [25, 25, 112],
    "mintcream": [245, 255, 250],
    "mistyrose": [255, 228, 225],
    "moccasin": [255, 228, 181],
    "navajowhite": [255, 222, 173],
    "navy": [0, 0, 128],
    "oldlace": [253, 245, 230],
    "olive": [128, 128, 0],
    "olivedrab": [107, 142, 35],
    "orange": [255, 165, 0],
    "orangered": [255, 69, 0],
    "orchid": [218, 112, 214],
    "palegoldenrod": [238, 232, 170],
    "palegreen": [152, 251, 152],
    "paleturquoise": [175, 238, 238],
    "palevioletred": [219, 112, 147],
    "papayawhip": [255, 239, 213],
    "peachpuff": [255, 218, 185],
    "peru": [205, 133, 63],
    "pink": [255, 192, 203],
    "plum": [221, 160, 221],
    "powderblue": [176, 224, 230],
    "purple": [128, 0, 128],
    "rebeccapurple": [102, 51, 153],
    "red": [255, 0, 0],
    "rosybrown": [188, 143, 143],
    "royalblue": [65, 105, 225],
    "saddlebrown": [139, 69, 19],
    "salmon": [250, 128, 114],
    "sandybrown": [244, 164, 96],
    "seagreen": [46, 139, 87],
    "seashell": [255, 245, 238],
    "sienna": [160, 82, 45],
    "silver": [192, 192, 192],
    "skyblue": [135, 206, 235],
    "slateblue": [106, 90, 205],
    "slategray": [112, 128, 144],
    "slategrey": [112, 128, 144],
    "snow": [255, 250, 250],
    "springgreen": [0, 255, 127],
    "steelblue": [70, 130, 180],
    "tan": [210, 180, 140],
    "teal": [0, 128, 128],
    "thistle": [216, 191, 216],
    "tomato": [255, 99, 71],
    "turquoise": [64, 224, 208],
    "violet": [238, 130, 238],
    "wheat": [245, 222, 179],
    "white": [255, 255, 255],
    "whitesmoke": [245, 245, 245],
    "yellow": [255, 255, 0],
    "yellowgreen": [154, 205, 50]
  };
  /* MIT license */

  var colorString = {
    getRgba: getRgba,
    getHsla: getHsla,
    getRgb: getRgb,
    getHsl: getHsl,
    getHwb: getHwb,
    getAlpha: getAlpha,
    hexString: hexString,
    rgbString: rgbString,
    rgbaString: rgbaString,
    percentString: percentString,
    percentaString: percentaString,
    hslString: hslString,
    hslaString: hslaString,
    hwbString: hwbString,
    keyword: keyword
  };

  function getRgba(string) {
    if (!string) {
      return;
    }

    var abbr = /^#([a-fA-F0-9]{3,4})$/i,
        hex = /^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i,
        rgba = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i,
        per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i,
        keyword = /(\w+)/;
    var rgb = [0, 0, 0],
        a = 1,
        match = string.match(abbr),
        hexAlpha = "";

    if (match) {
      match = match[1];
      hexAlpha = match[3];

      for (var i = 0; i < rgb.length; i++) {
        rgb[i] = parseInt(match[i] + match[i], 16);
      }

      if (hexAlpha) {
        a = Math.round(parseInt(hexAlpha + hexAlpha, 16) / 255 * 100) / 100;
      }
    } else if (match = string.match(hex)) {
      hexAlpha = match[2];
      match = match[1];

      for (var i = 0; i < rgb.length; i++) {
        rgb[i] = parseInt(match.slice(i * 2, i * 2 + 2), 16);
      }

      if (hexAlpha) {
        a = Math.round(parseInt(hexAlpha, 16) / 255 * 100) / 100;
      }
    } else if (match = string.match(rgba)) {
      for (var i = 0; i < rgb.length; i++) {
        rgb[i] = parseInt(match[i + 1]);
      }

      a = parseFloat(match[4]);
    } else if (match = string.match(per)) {
      for (var i = 0; i < rgb.length; i++) {
        rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);
      }

      a = parseFloat(match[4]);
    } else if (match = string.match(keyword)) {
      if (match[1] == "transparent") {
        return [0, 0, 0, 0];
      }

      rgb = colorName[match[1]];

      if (!rgb) {
        return;
      }
    }

    for (var i = 0; i < rgb.length; i++) {
      rgb[i] = scale(rgb[i], 0, 255);
    }

    if (!a && a != 0) {
      a = 1;
    } else {
      a = scale(a, 0, 1);
    }

    rgb[3] = a;
    return rgb;
  }

  function getHsla(string) {
    if (!string) {
      return;
    }

    var hsl = /^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/;
    var match = string.match(hsl);

    if (match) {
      var alpha = parseFloat(match[4]);
      var h = scale(parseInt(match[1]), 0, 360),
          s = scale(parseFloat(match[2]), 0, 100),
          l = scale(parseFloat(match[3]), 0, 100),
          a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);
      return [h, s, l, a];
    }
  }

  function getHwb(string) {
    if (!string) {
      return;
    }

    var hwb = /^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/;
    var match = string.match(hwb);

    if (match) {
      var alpha = parseFloat(match[4]);
      var h = scale(parseInt(match[1]), 0, 360),
          w = scale(parseFloat(match[2]), 0, 100),
          b = scale(parseFloat(match[3]), 0, 100),
          a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);
      return [h, w, b, a];
    }
  }

  function getRgb(string) {
    var rgba = getRgba(string);
    return rgba && rgba.slice(0, 3);
  }

  function getHsl(string) {
    var hsla = getHsla(string);
    return hsla && hsla.slice(0, 3);
  }

  function getAlpha(string) {
    var vals = getRgba(string);

    if (vals) {
      return vals[3];
    } else if (vals = getHsla(string)) {
      return vals[3];
    } else if (vals = getHwb(string)) {
      return vals[3];
    }
  } // generators


  function hexString(rgba, a) {
    var a = a !== undefined && rgba.length === 3 ? a : rgba[3];
    return "#" + hexDouble(rgba[0]) + hexDouble(rgba[1]) + hexDouble(rgba[2]) + (a >= 0 && a < 1 ? hexDouble(Math.round(a * 255)) : "");
  }

  function rgbString(rgba, alpha) {
    if (alpha < 1 || rgba[3] && rgba[3] < 1) {
      return rgbaString(rgba, alpha);
    }

    return "rgb(" + rgba[0] + ", " + rgba[1] + ", " + rgba[2] + ")";
  }

  function rgbaString(rgba, alpha) {
    if (alpha === undefined) {
      alpha = rgba[3] !== undefined ? rgba[3] : 1;
    }

    return "rgba(" + rgba[0] + ", " + rgba[1] + ", " + rgba[2] + ", " + alpha + ")";
  }

  function percentString(rgba, alpha) {
    if (alpha < 1 || rgba[3] && rgba[3] < 1) {
      return percentaString(rgba, alpha);
    }

    var r = Math.round(rgba[0] / 255 * 100),
        g = Math.round(rgba[1] / 255 * 100),
        b = Math.round(rgba[2] / 255 * 100);
    return "rgb(" + r + "%, " + g + "%, " + b + "%)";
  }

  function percentaString(rgba, alpha) {
    var r = Math.round(rgba[0] / 255 * 100),
        g = Math.round(rgba[1] / 255 * 100),
        b = Math.round(rgba[2] / 255 * 100);
    return "rgba(" + r + "%, " + g + "%, " + b + "%, " + (alpha || rgba[3] || 1) + ")";
  }

  function hslString(hsla, alpha) {
    if (alpha < 1 || hsla[3] && hsla[3] < 1) {
      return hslaString(hsla, alpha);
    }

    return "hsl(" + hsla[0] + ", " + hsla[1] + "%, " + hsla[2] + "%)";
  }

  function hslaString(hsla, alpha) {
    if (alpha === undefined) {
      alpha = hsla[3] !== undefined ? hsla[3] : 1;
    }

    return "hsla(" + hsla[0] + ", " + hsla[1] + "%, " + hsla[2] + "%, " + alpha + ")";
  } // hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax
  // (hwb have alpha optional & 1 is default value)


  function hwbString(hwb, alpha) {
    if (alpha === undefined) {
      alpha = hwb[3] !== undefined ? hwb[3] : 1;
    }

    return "hwb(" + hwb[0] + ", " + hwb[1] + "%, " + hwb[2] + "%" + (alpha !== undefined && alpha !== 1 ? ", " + alpha : "") + ")";
  }

  function keyword(rgb) {
    return reverseNames[rgb.slice(0, 3)];
  } // helpers


  function scale(num, min, max) {
    return Math.min(Math.max(min, num), max);
  }

  function hexDouble(num) {
    var str = num.toString(16).toUpperCase();
    return str.length < 2 ? "0" + str : str;
  } //create a list of reverse color names


  var reverseNames = {};

  for (var name in colorName) {
    reverseNames[colorName[name]] = name;
  }
  /* MIT license */


  var Color = function Color(obj) {
    if (obj instanceof Color) {
      return obj;
    }

    if (!(this instanceof Color)) {
      return new Color(obj);
    }

    this.valid = false;
    this.values = {
      rgb: [0, 0, 0],
      hsl: [0, 0, 0],
      hsv: [0, 0, 0],
      hwb: [0, 0, 0],
      cmyk: [0, 0, 0, 0],
      alpha: 1
    }; // parse Color() argument

    var vals;

    if (typeof obj === 'string') {
      vals = colorString.getRgba(obj);

      if (vals) {
        this.setValues('rgb', vals);
      } else if (vals = colorString.getHsla(obj)) {
        this.setValues('hsl', vals);
      } else if (vals = colorString.getHwb(obj)) {
        this.setValues('hwb', vals);
      }
    } else if (_typeof(obj) === 'object') {
      vals = obj;

      if (vals.r !== undefined || vals.red !== undefined) {
        this.setValues('rgb', vals);
      } else if (vals.l !== undefined || vals.lightness !== undefined) {
        this.setValues('hsl', vals);
      } else if (vals.v !== undefined || vals.value !== undefined) {
        this.setValues('hsv', vals);
      } else if (vals.w !== undefined || vals.whiteness !== undefined) {
        this.setValues('hwb', vals);
      } else if (vals.c !== undefined || vals.cyan !== undefined) {
        this.setValues('cmyk', vals);
      }
    }
  };

  Color.prototype = {
    isValid: function isValid() {
      return this.valid;
    },
    rgb: function rgb() {
      return this.setSpace('rgb', arguments);
    },
    hsl: function hsl() {
      return this.setSpace('hsl', arguments);
    },
    hsv: function hsv() {
      return this.setSpace('hsv', arguments);
    },
    hwb: function hwb() {
      return this.setSpace('hwb', arguments);
    },
    cmyk: function cmyk() {
      return this.setSpace('cmyk', arguments);
    },
    rgbArray: function rgbArray() {
      return this.values.rgb;
    },
    hslArray: function hslArray() {
      return this.values.hsl;
    },
    hsvArray: function hsvArray() {
      return this.values.hsv;
    },
    hwbArray: function hwbArray() {
      var values = this.values;

      if (values.alpha !== 1) {
        return values.hwb.concat([values.alpha]);
      }

      return values.hwb;
    },
    cmykArray: function cmykArray() {
      return this.values.cmyk;
    },
    rgbaArray: function rgbaArray() {
      var values = this.values;
      return values.rgb.concat([values.alpha]);
    },
    hslaArray: function hslaArray() {
      var values = this.values;
      return values.hsl.concat([values.alpha]);
    },
    alpha: function alpha(val) {
      if (val === undefined) {
        return this.values.alpha;
      }

      this.setValues('alpha', val);
      return this;
    },
    red: function red(val) {
      return this.setChannel('rgb', 0, val);
    },
    green: function green(val) {
      return this.setChannel('rgb', 1, val);
    },
    blue: function blue(val) {
      return this.setChannel('rgb', 2, val);
    },
    hue: function hue(val) {
      if (val) {
        val %= 360;
        val = val < 0 ? 360 + val : val;
      }

      return this.setChannel('hsl', 0, val);
    },
    saturation: function saturation(val) {
      return this.setChannel('hsl', 1, val);
    },
    lightness: function lightness(val) {
      return this.setChannel('hsl', 2, val);
    },
    saturationv: function saturationv(val) {
      return this.setChannel('hsv', 1, val);
    },
    whiteness: function whiteness(val) {
      return this.setChannel('hwb', 1, val);
    },
    blackness: function blackness(val) {
      return this.setChannel('hwb', 2, val);
    },
    value: function value(val) {
      return this.setChannel('hsv', 2, val);
    },
    cyan: function cyan(val) {
      return this.setChannel('cmyk', 0, val);
    },
    magenta: function magenta(val) {
      return this.setChannel('cmyk', 1, val);
    },
    yellow: function yellow(val) {
      return this.setChannel('cmyk', 2, val);
    },
    black: function black(val) {
      return this.setChannel('cmyk', 3, val);
    },
    hexString: function hexString() {
      return colorString.hexString(this.values.rgb);
    },
    rgbString: function rgbString() {
      return colorString.rgbString(this.values.rgb, this.values.alpha);
    },
    rgbaString: function rgbaString() {
      return colorString.rgbaString(this.values.rgb, this.values.alpha);
    },
    percentString: function percentString() {
      return colorString.percentString(this.values.rgb, this.values.alpha);
    },
    hslString: function hslString() {
      return colorString.hslString(this.values.hsl, this.values.alpha);
    },
    hslaString: function hslaString() {
      return colorString.hslaString(this.values.hsl, this.values.alpha);
    },
    hwbString: function hwbString() {
      return colorString.hwbString(this.values.hwb, this.values.alpha);
    },
    keyword: function keyword() {
      return colorString.keyword(this.values.rgb, this.values.alpha);
    },
    rgbNumber: function rgbNumber() {
      var rgb = this.values.rgb;
      return rgb[0] << 16 | rgb[1] << 8 | rgb[2];
    },
    luminosity: function luminosity() {
      // http://www.w3.org/TR/WCAG20/#relativeluminancedef
      var rgb = this.values.rgb;
      var lum = [];

      for (var i = 0; i < rgb.length; i++) {
        var chan = rgb[i] / 255;
        lum[i] = chan <= 0.03928 ? chan / 12.92 : Math.pow((chan + 0.055) / 1.055, 2.4);
      }

      return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];
    },
    contrast: function contrast(color2) {
      // http://www.w3.org/TR/WCAG20/#contrast-ratiodef
      var lum1 = this.luminosity();
      var lum2 = color2.luminosity();

      if (lum1 > lum2) {
        return (lum1 + 0.05) / (lum2 + 0.05);
      }

      return (lum2 + 0.05) / (lum1 + 0.05);
    },
    level: function level(color2) {
      var contrastRatio = this.contrast(color2);

      if (contrastRatio >= 7.1) {
        return 'AAA';
      }

      return contrastRatio >= 4.5 ? 'AA' : '';
    },
    dark: function dark() {
      // YIQ equation from http://24ways.org/2010/calculating-color-contrast
      var rgb = this.values.rgb;
      var yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;
      return yiq < 128;
    },
    light: function light() {
      return !this.dark();
    },
    negate: function negate() {
      var rgb = [];

      for (var i = 0; i < 3; i++) {
        rgb[i] = 255 - this.values.rgb[i];
      }

      this.setValues('rgb', rgb);
      return this;
    },
    lighten: function lighten(ratio) {
      var hsl = this.values.hsl;
      hsl[2] += hsl[2] * ratio;
      this.setValues('hsl', hsl);
      return this;
    },
    darken: function darken(ratio) {
      var hsl = this.values.hsl;
      hsl[2] -= hsl[2] * ratio;
      this.setValues('hsl', hsl);
      return this;
    },
    saturate: function saturate(ratio) {
      var hsl = this.values.hsl;
      hsl[1] += hsl[1] * ratio;
      this.setValues('hsl', hsl);
      return this;
    },
    desaturate: function desaturate(ratio) {
      var hsl = this.values.hsl;
      hsl[1] -= hsl[1] * ratio;
      this.setValues('hsl', hsl);
      return this;
    },
    whiten: function whiten(ratio) {
      var hwb = this.values.hwb;
      hwb[1] += hwb[1] * ratio;
      this.setValues('hwb', hwb);
      return this;
    },
    blacken: function blacken(ratio) {
      var hwb = this.values.hwb;
      hwb[2] += hwb[2] * ratio;
      this.setValues('hwb', hwb);
      return this;
    },
    greyscale: function greyscale() {
      var rgb = this.values.rgb; // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale

      var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;
      this.setValues('rgb', [val, val, val]);
      return this;
    },
    clearer: function clearer(ratio) {
      var alpha = this.values.alpha;
      this.setValues('alpha', alpha - alpha * ratio);
      return this;
    },
    opaquer: function opaquer(ratio) {
      var alpha = this.values.alpha;
      this.setValues('alpha', alpha + alpha * ratio);
      return this;
    },
    rotate: function rotate(degrees) {
      var hsl = this.values.hsl;
      var hue = (hsl[0] + degrees) % 360;
      hsl[0] = hue < 0 ? 360 + hue : hue;
      this.setValues('hsl', hsl);
      return this;
    },

    /**
     * Ported from sass implementation in C
     * https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209
     */
    mix: function mix(mixinColor, weight) {
      var color1 = this;
      var color2 = mixinColor;
      var p = weight === undefined ? 0.5 : weight;
      var w = 2 * p - 1;
      var a = color1.alpha() - color2.alpha();
      var w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;
      var w2 = 1 - w1;
      return this.rgb(w1 * color1.red() + w2 * color2.red(), w1 * color1.green() + w2 * color2.green(), w1 * color1.blue() + w2 * color2.blue()).alpha(color1.alpha() * p + color2.alpha() * (1 - p));
    },
    toJSON: function toJSON() {
      return this.rgb();
    },
    clone: function clone() {
      // NOTE(SB): using node-clone creates a dependency to Buffer when using browserify,
      // making the final build way to big to embed in Chart.js. So let's do it manually,
      // assuming that values to clone are 1 dimension arrays containing only numbers,
      // except 'alpha' which is a number.
      var result = new Color();
      var source = this.values;
      var target = result.values;
      var value, type;

      for (var prop in source) {
        if (source.hasOwnProperty(prop)) {
          value = source[prop];
          type = {}.toString.call(value);

          if (type === '[object Array]') {
            target[prop] = value.slice(0);
          } else if (type === '[object Number]') {
            target[prop] = value;
          } else {
            console.error('unexpected color value:', value);
          }
        }
      }

      return result;
    }
  };
  Color.prototype.spaces = {
    rgb: ['red', 'green', 'blue'],
    hsl: ['hue', 'saturation', 'lightness'],
    hsv: ['hue', 'saturation', 'value'],
    hwb: ['hue', 'whiteness', 'blackness'],
    cmyk: ['cyan', 'magenta', 'yellow', 'black']
  };
  Color.prototype.maxes = {
    rgb: [255, 255, 255],
    hsl: [360, 100, 100],
    hsv: [360, 100, 100],
    hwb: [360, 100, 100],
    cmyk: [100, 100, 100, 100]
  };

  Color.prototype.getValues = function (space) {
    var values = this.values;
    var vals = {};

    for (var i = 0; i < space.length; i++) {
      vals[space.charAt(i)] = values[space][i];
    }

    if (values.alpha !== 1) {
      vals.a = values.alpha;
    } // {r: 255, g: 255, b: 255, a: 0.4}


    return vals;
  };

  Color.prototype.setValues = function (space, vals) {
    var values = this.values;
    var spaces = this.spaces;
    var maxes = this.maxes;
    var alpha = 1;
    var i;
    this.valid = true;

    if (space === 'alpha') {
      alpha = vals;
    } else if (vals.length) {
      // [10, 10, 10]
      values[space] = vals.slice(0, space.length);
      alpha = vals[space.length];
    } else if (vals[space.charAt(0)] !== undefined) {
      // {r: 10, g: 10, b: 10}
      for (i = 0; i < space.length; i++) {
        values[space][i] = vals[space.charAt(i)];
      }

      alpha = vals.a;
    } else if (vals[spaces[space][0]] !== undefined) {
      // {red: 10, green: 10, blue: 10}
      var chans = spaces[space];

      for (i = 0; i < space.length; i++) {
        values[space][i] = vals[chans[i]];
      }

      alpha = vals.alpha;
    }

    values.alpha = Math.max(0, Math.min(1, alpha === undefined ? values.alpha : alpha));

    if (space === 'alpha') {
      return false;
    }

    var capped; // cap values of the space prior converting all values

    for (i = 0; i < space.length; i++) {
      capped = Math.max(0, Math.min(maxes[space][i], values[space][i]));
      values[space][i] = Math.round(capped);
    } // convert to all the other color spaces


    for (var sname in spaces) {
      if (sname !== space) {
        values[sname] = colorConvert[space][sname](values[space]);
      }
    }

    return true;
  };

  Color.prototype.setSpace = function (space, args) {
    var vals = args[0];

    if (vals === undefined) {
      // color.rgb()
      return this.getValues(space);
    } // color.rgb(10, 10, 10)


    if (typeof vals === 'number') {
      vals = Array.prototype.slice.call(args);
    }

    this.setValues(space, vals);
    return this;
  };

  Color.prototype.setChannel = function (space, index, val) {
    var svalues = this.values[space];

    if (val === undefined) {
      // color.red()
      return svalues[index];
    } else if (val === svalues[index]) {
      // color.red(color.red())
      return this;
    } // color.red(100)


    svalues[index] = val;
    this.setValues(space, svalues);
    return this;
  };

  if (typeof window !== 'undefined') {
    window.Color = Color;
  }

  var chartjsColor = Color;
  /**
   * @namespace Chart.helpers
   */

  var helpers = {
    /**
     * An empty function that can be used, for example, for optional callback.
     */
    noop: function noop() {},

    /**
     * Returns a unique id, sequentially generated from a global variable.
     * @returns {number}
     * @function
     */
    uid: function () {
      var id = 0;
      return function () {
        return id++;
      };
    }(),

    /**
     * Returns true if `value` is neither null nor undefined, else returns false.
     * @param {*} value - The value to test.
     * @returns {boolean}
     * @since 2.7.0
     */
    isNullOrUndef: function isNullOrUndef(value) {
      return value === null || typeof value === 'undefined';
    },

    /**
     * Returns true if `value` is an array (including typed arrays), else returns false.
     * @param {*} value - The value to test.
     * @returns {boolean}
     * @function
     */
    isArray: function isArray(value) {
      if (Array.isArray && Array.isArray(value)) {
        return true;
      }

      var type = Object.prototype.toString.call(value);

      if (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') {
        return true;
      }

      return false;
    },

    /**
     * Returns true if `value` is an object (excluding null), else returns false.
     * @param {*} value - The value to test.
     * @returns {boolean}
     * @since 2.7.0
     */
    isObject: function isObject(value) {
      return value !== null && Object.prototype.toString.call(value) === '[object Object]';
    },

    /**
     * Returns true if `value` is a finite number, else returns false
     * @param {*} value  - The value to test.
     * @returns {boolean}
     */
    isFinite: function (_isFinite) {
      function isFinite(_x) {
        return _isFinite.apply(this, arguments);
      }

      isFinite.toString = function () {
        return _isFinite.toString();
      };

      return isFinite;
    }(function (value) {
      return (typeof value === 'number' || value instanceof Number) && isFinite(value);
    }),

    /**
     * Returns `value` if defined, else returns `defaultValue`.
     * @param {*} value - The value to return if defined.
     * @param {*} defaultValue - The value to return if `value` is undefined.
     * @returns {*}
     */
    valueOrDefault: function valueOrDefault(value, defaultValue) {
      return typeof value === 'undefined' ? defaultValue : value;
    },

    /**
     * Returns value at the given `index` in array if defined, else returns `defaultValue`.
     * @param {Array} value - The array to lookup for value at `index`.
     * @param {number} index - The index in `value` to lookup for value.
     * @param {*} defaultValue - The value to return if `value[index]` is undefined.
     * @returns {*}
     */
    valueAtIndexOrDefault: function valueAtIndexOrDefault(value, index, defaultValue) {
      return helpers.valueOrDefault(helpers.isArray(value) ? value[index] : value, defaultValue);
    },

    /**
     * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the
     * value returned by `fn`. If `fn` is not a function, this method returns undefined.
     * @param {function} fn - The function to call.
     * @param {Array|undefined|null} args - The arguments with which `fn` should be called.
     * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.
     * @returns {*}
     */
    callback: function callback(fn, args, thisArg) {
      if (fn && typeof fn.call === 'function') {
        return fn.apply(thisArg, args);
      }
    },

    /**
     * Note(SB) for performance sake, this method should only be used when loopable type
     * is unknown or in none intensive code (not called often and small loopable). Else
     * it's preferable to use a regular for() loop and save extra function calls.
     * @param {object|Array} loopable - The object or array to be iterated.
     * @param {function} fn - The function to call for each item.
     * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.
     * @param {boolean} [reverse] - If true, iterates backward on the loopable.
     */
    each: function each(loopable, fn, thisArg, reverse) {
      var i, len, keys;

      if (helpers.isArray(loopable)) {
        len = loopable.length;

        if (reverse) {
          for (i = len - 1; i >= 0; i--) {
            fn.call(thisArg, loopable[i], i);
          }
        } else {
          for (i = 0; i < len; i++) {
            fn.call(thisArg, loopable[i], i);
          }
        }
      } else if (helpers.isObject(loopable)) {
        keys = Object.keys(loopable);
        len = keys.length;

        for (i = 0; i < len; i++) {
          fn.call(thisArg, loopable[keys[i]], keys[i]);
        }
      }
    },

    /**
     * Returns true if the `a0` and `a1` arrays have the same content, else returns false.
     * @see https://stackoverflow.com/a/14853974
     * @param {Array} a0 - The array to compare
     * @param {Array} a1 - The array to compare
     * @returns {boolean}
     */
    arrayEquals: function arrayEquals(a0, a1) {
      var i, ilen, v0, v1;

      if (!a0 || !a1 || a0.length !== a1.length) {
        return false;
      }

      for (i = 0, ilen = a0.length; i < ilen; ++i) {
        v0 = a0[i];
        v1 = a1[i];

        if (v0 instanceof Array && v1 instanceof Array) {
          if (!helpers.arrayEquals(v0, v1)) {
            return false;
          }
        } else if (v0 !== v1) {
          // NOTE: two different object instances will never be equal: {x:20} != {x:20}
          return false;
        }
      }

      return true;
    },

    /**
     * Returns a deep copy of `source` without keeping references on objects and arrays.
     * @param {*} source - The value to clone.
     * @returns {*}
     */
    clone: function clone(source) {
      if (helpers.isArray(source)) {
        return source.map(helpers.clone);
      }

      if (helpers.isObject(source)) {
        var target = {};
        var keys = Object.keys(source);
        var klen = keys.length;
        var k = 0;

        for (; k < klen; ++k) {
          target[keys[k]] = helpers.clone(source[keys[k]]);
        }

        return target;
      }

      return source;
    },

    /**
     * The default merger when Chart.helpers.merge is called without merger option.
     * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.
     * @private
     */
    _merger: function _merger(key, target, source, options) {
      var tval = target[key];
      var sval = source[key];

      if (helpers.isObject(tval) && helpers.isObject(sval)) {
        helpers.merge(tval, sval, options);
      } else {
        target[key] = helpers.clone(sval);
      }
    },

    /**
     * Merges source[key] in target[key] only if target[key] is undefined.
     * @private
     */
    _mergerIf: function _mergerIf(key, target, source) {
      var tval = target[key];
      var sval = source[key];

      if (helpers.isObject(tval) && helpers.isObject(sval)) {
        helpers.mergeIf(tval, sval);
      } else if (!target.hasOwnProperty(key)) {
        target[key] = helpers.clone(sval);
      }
    },

    /**
     * Recursively deep copies `source` properties into `target` with the given `options`.
     * IMPORTANT: `target` is not cloned and will be updated with `source` properties.
     * @param {object} target - The target object in which all sources are merged into.
     * @param {object|object[]} source - Object(s) to merge into `target`.
     * @param {object} [options] - Merging options:
     * @param {function} [options.merger] - The merge method (key, target, source, options)
     * @returns {object} The `target` object.
     */
    merge: function merge(target, source, options) {
      var sources = helpers.isArray(source) ? source : [source];
      var ilen = sources.length;
      var merge, i, keys, klen, k;

      if (!helpers.isObject(target)) {
        return target;
      }

      options = options || {};
      merge = options.merger || helpers._merger;

      for (i = 0; i < ilen; ++i) {
        source = sources[i];

        if (!helpers.isObject(source)) {
          continue;
        }

        keys = Object.keys(source);

        for (k = 0, klen = keys.length; k < klen; ++k) {
          merge(keys[k], target, source, options);
        }
      }

      return target;
    },

    /**
     * Recursively deep copies `source` properties into `target` *only* if not defined in target.
     * IMPORTANT: `target` is not cloned and will be updated with `source` properties.
     * @param {object} target - The target object in which all sources are merged into.
     * @param {object|object[]} source - Object(s) to merge into `target`.
     * @returns {object} The `target` object.
     */
    mergeIf: function mergeIf(target, source) {
      return helpers.merge(target, source, {
        merger: helpers._mergerIf
      });
    },

    /**
     * Applies the contents of two or more objects together into the first object.
     * @param {object} target - The target object in which all objects are merged into.
     * @param {object} arg1 - Object containing additional properties to merge in target.
     * @param {object} argN - Additional objects containing properties to merge in target.
     * @returns {object} The `target` object.
     */
    extend: function extend(target) {
      var setFn = function setFn(value, key) {
        target[key] = value;
      };

      for (var i = 1, ilen = arguments.length; i < ilen; ++i) {
        helpers.each(arguments[i], setFn);
      }

      return target;
    },

    /**
     * Basic javascript inheritance based on the model created in Backbone.js
     */
    inherits: function inherits(extensions) {
      var me = this;
      var ChartElement = extensions && extensions.hasOwnProperty('constructor') ? extensions.constructor : function () {
        return me.apply(this, arguments);
      };

      var Surrogate = function Surrogate() {
        this.constructor = ChartElement;
      };

      Surrogate.prototype = me.prototype;
      ChartElement.prototype = new Surrogate();
      ChartElement.extend = helpers.inherits;

      if (extensions) {
        helpers.extend(ChartElement.prototype, extensions);
      }

      ChartElement.__super__ = me.prototype;
      return ChartElement;
    }
  };
  var helpers_core = helpers; // DEPRECATIONS

  /**
   * Provided for backward compatibility, use Chart.helpers.callback instead.
   * @function Chart.helpers.callCallback
   * @deprecated since version 2.6.0
   * @todo remove at version 3
   * @private
   */

  helpers.callCallback = helpers.callback;
  /**
   * Provided for backward compatibility, use Array.prototype.indexOf instead.
   * Array.prototype.indexOf compatibility: Chrome, Opera, Safari, FF1.5+, IE9+
   * @function Chart.helpers.indexOf
   * @deprecated since version 2.7.0
   * @todo remove at version 3
   * @private
   */

  helpers.indexOf = function (array, item, fromIndex) {
    return Array.prototype.indexOf.call(array, item, fromIndex);
  };
  /**
   * Provided for backward compatibility, use Chart.helpers.valueOrDefault instead.
   * @function Chart.helpers.getValueOrDefault
   * @deprecated since version 2.7.0
   * @todo remove at version 3
   * @private
   */


  helpers.getValueOrDefault = helpers.valueOrDefault;
  /**
   * Provided for backward compatibility, use Chart.helpers.valueAtIndexOrDefault instead.
   * @function Chart.helpers.getValueAtIndexOrDefault
   * @deprecated since version 2.7.0
   * @todo remove at version 3
   * @private
   */

  helpers.getValueAtIndexOrDefault = helpers.valueAtIndexOrDefault;
  /**
   * Easing functions adapted from Robert Penner's easing equations.
   * @namespace Chart.helpers.easingEffects
   * @see http://www.robertpenner.com/easing/
   */

  var effects = {
    linear: function linear(t) {
      return t;
    },
    easeInQuad: function easeInQuad(t) {
      return t * t;
    },
    easeOutQuad: function easeOutQuad(t) {
      return -t * (t - 2);
    },
    easeInOutQuad: function easeInOutQuad(t) {
      if ((t /= 0.5) < 1) {
        return 0.5 * t * t;
      }

      return -0.5 * (--t * (t - 2) - 1);
    },
    easeInCubic: function easeInCubic(t) {
      return t * t * t;
    },
    easeOutCubic: function easeOutCubic(t) {
      return (t = t - 1) * t * t + 1;
    },
    easeInOutCubic: function easeInOutCubic(t) {
      if ((t /= 0.5) < 1) {
        return 0.5 * t * t * t;
      }

      return 0.5 * ((t -= 2) * t * t + 2);
    },
    easeInQuart: function easeInQuart(t) {
      return t * t * t * t;
    },
    easeOutQuart: function easeOutQuart(t) {
      return -((t = t - 1) * t * t * t - 1);
    },
    easeInOutQuart: function easeInOutQuart(t) {
      if ((t /= 0.5) < 1) {
        return 0.5 * t * t * t * t;
      }

      return -0.5 * ((t -= 2) * t * t * t - 2);
    },
    easeInQuint: function easeInQuint(t) {
      return t * t * t * t * t;
    },
    easeOutQuint: function easeOutQuint(t) {
      return (t = t - 1) * t * t * t * t + 1;
    },
    easeInOutQuint: function easeInOutQuint(t) {
      if ((t /= 0.5) < 1) {
        return 0.5 * t * t * t * t * t;
      }

      return 0.5 * ((t -= 2) * t * t * t * t + 2);
    },
    easeInSine: function easeInSine(t) {
      return -Math.cos(t * (Math.PI / 2)) + 1;
    },
    easeOutSine: function easeOutSine(t) {
      return Math.sin(t * (Math.PI / 2));
    },
    easeInOutSine: function easeInOutSine(t) {
      return -0.5 * (Math.cos(Math.PI * t) - 1);
    },
    easeInExpo: function easeInExpo(t) {
      return t === 0 ? 0 : Math.pow(2, 10 * (t - 1));
    },
    easeOutExpo: function easeOutExpo(t) {
      return t === 1 ? 1 : -Math.pow(2, -10 * t) + 1;
    },
    easeInOutExpo: function easeInOutExpo(t) {
      if (t === 0) {
        return 0;
      }

      if (t === 1) {
        return 1;
      }

      if ((t /= 0.5) < 1) {
        return 0.5 * Math.pow(2, 10 * (t - 1));
      }

      return 0.5 * (-Math.pow(2, -10 * --t) + 2);
    },
    easeInCirc: function easeInCirc(t) {
      if (t >= 1) {
        return t;
      }

      return -(Math.sqrt(1 - t * t) - 1);
    },
    easeOutCirc: function easeOutCirc(t) {
      return Math.sqrt(1 - (t = t - 1) * t);
    },
    easeInOutCirc: function easeInOutCirc(t) {
      if ((t /= 0.5) < 1) {
        return -0.5 * (Math.sqrt(1 - t * t) - 1);
      }

      return 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);
    },
    easeInElastic: function easeInElastic(t) {
      var s = 1.70158;
      var p = 0;
      var a = 1;

      if (t === 0) {
        return 0;
      }

      if (t === 1) {
        return 1;
      }

      if (!p) {
        p = 0.3;
      }

      if (a < 1) {
        a = 1;
        s = p / 4;
      } else {
        s = p / (2 * Math.PI) * Math.asin(1 / a);
      }

      return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));
    },
    easeOutElastic: function easeOutElastic(t) {
      var s = 1.70158;
      var p = 0;
      var a = 1;

      if (t === 0) {
        return 0;
      }

      if (t === 1) {
        return 1;
      }

      if (!p) {
        p = 0.3;
      }

      if (a < 1) {
        a = 1;
        s = p / 4;
      } else {
        s = p / (2 * Math.PI) * Math.asin(1 / a);
      }

      return a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p) + 1;
    },
    easeInOutElastic: function easeInOutElastic(t) {
      var s = 1.70158;
      var p = 0;
      var a = 1;

      if (t === 0) {
        return 0;
      }

      if ((t /= 0.5) === 2) {
        return 1;
      }

      if (!p) {
        p = 0.45;
      }

      if (a < 1) {
        a = 1;
        s = p / 4;
      } else {
        s = p / (2 * Math.PI) * Math.asin(1 / a);
      }

      if (t < 1) {
        return -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));
      }

      return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p) * 0.5 + 1;
    },
    easeInBack: function easeInBack(t) {
      var s = 1.70158;
      return t * t * ((s + 1) * t - s);
    },
    easeOutBack: function easeOutBack(t) {
      var s = 1.70158;
      return (t = t - 1) * t * ((s + 1) * t + s) + 1;
    },
    easeInOutBack: function easeInOutBack(t) {
      var s = 1.70158;

      if ((t /= 0.5) < 1) {
        return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));
      }

      return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);
    },
    easeInBounce: function easeInBounce(t) {
      return 1 - effects.easeOutBounce(1 - t);
    },
    easeOutBounce: function easeOutBounce(t) {
      if (t < 1 / 2.75) {
        return 7.5625 * t * t;
      }

      if (t < 2 / 2.75) {
        return 7.5625 * (t -= 1.5 / 2.75) * t + 0.75;
      }

      if (t < 2.5 / 2.75) {
        return 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375;
      }

      return 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375;
    },
    easeInOutBounce: function easeInOutBounce(t) {
      if (t < 0.5) {
        return effects.easeInBounce(t * 2) * 0.5;
      }

      return effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5;
    }
  };
  var helpers_easing = {
    effects: effects
  }; // DEPRECATIONS

  /**
   * Provided for backward compatibility, use Chart.helpers.easing.effects instead.
   * @function Chart.helpers.easingEffects
   * @deprecated since version 2.7.0
   * @todo remove at version 3
   * @private
   */

  helpers_core.easingEffects = effects;
  var PI = Math.PI;
  var RAD_PER_DEG = PI / 180;
  var DOUBLE_PI = PI * 2;
  var HALF_PI = PI / 2;
  var QUARTER_PI = PI / 4;
  var TWO_THIRDS_PI = PI * 2 / 3;
  /**
   * @namespace Chart.helpers.canvas
   */

  var exports$1 = {
    /**
     * Clears the entire canvas associated to the given `chart`.
     * @param {Chart} chart - The chart for which to clear the canvas.
     */
    clear: function clear(chart) {
      chart.ctx.clearRect(0, 0, chart.width, chart.height);
    },

    /**
     * Creates a "path" for a rectangle with rounded corners at position (x, y) with a
     * given size (width, height) and the same `radius` for all corners.
     * @param {CanvasRenderingContext2D} ctx - The canvas 2D Context.
     * @param {number} x - The x axis of the coordinate for the rectangle starting point.
     * @param {number} y - The y axis of the coordinate for the rectangle starting point.
     * @param {number} width - The rectangle's width.
     * @param {number} height - The rectangle's height.
     * @param {number} radius - The rounded amount (in pixels) for the four corners.
     * @todo handle `radius` as top-left, top-right, bottom-right, bottom-left array/object?
     */
    roundedRect: function roundedRect(ctx, x, y, width, height, radius) {
      if (radius) {
        var r = Math.min(radius, height / 2, width / 2);
        var left = x + r;
        var top = y + r;
        var right = x + width - r;
        var bottom = y + height - r;
        ctx.moveTo(x, top);

        if (left < right && top < bottom) {
          ctx.arc(left, top, r, -PI, -HALF_PI);
          ctx.arc(right, top, r, -HALF_PI, 0);
          ctx.arc(right, bottom, r, 0, HALF_PI);
          ctx.arc(left, bottom, r, HALF_PI, PI);
        } else if (left < right) {
          ctx.moveTo(left, y);
          ctx.arc(right, top, r, -HALF_PI, HALF_PI);
          ctx.arc(left, top, r, HALF_PI, PI + HALF_PI);
        } else if (top < bottom) {
          ctx.arc(left, top, r, -PI, 0);
          ctx.arc(left, bottom, r, 0, PI);
        } else {
          ctx.arc(left, top, r, -PI, PI);
        }

        ctx.closePath();
        ctx.moveTo(x, y);
      } else {
        ctx.rect(x, y, width, height);
      }
    },
    drawPoint: function drawPoint(ctx, style, radius, x, y, rotation) {
      var type, xOffset, yOffset, size, cornerRadius;
      var rad = (rotation || 0) * RAD_PER_DEG;

      if (style && _typeof(style) === 'object') {
        type = style.toString();

        if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {
          ctx.drawImage(style, x - style.width / 2, y - style.height / 2, style.width, style.height);
          return;
        }
      }

      if (isNaN(radius) || radius <= 0) {
        return;
      }

      ctx.beginPath();

      switch (style) {
        // Default includes circle
        default:
          ctx.arc(x, y, radius, 0, DOUBLE_PI);
          ctx.closePath();
          break;

        case 'triangle':
          ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);
          rad += TWO_THIRDS_PI;
          ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);
          rad += TWO_THIRDS_PI;
          ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);
          ctx.closePath();
          break;

        case 'rectRounded':
          // NOTE: the rounded rect implementation changed to use `arc` instead of
          // `quadraticCurveTo` since it generates better results when rect is
          // almost a circle. 0.516 (instead of 0.5) produces results with visually
          // closer proportion to the previous impl and it is inscribed in the
          // circle with `radius`. For more details, see the following PRs:
          // https://github.com/chartjs/Chart.js/issues/5597
          // https://github.com/chartjs/Chart.js/issues/5858
          cornerRadius = radius * 0.516;
          size = radius - cornerRadius;
          xOffset = Math.cos(rad + QUARTER_PI) * size;
          yOffset = Math.sin(rad + QUARTER_PI) * size;
          ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);
          ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);
          ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);
          ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);
          ctx.closePath();
          break;

        case 'rect':
          if (!rotation) {
            size = Math.SQRT1_2 * radius;
            ctx.rect(x - size, y - size, 2 * size, 2 * size);
            break;
          }

          rad += QUARTER_PI;

        /* falls through */

        case 'rectRot':
          xOffset = Math.cos(rad) * radius;
          yOffset = Math.sin(rad) * radius;
          ctx.moveTo(x - xOffset, y - yOffset);
          ctx.lineTo(x + yOffset, y - xOffset);
          ctx.lineTo(x + xOffset, y + yOffset);
          ctx.lineTo(x - yOffset, y + xOffset);
          ctx.closePath();
          break;

        case 'crossRot':
          rad += QUARTER_PI;

        /* falls through */

        case 'cross':
          xOffset = Math.cos(rad) * radius;
          yOffset = Math.sin(rad) * radius;
          ctx.moveTo(x - xOffset, y - yOffset);
          ctx.lineTo(x + xOffset, y + yOffset);
          ctx.moveTo(x + yOffset, y - xOffset);
          ctx.lineTo(x - yOffset, y + xOffset);
          break;

        case 'star':
          xOffset = Math.cos(rad) * radius;
          yOffset = Math.sin(rad) * radius;
          ctx.moveTo(x - xOffset, y - yOffset);
          ctx.lineTo(x + xOffset, y + yOffset);
          ctx.moveTo(x + yOffset, y - xOffset);
          ctx.lineTo(x - yOffset, y + xOffset);
          rad += QUARTER_PI;
          xOffset = Math.cos(rad) * radius;
          yOffset = Math.sin(rad) * radius;
          ctx.moveTo(x - xOffset, y - yOffset);
          ctx.lineTo(x + xOffset, y + yOffset);
          ctx.moveTo(x + yOffset, y - xOffset);
          ctx.lineTo(x - yOffset, y + xOffset);
          break;

        case 'line':
          xOffset = Math.cos(rad) * radius;
          yOffset = Math.sin(rad) * radius;
          ctx.moveTo(x - xOffset, y - yOffset);
          ctx.lineTo(x + xOffset, y + yOffset);
          break;

        case 'dash':
          ctx.moveTo(x, y);
          ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);
          break;
      }

      ctx.fill();
      ctx.stroke();
    },

    /**
     * Returns true if the point is inside the rectangle
     * @param {object} point - The point to test
     * @param {object} area - The rectangle
     * @returns {boolean}
     * @private
     */
    _isPointInArea: function _isPointInArea(point, area) {
      var epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.

      return point.x > area.left - epsilon && point.x < area.right + epsilon && point.y > area.top - epsilon && point.y < area.bottom + epsilon;
    },
    clipArea: function clipArea(ctx, area) {
      ctx.save();
      ctx.beginPath();
      ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);
      ctx.clip();
    },
    unclipArea: function unclipArea(ctx) {
      ctx.restore();
    },
    lineTo: function lineTo(ctx, previous, target, flip) {
      var stepped = target.steppedLine;

      if (stepped) {
        if (stepped === 'middle') {
          var midpoint = (previous.x + target.x) / 2.0;
          ctx.lineTo(midpoint, flip ? target.y : previous.y);
          ctx.lineTo(midpoint, flip ? previous.y : target.y);
        } else if (stepped === 'after' && !flip || stepped !== 'after' && flip) {
          ctx.lineTo(previous.x, target.y);
        } else {
          ctx.lineTo(target.x, previous.y);
        }

        ctx.lineTo(target.x, target.y);
        return;
      }

      if (!target.tension) {
        ctx.lineTo(target.x, target.y);
        return;
      }

      ctx.bezierCurveTo(flip ? previous.controlPointPreviousX : previous.controlPointNextX, flip ? previous.controlPointPreviousY : previous.controlPointNextY, flip ? target.controlPointNextX : target.controlPointPreviousX, flip ? target.controlPointNextY : target.controlPointPreviousY, target.x, target.y);
    }
  };
  var helpers_canvas = exports$1; // DEPRECATIONS

  /**
   * Provided for backward compatibility, use Chart.helpers.canvas.clear instead.
   * @namespace Chart.helpers.clear
   * @deprecated since version 2.7.0
   * @todo remove at version 3
   * @private
   */

  helpers_core.clear = exports$1.clear;
  /**
   * Provided for backward compatibility, use Chart.helpers.canvas.roundedRect instead.
   * @namespace Chart.helpers.drawRoundedRectangle
   * @deprecated since version 2.7.0
   * @todo remove at version 3
   * @private
   */

  helpers_core.drawRoundedRectangle = function (ctx) {
    ctx.beginPath();
    exports$1.roundedRect.apply(exports$1, arguments);
  };

  var defaults = {
    /**
     * @private
     */
    _set: function _set(scope, values) {
      return helpers_core.merge(this[scope] || (this[scope] = {}), values);
    }
  };

  defaults._set('global', {
    defaultColor: 'rgba(0,0,0,0.1)',
    defaultFontColor: '#666',
    defaultFontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
    defaultFontSize: 12,
    defaultFontStyle: 'normal',
    defaultLineHeight: 1.2,
    showLines: true
  });

  var core_defaults = defaults;
  var valueOrDefault = helpers_core.valueOrDefault;
  /**
   * Converts the given font object into a CSS font string.
   * @param {object} font - A font object.
   * @return {string} The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font
   * @private
   */

  function toFontString(font) {
    if (!font || helpers_core.isNullOrUndef(font.size) || helpers_core.isNullOrUndef(font.family)) {
      return null;
    }

    return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;
  }
  /**
   * @alias Chart.helpers.options
   * @namespace
   */


  var helpers_options = {
    /**
     * Converts the given line height `value` in pixels for a specific font `size`.
     * @param {number|string} value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').
     * @param {number} size - The font size (in pixels) used to resolve relative `value`.
     * @returns {number} The effective line height in pixels (size * 1.2 if value is invalid).
     * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height
     * @since 2.7.0
     */
    toLineHeight: function toLineHeight(value, size) {
      var matches = ('' + value).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);

      if (!matches || matches[1] === 'normal') {
        return size * 1.2;
      }

      value = +matches[2];

      switch (matches[3]) {
        case 'px':
          return value;

        case '%':
          value /= 100;
          break;

        default:
          break;
      }

      return size * value;
    },

    /**
     * Converts the given value into a padding object with pre-computed width/height.
     * @param {number|object} value - If a number, set the value to all TRBL component,
     *  else, if and object, use defined properties and sets undefined ones to 0.
     * @returns {object} The padding values (top, right, bottom, left, width, height)
     * @since 2.7.0
     */
    toPadding: function toPadding(value) {
      var t, r, b, l;

      if (helpers_core.isObject(value)) {
        t = +value.top || 0;
        r = +value.right || 0;
        b = +value.bottom || 0;
        l = +value.left || 0;
      } else {
        t = r = b = l = +value || 0;
      }

      return {
        top: t,
        right: r,
        bottom: b,
        left: l,
        height: t + b,
        width: l + r
      };
    },

    /**
     * Parses font options and returns the font object.
     * @param {object} options - A object that contains font options to be parsed.
     * @return {object} The font object.
     * @todo Support font.* options and renamed to toFont().
     * @private
     */
    _parseFont: function _parseFont(options) {
      var globalDefaults = core_defaults.global;
      var size = valueOrDefault(options.fontSize, globalDefaults.defaultFontSize);
      var font = {
        family: valueOrDefault(options.fontFamily, globalDefaults.defaultFontFamily),
        lineHeight: helpers_core.options.toLineHeight(valueOrDefault(options.lineHeight, globalDefaults.defaultLineHeight), size),
        size: size,
        style: valueOrDefault(options.fontStyle, globalDefaults.defaultFontStyle),
        weight: null,
        string: ''
      };
      font.string = toFontString(font);
      return font;
    },

    /**
     * Evaluates the given `inputs` sequentially and returns the first defined value.
     * @param {Array} inputs - An array of values, falling back to the last value.
     * @param {object} [context] - If defined and the current value is a function, the value
     * is called with `context` as first argument and the result becomes the new input.
     * @param {number} [index] - If defined and the current value is an array, the value
     * at `index` become the new input.
     * @since 2.7.0
     */
    resolve: function resolve(inputs, context, index) {
      var i, ilen, value;

      for (i = 0, ilen = inputs.length; i < ilen; ++i) {
        value = inputs[i];

        if (value === undefined) {
          continue;
        }

        if (context !== undefined && typeof value === 'function') {
          value = value(context);
        }

        if (index !== undefined && helpers_core.isArray(value)) {
          value = value[index];
        }

        if (value !== undefined) {
          return value;
        }
      }
    }
  };
  var helpers$1 = helpers_core;
  var easing = helpers_easing;
  var canvas = helpers_canvas;
  var options = helpers_options;
  helpers$1.easing = easing;
  helpers$1.canvas = canvas;
  helpers$1.options = options;

  function interpolate(start, view, model, ease) {
    var keys = Object.keys(model);
    var i, ilen, key, actual, origin, target, type, c0, c1;

    for (i = 0, ilen = keys.length; i < ilen; ++i) {
      key = keys[i];
      target = model[key]; // if a value is added to the model after pivot() has been called, the view
      // doesn't contain it, so let's initialize the view to the target value.

      if (!view.hasOwnProperty(key)) {
        view[key] = target;
      }

      actual = view[key];

      if (actual === target || key[0] === '_') {
        continue;
      }

      if (!start.hasOwnProperty(key)) {
        start[key] = actual;
      }

      origin = start[key];
      type = _typeof(target);

      if (type === _typeof(origin)) {
        if (type === 'string') {
          c0 = chartjsColor(origin);

          if (c0.valid) {
            c1 = chartjsColor(target);

            if (c1.valid) {
              view[key] = c1.mix(c0, ease).rgbString();
              continue;
            }
          }
        } else if (helpers$1.isFinite(origin) && helpers$1.isFinite(target)) {
          view[key] = origin + (target - origin) * ease;
          continue;
        }
      }

      view[key] = target;
    }
  }

  var Element = function Element(configuration) {
    helpers$1.extend(this, configuration);
    this.initialize.apply(this, arguments);
  };

  helpers$1.extend(Element.prototype, {
    initialize: function initialize() {
      this.hidden = false;
    },
    pivot: function pivot() {
      var me = this;

      if (!me._view) {
        me._view = helpers$1.clone(me._model);
      }

      me._start = {};
      return me;
    },
    transition: function transition(ease) {
      var me = this;
      var model = me._model;
      var start = me._start;
      var view = me._view; // No animation -> No Transition

      if (!model || ease === 1) {
        me._view = model;
        me._start = null;
        return me;
      }

      if (!view) {
        view = me._view = {};
      }

      if (!start) {
        start = me._start = {};
      }

      interpolate(start, view, model, ease);
      return me;
    },
    tooltipPosition: function tooltipPosition() {
      return {
        x: this._model.x,
        y: this._model.y
      };
    },
    hasValue: function hasValue() {
      return helpers$1.isNumber(this._model.x) && helpers$1.isNumber(this._model.y);
    }
  });
  Element.extend = helpers$1.inherits;
  var core_element = Element;
  var exports$2 = core_element.extend({
    chart: null,
    // the animation associated chart instance
    currentStep: 0,
    // the current animation step
    numSteps: 60,
    // default number of steps
    easing: '',
    // the easing to use for this animation
    render: null,
    // render function used by the animation service
    onAnimationProgress: null,
    // user specified callback to fire on each step of the animation
    onAnimationComplete: null // user specified callback to fire when the animation finishes

  });
  var core_animation = exports$2; // DEPRECATIONS

  /**
   * Provided for backward compatibility, use Chart.Animation instead
   * @prop Chart.Animation#animationObject
   * @deprecated since version 2.6.0
   * @todo remove at version 3
   */

  Object.defineProperty(exports$2.prototype, 'animationObject', {
    get: function get() {
      return this;
    }
  });
  /**
   * Provided for backward compatibility, use Chart.Animation#chart instead
   * @prop Chart.Animation#chartInstance
   * @deprecated since version 2.6.0
   * @todo remove at version 3
   */

  Object.defineProperty(exports$2.prototype, 'chartInstance', {
    get: function get() {
      return this.chart;
    },
    set: function set(value) {
      this.chart = value;
    }
  });

  core_defaults._set('global', {
    animation: {
      duration: 1000,
      easing: 'easeOutQuart',
      onProgress: helpers$1.noop,
      onComplete: helpers$1.noop
    }
  });

  var core_animations = {
    animations: [],
    request: null,

    /**
     * @param {Chart} chart - The chart to animate.
     * @param {Chart.Animation} animation - The animation that we will animate.
     * @param {number} duration - The animation duration in ms.
     * @param {boolean} lazy - if true, the chart is not marked as animating to enable more responsive interactions
     */
    addAnimation: function addAnimation(chart, animation, duration, lazy) {
      var animations = this.animations;
      var i, ilen;
      animation.chart = chart;
      animation.startTime = Date.now();
      animation.duration = duration;

      if (!lazy) {
        chart.animating = true;
      }

      for (i = 0, ilen = animations.length; i < ilen; ++i) {
        if (animations[i].chart === chart) {
          animations[i] = animation;
          return;
        }
      }

      animations.push(animation); // If there are no animations queued, manually kickstart a digest, for lack of a better word

      if (animations.length === 1) {
        this.requestAnimationFrame();
      }
    },
    cancelAnimation: function cancelAnimation(chart) {
      var index = helpers$1.findIndex(this.animations, function (animation) {
        return animation.chart === chart;
      });

      if (index !== -1) {
        this.animations.splice(index, 1);
        chart.animating = false;
      }
    },
    requestAnimationFrame: function requestAnimationFrame() {
      var me = this;

      if (me.request === null) {
        // Skip animation frame requests until the active one is executed.
        // This can happen when processing mouse events, e.g. 'mousemove'
        // and 'mouseout' events will trigger multiple renders.
        me.request = helpers$1.requestAnimFrame.call(window, function () {
          me.request = null;
          me.startDigest();
        });
      }
    },

    /**
     * @private
     */
    startDigest: function startDigest() {
      var me = this;
      me.advance(); // Do we have more stuff to animate?

      if (me.animations.length > 0) {
        me.requestAnimationFrame();
      }
    },

    /**
     * @private
     */
    advance: function advance() {
      var animations = this.animations;
      var animation, chart, numSteps, nextStep;
      var i = 0; // 1 animation per chart, so we are looping charts here

      while (i < animations.length) {
        animation = animations[i];
        chart = animation.chart;
        numSteps = animation.numSteps; // Make sure that currentStep starts at 1
        // https://github.com/chartjs/Chart.js/issues/6104

        nextStep = Math.floor((Date.now() - animation.startTime) / animation.duration * numSteps) + 1;
        animation.currentStep = Math.min(nextStep, numSteps);
        helpers$1.callback(animation.render, [chart, animation], chart);
        helpers$1.callback(animation.onAnimationProgress, [animation], chart);

        if (animation.currentStep >= numSteps) {
          helpers$1.callback(animation.onAnimationComplete, [animation], chart);
          chart.animating = false;
          animations.splice(i, 1);
        } else {
          ++i;
        }
      }
    }
  };
  var resolve = helpers$1.options.resolve;
  var arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];
  /**
   * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',
   * 'unshift') and notify the listener AFTER the array has been altered. Listeners are
   * called on the 'onData*' callbacks (e.g. onDataPush, etc.) with same arguments.
   */

  function listenArrayEvents(array, listener) {
    if (array._chartjs) {
      array._chartjs.listeners.push(listener);

      return;
    }

    Object.defineProperty(array, '_chartjs', {
      configurable: true,
      enumerable: false,
      value: {
        listeners: [listener]
      }
    });
    arrayEvents.forEach(function (key) {
      var method = 'onData' + key.charAt(0).toUpperCase() + key.slice(1);
      var base = array[key];
      Object.defineProperty(array, key, {
        configurable: true,
        enumerable: false,
        value: function value() {
          var args = Array.prototype.slice.call(arguments);
          var res = base.apply(this, args);
          helpers$1.each(array._chartjs.listeners, function (object) {
            if (typeof object[method] === 'function') {
              object[method].apply(object, args);
            }
          });
          return res;
        }
      });
    });
  }
  /**
   * Removes the given array event listener and cleanup extra attached properties (such as
   * the _chartjs stub and overridden methods) if array doesn't have any more listeners.
   */


  function unlistenArrayEvents(array, listener) {
    var stub = array._chartjs;

    if (!stub) {
      return;
    }

    var listeners = stub.listeners;
    var index = listeners.indexOf(listener);

    if (index !== -1) {
      listeners.splice(index, 1);
    }

    if (listeners.length > 0) {
      return;
    }

    arrayEvents.forEach(function (key) {
      delete array[key];
    });
    delete array._chartjs;
  } // Base class for all dataset controllers (line, bar, etc)


  var DatasetController = function DatasetController(chart, datasetIndex) {
    this.initialize(chart, datasetIndex);
  };

  helpers$1.extend(DatasetController.prototype, {
    /**
     * Element type used to generate a meta dataset (e.g. Chart.element.Line).
     * @type {Chart.core.element}
     */
    datasetElementType: null,

    /**
     * Element type used to generate a meta data (e.g. Chart.element.Point).
     * @type {Chart.core.element}
     */
    dataElementType: null,
    initialize: function initialize(chart, datasetIndex) {
      var me = this;
      me.chart = chart;
      me.index = datasetIndex;
      me.linkScales();
      me.addElements();
    },
    updateIndex: function updateIndex(datasetIndex) {
      this.index = datasetIndex;
    },
    linkScales: function linkScales() {
      var me = this;
      var meta = me.getMeta();
      var dataset = me.getDataset();

      if (meta.xAxisID === null || !(meta.xAxisID in me.chart.scales)) {
        meta.xAxisID = dataset.xAxisID || me.chart.options.scales.xAxes[0].id;
      }

      if (meta.yAxisID === null || !(meta.yAxisID in me.chart.scales)) {
        meta.yAxisID = dataset.yAxisID || me.chart.options.scales.yAxes[0].id;
      }
    },
    getDataset: function getDataset() {
      return this.chart.data.datasets[this.index];
    },
    getMeta: function getMeta() {
      return this.chart.getDatasetMeta(this.index);
    },
    getScaleForId: function getScaleForId(scaleID) {
      return this.chart.scales[scaleID];
    },

    /**
     * @private
     */
    _getValueScaleId: function _getValueScaleId() {
      return this.getMeta().yAxisID;
    },

    /**
     * @private
     */
    _getIndexScaleId: function _getIndexScaleId() {
      return this.getMeta().xAxisID;
    },

    /**
     * @private
     */
    _getValueScale: function _getValueScale() {
      return this.getScaleForId(this._getValueScaleId());
    },

    /**
     * @private
     */
    _getIndexScale: function _getIndexScale() {
      return this.getScaleForId(this._getIndexScaleId());
    },
    reset: function reset() {
      this.update(true);
    },

    /**
     * @private
     */
    destroy: function destroy() {
      if (this._data) {
        unlistenArrayEvents(this._data, this);
      }
    },
    createMetaDataset: function createMetaDataset() {
      var me = this;
      var type = me.datasetElementType;
      return type && new type({
        _chart: me.chart,
        _datasetIndex: me.index
      });
    },
    createMetaData: function createMetaData(index) {
      var me = this;
      var type = me.dataElementType;
      return type && new type({
        _chart: me.chart,
        _datasetIndex: me.index,
        _index: index
      });
    },
    addElements: function addElements() {
      var me = this;
      var meta = me.getMeta();
      var data = me.getDataset().data || [];
      var metaData = meta.data;
      var i, ilen;

      for (i = 0, ilen = data.length; i < ilen; ++i) {
        metaData[i] = metaData[i] || me.createMetaData(i);
      }

      meta.dataset = meta.dataset || me.createMetaDataset();
    },
    addElementAndReset: function addElementAndReset(index) {
      var element = this.createMetaData(index);
      this.getMeta().data.splice(index, 0, element);
      this.updateElement(element, index, true);
    },
    buildOrUpdateElements: function buildOrUpdateElements() {
      var me = this;
      var dataset = me.getDataset();
      var data = dataset.data || (dataset.data = []); // In order to correctly handle data addition/deletion animation (an thus simulate
      // real-time charts), we need to monitor these data modifications and synchronize
      // the internal meta data accordingly.

      if (me._data !== data) {
        if (me._data) {
          // This case happens when the user replaced the data array instance.
          unlistenArrayEvents(me._data, me);
        }

        if (data && Object.isExtensible(data)) {
          listenArrayEvents(data, me);
        }

        me._data = data;
      } // Re-sync meta data in case the user replaced the data array or if we missed
      // any updates and so make sure that we handle number of datapoints changing.


      me.resyncElements();
    },
    update: helpers$1.noop,
    transition: function transition(easingValue) {
      var meta = this.getMeta();
      var elements = meta.data || [];
      var ilen = elements.length;
      var i = 0;

      for (; i < ilen; ++i) {
        elements[i].transition(easingValue);
      }

      if (meta.dataset) {
        meta.dataset.transition(easingValue);
      }
    },
    draw: function draw() {
      var meta = this.getMeta();
      var elements = meta.data || [];
      var ilen = elements.length;
      var i = 0;

      if (meta.dataset) {
        meta.dataset.draw();
      }

      for (; i < ilen; ++i) {
        elements[i].draw();
      }
    },
    removeHoverStyle: function removeHoverStyle(element) {
      helpers$1.merge(element._model, element.$previousStyle || {});
      delete element.$previousStyle;
    },
    setHoverStyle: function setHoverStyle(element) {
      var dataset = this.chart.data.datasets[element._datasetIndex];
      var index = element._index;
      var custom = element.custom || {};
      var model = element._model;
      var getHoverColor = helpers$1.getHoverColor;
      element.$previousStyle = {
        backgroundColor: model.backgroundColor,
        borderColor: model.borderColor,
        borderWidth: model.borderWidth
      };
      model.backgroundColor = resolve([custom.hoverBackgroundColor, dataset.hoverBackgroundColor, getHoverColor(model.backgroundColor)], undefined, index);
      model.borderColor = resolve([custom.hoverBorderColor, dataset.hoverBorderColor, getHoverColor(model.borderColor)], undefined, index);
      model.borderWidth = resolve([custom.hoverBorderWidth, dataset.hoverBorderWidth, model.borderWidth], undefined, index);
    },

    /**
     * @private
     */
    resyncElements: function resyncElements() {
      var me = this;
      var meta = me.getMeta();
      var data = me.getDataset().data;
      var numMeta = meta.data.length;
      var numData = data.length;

      if (numData < numMeta) {
        meta.data.splice(numData, numMeta - numData);
      } else if (numData > numMeta) {
        me.insertElements(numMeta, numData - numMeta);
      }
    },

    /**
     * @private
     */
    insertElements: function insertElements(start, count) {
      for (var i = 0; i < count; ++i) {
        this.addElementAndReset(start + i);
      }
    },

    /**
     * @private
     */
    onDataPush: function onDataPush() {
      var count = arguments.length;
      this.insertElements(this.getDataset().data.length - count, count);
    },

    /**
     * @private
     */
    onDataPop: function onDataPop() {
      this.getMeta().data.pop();
    },

    /**
     * @private
     */
    onDataShift: function onDataShift() {
      this.getMeta().data.shift();
    },

    /**
     * @private
     */
    onDataSplice: function onDataSplice(start, count) {
      this.getMeta().data.splice(start, count);
      this.insertElements(start, arguments.length - 2);
    },

    /**
     * @private
     */
    onDataUnshift: function onDataUnshift() {
      this.insertElements(0, arguments.length);
    }
  });
  DatasetController.extend = helpers$1.inherits;
  var core_datasetController = DatasetController;

  core_defaults._set('global', {
    elements: {
      arc: {
        backgroundColor: core_defaults.global.defaultColor,
        borderColor: '#fff',
        borderWidth: 2,
        borderAlign: 'center'
      }
    }
  });

  var element_arc = core_element.extend({
    inLabelRange: function inLabelRange(mouseX) {
      var vm = this._view;

      if (vm) {
        return Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hoverRadius, 2);
      }

      return false;
    },
    inRange: function inRange(chartX, chartY) {
      var vm = this._view;

      if (vm) {
        var pointRelativePosition = helpers$1.getAngleFromPoint(vm, {
          x: chartX,
          y: chartY
        });
        var angle = pointRelativePosition.angle;
        var distance = pointRelativePosition.distance; // Sanitise angle range

        var startAngle = vm.startAngle;
        var endAngle = vm.endAngle;

        while (endAngle < startAngle) {
          endAngle += 2.0 * Math.PI;
        }

        while (angle > endAngle) {
          angle -= 2.0 * Math.PI;
        }

        while (angle < startAngle) {
          angle += 2.0 * Math.PI;
        } // Check if within the range of the open/close angle


        var betweenAngles = angle >= startAngle && angle <= endAngle;
        var withinRadius = distance >= vm.innerRadius && distance <= vm.outerRadius;
        return betweenAngles && withinRadius;
      }

      return false;
    },
    getCenterPoint: function getCenterPoint() {
      var vm = this._view;
      var halfAngle = (vm.startAngle + vm.endAngle) / 2;
      var halfRadius = (vm.innerRadius + vm.outerRadius) / 2;
      return {
        x: vm.x + Math.cos(halfAngle) * halfRadius,
        y: vm.y + Math.sin(halfAngle) * halfRadius
      };
    },
    getArea: function getArea() {
      var vm = this._view;
      return Math.PI * ((vm.endAngle - vm.startAngle) / (2 * Math.PI)) * (Math.pow(vm.outerRadius, 2) - Math.pow(vm.innerRadius, 2));
    },
    tooltipPosition: function tooltipPosition() {
      var vm = this._view;
      var centreAngle = vm.startAngle + (vm.endAngle - vm.startAngle) / 2;
      var rangeFromCentre = (vm.outerRadius - vm.innerRadius) / 2 + vm.innerRadius;
      return {
        x: vm.x + Math.cos(centreAngle) * rangeFromCentre,
        y: vm.y + Math.sin(centreAngle) * rangeFromCentre
      };
    },
    draw: function draw() {
      var ctx = this._chart.ctx;
      var vm = this._view;
      var sA = vm.startAngle;
      var eA = vm.endAngle;
      var pixelMargin = vm.borderAlign === 'inner' ? 0.33 : 0;
      var angleMargin;
      ctx.save();
      ctx.beginPath();
      ctx.arc(vm.x, vm.y, Math.max(vm.outerRadius - pixelMargin, 0), sA, eA);
      ctx.arc(vm.x, vm.y, vm.innerRadius, eA, sA, true);
      ctx.closePath();
      ctx.fillStyle = vm.backgroundColor;
      ctx.fill();

      if (vm.borderWidth) {
        if (vm.borderAlign === 'inner') {
          // Draw an inner border by cliping the arc and drawing a double-width border
          // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders
          ctx.beginPath();
          angleMargin = pixelMargin / vm.outerRadius;
          ctx.arc(vm.x, vm.y, vm.outerRadius, sA - angleMargin, eA + angleMargin);

          if (vm.innerRadius > pixelMargin) {
            angleMargin = pixelMargin / vm.innerRadius;
            ctx.arc(vm.x, vm.y, vm.innerRadius - pixelMargin, eA + angleMargin, sA - angleMargin, true);
          } else {
            ctx.arc(vm.x, vm.y, pixelMargin, eA + Math.PI / 2, sA - Math.PI / 2);
          }

          ctx.closePath();
          ctx.clip();
          ctx.beginPath();
          ctx.arc(vm.x, vm.y, vm.outerRadius, sA, eA);
          ctx.arc(vm.x, vm.y, vm.innerRadius, eA, sA, true);
          ctx.closePath();
          ctx.lineWidth = vm.borderWidth * 2;
          ctx.lineJoin = 'round';
        } else {
          ctx.lineWidth = vm.borderWidth;
          ctx.lineJoin = 'bevel';
        }

        ctx.strokeStyle = vm.borderColor;
        ctx.stroke();
      }

      ctx.restore();
    }
  });
  var valueOrDefault$1 = helpers$1.valueOrDefault;
  var defaultColor = core_defaults.global.defaultColor;

  core_defaults._set('global', {
    elements: {
      line: {
        tension: 0.4,
        backgroundColor: defaultColor,
        borderWidth: 3,
        borderColor: defaultColor,
        borderCapStyle: 'butt',
        borderDash: [],
        borderDashOffset: 0.0,
        borderJoinStyle: 'miter',
        capBezierPoints: true,
        fill: true // do we fill in the area between the line and its base axis

      }
    }
  });

  var element_line = core_element.extend({
    draw: function draw() {
      var me = this;
      var vm = me._view;
      var ctx = me._chart.ctx;
      var spanGaps = vm.spanGaps;

      var points = me._children.slice(); // clone array


      var globalDefaults = core_defaults.global;
      var globalOptionLineElements = globalDefaults.elements.line;
      var lastDrawnIndex = -1;
      var index, current, previous, currentVM; // If we are looping, adding the first point again

      if (me._loop && points.length) {
        points.push(points[0]);
      }

      ctx.save(); // Stroke Line Options

      ctx.lineCap = vm.borderCapStyle || globalOptionLineElements.borderCapStyle; // IE 9 and 10 do not support line dash

      if (ctx.setLineDash) {
        ctx.setLineDash(vm.borderDash || globalOptionLineElements.borderDash);
      }

      ctx.lineDashOffset = valueOrDefault$1(vm.borderDashOffset, globalOptionLineElements.borderDashOffset);
      ctx.lineJoin = vm.borderJoinStyle || globalOptionLineElements.borderJoinStyle;
      ctx.lineWidth = valueOrDefault$1(vm.borderWidth, globalOptionLineElements.borderWidth);
      ctx.strokeStyle = vm.borderColor || globalDefaults.defaultColor; // Stroke Line

      ctx.beginPath();
      lastDrawnIndex = -1;

      for (index = 0; index < points.length; ++index) {
        current = points[index];
        previous = helpers$1.previousItem(points, index);
        currentVM = current._view; // First point moves to it's starting position no matter what

        if (index === 0) {
          if (!currentVM.skip) {
            ctx.moveTo(currentVM.x, currentVM.y);
            lastDrawnIndex = index;
          }
        } else {
          previous = lastDrawnIndex === -1 ? previous : points[lastDrawnIndex];

          if (!currentVM.skip) {
            if (lastDrawnIndex !== index - 1 && !spanGaps || lastDrawnIndex === -1) {
              // There was a gap and this is the first point after the gap
              ctx.moveTo(currentVM.x, currentVM.y);
            } else {
              // Line to next point
              helpers$1.canvas.lineTo(ctx, previous._view, current._view);
            }

            lastDrawnIndex = index;
          }
        }
      }

      ctx.stroke();
      ctx.restore();
    }
  });
  var valueOrDefault$2 = helpers$1.valueOrDefault;
  var defaultColor$1 = core_defaults.global.defaultColor;

  core_defaults._set('global', {
    elements: {
      point: {
        radius: 3,
        pointStyle: 'circle',
        backgroundColor: defaultColor$1,
        borderColor: defaultColor$1,
        borderWidth: 1,
        // Hover
        hitRadius: 1,
        hoverRadius: 4,
        hoverBorderWidth: 1
      }
    }
  });

  function xRange(mouseX) {
    var vm = this._view;
    return vm ? Math.abs(mouseX - vm.x) < vm.radius + vm.hitRadius : false;
  }

  function yRange(mouseY) {
    var vm = this._view;
    return vm ? Math.abs(mouseY - vm.y) < vm.radius + vm.hitRadius : false;
  }

  var element_point = core_element.extend({
    inRange: function inRange(mouseX, mouseY) {
      var vm = this._view;
      return vm ? Math.pow(mouseX - vm.x, 2) + Math.pow(mouseY - vm.y, 2) < Math.pow(vm.hitRadius + vm.radius, 2) : false;
    },
    inLabelRange: xRange,
    inXRange: xRange,
    inYRange: yRange,
    getCenterPoint: function getCenterPoint() {
      var vm = this._view;
      return {
        x: vm.x,
        y: vm.y
      };
    },
    getArea: function getArea() {
      return Math.PI * Math.pow(this._view.radius, 2);
    },
    tooltipPosition: function tooltipPosition() {
      var vm = this._view;
      return {
        x: vm.x,
        y: vm.y,
        padding: vm.radius + vm.borderWidth
      };
    },
    draw: function draw(chartArea) {
      var vm = this._view;
      var ctx = this._chart.ctx;
      var pointStyle = vm.pointStyle;
      var rotation = vm.rotation;
      var radius = vm.radius;
      var x = vm.x;
      var y = vm.y;
      var globalDefaults = core_defaults.global;
      var defaultColor = globalDefaults.defaultColor; // eslint-disable-line no-shadow

      if (vm.skip) {
        return;
      } // Clipping for Points.


      if (chartArea === undefined || helpers$1.canvas._isPointInArea(vm, chartArea)) {
        ctx.strokeStyle = vm.borderColor || defaultColor;
        ctx.lineWidth = valueOrDefault$2(vm.borderWidth, globalDefaults.elements.point.borderWidth);
        ctx.fillStyle = vm.backgroundColor || defaultColor;
        helpers$1.canvas.drawPoint(ctx, pointStyle, radius, x, y, rotation);
      }
    }
  });
  var defaultColor$2 = core_defaults.global.defaultColor;

  core_defaults._set('global', {
    elements: {
      rectangle: {
        backgroundColor: defaultColor$2,
        borderColor: defaultColor$2,
        borderSkipped: 'bottom',
        borderWidth: 0
      }
    }
  });

  function isVertical(vm) {
    return vm && vm.width !== undefined;
  }
  /**
   * Helper function to get the bounds of the bar regardless of the orientation
   * @param bar {Chart.Element.Rectangle} the bar
   * @return {Bounds} bounds of the bar
   * @private
   */


  function getBarBounds(vm) {
    var x1, x2, y1, y2, half;

    if (isVertical(vm)) {
      half = vm.width / 2;
      x1 = vm.x - half;
      x2 = vm.x + half;
      y1 = Math.min(vm.y, vm.base);
      y2 = Math.max(vm.y, vm.base);
    } else {
      half = vm.height / 2;
      x1 = Math.min(vm.x, vm.base);
      x2 = Math.max(vm.x, vm.base);
      y1 = vm.y - half;
      y2 = vm.y + half;
    }

    return {
      left: x1,
      top: y1,
      right: x2,
      bottom: y2
    };
  }

  function swap(orig, v1, v2) {
    return orig === v1 ? v2 : orig === v2 ? v1 : orig;
  }

  function parseBorderSkipped(vm) {
    var edge = vm.borderSkipped;
    var res = {};

    if (!edge) {
      return res;
    }

    if (vm.horizontal) {
      if (vm.base > vm.x) {
        edge = swap(edge, 'left', 'right');
      }
    } else if (vm.base < vm.y) {
      edge = swap(edge, 'bottom', 'top');
    }

    res[edge] = true;
    return res;
  }

  function parseBorderWidth(vm, maxW, maxH) {
    var value = vm.borderWidth;
    var skip = parseBorderSkipped(vm);
    var t, r, b, l;

    if (helpers$1.isObject(value)) {
      t = +value.top || 0;
      r = +value.right || 0;
      b = +value.bottom || 0;
      l = +value.left || 0;
    } else {
      t = r = b = l = +value || 0;
    }

    return {
      t: skip.top || t < 0 ? 0 : t > maxH ? maxH : t,
      r: skip.right || r < 0 ? 0 : r > maxW ? maxW : r,
      b: skip.bottom || b < 0 ? 0 : b > maxH ? maxH : b,
      l: skip.left || l < 0 ? 0 : l > maxW ? maxW : l
    };
  }

  function boundingRects(vm) {
    var bounds = getBarBounds(vm);
    var width = bounds.right - bounds.left;
    var height = bounds.bottom - bounds.top;
    var border = parseBorderWidth(vm, width / 2, height / 2);
    return {
      outer: {
        x: bounds.left,
        y: bounds.top,
        w: width,
        h: height
      },
      inner: {
        x: bounds.left + border.l,
        y: bounds.top + border.t,
        w: width - border.l - border.r,
        h: height - border.t - border.b
      }
    };
  }

  function _inRange(vm, x, y) {
    var skipX = x === null;
    var skipY = y === null;
    var bounds = !vm || skipX && skipY ? false : getBarBounds(vm);
    return bounds && (skipX || x >= bounds.left && x <= bounds.right) && (skipY || y >= bounds.top && y <= bounds.bottom);
  }

  var element_rectangle = core_element.extend({
    draw: function draw() {
      var ctx = this._chart.ctx;
      var vm = this._view;
      var rects = boundingRects(vm);
      var outer = rects.outer;
      var inner = rects.inner;
      ctx.fillStyle = vm.backgroundColor;
      ctx.fillRect(outer.x, outer.y, outer.w, outer.h);

      if (outer.w === inner.w && outer.h === inner.h) {
        return;
      }

      ctx.save();
      ctx.beginPath();
      ctx.rect(outer.x, outer.y, outer.w, outer.h);
      ctx.clip();
      ctx.fillStyle = vm.borderColor;
      ctx.rect(inner.x, inner.y, inner.w, inner.h);
      ctx.fill('evenodd');
      ctx.restore();
    },
    height: function height() {
      var vm = this._view;
      return vm.base - vm.y;
    },
    inRange: function inRange(mouseX, mouseY) {
      return _inRange(this._view, mouseX, mouseY);
    },
    inLabelRange: function inLabelRange(mouseX, mouseY) {
      var vm = this._view;
      return isVertical(vm) ? _inRange(vm, mouseX, null) : _inRange(vm, null, mouseY);
    },
    inXRange: function inXRange(mouseX) {
      return _inRange(this._view, mouseX, null);
    },
    inYRange: function inYRange(mouseY) {
      return _inRange(this._view, null, mouseY);
    },
    getCenterPoint: function getCenterPoint() {
      var vm = this._view;
      var x, y;

      if (isVertical(vm)) {
        x = vm.x;
        y = (vm.y + vm.base) / 2;
      } else {
        x = (vm.x + vm.base) / 2;
        y = vm.y;
      }

      return {
        x: x,
        y: y
      };
    },
    getArea: function getArea() {
      var vm = this._view;
      return isVertical(vm) ? vm.width * Math.abs(vm.y - vm.base) : vm.height * Math.abs(vm.x - vm.base);
    },
    tooltipPosition: function tooltipPosition() {
      var vm = this._view;
      return {
        x: vm.x,
        y: vm.y
      };
    }
  });
  var elements = {};
  var Arc = element_arc;
  var Line = element_line;
  var Point = element_point;
  var Rectangle = element_rectangle;
  elements.Arc = Arc;
  elements.Line = Line;
  elements.Point = Point;
  elements.Rectangle = Rectangle;
  var resolve$1 = helpers$1.options.resolve;

  core_defaults._set('bar', {
    hover: {
      mode: 'label'
    },
    scales: {
      xAxes: [{
        type: 'category',
        categoryPercentage: 0.8,
        barPercentage: 0.9,
        offset: true,
        gridLines: {
          offsetGridLines: true
        }
      }],
      yAxes: [{
        type: 'linear'
      }]
    }
  });
  /**
   * Computes the "optimal" sample size to maintain bars equally sized while preventing overlap.
   * @private
   */


  function computeMinSampleSize(scale, pixels) {
    var min = scale.isHorizontal() ? scale.width : scale.height;
    var ticks = scale.getTicks();
    var prev, curr, i, ilen;

    for (i = 1, ilen = pixels.length; i < ilen; ++i) {
      min = Math.min(min, Math.abs(pixels[i] - pixels[i - 1]));
    }

    for (i = 0, ilen = ticks.length; i < ilen; ++i) {
      curr = scale.getPixelForTick(i);
      min = i > 0 ? Math.min(min, curr - prev) : min;
      prev = curr;
    }

    return min;
  }
  /**
   * Computes an "ideal" category based on the absolute bar thickness or, if undefined or null,
   * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This
   * mode currently always generates bars equally sized (until we introduce scriptable options?).
   * @private
   */


  function computeFitCategoryTraits(index, ruler, options) {
    var thickness = options.barThickness;
    var count = ruler.stackCount;
    var curr = ruler.pixels[index];
    var size, ratio;

    if (helpers$1.isNullOrUndef(thickness)) {
      size = ruler.min * options.categoryPercentage;
      ratio = options.barPercentage;
    } else {
      // When bar thickness is enforced, category and bar percentages are ignored.
      // Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')
      // and deprecate barPercentage since this value is ignored when thickness is absolute.
      size = thickness * count;
      ratio = 1;
    }

    return {
      chunk: size / count,
      ratio: ratio,
      start: curr - size / 2
    };
  }
  /**
   * Computes an "optimal" category that globally arranges bars side by side (no gap when
   * percentage options are 1), based on the previous and following categories. This mode
   * generates bars with different widths when data are not evenly spaced.
   * @private
   */


  function computeFlexCategoryTraits(index, ruler, options) {
    var pixels = ruler.pixels;
    var curr = pixels[index];
    var prev = index > 0 ? pixels[index - 1] : null;
    var next = index < pixels.length - 1 ? pixels[index + 1] : null;
    var percent = options.categoryPercentage;
    var start, size;

    if (prev === null) {
      // first data: its size is double based on the next point or,
      // if it's also the last data, we use the scale size.
      prev = curr - (next === null ? ruler.end - ruler.start : next - curr);
    }

    if (next === null) {
      // last data: its size is also double based on the previous point.
      next = curr + curr - prev;
    }

    start = curr - (curr - Math.min(prev, next)) / 2 * percent;
    size = Math.abs(next - prev) / 2 * percent;
    return {
      chunk: size / ruler.stackCount,
      ratio: options.barPercentage,
      start: start
    };
  }

  var controller_bar = core_datasetController.extend({
    dataElementType: elements.Rectangle,
    initialize: function initialize() {
      var me = this;
      var meta;
      core_datasetController.prototype.initialize.apply(me, arguments);
      meta = me.getMeta();
      meta.stack = me.getDataset().stack;
      meta.bar = true;
    },
    update: function update(reset) {
      var me = this;
      var rects = me.getMeta().data;
      var i, ilen;
      me._ruler = me.getRuler();

      for (i = 0, ilen = rects.length; i < ilen; ++i) {
        me.updateElement(rects[i], i, reset);
      }
    },
    updateElement: function updateElement(rectangle, index, reset) {
      var me = this;
      var meta = me.getMeta();
      var dataset = me.getDataset();

      var options = me._resolveElementOptions(rectangle, index);

      rectangle._xScale = me.getScaleForId(meta.xAxisID);
      rectangle._yScale = me.getScaleForId(meta.yAxisID);
      rectangle._datasetIndex = me.index;
      rectangle._index = index;
      rectangle._model = {
        backgroundColor: options.backgroundColor,
        borderColor: options.borderColor,
        borderSkipped: options.borderSkipped,
        borderWidth: options.borderWidth,
        datasetLabel: dataset.label,
        label: me.chart.data.labels[index]
      };

      me._updateElementGeometry(rectangle, index, reset);

      rectangle.pivot();
    },

    /**
     * @private
     */
    _updateElementGeometry: function _updateElementGeometry(rectangle, index, reset) {
      var me = this;
      var model = rectangle._model;

      var vscale = me._getValueScale();

      var base = vscale.getBasePixel();
      var horizontal = vscale.isHorizontal();
      var ruler = me._ruler || me.getRuler();
      var vpixels = me.calculateBarValuePixels(me.index, index);
      var ipixels = me.calculateBarIndexPixels(me.index, index, ruler);
      model.horizontal = horizontal;
      model.base = reset ? base : vpixels.base;
      model.x = horizontal ? reset ? base : vpixels.head : ipixels.center;
      model.y = horizontal ? ipixels.center : reset ? base : vpixels.head;
      model.height = horizontal ? ipixels.size : undefined;
      model.width = horizontal ? undefined : ipixels.size;
    },

    /**
     * Returns the stacks based on groups and bar visibility.
     * @param {number} [last] - The dataset index
     * @returns {string[]} The list of stack IDs
     * @private
     */
    _getStacks: function _getStacks(last) {
      var me = this;
      var chart = me.chart;

      var scale = me._getIndexScale();

      var stacked = scale.options.stacked;
      var ilen = last === undefined ? chart.data.datasets.length : last + 1;
      var stacks = [];
      var i, meta;

      for (i = 0; i < ilen; ++i) {
        meta = chart.getDatasetMeta(i);

        if (meta.bar && chart.isDatasetVisible(i) && (stacked === false || stacked === true && stacks.indexOf(meta.stack) === -1 || stacked === undefined && (meta.stack === undefined || stacks.indexOf(meta.stack) === -1))) {
          stacks.push(meta.stack);
        }
      }

      return stacks;
    },

    /**
     * Returns the effective number of stacks based on groups and bar visibility.
     * @private
     */
    getStackCount: function getStackCount() {
      return this._getStacks().length;
    },

    /**
     * Returns the stack index for the given dataset based on groups and bar visibility.
     * @param {number} [datasetIndex] - The dataset index
     * @param {string} [name] - The stack name to find
     * @returns {number} The stack index
     * @private
     */
    getStackIndex: function getStackIndex(datasetIndex, name) {
      var stacks = this._getStacks(datasetIndex);

      var index = name !== undefined ? stacks.indexOf(name) : -1; // indexOf returns -1 if element is not present

      return index === -1 ? stacks.length - 1 : index;
    },

    /**
     * @private
     */
    getRuler: function getRuler() {
      var me = this;

      var scale = me._getIndexScale();

      var stackCount = me.getStackCount();
      var datasetIndex = me.index;
      var isHorizontal = scale.isHorizontal();
      var start = isHorizontal ? scale.left : scale.top;
      var end = start + (isHorizontal ? scale.width : scale.height);
      var pixels = [];
      var i, ilen, min;

      for (i = 0, ilen = me.getMeta().data.length; i < ilen; ++i) {
        pixels.push(scale.getPixelForValue(null, i, datasetIndex));
      }

      min = helpers$1.isNullOrUndef(scale.options.barThickness) ? computeMinSampleSize(scale, pixels) : -1;
      return {
        min: min,
        pixels: pixels,
        start: start,
        end: end,
        stackCount: stackCount,
        scale: scale
      };
    },

    /**
     * Note: pixel values are not clamped to the scale area.
     * @private
     */
    calculateBarValuePixels: function calculateBarValuePixels(datasetIndex, index) {
      var me = this;
      var chart = me.chart;
      var meta = me.getMeta();

      var scale = me._getValueScale();

      var isHorizontal = scale.isHorizontal();
      var datasets = chart.data.datasets;
      var value = +scale.getRightValue(datasets[datasetIndex].data[index]);
      var minBarLength = scale.options.minBarLength;
      var stacked = scale.options.stacked;
      var stack = meta.stack;
      var start = 0;
      var i, imeta, ivalue, base, head, size;

      if (stacked || stacked === undefined && stack !== undefined) {
        for (i = 0; i < datasetIndex; ++i) {
          imeta = chart.getDatasetMeta(i);

          if (imeta.bar && imeta.stack === stack && imeta.controller._getValueScaleId() === scale.id && chart.isDatasetVisible(i)) {
            ivalue = +scale.getRightValue(datasets[i].data[index]);

            if (value < 0 && ivalue < 0 || value >= 0 && ivalue > 0) {
              start += ivalue;
            }
          }
        }
      }

      base = scale.getPixelForValue(start);
      head = scale.getPixelForValue(start + value);
      size = head - base;

      if (minBarLength !== undefined && Math.abs(size) < minBarLength) {
        size = minBarLength;

        if (value >= 0 && !isHorizontal || value < 0 && isHorizontal) {
          head = base - minBarLength;
        } else {
          head = base + minBarLength;
        }
      }

      return {
        size: size,
        base: base,
        head: head,
        center: head + size / 2
      };
    },

    /**
     * @private
     */
    calculateBarIndexPixels: function calculateBarIndexPixels(datasetIndex, index, ruler) {
      var me = this;
      var options = ruler.scale.options;
      var range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options) : computeFitCategoryTraits(index, ruler, options);
      var stackIndex = me.getStackIndex(datasetIndex, me.getMeta().stack);
      var center = range.start + range.chunk * stackIndex + range.chunk / 2;
      var size = Math.min(helpers$1.valueOrDefault(options.maxBarThickness, Infinity), range.chunk * range.ratio);
      return {
        base: center - size / 2,
        head: center + size / 2,
        center: center,
        size: size
      };
    },
    draw: function draw() {
      var me = this;
      var chart = me.chart;

      var scale = me._getValueScale();

      var rects = me.getMeta().data;
      var dataset = me.getDataset();
      var ilen = rects.length;
      var i = 0;
      helpers$1.canvas.clipArea(chart.ctx, chart.chartArea);

      for (; i < ilen; ++i) {
        if (!isNaN(scale.getRightValue(dataset.data[i]))) {
          rects[i].draw();
        }
      }

      helpers$1.canvas.unclipArea(chart.ctx);
    },

    /**
     * @private
     */
    _resolveElementOptions: function _resolveElementOptions(rectangle, index) {
      var me = this;
      var chart = me.chart;
      var datasets = chart.data.datasets;
      var dataset = datasets[me.index];
      var custom = rectangle.custom || {};
      var options = chart.options.elements.rectangle;
      var values = {};
      var i, ilen, key; // Scriptable options

      var context = {
        chart: chart,
        dataIndex: index,
        dataset: dataset,
        datasetIndex: me.index
      };
      var keys = ['backgroundColor', 'borderColor', 'borderSkipped', 'borderWidth'];

      for (i = 0, ilen = keys.length; i < ilen; ++i) {
        key = keys[i];
        values[key] = resolve$1([custom[key], dataset[key], options[key]], context, index);
      }

      return values;
    }
  });
  var valueOrDefault$3 = helpers$1.valueOrDefault;
  var resolve$2 = helpers$1.options.resolve;

  core_defaults._set('bubble', {
    hover: {
      mode: 'single'
    },
    scales: {
      xAxes: [{
        type: 'linear',
        // bubble should probably use a linear scale by default
        position: 'bottom',
        id: 'x-axis-0' // need an ID so datasets can reference the scale

      }],
      yAxes: [{
        type: 'linear',
        position: 'left',
        id: 'y-axis-0'
      }]
    },
    tooltips: {
      callbacks: {
        title: function title() {
          // Title doesn't make sense for scatter since we format the data as a point
          return '';
        },
        label: function label(item, data) {
          var datasetLabel = data.datasets[item.datasetIndex].label || '';
          var dataPoint = data.datasets[item.datasetIndex].data[item.index];
          return datasetLabel + ': (' + item.xLabel + ', ' + item.yLabel + ', ' + dataPoint.r + ')';
        }
      }
    }
  });

  var controller_bubble = core_datasetController.extend({
    /**
     * @protected
     */
    dataElementType: elements.Point,

    /**
     * @protected
     */
    update: function update(reset) {
      var me = this;
      var meta = me.getMeta();
      var points = meta.data; // Update Points

      helpers$1.each(points, function (point, index) {
        me.updateElement(point, index, reset);
      });
    },

    /**
     * @protected
     */
    updateElement: function updateElement(point, index, reset) {
      var me = this;
      var meta = me.getMeta();
      var custom = point.custom || {};
      var xScale = me.getScaleForId(meta.xAxisID);
      var yScale = me.getScaleForId(meta.yAxisID);

      var options = me._resolveElementOptions(point, index);

      var data = me.getDataset().data[index];
      var dsIndex = me.index;
      var x = reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(_typeof(data) === 'object' ? data : NaN, index, dsIndex);
      var y = reset ? yScale.getBasePixel() : yScale.getPixelForValue(data, index, dsIndex);
      point._xScale = xScale;
      point._yScale = yScale;
      point._options = options;
      point._datasetIndex = dsIndex;
      point._index = index;
      point._model = {
        backgroundColor: options.backgroundColor,
        borderColor: options.borderColor,
        borderWidth: options.borderWidth,
        hitRadius: options.hitRadius,
        pointStyle: options.pointStyle,
        rotation: options.rotation,
        radius: reset ? 0 : options.radius,
        skip: custom.skip || isNaN(x) || isNaN(y),
        x: x,
        y: y
      };
      point.pivot();
    },

    /**
     * @protected
     */
    setHoverStyle: function setHoverStyle(point) {
      var model = point._model;
      var options = point._options;
      var getHoverColor = helpers$1.getHoverColor;
      point.$previousStyle = {
        backgroundColor: model.backgroundColor,
        borderColor: model.borderColor,
        borderWidth: model.borderWidth,
        radius: model.radius
      };
      model.backgroundColor = valueOrDefault$3(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));
      model.borderColor = valueOrDefault$3(options.hoverBorderColor, getHoverColor(options.borderColor));
      model.borderWidth = valueOrDefault$3(options.hoverBorderWidth, options.borderWidth);
      model.radius = options.radius + options.hoverRadius;
    },

    /**
     * @private
     */
    _resolveElementOptions: function _resolveElementOptions(point, index) {
      var me = this;
      var chart = me.chart;
      var datasets = chart.data.datasets;
      var dataset = datasets[me.index];
      var custom = point.custom || {};
      var options = chart.options.elements.point;
      var data = dataset.data[index];
      var values = {};
      var i, ilen, key; // Scriptable options

      var context = {
        chart: chart,
        dataIndex: index,
        dataset: dataset,
        datasetIndex: me.index
      };
      var keys = ['backgroundColor', 'borderColor', 'borderWidth', 'hoverBackgroundColor', 'hoverBorderColor', 'hoverBorderWidth', 'hoverRadius', 'hitRadius', 'pointStyle', 'rotation'];

      for (i = 0, ilen = keys.length; i < ilen; ++i) {
        key = keys[i];
        values[key] = resolve$2([custom[key], dataset[key], options[key]], context, index);
      } // Custom radius resolution


      values.radius = resolve$2([custom.radius, data ? data.r : undefined, dataset.radius, options.radius], context, index);
      return values;
    }
  });
  var resolve$3 = helpers$1.options.resolve;
  var valueOrDefault$4 = helpers$1.valueOrDefault;

  core_defaults._set('doughnut', {
    animation: {
      // Boolean - Whether we animate the rotation of the Doughnut
      animateRotate: true,
      // Boolean - Whether we animate scaling the Doughnut from the centre
      animateScale: false
    },
    hover: {
      mode: 'single'
    },
    legendCallback: function legendCallback(chart) {
      var text = [];
      text.push('<ul class="' + chart.id + '-legend">');
      var data = chart.data;
      var datasets = data.datasets;
      var labels = data.labels;

      if (datasets.length) {
        for (var i = 0; i < datasets[0].data.length; ++i) {
          text.push('<li><span style="background-color:' + datasets[0].backgroundColor[i] + '"></span>');

          if (labels[i]) {
            text.push(labels[i]);
          }

          text.push('</li>');
        }
      }

      text.push('</ul>');
      return text.join('');
    },
    legend: {
      labels: {
        generateLabels: function generateLabels(chart) {
          var data = chart.data;

          if (data.labels.length && data.datasets.length) {
            return data.labels.map(function (label, i) {
              var meta = chart.getDatasetMeta(0);
              var ds = data.datasets[0];
              var arc = meta.data[i];
              var custom = arc && arc.custom || {};
              var arcOpts = chart.options.elements.arc;
              var fill = resolve$3([custom.backgroundColor, ds.backgroundColor, arcOpts.backgroundColor], undefined, i);
              var stroke = resolve$3([custom.borderColor, ds.borderColor, arcOpts.borderColor], undefined, i);
              var bw = resolve$3([custom.borderWidth, ds.borderWidth, arcOpts.borderWidth], undefined, i);
              return {
                text: label,
                fillStyle: fill,
                strokeStyle: stroke,
                lineWidth: bw,
                hidden: isNaN(ds.data[i]) || meta.data[i].hidden,
                // Extra data used for toggling the correct item
                index: i
              };
            });
          }

          return [];
        }
      },
      onClick: function onClick(e, legendItem) {
        var index = legendItem.index;
        var chart = this.chart;
        var i, ilen, meta;

        for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {
          meta = chart.getDatasetMeta(i); // toggle visibility of index if exists

          if (meta.data[index]) {
            meta.data[index].hidden = !meta.data[index].hidden;
          }
        }

        chart.update();
      }
    },
    // The percentage of the chart that we cut out of the middle.
    cutoutPercentage: 50,
    // The rotation of the chart, where the first data arc begins.
    rotation: Math.PI * -0.5,
    // The total circumference of the chart.
    circumference: Math.PI * 2.0,
    // Need to override these to give a nice default
    tooltips: {
      callbacks: {
        title: function title() {
          return '';
        },
        label: function label(tooltipItem, data) {
          var dataLabel = data.labels[tooltipItem.index];
          var value = ': ' + data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];

          if (helpers$1.isArray(dataLabel)) {
            // show value on first line of multiline label
            // need to clone because we are changing the value
            dataLabel = dataLabel.slice();
            dataLabel[0] += value;
          } else {
            dataLabel += value;
          }

          return dataLabel;
        }
      }
    }
  });

  var controller_doughnut = core_datasetController.extend({
    dataElementType: elements.Arc,
    linkScales: helpers$1.noop,
    // Get index of the dataset in relation to the visible datasets. This allows determining the inner and outer radius correctly
    getRingIndex: function getRingIndex(datasetIndex) {
      var ringIndex = 0;

      for (var j = 0; j < datasetIndex; ++j) {
        if (this.chart.isDatasetVisible(j)) {
          ++ringIndex;
        }
      }

      return ringIndex;
    },
    update: function update(reset) {
      var me = this;
      var chart = me.chart;
      var chartArea = chart.chartArea;
      var opts = chart.options;
      var availableWidth = chartArea.right - chartArea.left;
      var availableHeight = chartArea.bottom - chartArea.top;
      var minSize = Math.min(availableWidth, availableHeight);
      var offset = {
        x: 0,
        y: 0
      };
      var meta = me.getMeta();
      var arcs = meta.data;
      var cutoutPercentage = opts.cutoutPercentage;
      var circumference = opts.circumference;

      var chartWeight = me._getRingWeight(me.index);

      var i, ilen; // If the chart's circumference isn't a full circle, calculate minSize as a ratio of the width/height of the arc

      if (circumference < Math.PI * 2.0) {
        var startAngle = opts.rotation % (Math.PI * 2.0);
        startAngle += Math.PI * 2.0 * (startAngle >= Math.PI ? -1 : startAngle < -Math.PI ? 1 : 0);
        var endAngle = startAngle + circumference;
        var start = {
          x: Math.cos(startAngle),
          y: Math.sin(startAngle)
        };
        var end = {
          x: Math.cos(endAngle),
          y: Math.sin(endAngle)
        };
        var contains0 = startAngle <= 0 && endAngle >= 0 || startAngle <= Math.PI * 2.0 && Math.PI * 2.0 <= endAngle;
        var contains90 = startAngle <= Math.PI * 0.5 && Math.PI * 0.5 <= endAngle || startAngle <= Math.PI * 2.5 && Math.PI * 2.5 <= endAngle;
        var contains180 = startAngle <= -Math.PI && -Math.PI <= endAngle || startAngle <= Math.PI && Math.PI <= endAngle;
        var contains270 = startAngle <= -Math.PI * 0.5 && -Math.PI * 0.5 <= endAngle || startAngle <= Math.PI * 1.5 && Math.PI * 1.5 <= endAngle;
        var cutout = cutoutPercentage / 100.0;
        var min = {
          x: contains180 ? -1 : Math.min(start.x * (start.x < 0 ? 1 : cutout), end.x * (end.x < 0 ? 1 : cutout)),
          y: contains270 ? -1 : Math.min(start.y * (start.y < 0 ? 1 : cutout), end.y * (end.y < 0 ? 1 : cutout))
        };
        var max = {
          x: contains0 ? 1 : Math.max(start.x * (start.x > 0 ? 1 : cutout), end.x * (end.x > 0 ? 1 : cutout)),
          y: contains90 ? 1 : Math.max(start.y * (start.y > 0 ? 1 : cutout), end.y * (end.y > 0 ? 1 : cutout))
        };
        var size = {
          width: (max.x - min.x) * 0.5,
          height: (max.y - min.y) * 0.5
        };
        minSize = Math.min(availableWidth / size.width, availableHeight / size.height);
        offset = {
          x: (max.x + min.x) * -0.5,
          y: (max.y + min.y) * -0.5
        };
      }

      for (i = 0, ilen = arcs.length; i < ilen; ++i) {
        arcs[i]._options = me._resolveElementOptions(arcs[i], i);
      }

      chart.borderWidth = me.getMaxBorderWidth();
      chart.outerRadius = Math.max((minSize - chart.borderWidth) / 2, 0);
      chart.innerRadius = Math.max(cutoutPercentage ? chart.outerRadius / 100 * cutoutPercentage : 0, 0);
      chart.radiusLength = (chart.outerRadius - chart.innerRadius) / (me._getVisibleDatasetWeightTotal() || 1);
      chart.offsetX = offset.x * chart.outerRadius;
      chart.offsetY = offset.y * chart.outerRadius;
      meta.total = me.calculateTotal();
      me.outerRadius = chart.outerRadius - chart.radiusLength * me._getRingWeightOffset(me.index);
      me.innerRadius = Math.max(me.outerRadius - chart.radiusLength * chartWeight, 0);

      for (i = 0, ilen = arcs.length; i < ilen; ++i) {
        me.updateElement(arcs[i], i, reset);
      }
    },
    updateElement: function updateElement(arc, index, reset) {
      var me = this;
      var chart = me.chart;
      var chartArea = chart.chartArea;
      var opts = chart.options;
      var animationOpts = opts.animation;
      var centerX = (chartArea.left + chartArea.right) / 2;
      var centerY = (chartArea.top + chartArea.bottom) / 2;
      var startAngle = opts.rotation; // non reset case handled later

      var endAngle = opts.rotation; // non reset case handled later

      var dataset = me.getDataset();
      var circumference = reset && animationOpts.animateRotate ? 0 : arc.hidden ? 0 : me.calculateCircumference(dataset.data[index]) * (opts.circumference / (2.0 * Math.PI));
      var innerRadius = reset && animationOpts.animateScale ? 0 : me.innerRadius;
      var outerRadius = reset && animationOpts.animateScale ? 0 : me.outerRadius;
      var options = arc._options || {};
      helpers$1.extend(arc, {
        // Utility
        _datasetIndex: me.index,
        _index: index,
        // Desired view properties
        _model: {
          backgroundColor: options.backgroundColor,
          borderColor: options.borderColor,
          borderWidth: options.borderWidth,
          borderAlign: options.borderAlign,
          x: centerX + chart.offsetX,
          y: centerY + chart.offsetY,
          startAngle: startAngle,
          endAngle: endAngle,
          circumference: circumference,
          outerRadius: outerRadius,
          innerRadius: innerRadius,
          label: helpers$1.valueAtIndexOrDefault(dataset.label, index, chart.data.labels[index])
        }
      });
      var model = arc._model; // Set correct angles if not resetting

      if (!reset || !animationOpts.animateRotate) {
        if (index === 0) {
          model.startAngle = opts.rotation;
        } else {
          model.startAngle = me.getMeta().data[index - 1]._model.endAngle;
        }

        model.endAngle = model.startAngle + model.circumference;
      }

      arc.pivot();
    },
    calculateTotal: function calculateTotal() {
      var dataset = this.getDataset();
      var meta = this.getMeta();
      var total = 0;
      var value;
      helpers$1.each(meta.data, function (element, index) {
        value = dataset.data[index];

        if (!isNaN(value) && !element.hidden) {
          total += Math.abs(value);
        }
      });
      /* if (total === 0) {
      	total = NaN;
      }*/

      return total;
    },
    calculateCircumference: function calculateCircumference(value) {
      var total = this.getMeta().total;

      if (total > 0 && !isNaN(value)) {
        return Math.PI * 2.0 * (Math.abs(value) / total);
      }

      return 0;
    },
    // gets the max border or hover width to properly scale pie charts
    getMaxBorderWidth: function getMaxBorderWidth(arcs) {
      var me = this;
      var max = 0;
      var chart = me.chart;
      var i, ilen, meta, arc, controller, options, borderWidth, hoverWidth;

      if (!arcs) {
        // Find the outmost visible dataset
        for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {
          if (chart.isDatasetVisible(i)) {
            meta = chart.getDatasetMeta(i);
            arcs = meta.data;

            if (i !== me.index) {
              controller = meta.controller;
            }

            break;
          }
        }
      }

      if (!arcs) {
        return 0;
      }

      for (i = 0, ilen = arcs.length; i < ilen; ++i) {
        arc = arcs[i];
        options = controller ? controller._resolveElementOptions(arc, i) : arc._options;

        if (options.borderAlign !== 'inner') {
          borderWidth = options.borderWidth;
          hoverWidth = options.hoverBorderWidth;
          max = borderWidth > max ? borderWidth : max;
          max = hoverWidth > max ? hoverWidth : max;
        }
      }

      return max;
    },

    /**
     * @protected
     */
    setHoverStyle: function setHoverStyle(arc) {
      var model = arc._model;
      var options = arc._options;
      var getHoverColor = helpers$1.getHoverColor;
      arc.$previousStyle = {
        backgroundColor: model.backgroundColor,
        borderColor: model.borderColor,
        borderWidth: model.borderWidth
      };
      model.backgroundColor = valueOrDefault$4(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));
      model.borderColor = valueOrDefault$4(options.hoverBorderColor, getHoverColor(options.borderColor));
      model.borderWidth = valueOrDefault$4(options.hoverBorderWidth, options.borderWidth);
    },

    /**
     * @private
     */
    _resolveElementOptions: function _resolveElementOptions(arc, index) {
      var me = this;
      var chart = me.chart;
      var dataset = me.getDataset();
      var custom = arc.custom || {};
      var options = chart.options.elements.arc;
      var values = {};
      var i, ilen, key; // Scriptable options

      var context = {
        chart: chart,
        dataIndex: index,
        dataset: dataset,
        datasetIndex: me.index
      };
      var keys = ['backgroundColor', 'borderColor', 'borderWidth', 'borderAlign', 'hoverBackgroundColor', 'hoverBorderColor', 'hoverBorderWidth'];

      for (i = 0, ilen = keys.length; i < ilen; ++i) {
        key = keys[i];
        values[key] = resolve$3([custom[key], dataset[key], options[key]], context, index);
      }

      return values;
    },

    /**
     * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly
     * @private
     */
    _getRingWeightOffset: function _getRingWeightOffset(datasetIndex) {
      var ringWeightOffset = 0;

      for (var i = 0; i < datasetIndex; ++i) {
        if (this.chart.isDatasetVisible(i)) {
          ringWeightOffset += this._getRingWeight(i);
        }
      }

      return ringWeightOffset;
    },

    /**
     * @private
     */
    _getRingWeight: function _getRingWeight(dataSetIndex) {
      return Math.max(valueOrDefault$4(this.chart.data.datasets[dataSetIndex].weight, 1), 0);
    },

    /**
     * Returns the sum of all visibile data set weights.  This value can be 0.
     * @private
     */
    _getVisibleDatasetWeightTotal: function _getVisibleDatasetWeightTotal() {
      return this._getRingWeightOffset(this.chart.data.datasets.length);
    }
  });

  core_defaults._set('horizontalBar', {
    hover: {
      mode: 'index',
      axis: 'y'
    },
    scales: {
      xAxes: [{
        type: 'linear',
        position: 'bottom'
      }],
      yAxes: [{
        type: 'category',
        position: 'left',
        categoryPercentage: 0.8,
        barPercentage: 0.9,
        offset: true,
        gridLines: {
          offsetGridLines: true
        }
      }]
    },
    elements: {
      rectangle: {
        borderSkipped: 'left'
      }
    },
    tooltips: {
      mode: 'index',
      axis: 'y'
    }
  });

  var controller_horizontalBar = controller_bar.extend({
    /**
     * @private
     */
    _getValueScaleId: function _getValueScaleId() {
      return this.getMeta().xAxisID;
    },

    /**
     * @private
     */
    _getIndexScaleId: function _getIndexScaleId() {
      return this.getMeta().yAxisID;
    }
  });
  var valueOrDefault$5 = helpers$1.valueOrDefault;
  var resolve$4 = helpers$1.options.resolve;
  var isPointInArea = helpers$1.canvas._isPointInArea;

  core_defaults._set('line', {
    showLines: true,
    spanGaps: false,
    hover: {
      mode: 'label'
    },
    scales: {
      xAxes: [{
        type: 'category',
        id: 'x-axis-0'
      }],
      yAxes: [{
        type: 'linear',
        id: 'y-axis-0'
      }]
    }
  });

  function lineEnabled(dataset, options) {
    return valueOrDefault$5(dataset.showLine, options.showLines);
  }

  var controller_line = core_datasetController.extend({
    datasetElementType: elements.Line,
    dataElementType: elements.Point,
    update: function update(reset) {
      var me = this;
      var meta = me.getMeta();
      var line = meta.dataset;
      var points = meta.data || [];
      var scale = me.getScaleForId(meta.yAxisID);
      var dataset = me.getDataset();
      var showLine = lineEnabled(dataset, me.chart.options);
      var i, ilen; // Update Line

      if (showLine) {
        // Compatibility: If the properties are defined with only the old name, use those values
        if (dataset.tension !== undefined && dataset.lineTension === undefined) {
          dataset.lineTension = dataset.tension;
        } // Utility


        line._scale = scale;
        line._datasetIndex = me.index; // Data

        line._children = points; // Model

        line._model = me._resolveLineOptions(line);
        line.pivot();
      } // Update Points


      for (i = 0, ilen = points.length; i < ilen; ++i) {
        me.updateElement(points[i], i, reset);
      }

      if (showLine && line._model.tension !== 0) {
        me.updateBezierControlPoints();
      } // Now pivot the point for animation


      for (i = 0, ilen = points.length; i < ilen; ++i) {
        points[i].pivot();
      }
    },
    updateElement: function updateElement(point, index, reset) {
      var me = this;
      var meta = me.getMeta();
      var custom = point.custom || {};
      var dataset = me.getDataset();
      var datasetIndex = me.index;
      var value = dataset.data[index];
      var yScale = me.getScaleForId(meta.yAxisID);
      var xScale = me.getScaleForId(meta.xAxisID);
      var lineModel = meta.dataset._model;
      var x, y;

      var options = me._resolvePointOptions(point, index);

      x = xScale.getPixelForValue(_typeof(value) === 'object' ? value : NaN, index, datasetIndex);
      y = reset ? yScale.getBasePixel() : me.calculatePointY(value, index, datasetIndex); // Utility

      point._xScale = xScale;
      point._yScale = yScale;
      point._options = options;
      point._datasetIndex = datasetIndex;
      point._index = index; // Desired view properties

      point._model = {
        x: x,
        y: y,
        skip: custom.skip || isNaN(x) || isNaN(y),
        // Appearance
        radius: options.radius,
        pointStyle: options.pointStyle,
        rotation: options.rotation,
        backgroundColor: options.backgroundColor,
        borderColor: options.borderColor,
        borderWidth: options.borderWidth,
        tension: valueOrDefault$5(custom.tension, lineModel ? lineModel.tension : 0),
        steppedLine: lineModel ? lineModel.steppedLine : false,
        // Tooltip
        hitRadius: options.hitRadius
      };
    },

    /**
     * @private
     */
    _resolvePointOptions: function _resolvePointOptions(element, index) {
      var me = this;
      var chart = me.chart;
      var dataset = chart.data.datasets[me.index];
      var custom = element.custom || {};
      var options = chart.options.elements.point;
      var values = {};
      var i, ilen, key; // Scriptable options

      var context = {
        chart: chart,
        dataIndex: index,
        dataset: dataset,
        datasetIndex: me.index
      };
      var ELEMENT_OPTIONS = {
        backgroundColor: 'pointBackgroundColor',
        borderColor: 'pointBorderColor',
        borderWidth: 'pointBorderWidth',
        hitRadius: 'pointHitRadius',
        hoverBackgroundColor: 'pointHoverBackgroundColor',
        hoverBorderColor: 'pointHoverBorderColor',
        hoverBorderWidth: 'pointHoverBorderWidth',
        hoverRadius: 'pointHoverRadius',
        pointStyle: 'pointStyle',
        radius: 'pointRadius',
        rotation: 'pointRotation'
      };
      var keys = Object.keys(ELEMENT_OPTIONS);

      for (i = 0, ilen = keys.length; i < ilen; ++i) {
        key = keys[i];
        values[key] = resolve$4([custom[key], dataset[ELEMENT_OPTIONS[key]], dataset[key], options[key]], context, index);
      }

      return values;
    },

    /**
     * @private
     */
    _resolveLineOptions: function _resolveLineOptions(element) {
      var me = this;
      var chart = me.chart;
      var dataset = chart.data.datasets[me.index];
      var custom = element.custom || {};
      var options = chart.options;
      var elementOptions = options.elements.line;
      var values = {};
      var i, ilen, key;
      var keys = ['backgroundColor', 'borderWidth', 'borderColor', 'borderCapStyle', 'borderDash', 'borderDashOffset', 'borderJoinStyle', 'fill', 'cubicInterpolationMode'];

      for (i = 0, ilen = keys.length; i < ilen; ++i) {
        key = keys[i];
        values[key] = resolve$4([custom[key], dataset[key], elementOptions[key]]);
      } // The default behavior of lines is to break at null values, according
      // to https://github.com/chartjs/Chart.js/issues/2435#issuecomment-216718158
      // This option gives lines the ability to span gaps


      values.spanGaps = valueOrDefault$5(dataset.spanGaps, options.spanGaps);
      values.tension = valueOrDefault$5(dataset.lineTension, elementOptions.tension);
      values.steppedLine = resolve$4([custom.steppedLine, dataset.steppedLine, elementOptions.stepped]);
      return values;
    },
    calculatePointY: function calculatePointY(value, index, datasetIndex) {
      var me = this;
      var chart = me.chart;
      var meta = me.getMeta();
      var yScale = me.getScaleForId(meta.yAxisID);
      var sumPos = 0;
      var sumNeg = 0;
      var i, ds, dsMeta;

      if (yScale.options.stacked) {
        for (i = 0; i < datasetIndex; i++) {
          ds = chart.data.datasets[i];
          dsMeta = chart.getDatasetMeta(i);

          if (dsMeta.type === 'line' && dsMeta.yAxisID === yScale.id && chart.isDatasetVisible(i)) {
            var stackedRightValue = Number(yScale.getRightValue(ds.data[index]));

            if (stackedRightValue < 0) {
              sumNeg += stackedRightValue || 0;
            } else {
              sumPos += stackedRightValue || 0;
            }
          }
        }

        var rightValue = Number(yScale.getRightValue(value));

        if (rightValue < 0) {
          return yScale.getPixelForValue(sumNeg + rightValue);
        }

        return yScale.getPixelForValue(sumPos + rightValue);
      }

      return yScale.getPixelForValue(value);
    },
    updateBezierControlPoints: function updateBezierControlPoints() {
      var me = this;
      var chart = me.chart;
      var meta = me.getMeta();
      var lineModel = meta.dataset._model;
      var area = chart.chartArea;
      var points = meta.data || [];
      var i, ilen, model, controlPoints; // Only consider points that are drawn in case the spanGaps option is used

      if (lineModel.spanGaps) {
        points = points.filter(function (pt) {
          return !pt._model.skip;
        });
      }

      function capControlPoint(pt, min, max) {
        return Math.max(Math.min(pt, max), min);
      }

      if (lineModel.cubicInterpolationMode === 'monotone') {
        helpers$1.splineCurveMonotone(points);
      } else {
        for (i = 0, ilen = points.length; i < ilen; ++i) {
          model = points[i]._model;
          controlPoints = helpers$1.splineCurve(helpers$1.previousItem(points, i)._model, model, helpers$1.nextItem(points, i)._model, lineModel.tension);
          model.controlPointPreviousX = controlPoints.previous.x;
          model.controlPointPreviousY = controlPoints.previous.y;
          model.controlPointNextX = controlPoints.next.x;
          model.controlPointNextY = controlPoints.next.y;
        }
      }

      if (chart.options.elements.line.capBezierPoints) {
        for (i = 0, ilen = points.length; i < ilen; ++i) {
          model = points[i]._model;

          if (isPointInArea(model, area)) {
            if (i > 0 && isPointInArea(points[i - 1]._model, area)) {
              model.controlPointPreviousX = capControlPoint(model.controlPointPreviousX, area.left, area.right);
              model.controlPointPreviousY = capControlPoint(model.controlPointPreviousY, area.top, area.bottom);
            }

            if (i < points.length - 1 && isPointInArea(points[i + 1]._model, area)) {
              model.controlPointNextX = capControlPoint(model.controlPointNextX, area.left, area.right);
              model.controlPointNextY = capControlPoint(model.controlPointNextY, area.top, area.bottom);
            }
          }
        }
      }
    },
    draw: function draw() {
      var me = this;
      var chart = me.chart;
      var meta = me.getMeta();
      var points = meta.data || [];
      var area = chart.chartArea;
      var ilen = points.length;
      var halfBorderWidth;
      var i = 0;

      if (lineEnabled(me.getDataset(), chart.options)) {
        halfBorderWidth = (meta.dataset._model.borderWidth || 0) / 2;
        helpers$1.canvas.clipArea(chart.ctx, {
          left: area.left,
          right: area.right,
          top: area.top - halfBorderWidth,
          bottom: area.bottom + halfBorderWidth
        });
        meta.dataset.draw();
        helpers$1.canvas.unclipArea(chart.ctx);
      } // Draw the points


      for (; i < ilen; ++i) {
        points[i].draw(area);
      }
    },

    /**
     * @protected
     */
    setHoverStyle: function setHoverStyle(point) {
      var model = point._model;
      var options = point._options;
      var getHoverColor = helpers$1.getHoverColor;
      point.$previousStyle = {
        backgroundColor: model.backgroundColor,
        borderColor: model.borderColor,
        borderWidth: model.borderWidth,
        radius: model.radius
      };
      model.backgroundColor = valueOrDefault$5(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));
      model.borderColor = valueOrDefault$5(options.hoverBorderColor, getHoverColor(options.borderColor));
      model.borderWidth = valueOrDefault$5(options.hoverBorderWidth, options.borderWidth);
      model.radius = valueOrDefault$5(options.hoverRadius, options.radius);
    }
  });
  var resolve$5 = helpers$1.options.resolve;

  core_defaults._set('polarArea', {
    scale: {
      type: 'radialLinear',
      angleLines: {
        display: false
      },
      gridLines: {
        circular: true
      },
      pointLabels: {
        display: false
      },
      ticks: {
        beginAtZero: true
      }
    },
    // Boolean - Whether to animate the rotation of the chart
    animation: {
      animateRotate: true,
      animateScale: true
    },
    startAngle: -0.5 * Math.PI,
    legendCallback: function legendCallback(chart) {
      var text = [];
      text.push('<ul class="' + chart.id + '-legend">');
      var data = chart.data;
      var datasets = data.datasets;
      var labels = data.labels;

      if (datasets.length) {
        for (var i = 0; i < datasets[0].data.length; ++i) {
          text.push('<li><span style="background-color:' + datasets[0].backgroundColor[i] + '"></span>');

          if (labels[i]) {
            text.push(labels[i]);
          }

          text.push('</li>');
        }
      }

      text.push('</ul>');
      return text.join('');
    },
    legend: {
      labels: {
        generateLabels: function generateLabels(chart) {
          var data = chart.data;

          if (data.labels.length && data.datasets.length) {
            return data.labels.map(function (label, i) {
              var meta = chart.getDatasetMeta(0);
              var ds = data.datasets[0];
              var arc = meta.data[i];
              var custom = arc.custom || {};
              var arcOpts = chart.options.elements.arc;
              var fill = resolve$5([custom.backgroundColor, ds.backgroundColor, arcOpts.backgroundColor], undefined, i);
              var stroke = resolve$5([custom.borderColor, ds.borderColor, arcOpts.borderColor], undefined, i);
              var bw = resolve$5([custom.borderWidth, ds.borderWidth, arcOpts.borderWidth], undefined, i);
              return {
                text: label,
                fillStyle: fill,
                strokeStyle: stroke,
                lineWidth: bw,
                hidden: isNaN(ds.data[i]) || meta.data[i].hidden,
                // Extra data used for toggling the correct item
                index: i
              };
            });
          }

          return [];
        }
      },
      onClick: function onClick(e, legendItem) {
        var index = legendItem.index;
        var chart = this.chart;
        var i, ilen, meta;

        for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {
          meta = chart.getDatasetMeta(i);
          meta.data[index].hidden = !meta.data[index].hidden;
        }

        chart.update();
      }
    },
    // Need to override these to give a nice default
    tooltips: {
      callbacks: {
        title: function title() {
          return '';
        },
        label: function label(item, data) {
          return data.labels[item.index] + ': ' + item.yLabel;
        }
      }
    }
  });

  var controller_polarArea = core_datasetController.extend({
    dataElementType: elements.Arc,
    linkScales: helpers$1.noop,
    update: function update(reset) {
      var me = this;
      var dataset = me.getDataset();
      var meta = me.getMeta();
      var start = me.chart.options.startAngle || 0;
      var starts = me._starts = [];
      var angles = me._angles = [];
      var arcs = meta.data;
      var i, ilen, angle;

      me._updateRadius();

      meta.count = me.countVisibleElements();

      for (i = 0, ilen = dataset.data.length; i < ilen; i++) {
        starts[i] = start;
        angle = me._computeAngle(i);
        angles[i] = angle;
        start += angle;
      }

      for (i = 0, ilen = arcs.length; i < ilen; ++i) {
        arcs[i]._options = me._resolveElementOptions(arcs[i], i);
        me.updateElement(arcs[i], i, reset);
      }
    },

    /**
     * @private
     */
    _updateRadius: function _updateRadius() {
      var me = this;
      var chart = me.chart;
      var chartArea = chart.chartArea;
      var opts = chart.options;
      var minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);
      chart.outerRadius = Math.max(minSize / 2, 0);
      chart.innerRadius = Math.max(opts.cutoutPercentage ? chart.outerRadius / 100 * opts.cutoutPercentage : 1, 0);
      chart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount();
      me.outerRadius = chart.outerRadius - chart.radiusLength * me.index;
      me.innerRadius = me.outerRadius - chart.radiusLength;
    },
    updateElement: function updateElement(arc, index, reset) {
      var me = this;
      var chart = me.chart;
      var dataset = me.getDataset();
      var opts = chart.options;
      var animationOpts = opts.animation;
      var scale = chart.scale;
      var labels = chart.data.labels;
      var centerX = scale.xCenter;
      var centerY = scale.yCenter; // var negHalfPI = -0.5 * Math.PI;

      var datasetStartAngle = opts.startAngle;
      var distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);
      var startAngle = me._starts[index];
      var endAngle = startAngle + (arc.hidden ? 0 : me._angles[index]);
      var resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);
      var options = arc._options || {};
      helpers$1.extend(arc, {
        // Utility
        _datasetIndex: me.index,
        _index: index,
        _scale: scale,
        // Desired view properties
        _model: {
          backgroundColor: options.backgroundColor,
          borderColor: options.borderColor,
          borderWidth: options.borderWidth,
          borderAlign: options.borderAlign,
          x: centerX,
          y: centerY,
          innerRadius: 0,
          outerRadius: reset ? resetRadius : distance,
          startAngle: reset && animationOpts.animateRotate ? datasetStartAngle : startAngle,
          endAngle: reset && animationOpts.animateRotate ? datasetStartAngle : endAngle,
          label: helpers$1.valueAtIndexOrDefault(labels, index, labels[index])
        }
      });
      arc.pivot();
    },
    countVisibleElements: function countVisibleElements() {
      var dataset = this.getDataset();
      var meta = this.getMeta();
      var count = 0;
      helpers$1.each(meta.data, function (element, index) {
        if (!isNaN(dataset.data[index]) && !element.hidden) {
          count++;
        }
      });
      return count;
    },

    /**
     * @protected
     */
    setHoverStyle: function setHoverStyle(arc) {
      var model = arc._model;
      var options = arc._options;
      var getHoverColor = helpers$1.getHoverColor;
      var valueOrDefault = helpers$1.valueOrDefault;
      arc.$previousStyle = {
        backgroundColor: model.backgroundColor,
        borderColor: model.borderColor,
        borderWidth: model.borderWidth
      };
      model.backgroundColor = valueOrDefault(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));
      model.borderColor = valueOrDefault(options.hoverBorderColor, getHoverColor(options.borderColor));
      model.borderWidth = valueOrDefault(options.hoverBorderWidth, options.borderWidth);
    },

    /**
     * @private
     */
    _resolveElementOptions: function _resolveElementOptions(arc, index) {
      var me = this;
      var chart = me.chart;
      var dataset = me.getDataset();
      var custom = arc.custom || {};
      var options = chart.options.elements.arc;
      var values = {};
      var i, ilen, key; // Scriptable options

      var context = {
        chart: chart,
        dataIndex: index,
        dataset: dataset,
        datasetIndex: me.index
      };
      var keys = ['backgroundColor', 'borderColor', 'borderWidth', 'borderAlign', 'hoverBackgroundColor', 'hoverBorderColor', 'hoverBorderWidth'];

      for (i = 0, ilen = keys.length; i < ilen; ++i) {
        key = keys[i];
        values[key] = resolve$5([custom[key], dataset[key], options[key]], context, index);
      }

      return values;
    },

    /**
     * @private
     */
    _computeAngle: function _computeAngle(index) {
      var me = this;
      var count = this.getMeta().count;
      var dataset = me.getDataset();
      var meta = me.getMeta();

      if (isNaN(dataset.data[index]) || meta.data[index].hidden) {
        return 0;
      } // Scriptable options


      var context = {
        chart: me.chart,
        dataIndex: index,
        dataset: dataset,
        datasetIndex: me.index
      };
      return resolve$5([me.chart.options.elements.arc.angle, 2 * Math.PI / count], context, index);
    }
  });

  core_defaults._set('pie', helpers$1.clone(core_defaults.doughnut));

  core_defaults._set('pie', {
    cutoutPercentage: 0
  }); // Pie charts are Doughnut chart with different defaults


  var controller_pie = controller_doughnut;
  var valueOrDefault$6 = helpers$1.valueOrDefault;
  var resolve$6 = helpers$1.options.resolve;

  core_defaults._set('radar', {
    scale: {
      type: 'radialLinear'
    },
    elements: {
      line: {
        tension: 0 // no bezier in radar

      }
    }
  });

  var controller_radar = core_datasetController.extend({
    datasetElementType: elements.Line,
    dataElementType: elements.Point,
    linkScales: helpers$1.noop,
    update: function update(reset) {
      var me = this;
      var meta = me.getMeta();
      var line = meta.dataset;
      var points = meta.data || [];
      var scale = me.chart.scale;
      var dataset = me.getDataset();
      var i, ilen; // Compatibility: If the properties are defined with only the old name, use those values

      if (dataset.tension !== undefined && dataset.lineTension === undefined) {
        dataset.lineTension = dataset.tension;
      } // Utility


      line._scale = scale;
      line._datasetIndex = me.index; // Data

      line._children = points;
      line._loop = true; // Model

      line._model = me._resolveLineOptions(line);
      line.pivot(); // Update Points

      for (i = 0, ilen = points.length; i < ilen; ++i) {
        me.updateElement(points[i], i, reset);
      } // Update bezier control points


      me.updateBezierControlPoints(); // Now pivot the point for animation

      for (i = 0, ilen = points.length; i < ilen; ++i) {
        points[i].pivot();
      }
    },
    updateElement: function updateElement(point, index, reset) {
      var me = this;
      var custom = point.custom || {};
      var dataset = me.getDataset();
      var scale = me.chart.scale;
      var pointPosition = scale.getPointPositionForValue(index, dataset.data[index]);

      var options = me._resolvePointOptions(point, index);

      var lineModel = me.getMeta().dataset._model;

      var x = reset ? scale.xCenter : pointPosition.x;
      var y = reset ? scale.yCenter : pointPosition.y; // Utility

      point._scale = scale;
      point._options = options;
      point._datasetIndex = me.index;
      point._index = index; // Desired view properties

      point._model = {
        x: x,
        // value not used in dataset scale, but we want a consistent API between scales
        y: y,
        skip: custom.skip || isNaN(x) || isNaN(y),
        // Appearance
        radius: options.radius,
        pointStyle: options.pointStyle,
        rotation: options.rotation,
        backgroundColor: options.backgroundColor,
        borderColor: options.borderColor,
        borderWidth: options.borderWidth,
        tension: valueOrDefault$6(custom.tension, lineModel ? lineModel.tension : 0),
        // Tooltip
        hitRadius: options.hitRadius
      };
    },

    /**
     * @private
     */
    _resolvePointOptions: function _resolvePointOptions(element, index) {
      var me = this;
      var chart = me.chart;
      var dataset = chart.data.datasets[me.index];
      var custom = element.custom || {};
      var options = chart.options.elements.point;
      var values = {};
      var i, ilen, key; // Scriptable options

      var context = {
        chart: chart,
        dataIndex: index,
        dataset: dataset,
        datasetIndex: me.index
      };
      var ELEMENT_OPTIONS = {
        backgroundColor: 'pointBackgroundColor',
        borderColor: 'pointBorderColor',
        borderWidth: 'pointBorderWidth',
        hitRadius: 'pointHitRadius',
        hoverBackgroundColor: 'pointHoverBackgroundColor',
        hoverBorderColor: 'pointHoverBorderColor',
        hoverBorderWidth: 'pointHoverBorderWidth',
        hoverRadius: 'pointHoverRadius',
        pointStyle: 'pointStyle',
        radius: 'pointRadius',
        rotation: 'pointRotation'
      };
      var keys = Object.keys(ELEMENT_OPTIONS);

      for (i = 0, ilen = keys.length; i < ilen; ++i) {
        key = keys[i];
        values[key] = resolve$6([custom[key], dataset[ELEMENT_OPTIONS[key]], dataset[key], options[key]], context, index);
      }

      return values;
    },

    /**
     * @private
     */
    _resolveLineOptions: function _resolveLineOptions(element) {
      var me = this;
      var chart = me.chart;
      var dataset = chart.data.datasets[me.index];
      var custom = element.custom || {};
      var options = chart.options.elements.line;
      var values = {};
      var i, ilen, key;
      var keys = ['backgroundColor', 'borderWidth', 'borderColor', 'borderCapStyle', 'borderDash', 'borderDashOffset', 'borderJoinStyle', 'fill'];

      for (i = 0, ilen = keys.length; i < ilen; ++i) {
        key = keys[i];
        values[key] = resolve$6([custom[key], dataset[key], options[key]]);
      }

      values.tension = valueOrDefault$6(dataset.lineTension, options.tension);
      return values;
    },
    updateBezierControlPoints: function updateBezierControlPoints() {
      var me = this;
      var meta = me.getMeta();
      var area = me.chart.chartArea;
      var points = meta.data || [];
      var i, ilen, model, controlPoints;

      function capControlPoint(pt, min, max) {
        return Math.max(Math.min(pt, max), min);
      }

      for (i = 0, ilen = points.length; i < ilen; ++i) {
        model = points[i]._model;
        controlPoints = helpers$1.splineCurve(helpers$1.previousItem(points, i, true)._model, model, helpers$1.nextItem(points, i, true)._model, model.tension); // Prevent the bezier going outside of the bounds of the graph

        model.controlPointPreviousX = capControlPoint(controlPoints.previous.x, area.left, area.right);
        model.controlPointPreviousY = capControlPoint(controlPoints.previous.y, area.top, area.bottom);
        model.controlPointNextX = capControlPoint(controlPoints.next.x, area.left, area.right);
        model.controlPointNextY = capControlPoint(controlPoints.next.y, area.top, area.bottom);
      }
    },
    setHoverStyle: function setHoverStyle(point) {
      var model = point._model;
      var options = point._options;
      var getHoverColor = helpers$1.getHoverColor;
      point.$previousStyle = {
        backgroundColor: model.backgroundColor,
        borderColor: model.borderColor,
        borderWidth: model.borderWidth,
        radius: model.radius
      };
      model.backgroundColor = valueOrDefault$6(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));
      model.borderColor = valueOrDefault$6(options.hoverBorderColor, getHoverColor(options.borderColor));
      model.borderWidth = valueOrDefault$6(options.hoverBorderWidth, options.borderWidth);
      model.radius = valueOrDefault$6(options.hoverRadius, options.radius);
    }
  });

  core_defaults._set('scatter', {
    hover: {
      mode: 'single'
    },
    scales: {
      xAxes: [{
        id: 'x-axis-1',
        // need an ID so datasets can reference the scale
        type: 'linear',
        // scatter should not use a category axis
        position: 'bottom'
      }],
      yAxes: [{
        id: 'y-axis-1',
        type: 'linear',
        position: 'left'
      }]
    },
    showLines: false,
    tooltips: {
      callbacks: {
        title: function title() {
          return ''; // doesn't make sense for scatter since data are formatted as a point
        },
        label: function label(item) {
          return '(' + item.xLabel + ', ' + item.yLabel + ')';
        }
      }
    }
  }); // Scatter charts use line controllers


  var controller_scatter = controller_line; // NOTE export a map in which the key represents the controller type, not
  // the class, and so must be CamelCase in order to be correctly retrieved
  // by the controller in core.controller.js (`controllers[meta.type]`).

  var controllers = {
    bar: controller_bar,
    bubble: controller_bubble,
    doughnut: controller_doughnut,
    horizontalBar: controller_horizontalBar,
    line: controller_line,
    polarArea: controller_polarArea,
    pie: controller_pie,
    radar: controller_radar,
    scatter: controller_scatter
  };
  /**
   * Helper function to get relative position for an event
   * @param {Event|IEvent} event - The event to get the position for
   * @param {Chart} chart - The chart
   * @returns {object} the event position
   */

  function getRelativePosition(e, chart) {
    if (e.native) {
      return {
        x: e.x,
        y: e.y
      };
    }

    return helpers$1.getRelativePosition(e, chart);
  }
  /**
   * Helper function to traverse all of the visible elements in the chart
   * @param {Chart} chart - the chart
   * @param {function} handler - the callback to execute for each visible item
   */


  function parseVisibleItems(chart, handler) {
    var datasets = chart.data.datasets;
    var meta, i, j, ilen, jlen;

    for (i = 0, ilen = datasets.length; i < ilen; ++i) {
      if (!chart.isDatasetVisible(i)) {
        continue;
      }

      meta = chart.getDatasetMeta(i);

      for (j = 0, jlen = meta.data.length; j < jlen; ++j) {
        var element = meta.data[j];

        if (!element._view.skip) {
          handler(element);
        }
      }
    }
  }
  /**
   * Helper function to get the items that intersect the event position
   * @param {ChartElement[]} items - elements to filter
   * @param {object} position - the point to be nearest to
   * @return {ChartElement[]} the nearest items
   */


  function getIntersectItems(chart, position) {
    var elements = [];
    parseVisibleItems(chart, function (element) {
      if (element.inRange(position.x, position.y)) {
        elements.push(element);
      }
    });
    return elements;
  }
  /**
   * Helper function to get the items nearest to the event position considering all visible items in teh chart
   * @param {Chart} chart - the chart to look at elements from
   * @param {object} position - the point to be nearest to
   * @param {boolean} intersect - if true, only consider items that intersect the position
   * @param {function} distanceMetric - function to provide the distance between points
   * @return {ChartElement[]} the nearest items
   */


  function getNearestItems(chart, position, intersect, distanceMetric) {
    var minDistance = Number.POSITIVE_INFINITY;
    var nearestItems = [];
    parseVisibleItems(chart, function (element) {
      if (intersect && !element.inRange(position.x, position.y)) {
        return;
      }

      var center = element.getCenterPoint();
      var distance = distanceMetric(position, center);

      if (distance < minDistance) {
        nearestItems = [element];
        minDistance = distance;
      } else if (distance === minDistance) {
        // Can have multiple items at the same distance in which case we sort by size
        nearestItems.push(element);
      }
    });
    return nearestItems;
  }
  /**
   * Get a distance metric function for two points based on the
   * axis mode setting
   * @param {string} axis - the axis mode. x|y|xy
   */


  function getDistanceMetricForAxis(axis) {
    var useX = axis.indexOf('x') !== -1;
    var useY = axis.indexOf('y') !== -1;
    return function (pt1, pt2) {
      var deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;
      var deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;
      return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));
    };
  }

  function indexMode(chart, e, options) {
    var position = getRelativePosition(e, chart); // Default axis for index mode is 'x' to match old behaviour

    options.axis = options.axis || 'x';
    var distanceMetric = getDistanceMetricForAxis(options.axis);
    var items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);
    var elements = [];

    if (!items.length) {
      return [];
    }

    chart.data.datasets.forEach(function (dataset, datasetIndex) {
      if (chart.isDatasetVisible(datasetIndex)) {
        var meta = chart.getDatasetMeta(datasetIndex);
        var element = meta.data[items[0]._index]; // don't count items that are skipped (null data)

        if (element && !element._view.skip) {
          elements.push(element);
        }
      }
    });
    return elements;
  }
  /**
   * @interface IInteractionOptions
   */

  /**
   * If true, only consider items that intersect the point
   * @name IInterfaceOptions#boolean
   * @type Boolean
   */

  /**
   * Contains interaction related functions
   * @namespace Chart.Interaction
   */


  var core_interaction = {
    // Helper function for different modes
    modes: {
      single: function single(chart, e) {
        var position = getRelativePosition(e, chart);
        var elements = [];
        parseVisibleItems(chart, function (element) {
          if (element.inRange(position.x, position.y)) {
            elements.push(element);
            return elements;
          }
        });
        return elements.slice(0, 1);
      },

      /**
       * @function Chart.Interaction.modes.label
       * @deprecated since version 2.4.0
       * @todo remove at version 3
       * @private
       */
      label: indexMode,

      /**
       * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something
       * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item
       * @function Chart.Interaction.modes.index
       * @since v2.4.0
       * @param {Chart} chart - the chart we are returning items from
       * @param {Event} e - the event we are find things at
       * @param {IInteractionOptions} options - options to use during interaction
       * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
       */
      index: indexMode,

      /**
       * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something
       * If the options.intersect is false, we find the nearest item and return the items in that dataset
       * @function Chart.Interaction.modes.dataset
       * @param {Chart} chart - the chart we are returning items from
       * @param {Event} e - the event we are find things at
       * @param {IInteractionOptions} options - options to use during interaction
       * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
       */
      dataset: function dataset(chart, e, options) {
        var position = getRelativePosition(e, chart);
        options.axis = options.axis || 'xy';
        var distanceMetric = getDistanceMetricForAxis(options.axis);
        var items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);

        if (items.length > 0) {
          items = chart.getDatasetMeta(items[0]._datasetIndex).data;
        }

        return items;
      },

      /**
       * @function Chart.Interaction.modes.x-axis
       * @deprecated since version 2.4.0. Use index mode and intersect == true
       * @todo remove at version 3
       * @private
       */
      'x-axis': function xAxis(chart, e) {
        return indexMode(chart, e, {
          intersect: false
        });
      },

      /**
       * Point mode returns all elements that hit test based on the event position
       * of the event
       * @function Chart.Interaction.modes.intersect
       * @param {Chart} chart - the chart we are returning items from
       * @param {Event} e - the event we are find things at
       * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
       */
      point: function point(chart, e) {
        var position = getRelativePosition(e, chart);
        return getIntersectItems(chart, position);
      },

      /**
       * nearest mode returns the element closest to the point
       * @function Chart.Interaction.modes.intersect
       * @param {Chart} chart - the chart we are returning items from
       * @param {Event} e - the event we are find things at
       * @param {IInteractionOptions} options - options to use
       * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
       */
      nearest: function nearest(chart, e, options) {
        var position = getRelativePosition(e, chart);
        options.axis = options.axis || 'xy';
        var distanceMetric = getDistanceMetricForAxis(options.axis);
        return getNearestItems(chart, position, options.intersect, distanceMetric);
      },

      /**
       * x mode returns the elements that hit-test at the current x coordinate
       * @function Chart.Interaction.modes.x
       * @param {Chart} chart - the chart we are returning items from
       * @param {Event} e - the event we are find things at
       * @param {IInteractionOptions} options - options to use
       * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
       */
      x: function x(chart, e, options) {
        var position = getRelativePosition(e, chart);
        var items = [];
        var intersectsItem = false;
        parseVisibleItems(chart, function (element) {
          if (element.inXRange(position.x)) {
            items.push(element);
          }

          if (element.inRange(position.x, position.y)) {
            intersectsItem = true;
          }
        }); // If we want to trigger on an intersect and we don't have any items
        // that intersect the position, return nothing

        if (options.intersect && !intersectsItem) {
          items = [];
        }

        return items;
      },

      /**
       * y mode returns the elements that hit-test at the current y coordinate
       * @function Chart.Interaction.modes.y
       * @param {Chart} chart - the chart we are returning items from
       * @param {Event} e - the event we are find things at
       * @param {IInteractionOptions} options - options to use
       * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
       */
      y: function y(chart, e, options) {
        var position = getRelativePosition(e, chart);
        var items = [];
        var intersectsItem = false;
        parseVisibleItems(chart, function (element) {
          if (element.inYRange(position.y)) {
            items.push(element);
          }

          if (element.inRange(position.x, position.y)) {
            intersectsItem = true;
          }
        }); // If we want to trigger on an intersect and we don't have any items
        // that intersect the position, return nothing

        if (options.intersect && !intersectsItem) {
          items = [];
        }

        return items;
      }
    }
  };

  function filterByPosition(array, position) {
    return helpers$1.where(array, function (v) {
      return v.position === position;
    });
  }

  function sortByWeight(array, reverse) {
    array.forEach(function (v, i) {
      v._tmpIndex_ = i;
      return v;
    });
    array.sort(function (a, b) {
      var v0 = reverse ? b : a;
      var v1 = reverse ? a : b;
      return v0.weight === v1.weight ? v0._tmpIndex_ - v1._tmpIndex_ : v0.weight - v1.weight;
    });
    array.forEach(function (v) {
      delete v._tmpIndex_;
    });
  }

  function findMaxPadding(boxes) {
    var top = 0;
    var left = 0;
    var bottom = 0;
    var right = 0;
    helpers$1.each(boxes, function (box) {
      if (box.getPadding) {
        var boxPadding = box.getPadding();
        top = Math.max(top, boxPadding.top);
        left = Math.max(left, boxPadding.left);
        bottom = Math.max(bottom, boxPadding.bottom);
        right = Math.max(right, boxPadding.right);
      }
    });
    return {
      top: top,
      left: left,
      bottom: bottom,
      right: right
    };
  }

  function addSizeByPosition(boxes, size) {
    helpers$1.each(boxes, function (box) {
      size[box.position] += box.isHorizontal() ? box.height : box.width;
    });
  }

  core_defaults._set('global', {
    layout: {
      padding: {
        top: 0,
        right: 0,
        bottom: 0,
        left: 0
      }
    }
  });
  /**
   * @interface ILayoutItem
   * @prop {string} position - The position of the item in the chart layout. Possible values are
   * 'left', 'top', 'right', 'bottom', and 'chartArea'
   * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area
   * @prop {boolean} fullWidth - if true, and the item is horizontal, then push vertical boxes down
   * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)
   * @prop {function} update - Takes two parameters: width and height. Returns size of item
   * @prop {function} getPadding -  Returns an object with padding on the edges
   * @prop {number} width - Width of item. Must be valid after update()
   * @prop {number} height - Height of item. Must be valid after update()
   * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update
   * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update
   * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update
   * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update
   */
  // The layout service is very self explanatory.  It's responsible for the layout within a chart.
  // Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need
  // It is this service's responsibility of carrying out that layout.


  var core_layouts = {
    defaults: {},

    /**
     * Register a box to a chart.
     * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.
     * @param {Chart} chart - the chart to use
     * @param {ILayoutItem} item - the item to add to be layed out
     */
    addBox: function addBox(chart, item) {
      if (!chart.boxes) {
        chart.boxes = [];
      } // initialize item with default values


      item.fullWidth = item.fullWidth || false;
      item.position = item.position || 'top';
      item.weight = item.weight || 0;
      chart.boxes.push(item);
    },

    /**
     * Remove a layoutItem from a chart
     * @param {Chart} chart - the chart to remove the box from
     * @param {ILayoutItem} layoutItem - the item to remove from the layout
     */
    removeBox: function removeBox(chart, layoutItem) {
      var index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;

      if (index !== -1) {
        chart.boxes.splice(index, 1);
      }
    },

    /**
     * Sets (or updates) options on the given `item`.
     * @param {Chart} chart - the chart in which the item lives (or will be added to)
     * @param {ILayoutItem} item - the item to configure with the given options
     * @param {object} options - the new item options.
     */
    configure: function configure(chart, item, options) {
      var props = ['fullWidth', 'position', 'weight'];
      var ilen = props.length;
      var i = 0;
      var prop;

      for (; i < ilen; ++i) {
        prop = props[i];

        if (options.hasOwnProperty(prop)) {
          item[prop] = options[prop];
        }
      }
    },

    /**
     * Fits boxes of the given chart into the given size by having each box measure itself
     * then running a fitting algorithm
     * @param {Chart} chart - the chart
     * @param {number} width - the width to fit into
     * @param {number} height - the height to fit into
     */
    update: function update(chart, width, height) {
      if (!chart) {
        return;
      }

      var layoutOptions = chart.options.layout || {};
      var padding = helpers$1.options.toPadding(layoutOptions.padding);
      var leftPadding = padding.left;
      var rightPadding = padding.right;
      var topPadding = padding.top;
      var bottomPadding = padding.bottom;
      var leftBoxes = filterByPosition(chart.boxes, 'left');
      var rightBoxes = filterByPosition(chart.boxes, 'right');
      var topBoxes = filterByPosition(chart.boxes, 'top');
      var bottomBoxes = filterByPosition(chart.boxes, 'bottom');
      var chartAreaBoxes = filterByPosition(chart.boxes, 'chartArea'); // Sort boxes by weight. A higher weight is further away from the chart area

      sortByWeight(leftBoxes, true);
      sortByWeight(rightBoxes, false);
      sortByWeight(topBoxes, true);
      sortByWeight(bottomBoxes, false);
      var verticalBoxes = leftBoxes.concat(rightBoxes);
      var horizontalBoxes = topBoxes.concat(bottomBoxes);
      var outerBoxes = verticalBoxes.concat(horizontalBoxes); // Essentially we now have any number of boxes on each of the 4 sides.
      // Our canvas looks like the following.
      // The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and
      // B1 is the bottom axis
      // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays
      // These locations are single-box locations only, when trying to register a chartArea location that is already taken,
      // an error will be thrown.
      //
      // |----------------------------------------------------|
      // |                  T1 (Full Width)                   |
      // |----------------------------------------------------|
      // |    |    |                 T2                  |    |
      // |    |----|-------------------------------------|----|
      // |    |    | C1 |                           | C2 |    |
      // |    |    |----|                           |----|    |
      // |    |    |                                     |    |
      // | L1 | L2 |           ChartArea (C0)            | R1 |
      // |    |    |                                     |    |
      // |    |    |----|                           |----|    |
      // |    |    | C3 |                           | C4 |    |
      // |    |----|-------------------------------------|----|
      // |    |    |                 B1                  |    |
      // |----------------------------------------------------|
      // |                  B2 (Full Width)                   |
      // |----------------------------------------------------|
      //
      // What we do to find the best sizing, we do the following
      // 1. Determine the minimum size of the chart area.
      // 2. Split the remaining width equally between each vertical axis
      // 3. Split the remaining height equally between each horizontal axis
      // 4. Give each layout the maximum size it can be. The layout will return it's minimum size
      // 5. Adjust the sizes of each axis based on it's minimum reported size.
      // 6. Refit each axis
      // 7. Position each axis in the final location
      // 8. Tell the chart the final location of the chart area
      // 9. Tell any axes that overlay the chart area the positions of the chart area
      // Step 1

      var chartWidth = width - leftPadding - rightPadding;
      var chartHeight = height - topPadding - bottomPadding;
      var chartAreaWidth = chartWidth / 2; // min 50%
      // Step 2

      var verticalBoxWidth = (width - chartAreaWidth) / verticalBoxes.length; // Step 3
      // TODO re-limit horizontal axis height (this limit has affected only padding calculation since PR 1837)
      // var horizontalBoxHeight = (height - chartAreaHeight) / horizontalBoxes.length;
      // Step 4

      var maxChartAreaWidth = chartWidth;
      var maxChartAreaHeight = chartHeight;
      var outerBoxSizes = {
        top: topPadding,
        left: leftPadding,
        bottom: bottomPadding,
        right: rightPadding
      };
      var minBoxSizes = [];
      var maxPadding;

      function getMinimumBoxSize(box) {
        var minSize;
        var isHorizontal = box.isHorizontal();

        if (isHorizontal) {
          minSize = box.update(box.fullWidth ? chartWidth : maxChartAreaWidth, chartHeight / 2);
          maxChartAreaHeight -= minSize.height;
        } else {
          minSize = box.update(verticalBoxWidth, maxChartAreaHeight);
          maxChartAreaWidth -= minSize.width;
        }

        minBoxSizes.push({
          horizontal: isHorizontal,
          width: minSize.width,
          box: box
        });
      }

      helpers$1.each(outerBoxes, getMinimumBoxSize); // If a horizontal box has padding, we move the left boxes over to avoid ugly charts (see issue #2478)

      maxPadding = findMaxPadding(outerBoxes); // At this point, maxChartAreaHeight and maxChartAreaWidth are the size the chart area could
      // be if the axes are drawn at their minimum sizes.
      // Steps 5 & 6
      // Function to fit a box

      function fitBox(box) {
        var minBoxSize = helpers$1.findNextWhere(minBoxSizes, function (minBox) {
          return minBox.box === box;
        });

        if (minBoxSize) {
          if (minBoxSize.horizontal) {
            var scaleMargin = {
              left: Math.max(outerBoxSizes.left, maxPadding.left),
              right: Math.max(outerBoxSizes.right, maxPadding.right),
              top: 0,
              bottom: 0
            }; // Don't use min size here because of label rotation. When the labels are rotated, their rotation highly depends
            // on the margin. Sometimes they need to increase in size slightly

            box.update(box.fullWidth ? chartWidth : maxChartAreaWidth, chartHeight / 2, scaleMargin);
          } else {
            box.update(minBoxSize.width, maxChartAreaHeight);
          }
        }
      } // Update, and calculate the left and right margins for the horizontal boxes


      helpers$1.each(verticalBoxes, fitBox);
      addSizeByPosition(verticalBoxes, outerBoxSizes); // Set the Left and Right margins for the horizontal boxes

      helpers$1.each(horizontalBoxes, fitBox);
      addSizeByPosition(horizontalBoxes, outerBoxSizes);

      function finalFitVerticalBox(box) {
        var minBoxSize = helpers$1.findNextWhere(minBoxSizes, function (minSize) {
          return minSize.box === box;
        });
        var scaleMargin = {
          left: 0,
          right: 0,
          top: outerBoxSizes.top,
          bottom: outerBoxSizes.bottom
        };

        if (minBoxSize) {
          box.update(minBoxSize.width, maxChartAreaHeight, scaleMargin);
        }
      } // Let the left layout know the final margin


      helpers$1.each(verticalBoxes, finalFitVerticalBox); // Recalculate because the size of each layout might have changed slightly due to the margins (label rotation for instance)

      outerBoxSizes = {
        top: topPadding,
        left: leftPadding,
        bottom: bottomPadding,
        right: rightPadding
      };
      addSizeByPosition(outerBoxes, outerBoxSizes); // We may be adding some padding to account for rotated x axis labels

      var leftPaddingAddition = Math.max(maxPadding.left - outerBoxSizes.left, 0);
      outerBoxSizes.left += leftPaddingAddition;
      outerBoxSizes.right += Math.max(maxPadding.right - outerBoxSizes.right, 0);
      var topPaddingAddition = Math.max(maxPadding.top - outerBoxSizes.top, 0);
      outerBoxSizes.top += topPaddingAddition;
      outerBoxSizes.bottom += Math.max(maxPadding.bottom - outerBoxSizes.bottom, 0); // Figure out if our chart area changed. This would occur if the dataset layout label rotation
      // changed due to the application of the margins in step 6. Since we can only get bigger, this is safe to do
      // without calling `fit` again

      var newMaxChartAreaHeight = height - outerBoxSizes.top - outerBoxSizes.bottom;
      var newMaxChartAreaWidth = width - outerBoxSizes.left - outerBoxSizes.right;

      if (newMaxChartAreaWidth !== maxChartAreaWidth || newMaxChartAreaHeight !== maxChartAreaHeight) {
        helpers$1.each(verticalBoxes, function (box) {
          box.height = newMaxChartAreaHeight;
        });
        helpers$1.each(horizontalBoxes, function (box) {
          if (!box.fullWidth) {
            box.width = newMaxChartAreaWidth;
          }
        });
        maxChartAreaHeight = newMaxChartAreaHeight;
        maxChartAreaWidth = newMaxChartAreaWidth;
      } // Step 7 - Position the boxes


      var left = leftPadding + leftPaddingAddition;
      var top = topPadding + topPaddingAddition;

      function placeBox(box) {
        if (box.isHorizontal()) {
          box.left = box.fullWidth ? leftPadding : outerBoxSizes.left;
          box.right = box.fullWidth ? width - rightPadding : outerBoxSizes.left + maxChartAreaWidth;
          box.top = top;
          box.bottom = top + box.height; // Move to next point

          top = box.bottom;
        } else {
          box.left = left;
          box.right = left + box.width;
          box.top = outerBoxSizes.top;
          box.bottom = outerBoxSizes.top + maxChartAreaHeight; // Move to next point

          left = box.right;
        }
      }

      helpers$1.each(leftBoxes.concat(topBoxes), placeBox); // Account for chart width and height

      left += maxChartAreaWidth;
      top += maxChartAreaHeight;
      helpers$1.each(rightBoxes, placeBox);
      helpers$1.each(bottomBoxes, placeBox); // Step 8

      chart.chartArea = {
        left: outerBoxSizes.left,
        top: outerBoxSizes.top,
        right: outerBoxSizes.left + maxChartAreaWidth,
        bottom: outerBoxSizes.top + maxChartAreaHeight
      }; // Step 9

      helpers$1.each(chartAreaBoxes, function (box) {
        box.left = chart.chartArea.left;
        box.top = chart.chartArea.top;
        box.right = chart.chartArea.right;
        box.bottom = chart.chartArea.bottom;
        box.update(maxChartAreaWidth, maxChartAreaHeight);
      });
    }
  };
  /**
   * Platform fallback implementation (minimal).
   * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939
   */

  var platform_basic = {
    acquireContext: function acquireContext(item) {
      if (item && item.canvas) {
        // Support for any object associated to a canvas (including a context2d)
        item = item.canvas;
      }

      return item && item.getContext('2d') || null;
    }
  };
  var platform_dom = "/*\n * DOM element rendering detection\n * https://davidwalsh.name/detect-node-insertion\n */\n@keyframes chartjs-render-animation {\n\tfrom { opacity: 0.99; }\n\tto { opacity: 1; }\n}\n\n.chartjs-render-monitor {\n\tanimation: chartjs-render-animation 0.001s;\n}\n\n/*\n * DOM element resizing detection\n * https://github.com/marcj/css-element-queries\n */\n.chartjs-size-monitor,\n.chartjs-size-monitor-expand,\n.chartjs-size-monitor-shrink {\n\tposition: absolute;\n\tdirection: ltr;\n\tleft: 0;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\toverflow: hidden;\n\tpointer-events: none;\n\tvisibility: hidden;\n\tz-index: -1;\n}\n\n.chartjs-size-monitor-expand > div {\n\tposition: absolute;\n\twidth: 1000000px;\n\theight: 1000000px;\n\tleft: 0;\n\ttop: 0;\n}\n\n.chartjs-size-monitor-shrink > div {\n\tposition: absolute;\n\twidth: 200%;\n\theight: 200%;\n\tleft: 0;\n\ttop: 0;\n}\n";
  var platform_dom$1 = /*#__PURE__*/Object.freeze({
    default: platform_dom
  });

  function getCjsExportFromNamespace(n) {
    return n && n.default || n;
  }

  var stylesheet = getCjsExportFromNamespace(platform_dom$1);
  var EXPANDO_KEY = '$chartjs';
  var CSS_PREFIX = 'chartjs-';
  var CSS_SIZE_MONITOR = CSS_PREFIX + 'size-monitor';
  var CSS_RENDER_MONITOR = CSS_PREFIX + 'render-monitor';
  var CSS_RENDER_ANIMATION = CSS_PREFIX + 'render-animation';
  var ANIMATION_START_EVENTS = ['animationstart', 'webkitAnimationStart'];
  /**
   * DOM event types -> Chart.js event types.
   * Note: only events with different types are mapped.
   * @see https://developer.mozilla.org/en-US/docs/Web/Events
   */

  var EVENT_TYPES = {
    touchstart: 'mousedown',
    touchmove: 'mousemove',
    touchend: 'mouseup',
    pointerenter: 'mouseenter',
    pointerdown: 'mousedown',
    pointermove: 'mousemove',
    pointerup: 'mouseup',
    pointerleave: 'mouseout',
    pointerout: 'mouseout'
  };
  /**
   * The "used" size is the final value of a dimension property after all calculations have
   * been performed. This method uses the computed style of `element` but returns undefined
   * if the computed style is not expressed in pixels. That can happen in some cases where
   * `element` has a size relative to its parent and this last one is not yet displayed,
   * for example because of `display: none` on a parent node.
   * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value
   * @returns {number} Size in pixels or undefined if unknown.
   */

  function readUsedSize(element, property) {
    var value = helpers$1.getStyle(element, property);
    var matches = value && value.match(/^(\d+)(\.\d+)?px$/);
    return matches ? Number(matches[1]) : undefined;
  }
  /**
   * Initializes the canvas style and render size without modifying the canvas display size,
   * since responsiveness is handled by the controller.resize() method. The config is used
   * to determine the aspect ratio to apply in case no explicit height has been specified.
   */


  function initCanvas(canvas, config) {
    var style = canvas.style; // NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it
    // returns null or '' if no explicit value has been set to the canvas attribute.

    var renderHeight = canvas.getAttribute('height');
    var renderWidth = canvas.getAttribute('width'); // Chart.js modifies some canvas values that we want to restore on destroy

    canvas[EXPANDO_KEY] = {
      initial: {
        height: renderHeight,
        width: renderWidth,
        style: {
          display: style.display,
          height: style.height,
          width: style.width
        }
      }
    }; // Force canvas to display as block to avoid extra space caused by inline
    // elements, which would interfere with the responsive resize process.
    // https://github.com/chartjs/Chart.js/issues/2538

    style.display = style.display || 'block';

    if (renderWidth === null || renderWidth === '') {
      var displayWidth = readUsedSize(canvas, 'width');

      if (displayWidth !== undefined) {
        canvas.width = displayWidth;
      }
    }

    if (renderHeight === null || renderHeight === '') {
      if (canvas.style.height === '') {
        // If no explicit render height and style height, let's apply the aspect ratio,
        // which one can be specified by the user but also by charts as default option
        // (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.
        canvas.height = canvas.width / (config.options.aspectRatio || 2);
      } else {
        var displayHeight = readUsedSize(canvas, 'height');

        if (displayWidth !== undefined) {
          canvas.height = displayHeight;
        }
      }
    }

    return canvas;
  }
  /**
   * Detects support for options object argument in addEventListener.
   * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support
   * @private
   */


  var supportsEventListenerOptions = function () {
    var supports = false;

    try {
      var options = Object.defineProperty({}, 'passive', {
        // eslint-disable-next-line getter-return
        get: function get() {
          supports = true;
        }
      });
      window.addEventListener('e', null, options);
    } catch (e) {// continue regardless of error
    }

    return supports;
  }(); // Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.
  // https://github.com/chartjs/Chart.js/issues/4287


  var eventListenerOptions = supportsEventListenerOptions ? {
    passive: true
  } : false;

  function addListener(node, type, listener) {
    node.addEventListener(type, listener, eventListenerOptions);
  }

  function removeListener(node, type, listener) {
    node.removeEventListener(type, listener, eventListenerOptions);
  }

  function createEvent(type, chart, x, y, nativeEvent) {
    return {
      type: type,
      chart: chart,
      native: nativeEvent || null,
      x: x !== undefined ? x : null,
      y: y !== undefined ? y : null
    };
  }

  function fromNativeEvent(event, chart) {
    var type = EVENT_TYPES[event.type] || event.type;
    var pos = helpers$1.getRelativePosition(event, chart);
    return createEvent(type, chart, pos.x, pos.y, event);
  }

  function throttled(fn, thisArg) {
    var ticking = false;
    var args = [];
    return function () {
      args = Array.prototype.slice.call(arguments);
      thisArg = thisArg || this;

      if (!ticking) {
        ticking = true;
        helpers$1.requestAnimFrame.call(window, function () {
          ticking = false;
          fn.apply(thisArg, args);
        });
      }
    };
  }

  function createDiv(cls) {
    var el = document.createElement('div');
    el.className = cls || '';
    return el;
  } // Implementation based on https://github.com/marcj/css-element-queries


  function createResizer(handler) {
    var maxSize = 1000000; // NOTE(SB) Don't use innerHTML because it could be considered unsafe.
    // https://github.com/chartjs/Chart.js/issues/5902

    var resizer = createDiv(CSS_SIZE_MONITOR);
    var expand = createDiv(CSS_SIZE_MONITOR + '-expand');
    var shrink = createDiv(CSS_SIZE_MONITOR + '-shrink');
    expand.appendChild(createDiv());
    shrink.appendChild(createDiv());
    resizer.appendChild(expand);
    resizer.appendChild(shrink);

    resizer._reset = function () {
      expand.scrollLeft = maxSize;
      expand.scrollTop = maxSize;
      shrink.scrollLeft = maxSize;
      shrink.scrollTop = maxSize;
    };

    var onScroll = function onScroll() {
      resizer._reset();

      handler();
    };

    addListener(expand, 'scroll', onScroll.bind(expand, 'expand'));
    addListener(shrink, 'scroll', onScroll.bind(shrink, 'shrink'));
    return resizer;
  } // https://davidwalsh.name/detect-node-insertion


  function watchForRender(node, handler) {
    var expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});

    var proxy = expando.renderProxy = function (e) {
      if (e.animationName === CSS_RENDER_ANIMATION) {
        handler();
      }
    };

    helpers$1.each(ANIMATION_START_EVENTS, function (type) {
      addListener(node, type, proxy);
    }); // #4737: Chrome might skip the CSS animation when the CSS_RENDER_MONITOR class
    // is removed then added back immediately (same animation frame?). Accessing the
    // `offsetParent` property will force a reflow and re-evaluate the CSS animation.
    // https://gist.github.com/paulirish/5d52fb081b3570c81e3a#box-metrics
    // https://github.com/chartjs/Chart.js/issues/4737

    expando.reflow = !!node.offsetParent;
    node.classList.add(CSS_RENDER_MONITOR);
  }

  function unwatchForRender(node) {
    var expando = node[EXPANDO_KEY] || {};
    var proxy = expando.renderProxy;

    if (proxy) {
      helpers$1.each(ANIMATION_START_EVENTS, function (type) {
        removeListener(node, type, proxy);
      });
      delete expando.renderProxy;
    }

    node.classList.remove(CSS_RENDER_MONITOR);
  }

  function addResizeListener(node, listener, chart) {
    var expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {}); // Let's keep track of this added resizer and thus avoid DOM query when removing it.

    var resizer = expando.resizer = createResizer(throttled(function () {
      if (expando.resizer) {
        var container = chart.options.maintainAspectRatio && node.parentNode;
        var w = container ? container.clientWidth : 0;
        listener(createEvent('resize', chart));

        if (container && container.clientWidth < w && chart.canvas) {
          // If the container size shrank during chart resize, let's assume
          // scrollbar appeared. So we resize again with the scrollbar visible -
          // effectively making chart smaller and the scrollbar hidden again.
          // Because we are inside `throttled`, and currently `ticking`, scroll
          // events are ignored during this whole 2 resize process.
          // If we assumed wrong and something else happened, we are resizing
          // twice in a frame (potential performance issue)
          listener(createEvent('resize', chart));
        }
      }
    })); // The resizer needs to be attached to the node parent, so we first need to be
    // sure that `node` is attached to the DOM before injecting the resizer element.

    watchForRender(node, function () {
      if (expando.resizer) {
        var container = node.parentNode;

        if (container && container !== resizer.parentNode) {
          container.insertBefore(resizer, container.firstChild);
        } // The container size might have changed, let's reset the resizer state.


        resizer._reset();
      }
    });
  }

  function removeResizeListener(node) {
    var expando = node[EXPANDO_KEY] || {};
    var resizer = expando.resizer;
    delete expando.resizer;
    unwatchForRender(node);

    if (resizer && resizer.parentNode) {
      resizer.parentNode.removeChild(resizer);
    }
  }

  function injectCSS(platform, css) {
    // https://stackoverflow.com/q/3922139
    var style = platform._style || document.createElement('style');

    if (!platform._style) {
      platform._style = style;
      css = '/* Chart.js */\n' + css;
      style.setAttribute('type', 'text/css');
      document.getElementsByTagName('head')[0].appendChild(style);
    }

    style.appendChild(document.createTextNode(css));
  }

  var platform_dom$2 = {
    /**
     * When `true`, prevents the automatic injection of the stylesheet required to
     * correctly detect when the chart is added to the DOM and then resized. This
     * switch has been added to allow external stylesheet (`dist/Chart(.min)?.js`)
     * to be manually imported to make this library compatible with any CSP.
     * See https://github.com/chartjs/Chart.js/issues/5208
     */
    disableCSSInjection: false,

    /**
     * This property holds whether this platform is enabled for the current environment.
     * Currently used by platform.js to select the proper implementation.
     * @private
     */
    _enabled: typeof window !== 'undefined' && typeof document !== 'undefined',

    /**
     * @private
     */
    _ensureLoaded: function _ensureLoaded() {
      if (this._loaded) {
        return;
      }

      this._loaded = true; // https://github.com/chartjs/Chart.js/issues/5208

      if (!this.disableCSSInjection) {
        injectCSS(this, stylesheet);
      }
    },
    acquireContext: function acquireContext(item, config) {
      if (typeof item === 'string') {
        item = document.getElementById(item);
      } else if (item.length) {
        // Support for array based queries (such as jQuery)
        item = item[0];
      }

      if (item && item.canvas) {
        // Support for any object associated to a canvas (including a context2d)
        item = item.canvas;
      } // To prevent canvas fingerprinting, some add-ons undefine the getContext
      // method, for example: https://github.com/kkapsner/CanvasBlocker
      // https://github.com/chartjs/Chart.js/issues/2807


      var context = item && item.getContext && item.getContext('2d'); // Load platform resources on first chart creation, to make possible to change
      // platform options after importing the library (e.g. `disableCSSInjection`).

      this._ensureLoaded(); // `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the item is
      // inside an iframe or when running in a protected environment. We could guess the
      // types from their toString() value but let's keep things flexible and assume it's
      // a sufficient condition if the item has a context2D which has item as `canvas`.
      // https://github.com/chartjs/Chart.js/issues/3887
      // https://github.com/chartjs/Chart.js/issues/4102
      // https://github.com/chartjs/Chart.js/issues/4152


      if (context && context.canvas === item) {
        initCanvas(item, config);
        return context;
      }

      return null;
    },
    releaseContext: function releaseContext(context) {
      var canvas = context.canvas;

      if (!canvas[EXPANDO_KEY]) {
        return;
      }

      var initial = canvas[EXPANDO_KEY].initial;
      ['height', 'width'].forEach(function (prop) {
        var value = initial[prop];

        if (helpers$1.isNullOrUndef(value)) {
          canvas.removeAttribute(prop);
        } else {
          canvas.setAttribute(prop, value);
        }
      });
      helpers$1.each(initial.style || {}, function (value, key) {
        canvas.style[key] = value;
      }); // The canvas render size might have been changed (and thus the state stack discarded),
      // we can't use save() and restore() to restore the initial state. So make sure that at
      // least the canvas context is reset to the default state by setting the canvas width.
      // https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html
      // eslint-disable-next-line no-self-assign

      canvas.width = canvas.width;
      delete canvas[EXPANDO_KEY];
    },
    addEventListener: function addEventListener(chart, type, listener) {
      var canvas = chart.canvas;

      if (type === 'resize') {
        // Note: the resize event is not supported on all browsers.
        addResizeListener(canvas, listener, chart);
        return;
      }

      var expando = listener[EXPANDO_KEY] || (listener[EXPANDO_KEY] = {});
      var proxies = expando.proxies || (expando.proxies = {});

      var proxy = proxies[chart.id + '_' + type] = function (event) {
        listener(fromNativeEvent(event, chart));
      };

      addListener(canvas, type, proxy);
    },
    removeEventListener: function removeEventListener(chart, type, listener) {
      var canvas = chart.canvas;

      if (type === 'resize') {
        // Note: the resize event is not supported on all browsers.
        removeResizeListener(canvas);
        return;
      }

      var expando = listener[EXPANDO_KEY] || {};
      var proxies = expando.proxies || {};
      var proxy = proxies[chart.id + '_' + type];

      if (!proxy) {
        return;
      }

      removeListener(canvas, type, proxy);
    }
  }; // DEPRECATIONS

  /**
   * Provided for backward compatibility, use EventTarget.addEventListener instead.
   * EventTarget.addEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+
   * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener
   * @function Chart.helpers.addEvent
   * @deprecated since version 2.7.0
   * @todo remove at version 3
   * @private
   */

  helpers$1.addEvent = addListener;
  /**
   * Provided for backward compatibility, use EventTarget.removeEventListener instead.
   * EventTarget.removeEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+
   * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener
   * @function Chart.helpers.removeEvent
   * @deprecated since version 2.7.0
   * @todo remove at version 3
   * @private
   */

  helpers$1.removeEvent = removeListener; // @TODO Make possible to select another platform at build time.

  var implementation = platform_dom$2._enabled ? platform_dom$2 : platform_basic;
  /**
   * @namespace Chart.platform
   * @see https://chartjs.gitbooks.io/proposals/content/Platform.html
   * @since 2.4.0
   */

  var platform = helpers$1.extend({
    /**
     * @since 2.7.0
     */
    initialize: function initialize() {},

    /**
     * Called at chart construction time, returns a context2d instance implementing
     * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.
     * @param {*} item - The native item from which to acquire context (platform specific)
     * @param {object} options - The chart options
     * @returns {CanvasRenderingContext2D} context2d instance
     */
    acquireContext: function acquireContext() {},

    /**
     * Called at chart destruction time, releases any resources associated to the context
     * previously returned by the acquireContext() method.
     * @param {CanvasRenderingContext2D} context - The context2d instance
     * @returns {boolean} true if the method succeeded, else false
     */
    releaseContext: function releaseContext() {},

    /**
     * Registers the specified listener on the given chart.
     * @param {Chart} chart - Chart from which to listen for event
     * @param {string} type - The ({@link IEvent}) type to listen for
     * @param {function} listener - Receives a notification (an object that implements
     * the {@link IEvent} interface) when an event of the specified type occurs.
     */
    addEventListener: function addEventListener() {},

    /**
     * Removes the specified listener previously registered with addEventListener.
     * @param {Chart} chart - Chart from which to remove the listener
     * @param {string} type - The ({@link IEvent}) type to remove
     * @param {function} listener - The listener function to remove from the event target.
     */
    removeEventListener: function removeEventListener() {}
  }, implementation);

  core_defaults._set('global', {
    plugins: {}
  });
  /**
   * The plugin service singleton
   * @namespace Chart.plugins
   * @since 2.1.0
   */


  var core_plugins = {
    /**
     * Globally registered plugins.
     * @private
     */
    _plugins: [],

    /**
     * This identifier is used to invalidate the descriptors cache attached to each chart
     * when a global plugin is registered or unregistered. In this case, the cache ID is
     * incremented and descriptors are regenerated during following API calls.
     * @private
     */
    _cacheId: 0,

    /**
     * Registers the given plugin(s) if not already registered.
     * @param {IPlugin[]|IPlugin} plugins plugin instance(s).
     */
    register: function register(plugins) {
      var p = this._plugins;
      [].concat(plugins).forEach(function (plugin) {
        if (p.indexOf(plugin) === -1) {
          p.push(plugin);
        }
      });
      this._cacheId++;
    },

    /**
     * Unregisters the given plugin(s) only if registered.
     * @param {IPlugin[]|IPlugin} plugins plugin instance(s).
     */
    unregister: function unregister(plugins) {
      var p = this._plugins;
      [].concat(plugins).forEach(function (plugin) {
        var idx = p.indexOf(plugin);

        if (idx !== -1) {
          p.splice(idx, 1);
        }
      });
      this._cacheId++;
    },

    /**
     * Remove all registered plugins.
     * @since 2.1.5
     */
    clear: function clear() {
      this._plugins = [];
      this._cacheId++;
    },

    /**
     * Returns the number of registered plugins?
     * @returns {number}
     * @since 2.1.5
     */
    count: function count() {
      return this._plugins.length;
    },

    /**
     * Returns all registered plugin instances.
     * @returns {IPlugin[]} array of plugin objects.
     * @since 2.1.5
     */
    getAll: function getAll() {
      return this._plugins;
    },

    /**
     * Calls enabled plugins for `chart` on the specified hook and with the given args.
     * This method immediately returns as soon as a plugin explicitly returns false. The
     * returned value can be used, for instance, to interrupt the current action.
     * @param {Chart} chart - The chart instance for which plugins should be called.
     * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').
     * @param {Array} [args] - Extra arguments to apply to the hook call.
     * @returns {boolean} false if any of the plugins return false, else returns true.
     */
    notify: function notify(chart, hook, args) {
      var descriptors = this.descriptors(chart);
      var ilen = descriptors.length;
      var i, descriptor, plugin, params, method;

      for (i = 0; i < ilen; ++i) {
        descriptor = descriptors[i];
        plugin = descriptor.plugin;
        method = plugin[hook];

        if (typeof method === 'function') {
          params = [chart].concat(args || []);
          params.push(descriptor.options);

          if (method.apply(plugin, params) === false) {
            return false;
          }
        }
      }

      return true;
    },

    /**
     * Returns descriptors of enabled plugins for the given chart.
     * @returns {object[]} [{ plugin, options }]
     * @private
     */
    descriptors: function descriptors(chart) {
      var cache = chart.$plugins || (chart.$plugins = {});

      if (cache.id === this._cacheId) {
        return cache.descriptors;
      }

      var plugins = [];
      var descriptors = [];
      var config = chart && chart.config || {};
      var options = config.options && config.options.plugins || {};

      this._plugins.concat(config.plugins || []).forEach(function (plugin) {
        var idx = plugins.indexOf(plugin);

        if (idx !== -1) {
          return;
        }

        var id = plugin.id;
        var opts = options[id];

        if (opts === false) {
          return;
        }

        if (opts === true) {
          opts = helpers$1.clone(core_defaults.global.plugins[id]);
        }

        plugins.push(plugin);
        descriptors.push({
          plugin: plugin,
          options: opts || {}
        });
      });

      cache.descriptors = descriptors;
      cache.id = this._cacheId;
      return descriptors;
    },

    /**
     * Invalidates cache for the given chart: descriptors hold a reference on plugin option,
     * but in some cases, this reference can be changed by the user when updating options.
     * https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167
     * @private
     */
    _invalidate: function _invalidate(chart) {
      delete chart.$plugins;
    }
  };
  var core_scaleService = {
    // Scale registration object. Extensions can register new scale types (such as log or DB scales) and then
    // use the new chart options to grab the correct scale
    constructors: {},
    // Use a registration function so that we can move to an ES6 map when we no longer need to support
    // old browsers
    // Scale config defaults
    defaults: {},
    registerScaleType: function registerScaleType(type, scaleConstructor, scaleDefaults) {
      this.constructors[type] = scaleConstructor;
      this.defaults[type] = helpers$1.clone(scaleDefaults);
    },
    getScaleConstructor: function getScaleConstructor(type) {
      return this.constructors.hasOwnProperty(type) ? this.constructors[type] : undefined;
    },
    getScaleDefaults: function getScaleDefaults(type) {
      // Return the scale defaults merged with the global settings so that we always use the latest ones
      return this.defaults.hasOwnProperty(type) ? helpers$1.merge({}, [core_defaults.scale, this.defaults[type]]) : {};
    },
    updateScaleDefaults: function updateScaleDefaults(type, additions) {
      var me = this;

      if (me.defaults.hasOwnProperty(type)) {
        me.defaults[type] = helpers$1.extend(me.defaults[type], additions);
      }
    },
    addScalesToLayout: function addScalesToLayout(chart) {
      // Adds each scale to the chart.boxes array to be sized accordingly
      helpers$1.each(chart.scales, function (scale) {
        // Set ILayoutItem parameters for backwards compatibility
        scale.fullWidth = scale.options.fullWidth;
        scale.position = scale.options.position;
        scale.weight = scale.options.weight;
        core_layouts.addBox(chart, scale);
      });
    }
  };
  var valueOrDefault$7 = helpers$1.valueOrDefault;

  core_defaults._set('global', {
    tooltips: {
      enabled: true,
      custom: null,
      mode: 'nearest',
      position: 'average',
      intersect: true,
      backgroundColor: 'rgba(0,0,0,0.8)',
      titleFontStyle: 'bold',
      titleSpacing: 2,
      titleMarginBottom: 6,
      titleFontColor: '#fff',
      titleAlign: 'left',
      bodySpacing: 2,
      bodyFontColor: '#fff',
      bodyAlign: 'left',
      footerFontStyle: 'bold',
      footerSpacing: 2,
      footerMarginTop: 6,
      footerFontColor: '#fff',
      footerAlign: 'left',
      yPadding: 6,
      xPadding: 6,
      caretPadding: 2,
      caretSize: 5,
      cornerRadius: 6,
      multiKeyBackground: '#fff',
      displayColors: true,
      borderColor: 'rgba(0,0,0,0)',
      borderWidth: 0,
      callbacks: {
        // Args are: (tooltipItems, data)
        beforeTitle: helpers$1.noop,
        title: function title(tooltipItems, data) {
          var title = '';
          var labels = data.labels;
          var labelCount = labels ? labels.length : 0;

          if (tooltipItems.length > 0) {
            var item = tooltipItems[0];

            if (item.label) {
              title = item.label;
            } else if (item.xLabel) {
              title = item.xLabel;
            } else if (labelCount > 0 && item.index < labelCount) {
              title = labels[item.index];
            }
          }

          return title;
        },
        afterTitle: helpers$1.noop,
        // Args are: (tooltipItems, data)
        beforeBody: helpers$1.noop,
        // Args are: (tooltipItem, data)
        beforeLabel: helpers$1.noop,
        label: function label(tooltipItem, data) {
          var label = data.datasets[tooltipItem.datasetIndex].label || '';

          if (label) {
            label += ': ';
          }

          if (!helpers$1.isNullOrUndef(tooltipItem.value)) {
            label += tooltipItem.value;
          } else {
            label += tooltipItem.yLabel;
          }

          return label;
        },
        labelColor: function labelColor(tooltipItem, chart) {
          var meta = chart.getDatasetMeta(tooltipItem.datasetIndex);
          var activeElement = meta.data[tooltipItem.index];
          var view = activeElement._view;
          return {
            borderColor: view.borderColor,
            backgroundColor: view.backgroundColor
          };
        },
        labelTextColor: function labelTextColor() {
          return this._options.bodyFontColor;
        },
        afterLabel: helpers$1.noop,
        // Args are: (tooltipItems, data)
        afterBody: helpers$1.noop,
        // Args are: (tooltipItems, data)
        beforeFooter: helpers$1.noop,
        footer: helpers$1.noop,
        afterFooter: helpers$1.noop
      }
    }
  });

  var positioners = {
    /**
     * Average mode places the tooltip at the average position of the elements shown
     * @function Chart.Tooltip.positioners.average
     * @param elements {ChartElement[]} the elements being displayed in the tooltip
     * @returns {object} tooltip position
     */
    average: function average(elements) {
      if (!elements.length) {
        return false;
      }

      var i, len;
      var x = 0;
      var y = 0;
      var count = 0;

      for (i = 0, len = elements.length; i < len; ++i) {
        var el = elements[i];

        if (el && el.hasValue()) {
          var pos = el.tooltipPosition();
          x += pos.x;
          y += pos.y;
          ++count;
        }
      }

      return {
        x: x / count,
        y: y / count
      };
    },

    /**
     * Gets the tooltip position nearest of the item nearest to the event position
     * @function Chart.Tooltip.positioners.nearest
     * @param elements {Chart.Element[]} the tooltip elements
     * @param eventPosition {object} the position of the event in canvas coordinates
     * @returns {object} the tooltip position
     */
    nearest: function nearest(elements, eventPosition) {
      var x = eventPosition.x;
      var y = eventPosition.y;
      var minDistance = Number.POSITIVE_INFINITY;
      var i, len, nearestElement;

      for (i = 0, len = elements.length; i < len; ++i) {
        var el = elements[i];

        if (el && el.hasValue()) {
          var center = el.getCenterPoint();
          var d = helpers$1.distanceBetweenPoints(eventPosition, center);

          if (d < minDistance) {
            minDistance = d;
            nearestElement = el;
          }
        }
      }

      if (nearestElement) {
        var tp = nearestElement.tooltipPosition();
        x = tp.x;
        y = tp.y;
      }

      return {
        x: x,
        y: y
      };
    }
  }; // Helper to push or concat based on if the 2nd parameter is an array or not

  function pushOrConcat(base, toPush) {
    if (toPush) {
      if (helpers$1.isArray(toPush)) {
        // base = base.concat(toPush);
        Array.prototype.push.apply(base, toPush);
      } else {
        base.push(toPush);
      }
    }

    return base;
  }
  /**
   * Returns array of strings split by newline
   * @param {string} value - The value to split by newline.
   * @returns {string[]} value if newline present - Returned from String split() method
   * @function
   */


  function splitNewlines(str) {
    if ((typeof str === 'string' || str instanceof String) && str.indexOf('\n') > -1) {
      return str.split('\n');
    }

    return str;
  }
  /**
   * Private helper to create a tooltip item model
   * @param element - the chart element (point, arc, bar) to create the tooltip item for
   * @return new tooltip item
   */


  function createTooltipItem(element) {
    var xScale = element._xScale;
    var yScale = element._yScale || element._scale; // handle radar || polarArea charts

    var index = element._index;
    var datasetIndex = element._datasetIndex;

    var controller = element._chart.getDatasetMeta(datasetIndex).controller;

    var indexScale = controller._getIndexScale();

    var valueScale = controller._getValueScale();

    return {
      xLabel: xScale ? xScale.getLabelForIndex(index, datasetIndex) : '',
      yLabel: yScale ? yScale.getLabelForIndex(index, datasetIndex) : '',
      label: indexScale ? '' + indexScale.getLabelForIndex(index, datasetIndex) : '',
      value: valueScale ? '' + valueScale.getLabelForIndex(index, datasetIndex) : '',
      index: index,
      datasetIndex: datasetIndex,
      x: element._model.x,
      y: element._model.y
    };
  }
  /**
   * Helper to get the reset model for the tooltip
   * @param tooltipOpts {object} the tooltip options
   */


  function getBaseModel(tooltipOpts) {
    var globalDefaults = core_defaults.global;
    return {
      // Positioning
      xPadding: tooltipOpts.xPadding,
      yPadding: tooltipOpts.yPadding,
      xAlign: tooltipOpts.xAlign,
      yAlign: tooltipOpts.yAlign,
      // Body
      bodyFontColor: tooltipOpts.bodyFontColor,
      _bodyFontFamily: valueOrDefault$7(tooltipOpts.bodyFontFamily, globalDefaults.defaultFontFamily),
      _bodyFontStyle: valueOrDefault$7(tooltipOpts.bodyFontStyle, globalDefaults.defaultFontStyle),
      _bodyAlign: tooltipOpts.bodyAlign,
      bodyFontSize: valueOrDefault$7(tooltipOpts.bodyFontSize, globalDefaults.defaultFontSize),
      bodySpacing: tooltipOpts.bodySpacing,
      // Title
      titleFontColor: tooltipOpts.titleFontColor,
      _titleFontFamily: valueOrDefault$7(tooltipOpts.titleFontFamily, globalDefaults.defaultFontFamily),
      _titleFontStyle: valueOrDefault$7(tooltipOpts.titleFontStyle, globalDefaults.defaultFontStyle),
      titleFontSize: valueOrDefault$7(tooltipOpts.titleFontSize, globalDefaults.defaultFontSize),
      _titleAlign: tooltipOpts.titleAlign,
      titleSpacing: tooltipOpts.titleSpacing,
      titleMarginBottom: tooltipOpts.titleMarginBottom,
      // Footer
      footerFontColor: tooltipOpts.footerFontColor,
      _footerFontFamily: valueOrDefault$7(tooltipOpts.footerFontFamily, globalDefaults.defaultFontFamily),
      _footerFontStyle: valueOrDefault$7(tooltipOpts.footerFontStyle, globalDefaults.defaultFontStyle),
      footerFontSize: valueOrDefault$7(tooltipOpts.footerFontSize, globalDefaults.defaultFontSize),
      _footerAlign: tooltipOpts.footerAlign,
      footerSpacing: tooltipOpts.footerSpacing,
      footerMarginTop: tooltipOpts.footerMarginTop,
      // Appearance
      caretSize: tooltipOpts.caretSize,
      cornerRadius: tooltipOpts.cornerRadius,
      backgroundColor: tooltipOpts.backgroundColor,
      opacity: 0,
      legendColorBackground: tooltipOpts.multiKeyBackground,
      displayColors: tooltipOpts.displayColors,
      borderColor: tooltipOpts.borderColor,
      borderWidth: tooltipOpts.borderWidth
    };
  }
  /**
   * Get the size of the tooltip
   */


  function getTooltipSize(tooltip, model) {
    var ctx = tooltip._chart.ctx;
    var height = model.yPadding * 2; // Tooltip Padding

    var width = 0; // Count of all lines in the body

    var body = model.body;
    var combinedBodyLength = body.reduce(function (count, bodyItem) {
      return count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length;
    }, 0);
    combinedBodyLength += model.beforeBody.length + model.afterBody.length;
    var titleLineCount = model.title.length;
    var footerLineCount = model.footer.length;
    var titleFontSize = model.titleFontSize;
    var bodyFontSize = model.bodyFontSize;
    var footerFontSize = model.footerFontSize;
    height += titleLineCount * titleFontSize; // Title Lines

    height += titleLineCount ? (titleLineCount - 1) * model.titleSpacing : 0; // Title Line Spacing

    height += titleLineCount ? model.titleMarginBottom : 0; // Title's bottom Margin

    height += combinedBodyLength * bodyFontSize; // Body Lines

    height += combinedBodyLength ? (combinedBodyLength - 1) * model.bodySpacing : 0; // Body Line Spacing

    height += footerLineCount ? model.footerMarginTop : 0; // Footer Margin

    height += footerLineCount * footerFontSize; // Footer Lines

    height += footerLineCount ? (footerLineCount - 1) * model.footerSpacing : 0; // Footer Line Spacing
    // Title width

    var widthPadding = 0;

    var maxLineWidth = function maxLineWidth(line) {
      width = Math.max(width, ctx.measureText(line).width + widthPadding);
    };

    ctx.font = helpers$1.fontString(titleFontSize, model._titleFontStyle, model._titleFontFamily);
    helpers$1.each(model.title, maxLineWidth); // Body width

    ctx.font = helpers$1.fontString(bodyFontSize, model._bodyFontStyle, model._bodyFontFamily);
    helpers$1.each(model.beforeBody.concat(model.afterBody), maxLineWidth); // Body lines may include some extra width due to the color box

    widthPadding = model.displayColors ? bodyFontSize + 2 : 0;
    helpers$1.each(body, function (bodyItem) {
      helpers$1.each(bodyItem.before, maxLineWidth);
      helpers$1.each(bodyItem.lines, maxLineWidth);
      helpers$1.each(bodyItem.after, maxLineWidth);
    }); // Reset back to 0

    widthPadding = 0; // Footer width

    ctx.font = helpers$1.fontString(footerFontSize, model._footerFontStyle, model._footerFontFamily);
    helpers$1.each(model.footer, maxLineWidth); // Add padding

    width += 2 * model.xPadding;
    return {
      width: width,
      height: height
    };
  }
  /**
   * Helper to get the alignment of a tooltip given the size
   */


  function determineAlignment(tooltip, size) {
    var model = tooltip._model;
    var chart = tooltip._chart;
    var chartArea = tooltip._chart.chartArea;
    var xAlign = 'center';
    var yAlign = 'center';

    if (model.y < size.height) {
      yAlign = 'top';
    } else if (model.y > chart.height - size.height) {
      yAlign = 'bottom';
    }

    var lf, rf; // functions to determine left, right alignment

    var olf, orf; // functions to determine if left/right alignment causes tooltip to go outside chart

    var yf; // function to get the y alignment if the tooltip goes outside of the left or right edges

    var midX = (chartArea.left + chartArea.right) / 2;
    var midY = (chartArea.top + chartArea.bottom) / 2;

    if (yAlign === 'center') {
      lf = function lf(x) {
        return x <= midX;
      };

      rf = function rf(x) {
        return x > midX;
      };
    } else {
      lf = function lf(x) {
        return x <= size.width / 2;
      };

      rf = function rf(x) {
        return x >= chart.width - size.width / 2;
      };
    }

    olf = function olf(x) {
      return x + size.width + model.caretSize + model.caretPadding > chart.width;
    };

    orf = function orf(x) {
      return x - size.width - model.caretSize - model.caretPadding < 0;
    };

    yf = function yf(y) {
      return y <= midY ? 'top' : 'bottom';
    };

    if (lf(model.x)) {
      xAlign = 'left'; // Is tooltip too wide and goes over the right side of the chart.?

      if (olf(model.x)) {
        xAlign = 'center';
        yAlign = yf(model.y);
      }
    } else if (rf(model.x)) {
      xAlign = 'right'; // Is tooltip too wide and goes outside left edge of canvas?

      if (orf(model.x)) {
        xAlign = 'center';
        yAlign = yf(model.y);
      }
    }

    var opts = tooltip._options;
    return {
      xAlign: opts.xAlign ? opts.xAlign : xAlign,
      yAlign: opts.yAlign ? opts.yAlign : yAlign
    };
  }
  /**
   * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment
   */


  function getBackgroundPoint(vm, size, alignment, chart) {
    // Background Position
    var x = vm.x;
    var y = vm.y;
    var caretSize = vm.caretSize;
    var caretPadding = vm.caretPadding;
    var cornerRadius = vm.cornerRadius;
    var xAlign = alignment.xAlign;
    var yAlign = alignment.yAlign;
    var paddingAndSize = caretSize + caretPadding;
    var radiusAndPadding = cornerRadius + caretPadding;

    if (xAlign === 'right') {
      x -= size.width;
    } else if (xAlign === 'center') {
      x -= size.width / 2;

      if (x + size.width > chart.width) {
        x = chart.width - size.width;
      }

      if (x < 0) {
        x = 0;
      }
    }

    if (yAlign === 'top') {
      y += paddingAndSize;
    } else if (yAlign === 'bottom') {
      y -= size.height + paddingAndSize;
    } else {
      y -= size.height / 2;
    }

    if (yAlign === 'center') {
      if (xAlign === 'left') {
        x += paddingAndSize;
      } else if (xAlign === 'right') {
        x -= paddingAndSize;
      }
    } else if (xAlign === 'left') {
      x -= radiusAndPadding;
    } else if (xAlign === 'right') {
      x += radiusAndPadding;
    }

    return {
      x: x,
      y: y
    };
  }

  function getAlignedX(vm, align) {
    return align === 'center' ? vm.x + vm.width / 2 : align === 'right' ? vm.x + vm.width - vm.xPadding : vm.x + vm.xPadding;
  }
  /**
   * Helper to build before and after body lines
   */


  function getBeforeAfterBodyLines(callback) {
    return pushOrConcat([], splitNewlines(callback));
  }

  var exports$3 = core_element.extend({
    initialize: function initialize() {
      this._model = getBaseModel(this._options);
      this._lastActive = [];
    },
    // Get the title
    // Args are: (tooltipItem, data)
    getTitle: function getTitle() {
      var me = this;
      var opts = me._options;
      var callbacks = opts.callbacks;
      var beforeTitle = callbacks.beforeTitle.apply(me, arguments);
      var title = callbacks.title.apply(me, arguments);
      var afterTitle = callbacks.afterTitle.apply(me, arguments);
      var lines = [];
      lines = pushOrConcat(lines, splitNewlines(beforeTitle));
      lines = pushOrConcat(lines, splitNewlines(title));
      lines = pushOrConcat(lines, splitNewlines(afterTitle));
      return lines;
    },
    // Args are: (tooltipItem, data)
    getBeforeBody: function getBeforeBody() {
      return getBeforeAfterBodyLines(this._options.callbacks.beforeBody.apply(this, arguments));
    },
    // Args are: (tooltipItem, data)
    getBody: function getBody(tooltipItems, data) {
      var me = this;
      var callbacks = me._options.callbacks;
      var bodyItems = [];
      helpers$1.each(tooltipItems, function (tooltipItem) {
        var bodyItem = {
          before: [],
          lines: [],
          after: []
        };
        pushOrConcat(bodyItem.before, splitNewlines(callbacks.beforeLabel.call(me, tooltipItem, data)));
        pushOrConcat(bodyItem.lines, callbacks.label.call(me, tooltipItem, data));
        pushOrConcat(bodyItem.after, splitNewlines(callbacks.afterLabel.call(me, tooltipItem, data)));
        bodyItems.push(bodyItem);
      });
      return bodyItems;
    },
    // Args are: (tooltipItem, data)
    getAfterBody: function getAfterBody() {
      return getBeforeAfterBodyLines(this._options.callbacks.afterBody.apply(this, arguments));
    },
    // Get the footer and beforeFooter and afterFooter lines
    // Args are: (tooltipItem, data)
    getFooter: function getFooter() {
      var me = this;
      var callbacks = me._options.callbacks;
      var beforeFooter = callbacks.beforeFooter.apply(me, arguments);
      var footer = callbacks.footer.apply(me, arguments);
      var afterFooter = callbacks.afterFooter.apply(me, arguments);
      var lines = [];
      lines = pushOrConcat(lines, splitNewlines(beforeFooter));
      lines = pushOrConcat(lines, splitNewlines(footer));
      lines = pushOrConcat(lines, splitNewlines(afterFooter));
      return lines;
    },
    update: function update(changed) {
      var me = this;
      var opts = me._options; // Need to regenerate the model because its faster than using extend and it is necessary due to the optimization in Chart.Element.transition
      // that does _view = _model if ease === 1. This causes the 2nd tooltip update to set properties in both the view and model at the same time
      // which breaks any animations.

      var existingModel = me._model;
      var model = me._model = getBaseModel(opts);
      var active = me._active;
      var data = me._data; // In the case where active.length === 0 we need to keep these at existing values for good animations

      var alignment = {
        xAlign: existingModel.xAlign,
        yAlign: existingModel.yAlign
      };
      var backgroundPoint = {
        x: existingModel.x,
        y: existingModel.y
      };
      var tooltipSize = {
        width: existingModel.width,
        height: existingModel.height
      };
      var tooltipPosition = {
        x: existingModel.caretX,
        y: existingModel.caretY
      };
      var i, len;

      if (active.length) {
        model.opacity = 1;
        var labelColors = [];
        var labelTextColors = [];
        tooltipPosition = positioners[opts.position].call(me, active, me._eventPosition);
        var tooltipItems = [];

        for (i = 0, len = active.length; i < len; ++i) {
          tooltipItems.push(createTooltipItem(active[i]));
        } // If the user provided a filter function, use it to modify the tooltip items


        if (opts.filter) {
          tooltipItems = tooltipItems.filter(function (a) {
            return opts.filter(a, data);
          });
        } // If the user provided a sorting function, use it to modify the tooltip items


        if (opts.itemSort) {
          tooltipItems = tooltipItems.sort(function (a, b) {
            return opts.itemSort(a, b, data);
          });
        } // Determine colors for boxes


        helpers$1.each(tooltipItems, function (tooltipItem) {
          labelColors.push(opts.callbacks.labelColor.call(me, tooltipItem, me._chart));
          labelTextColors.push(opts.callbacks.labelTextColor.call(me, tooltipItem, me._chart));
        }); // Build the Text Lines

        model.title = me.getTitle(tooltipItems, data);
        model.beforeBody = me.getBeforeBody(tooltipItems, data);
        model.body = me.getBody(tooltipItems, data);
        model.afterBody = me.getAfterBody(tooltipItems, data);
        model.footer = me.getFooter(tooltipItems, data); // Initial positioning and colors

        model.x = tooltipPosition.x;
        model.y = tooltipPosition.y;
        model.caretPadding = opts.caretPadding;
        model.labelColors = labelColors;
        model.labelTextColors = labelTextColors; // data points

        model.dataPoints = tooltipItems; // We need to determine alignment of the tooltip

        tooltipSize = getTooltipSize(this, model);
        alignment = determineAlignment(this, tooltipSize); // Final Size and Position

        backgroundPoint = getBackgroundPoint(model, tooltipSize, alignment, me._chart);
      } else {
        model.opacity = 0;
      }

      model.xAlign = alignment.xAlign;
      model.yAlign = alignment.yAlign;
      model.x = backgroundPoint.x;
      model.y = backgroundPoint.y;
      model.width = tooltipSize.width;
      model.height = tooltipSize.height; // Point where the caret on the tooltip points to

      model.caretX = tooltipPosition.x;
      model.caretY = tooltipPosition.y;
      me._model = model;

      if (changed && opts.custom) {
        opts.custom.call(me, model);
      }

      return me;
    },
    drawCaret: function drawCaret(tooltipPoint, size) {
      var ctx = this._chart.ctx;
      var vm = this._view;
      var caretPosition = this.getCaretPosition(tooltipPoint, size, vm);
      ctx.lineTo(caretPosition.x1, caretPosition.y1);
      ctx.lineTo(caretPosition.x2, caretPosition.y2);
      ctx.lineTo(caretPosition.x3, caretPosition.y3);
    },
    getCaretPosition: function getCaretPosition(tooltipPoint, size, vm) {
      var x1, x2, x3, y1, y2, y3;
      var caretSize = vm.caretSize;
      var cornerRadius = vm.cornerRadius;
      var xAlign = vm.xAlign;
      var yAlign = vm.yAlign;
      var ptX = tooltipPoint.x;
      var ptY = tooltipPoint.y;
      var width = size.width;
      var height = size.height;

      if (yAlign === 'center') {
        y2 = ptY + height / 2;

        if (xAlign === 'left') {
          x1 = ptX;
          x2 = x1 - caretSize;
          x3 = x1;
          y1 = y2 + caretSize;
          y3 = y2 - caretSize;
        } else {
          x1 = ptX + width;
          x2 = x1 + caretSize;
          x3 = x1;
          y1 = y2 - caretSize;
          y3 = y2 + caretSize;
        }
      } else {
        if (xAlign === 'left') {
          x2 = ptX + cornerRadius + caretSize;
          x1 = x2 - caretSize;
          x3 = x2 + caretSize;
        } else if (xAlign === 'right') {
          x2 = ptX + width - cornerRadius - caretSize;
          x1 = x2 - caretSize;
          x3 = x2 + caretSize;
        } else {
          x2 = vm.caretX;
          x1 = x2 - caretSize;
          x3 = x2 + caretSize;
        }

        if (yAlign === 'top') {
          y1 = ptY;
          y2 = y1 - caretSize;
          y3 = y1;
        } else {
          y1 = ptY + height;
          y2 = y1 + caretSize;
          y3 = y1; // invert drawing order

          var tmp = x3;
          x3 = x1;
          x1 = tmp;
        }
      }

      return {
        x1: x1,
        x2: x2,
        x3: x3,
        y1: y1,
        y2: y2,
        y3: y3
      };
    },
    drawTitle: function drawTitle(pt, vm, ctx) {
      var title = vm.title;

      if (title.length) {
        pt.x = getAlignedX(vm, vm._titleAlign);
        ctx.textAlign = vm._titleAlign;
        ctx.textBaseline = 'top';
        var titleFontSize = vm.titleFontSize;
        var titleSpacing = vm.titleSpacing;
        ctx.fillStyle = vm.titleFontColor;
        ctx.font = helpers$1.fontString(titleFontSize, vm._titleFontStyle, vm._titleFontFamily);
        var i, len;

        for (i = 0, len = title.length; i < len; ++i) {
          ctx.fillText(title[i], pt.x, pt.y);
          pt.y += titleFontSize + titleSpacing; // Line Height and spacing

          if (i + 1 === title.length) {
            pt.y += vm.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing
          }
        }
      }
    },
    drawBody: function drawBody(pt, vm, ctx) {
      var bodyFontSize = vm.bodyFontSize;
      var bodySpacing = vm.bodySpacing;
      var bodyAlign = vm._bodyAlign;
      var body = vm.body;
      var drawColorBoxes = vm.displayColors;
      var labelColors = vm.labelColors;
      var xLinePadding = 0;
      var colorX = drawColorBoxes ? getAlignedX(vm, 'left') : 0;
      var textColor;
      ctx.textAlign = bodyAlign;
      ctx.textBaseline = 'top';
      ctx.font = helpers$1.fontString(bodyFontSize, vm._bodyFontStyle, vm._bodyFontFamily);
      pt.x = getAlignedX(vm, bodyAlign); // Before Body

      var fillLineOfText = function fillLineOfText(line) {
        ctx.fillText(line, pt.x + xLinePadding, pt.y);
        pt.y += bodyFontSize + bodySpacing;
      }; // Before body lines


      ctx.fillStyle = vm.bodyFontColor;
      helpers$1.each(vm.beforeBody, fillLineOfText);
      xLinePadding = drawColorBoxes && bodyAlign !== 'right' ? bodyAlign === 'center' ? bodyFontSize / 2 + 1 : bodyFontSize + 2 : 0; // Draw body lines now

      helpers$1.each(body, function (bodyItem, i) {
        textColor = vm.labelTextColors[i];
        ctx.fillStyle = textColor;
        helpers$1.each(bodyItem.before, fillLineOfText);
        helpers$1.each(bodyItem.lines, function (line) {
          // Draw Legend-like boxes if needed
          if (drawColorBoxes) {
            // Fill a white rect so that colours merge nicely if the opacity is < 1
            ctx.fillStyle = vm.legendColorBackground;
            ctx.fillRect(colorX, pt.y, bodyFontSize, bodyFontSize); // Border

            ctx.lineWidth = 1;
            ctx.strokeStyle = labelColors[i].borderColor;
            ctx.strokeRect(colorX, pt.y, bodyFontSize, bodyFontSize); // Inner square

            ctx.fillStyle = labelColors[i].backgroundColor;
            ctx.fillRect(colorX + 1, pt.y + 1, bodyFontSize - 2, bodyFontSize - 2);
            ctx.fillStyle = textColor;
          }

          fillLineOfText(line);
        });
        helpers$1.each(bodyItem.after, fillLineOfText);
      }); // Reset back to 0 for after body

      xLinePadding = 0; // After body lines

      helpers$1.each(vm.afterBody, fillLineOfText);
      pt.y -= bodySpacing; // Remove last body spacing
    },
    drawFooter: function drawFooter(pt, vm, ctx) {
      var footer = vm.footer;

      if (footer.length) {
        pt.x = getAlignedX(vm, vm._footerAlign);
        pt.y += vm.footerMarginTop;
        ctx.textAlign = vm._footerAlign;
        ctx.textBaseline = 'top';
        ctx.fillStyle = vm.footerFontColor;
        ctx.font = helpers$1.fontString(vm.footerFontSize, vm._footerFontStyle, vm._footerFontFamily);
        helpers$1.each(footer, function (line) {
          ctx.fillText(line, pt.x, pt.y);
          pt.y += vm.footerFontSize + vm.footerSpacing;
        });
      }
    },
    drawBackground: function drawBackground(pt, vm, ctx, tooltipSize) {
      ctx.fillStyle = vm.backgroundColor;
      ctx.strokeStyle = vm.borderColor;
      ctx.lineWidth = vm.borderWidth;
      var xAlign = vm.xAlign;
      var yAlign = vm.yAlign;
      var x = pt.x;
      var y = pt.y;
      var width = tooltipSize.width;
      var height = tooltipSize.height;
      var radius = vm.cornerRadius;
      ctx.beginPath();
      ctx.moveTo(x + radius, y);

      if (yAlign === 'top') {
        this.drawCaret(pt, tooltipSize);
      }

      ctx.lineTo(x + width - radius, y);
      ctx.quadraticCurveTo(x + width, y, x + width, y + radius);

      if (yAlign === 'center' && xAlign === 'right') {
        this.drawCaret(pt, tooltipSize);
      }

      ctx.lineTo(x + width, y + height - radius);
      ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);

      if (yAlign === 'bottom') {
        this.drawCaret(pt, tooltipSize);
      }

      ctx.lineTo(x + radius, y + height);
      ctx.quadraticCurveTo(x, y + height, x, y + height - radius);

      if (yAlign === 'center' && xAlign === 'left') {
        this.drawCaret(pt, tooltipSize);
      }

      ctx.lineTo(x, y + radius);
      ctx.quadraticCurveTo(x, y, x + radius, y);
      ctx.closePath();
      ctx.fill();

      if (vm.borderWidth > 0) {
        ctx.stroke();
      }
    },
    draw: function draw() {
      var ctx = this._chart.ctx;
      var vm = this._view;

      if (vm.opacity === 0) {
        return;
      }

      var tooltipSize = {
        width: vm.width,
        height: vm.height
      };
      var pt = {
        x: vm.x,
        y: vm.y
      }; // IE11/Edge does not like very small opacities, so snap to 0

      var opacity = Math.abs(vm.opacity < 1e-3) ? 0 : vm.opacity; // Truthy/falsey value for empty tooltip

      var hasTooltipContent = vm.title.length || vm.beforeBody.length || vm.body.length || vm.afterBody.length || vm.footer.length;

      if (this._options.enabled && hasTooltipContent) {
        ctx.save();
        ctx.globalAlpha = opacity; // Draw Background

        this.drawBackground(pt, vm, ctx, tooltipSize); // Draw Title, Body, and Footer

        pt.y += vm.yPadding; // Titles

        this.drawTitle(pt, vm, ctx); // Body

        this.drawBody(pt, vm, ctx); // Footer

        this.drawFooter(pt, vm, ctx);
        ctx.restore();
      }
    },

    /**
     * Handle an event
     * @private
     * @param {IEvent} event - The event to handle
     * @returns {boolean} true if the tooltip changed
     */
    handleEvent: function handleEvent(e) {
      var me = this;
      var options = me._options;
      var changed = false;
      me._lastActive = me._lastActive || []; // Find Active Elements for tooltips

      if (e.type === 'mouseout') {
        me._active = [];
      } else {
        me._active = me._chart.getElementsAtEventForMode(e, options.mode, options);
      } // Remember Last Actives


      changed = !helpers$1.arrayEquals(me._active, me._lastActive); // Only handle target event on tooltip change

      if (changed) {
        me._lastActive = me._active;

        if (options.enabled || options.custom) {
          me._eventPosition = {
            x: e.x,
            y: e.y
          };
          me.update(true);
          me.pivot();
        }
      }

      return changed;
    }
  });
  /**
   * @namespace Chart.Tooltip.positioners
   */

  var positioners_1 = positioners;
  var core_tooltip = exports$3;
  core_tooltip.positioners = positioners_1;
  var valueOrDefault$8 = helpers$1.valueOrDefault;

  core_defaults._set('global', {
    elements: {},
    events: ['mousemove', 'mouseout', 'click', 'touchstart', 'touchmove'],
    hover: {
      onHover: null,
      mode: 'nearest',
      intersect: true,
      animationDuration: 400
    },
    onClick: null,
    maintainAspectRatio: true,
    responsive: true,
    responsiveAnimationDuration: 0
  });
  /**
   * Recursively merge the given config objects representing the `scales` option
   * by incorporating scale defaults in `xAxes` and `yAxes` array items, then
   * returns a deep copy of the result, thus doesn't alter inputs.
   */


  function mergeScaleConfig() {
    return helpers$1.merge({}, [].slice.call(arguments), {
      merger: function merger(key, target, source, options) {
        if (key === 'xAxes' || key === 'yAxes') {
          var slen = source[key].length;
          var i, type, scale;

          if (!target[key]) {
            target[key] = [];
          }

          for (i = 0; i < slen; ++i) {
            scale = source[key][i];
            type = valueOrDefault$8(scale.type, key === 'xAxes' ? 'category' : 'linear');

            if (i >= target[key].length) {
              target[key].push({});
            }

            if (!target[key][i].type || scale.type && scale.type !== target[key][i].type) {
              // new/untyped scale or type changed: let's apply the new defaults
              // then merge source scale to correctly overwrite the defaults.
              helpers$1.merge(target[key][i], [core_scaleService.getScaleDefaults(type), scale]);
            } else {
              // scales type are the same
              helpers$1.merge(target[key][i], scale);
            }
          }
        } else {
          helpers$1._merger(key, target, source, options);
        }
      }
    });
  }
  /**
   * Recursively merge the given config objects as the root options by handling
   * default scale options for the `scales` and `scale` properties, then returns
   * a deep copy of the result, thus doesn't alter inputs.
   */


  function mergeConfig() {
    return helpers$1.merge({}, [].slice.call(arguments), {
      merger: function merger(key, target, source, options) {
        var tval = target[key] || {};
        var sval = source[key];

        if (key === 'scales') {
          // scale config merging is complex. Add our own function here for that
          target[key] = mergeScaleConfig(tval, sval);
        } else if (key === 'scale') {
          // used in polar area & radar charts since there is only one scale
          target[key] = helpers$1.merge(tval, [core_scaleService.getScaleDefaults(sval.type), sval]);
        } else {
          helpers$1._merger(key, target, source, options);
        }
      }
    });
  }

  function initConfig(config) {
    config = config || {}; // Do NOT use mergeConfig for the data object because this method merges arrays
    // and so would change references to labels and datasets, preventing data updates.

    var data = config.data = config.data || {};
    data.datasets = data.datasets || [];
    data.labels = data.labels || [];
    config.options = mergeConfig(core_defaults.global, core_defaults[config.type], config.options || {});
    return config;
  }

  function updateConfig(chart) {
    var newOptions = chart.options;
    helpers$1.each(chart.scales, function (scale) {
      core_layouts.removeBox(chart, scale);
    });
    newOptions = mergeConfig(core_defaults.global, core_defaults[chart.config.type], newOptions);
    chart.options = chart.config.options = newOptions;
    chart.ensureScalesHaveIDs();
    chart.buildOrUpdateScales(); // Tooltip

    chart.tooltip._options = newOptions.tooltips;
    chart.tooltip.initialize();
  }

  function positionIsHorizontal(position) {
    return position === 'top' || position === 'bottom';
  }

  var Chart = function Chart(item, config) {
    this.construct(item, config);
    return this;
  };

  helpers$1.extend(Chart.prototype,
  /** @lends Chart */
  {
    /**
     * @private
     */
    construct: function construct(item, config) {
      var me = this;
      config = initConfig(config);
      var context = platform.acquireContext(item, config);
      var canvas = context && context.canvas;
      var height = canvas && canvas.height;
      var width = canvas && canvas.width;
      me.id = helpers$1.uid();
      me.ctx = context;
      me.canvas = canvas;
      me.config = config;
      me.width = width;
      me.height = height;
      me.aspectRatio = height ? width / height : null;
      me.options = config.options;
      me._bufferedRender = false;
      /**
       * Provided for backward compatibility, Chart and Chart.Controller have been merged,
       * the "instance" still need to be defined since it might be called from plugins.
       * @prop Chart#chart
       * @deprecated since version 2.6.0
       * @todo remove at version 3
       * @private
       */

      me.chart = me;
      me.controller = me; // chart.chart.controller #inception
      // Add the chart instance to the global namespace

      Chart.instances[me.id] = me; // Define alias to the config data: `chart.data === chart.config.data`

      Object.defineProperty(me, 'data', {
        get: function get() {
          return me.config.data;
        },
        set: function set(value) {
          me.config.data = value;
        }
      });

      if (!context || !canvas) {
        // The given item is not a compatible context2d element, let's return before finalizing
        // the chart initialization but after setting basic chart / controller properties that
        // can help to figure out that the chart is not valid (e.g chart.canvas !== null);
        // https://github.com/chartjs/Chart.js/issues/2807
        console.error("Failed to create chart: can't acquire context from the given item");
        return;
      }

      me.initialize();
      me.update();
    },

    /**
     * @private
     */
    initialize: function initialize() {
      var me = this; // Before init plugin notification

      core_plugins.notify(me, 'beforeInit');
      helpers$1.retinaScale(me, me.options.devicePixelRatio);
      me.bindEvents();

      if (me.options.responsive) {
        // Initial resize before chart draws (must be silent to preserve initial animations).
        me.resize(true);
      } // Make sure scales have IDs and are built before we build any controllers.


      me.ensureScalesHaveIDs();
      me.buildOrUpdateScales();
      me.initToolTip(); // After init plugin notification

      core_plugins.notify(me, 'afterInit');
      return me;
    },
    clear: function clear() {
      helpers$1.canvas.clear(this);
      return this;
    },
    stop: function stop() {
      // Stops any current animation loop occurring
      core_animations.cancelAnimation(this);
      return this;
    },
    resize: function resize(silent) {
      var me = this;
      var options = me.options;
      var canvas = me.canvas;
      var aspectRatio = options.maintainAspectRatio && me.aspectRatio || null; // the canvas render width and height will be casted to integers so make sure that
      // the canvas display style uses the same integer values to avoid blurring effect.
      // Set to 0 instead of canvas.size because the size defaults to 300x150 if the element is collapsed

      var newWidth = Math.max(0, Math.floor(helpers$1.getMaximumWidth(canvas)));
      var newHeight = Math.max(0, Math.floor(aspectRatio ? newWidth / aspectRatio : helpers$1.getMaximumHeight(canvas)));

      if (me.width === newWidth && me.height === newHeight) {
        return;
      }

      canvas.width = me.width = newWidth;
      canvas.height = me.height = newHeight;
      canvas.style.width = newWidth + 'px';
      canvas.style.height = newHeight + 'px';
      helpers$1.retinaScale(me, options.devicePixelRatio);

      if (!silent) {
        // Notify any plugins about the resize
        var newSize = {
          width: newWidth,
          height: newHeight
        };
        core_plugins.notify(me, 'resize', [newSize]); // Notify of resize

        if (options.onResize) {
          options.onResize(me, newSize);
        }

        me.stop();
        me.update({
          duration: options.responsiveAnimationDuration
        });
      }
    },
    ensureScalesHaveIDs: function ensureScalesHaveIDs() {
      var options = this.options;
      var scalesOptions = options.scales || {};
      var scaleOptions = options.scale;
      helpers$1.each(scalesOptions.xAxes, function (xAxisOptions, index) {
        xAxisOptions.id = xAxisOptions.id || 'x-axis-' + index;
      });
      helpers$1.each(scalesOptions.yAxes, function (yAxisOptions, index) {
        yAxisOptions.id = yAxisOptions.id || 'y-axis-' + index;
      });

      if (scaleOptions) {
        scaleOptions.id = scaleOptions.id || 'scale';
      }
    },

    /**
     * Builds a map of scale ID to scale object for future lookup.
     */
    buildOrUpdateScales: function buildOrUpdateScales() {
      var me = this;
      var options = me.options;
      var scales = me.scales || {};
      var items = [];
      var updated = Object.keys(scales).reduce(function (obj, id) {
        obj[id] = false;
        return obj;
      }, {});

      if (options.scales) {
        items = items.concat((options.scales.xAxes || []).map(function (xAxisOptions) {
          return {
            options: xAxisOptions,
            dtype: 'category',
            dposition: 'bottom'
          };
        }), (options.scales.yAxes || []).map(function (yAxisOptions) {
          return {
            options: yAxisOptions,
            dtype: 'linear',
            dposition: 'left'
          };
        }));
      }

      if (options.scale) {
        items.push({
          options: options.scale,
          dtype: 'radialLinear',
          isDefault: true,
          dposition: 'chartArea'
        });
      }

      helpers$1.each(items, function (item) {
        var scaleOptions = item.options;
        var id = scaleOptions.id;
        var scaleType = valueOrDefault$8(scaleOptions.type, item.dtype);

        if (positionIsHorizontal(scaleOptions.position) !== positionIsHorizontal(item.dposition)) {
          scaleOptions.position = item.dposition;
        }

        updated[id] = true;
        var scale = null;

        if (id in scales && scales[id].type === scaleType) {
          scale = scales[id];
          scale.options = scaleOptions;
          scale.ctx = me.ctx;
          scale.chart = me;
        } else {
          var scaleClass = core_scaleService.getScaleConstructor(scaleType);

          if (!scaleClass) {
            return;
          }

          scale = new scaleClass({
            id: id,
            type: scaleType,
            options: scaleOptions,
            ctx: me.ctx,
            chart: me
          });
          scales[scale.id] = scale;
        }

        scale.mergeTicksOptions(); // TODO(SB): I think we should be able to remove this custom case (options.scale)
        // and consider it as a regular scale part of the "scales"" map only! This would
        // make the logic easier and remove some useless? custom code.

        if (item.isDefault) {
          me.scale = scale;
        }
      }); // clear up discarded scales

      helpers$1.each(updated, function (hasUpdated, id) {
        if (!hasUpdated) {
          delete scales[id];
        }
      });
      me.scales = scales;
      core_scaleService.addScalesToLayout(this);
    },
    buildOrUpdateControllers: function buildOrUpdateControllers() {
      var me = this;
      var newControllers = [];
      helpers$1.each(me.data.datasets, function (dataset, datasetIndex) {
        var meta = me.getDatasetMeta(datasetIndex);
        var type = dataset.type || me.config.type;

        if (meta.type && meta.type !== type) {
          me.destroyDatasetMeta(datasetIndex);
          meta = me.getDatasetMeta(datasetIndex);
        }

        meta.type = type;

        if (meta.controller) {
          meta.controller.updateIndex(datasetIndex);
          meta.controller.linkScales();
        } else {
          var ControllerClass = controllers[meta.type];

          if (ControllerClass === undefined) {
            throw new Error('"' + meta.type + '" is not a chart type.');
          }

          meta.controller = new ControllerClass(me, datasetIndex);
          newControllers.push(meta.controller);
        }
      }, me);
      return newControllers;
    },

    /**
     * Reset the elements of all datasets
     * @private
     */
    resetElements: function resetElements() {
      var me = this;
      helpers$1.each(me.data.datasets, function (dataset, datasetIndex) {
        me.getDatasetMeta(datasetIndex).controller.reset();
      }, me);
    },

    /**
    * Resets the chart back to it's state before the initial animation
    */
    reset: function reset() {
      this.resetElements();
      this.tooltip.initialize();
    },
    update: function update(config) {
      var me = this;

      if (!config || _typeof(config) !== 'object') {
        // backwards compatibility
        config = {
          duration: config,
          lazy: arguments[1]
        };
      }

      updateConfig(me); // plugins options references might have change, let's invalidate the cache
      // https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167

      core_plugins._invalidate(me);

      if (core_plugins.notify(me, 'beforeUpdate') === false) {
        return;
      } // In case the entire data object changed


      me.tooltip._data = me.data; // Make sure dataset controllers are updated and new controllers are reset

      var newControllers = me.buildOrUpdateControllers(); // Make sure all dataset controllers have correct meta data counts

      helpers$1.each(me.data.datasets, function (dataset, datasetIndex) {
        me.getDatasetMeta(datasetIndex).controller.buildOrUpdateElements();
      }, me);
      me.updateLayout(); // Can only reset the new controllers after the scales have been updated

      if (me.options.animation && me.options.animation.duration) {
        helpers$1.each(newControllers, function (controller) {
          controller.reset();
        });
      }

      me.updateDatasets(); // Need to reset tooltip in case it is displayed with elements that are removed
      // after update.

      me.tooltip.initialize(); // Last active contains items that were previously in the tooltip.
      // When we reset the tooltip, we need to clear it

      me.lastActive = []; // Do this before render so that any plugins that need final scale updates can use it

      core_plugins.notify(me, 'afterUpdate');

      if (me._bufferedRender) {
        me._bufferedRequest = {
          duration: config.duration,
          easing: config.easing,
          lazy: config.lazy
        };
      } else {
        me.render(config);
      }
    },

    /**
     * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`
     * hook, in which case, plugins will not be called on `afterLayout`.
     * @private
     */
    updateLayout: function updateLayout() {
      var me = this;

      if (core_plugins.notify(me, 'beforeLayout') === false) {
        return;
      }

      core_layouts.update(this, this.width, this.height);
      /**
       * Provided for backward compatibility, use `afterLayout` instead.
       * @method IPlugin#afterScaleUpdate
       * @deprecated since version 2.5.0
       * @todo remove at version 3
       * @private
       */

      core_plugins.notify(me, 'afterScaleUpdate');
      core_plugins.notify(me, 'afterLayout');
    },

    /**
     * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`
     * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.
     * @private
     */
    updateDatasets: function updateDatasets() {
      var me = this;

      if (core_plugins.notify(me, 'beforeDatasetsUpdate') === false) {
        return;
      }

      for (var i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {
        me.updateDataset(i);
      }

      core_plugins.notify(me, 'afterDatasetsUpdate');
    },

    /**
     * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`
     * hook, in which case, plugins will not be called on `afterDatasetUpdate`.
     * @private
     */
    updateDataset: function updateDataset(index) {
      var me = this;
      var meta = me.getDatasetMeta(index);
      var args = {
        meta: meta,
        index: index
      };

      if (core_plugins.notify(me, 'beforeDatasetUpdate', [args]) === false) {
        return;
      }

      meta.controller.update();
      core_plugins.notify(me, 'afterDatasetUpdate', [args]);
    },
    render: function render(config) {
      var me = this;

      if (!config || _typeof(config) !== 'object') {
        // backwards compatibility
        config = {
          duration: config,
          lazy: arguments[1]
        };
      }

      var animationOptions = me.options.animation;
      var duration = valueOrDefault$8(config.duration, animationOptions && animationOptions.duration);
      var lazy = config.lazy;

      if (core_plugins.notify(me, 'beforeRender') === false) {
        return;
      }

      var onComplete = function onComplete(animation) {
        core_plugins.notify(me, 'afterRender');
        helpers$1.callback(animationOptions && animationOptions.onComplete, [animation], me);
      };

      if (animationOptions && duration) {
        var animation = new core_animation({
          numSteps: duration / 16.66,
          // 60 fps
          easing: config.easing || animationOptions.easing,
          render: function render(chart, animationObject) {
            var easingFunction = helpers$1.easing.effects[animationObject.easing];
            var currentStep = animationObject.currentStep;
            var stepDecimal = currentStep / animationObject.numSteps;
            chart.draw(easingFunction(stepDecimal), stepDecimal, currentStep);
          },
          onAnimationProgress: animationOptions.onProgress,
          onAnimationComplete: onComplete
        });
        core_animations.addAnimation(me, animation, duration, lazy);
      } else {
        me.draw(); // See https://github.com/chartjs/Chart.js/issues/3781

        onComplete(new core_animation({
          numSteps: 0,
          chart: me
        }));
      }

      return me;
    },
    draw: function draw(easingValue) {
      var me = this;
      me.clear();

      if (helpers$1.isNullOrUndef(easingValue)) {
        easingValue = 1;
      }

      me.transition(easingValue);

      if (me.width <= 0 || me.height <= 0) {
        return;
      }

      if (core_plugins.notify(me, 'beforeDraw', [easingValue]) === false) {
        return;
      } // Draw all the scales


      helpers$1.each(me.boxes, function (box) {
        box.draw(me.chartArea);
      }, me);
      me.drawDatasets(easingValue);

      me._drawTooltip(easingValue);

      core_plugins.notify(me, 'afterDraw', [easingValue]);
    },

    /**
     * @private
     */
    transition: function transition(easingValue) {
      var me = this;

      for (var i = 0, ilen = (me.data.datasets || []).length; i < ilen; ++i) {
        if (me.isDatasetVisible(i)) {
          me.getDatasetMeta(i).controller.transition(easingValue);
        }
      }

      me.tooltip.transition(easingValue);
    },

    /**
     * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`
     * hook, in which case, plugins will not be called on `afterDatasetsDraw`.
     * @private
     */
    drawDatasets: function drawDatasets(easingValue) {
      var me = this;

      if (core_plugins.notify(me, 'beforeDatasetsDraw', [easingValue]) === false) {
        return;
      } // Draw datasets reversed to support proper line stacking


      for (var i = (me.data.datasets || []).length - 1; i >= 0; --i) {
        if (me.isDatasetVisible(i)) {
          me.drawDataset(i, easingValue);
        }
      }

      core_plugins.notify(me, 'afterDatasetsDraw', [easingValue]);
    },

    /**
     * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`
     * hook, in which case, plugins will not be called on `afterDatasetDraw`.
     * @private
     */
    drawDataset: function drawDataset(index, easingValue) {
      var me = this;
      var meta = me.getDatasetMeta(index);
      var args = {
        meta: meta,
        index: index,
        easingValue: easingValue
      };

      if (core_plugins.notify(me, 'beforeDatasetDraw', [args]) === false) {
        return;
      }

      meta.controller.draw(easingValue);
      core_plugins.notify(me, 'afterDatasetDraw', [args]);
    },

    /**
     * Draws tooltip unless a plugin returns `false` to the `beforeTooltipDraw`
     * hook, in which case, plugins will not be called on `afterTooltipDraw`.
     * @private
     */
    _drawTooltip: function _drawTooltip(easingValue) {
      var me = this;
      var tooltip = me.tooltip;
      var args = {
        tooltip: tooltip,
        easingValue: easingValue
      };

      if (core_plugins.notify(me, 'beforeTooltipDraw', [args]) === false) {
        return;
      }

      tooltip.draw();
      core_plugins.notify(me, 'afterTooltipDraw', [args]);
    },

    /**
     * Get the single element that was clicked on
     * @return An object containing the dataset index and element index of the matching element. Also contains the rectangle that was draw
     */
    getElementAtEvent: function getElementAtEvent(e) {
      return core_interaction.modes.single(this, e);
    },
    getElementsAtEvent: function getElementsAtEvent(e) {
      return core_interaction.modes.label(this, e, {
        intersect: true
      });
    },
    getElementsAtXAxis: function getElementsAtXAxis(e) {
      return core_interaction.modes['x-axis'](this, e, {
        intersect: true
      });
    },
    getElementsAtEventForMode: function getElementsAtEventForMode(e, mode, options) {
      var method = core_interaction.modes[mode];

      if (typeof method === 'function') {
        return method(this, e, options);
      }

      return [];
    },
    getDatasetAtEvent: function getDatasetAtEvent(e) {
      return core_interaction.modes.dataset(this, e, {
        intersect: true
      });
    },
    getDatasetMeta: function getDatasetMeta(datasetIndex) {
      var me = this;
      var dataset = me.data.datasets[datasetIndex];

      if (!dataset._meta) {
        dataset._meta = {};
      }

      var meta = dataset._meta[me.id];

      if (!meta) {
        meta = dataset._meta[me.id] = {
          type: null,
          data: [],
          dataset: null,
          controller: null,
          hidden: null,
          // See isDatasetVisible() comment
          xAxisID: null,
          yAxisID: null
        };
      }

      return meta;
    },
    getVisibleDatasetCount: function getVisibleDatasetCount() {
      var count = 0;

      for (var i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {
        if (this.isDatasetVisible(i)) {
          count++;
        }
      }

      return count;
    },
    isDatasetVisible: function isDatasetVisible(datasetIndex) {
      var meta = this.getDatasetMeta(datasetIndex); // meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,
      // the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.

      return typeof meta.hidden === 'boolean' ? !meta.hidden : !this.data.datasets[datasetIndex].hidden;
    },
    generateLegend: function generateLegend() {
      return this.options.legendCallback(this);
    },

    /**
     * @private
     */
    destroyDatasetMeta: function destroyDatasetMeta(datasetIndex) {
      var id = this.id;
      var dataset = this.data.datasets[datasetIndex];
      var meta = dataset._meta && dataset._meta[id];

      if (meta) {
        meta.controller.destroy();
        delete dataset._meta[id];
      }
    },
    destroy: function destroy() {
      var me = this;
      var canvas = me.canvas;
      var i, ilen;
      me.stop(); // dataset controllers need to cleanup associated data

      for (i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {
        me.destroyDatasetMeta(i);
      }

      if (canvas) {
        me.unbindEvents();
        helpers$1.canvas.clear(me);
        platform.releaseContext(me.ctx);
        me.canvas = null;
        me.ctx = null;
      }

      core_plugins.notify(me, 'destroy');
      delete Chart.instances[me.id];
    },
    toBase64Image: function toBase64Image() {
      return this.canvas.toDataURL.apply(this.canvas, arguments);
    },
    initToolTip: function initToolTip() {
      var me = this;
      me.tooltip = new core_tooltip({
        _chart: me,
        _chartInstance: me,
        // deprecated, backward compatibility
        _data: me.data,
        _options: me.options.tooltips
      }, me);
    },

    /**
     * @private
     */
    bindEvents: function bindEvents() {
      var me = this;
      var listeners = me._listeners = {};

      var listener = function listener() {
        me.eventHandler.apply(me, arguments);
      };

      helpers$1.each(me.options.events, function (type) {
        platform.addEventListener(me, type, listener);
        listeners[type] = listener;
      }); // Elements used to detect size change should not be injected for non responsive charts.
      // See https://github.com/chartjs/Chart.js/issues/2210

      if (me.options.responsive) {
        listener = function listener() {
          me.resize();
        };

        platform.addEventListener(me, 'resize', listener);
        listeners.resize = listener;
      }
    },

    /**
     * @private
     */
    unbindEvents: function unbindEvents() {
      var me = this;
      var listeners = me._listeners;

      if (!listeners) {
        return;
      }

      delete me._listeners;
      helpers$1.each(listeners, function (listener, type) {
        platform.removeEventListener(me, type, listener);
      });
    },
    updateHoverStyle: function updateHoverStyle(elements, mode, enabled) {
      var method = enabled ? 'setHoverStyle' : 'removeHoverStyle';
      var element, i, ilen;

      for (i = 0, ilen = elements.length; i < ilen; ++i) {
        element = elements[i];

        if (element) {
          this.getDatasetMeta(element._datasetIndex).controller[method](element);
        }
      }
    },

    /**
     * @private
     */
    eventHandler: function eventHandler(e) {
      var me = this;
      var tooltip = me.tooltip;

      if (core_plugins.notify(me, 'beforeEvent', [e]) === false) {
        return;
      } // Buffer any update calls so that renders do not occur


      me._bufferedRender = true;
      me._bufferedRequest = null;
      var changed = me.handleEvent(e); // for smooth tooltip animations issue #4989
      // the tooltip should be the source of change
      // Animation check workaround:
      // tooltip._start will be null when tooltip isn't animating

      if (tooltip) {
        changed = tooltip._start ? tooltip.handleEvent(e) : changed | tooltip.handleEvent(e);
      }

      core_plugins.notify(me, 'afterEvent', [e]);
      var bufferedRequest = me._bufferedRequest;

      if (bufferedRequest) {
        // If we have an update that was triggered, we need to do a normal render
        me.render(bufferedRequest);
      } else if (changed && !me.animating) {
        // If entering, leaving, or changing elements, animate the change via pivot
        me.stop(); // We only need to render at this point. Updating will cause scales to be
        // recomputed generating flicker & using more memory than necessary.

        me.render({
          duration: me.options.hover.animationDuration,
          lazy: true
        });
      }

      me._bufferedRender = false;
      me._bufferedRequest = null;
      return me;
    },

    /**
     * Handle an event
     * @private
     * @param {IEvent} event the event to handle
     * @return {boolean} true if the chart needs to re-render
     */
    handleEvent: function handleEvent(e) {
      var me = this;
      var options = me.options || {};
      var hoverOptions = options.hover;
      var changed = false;
      me.lastActive = me.lastActive || []; // Find Active Elements for hover and tooltips

      if (e.type === 'mouseout') {
        me.active = [];
      } else {
        me.active = me.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions);
      } // Invoke onHover hook
      // Need to call with native event here to not break backwards compatibility


      helpers$1.callback(options.onHover || options.hover.onHover, [e.native, me.active], me);

      if (e.type === 'mouseup' || e.type === 'click') {
        if (options.onClick) {
          // Use e.native here for backwards compatibility
          options.onClick.call(me, e.native, me.active);
        }
      } // Remove styling for last active (even if it may still be active)


      if (me.lastActive.length) {
        me.updateHoverStyle(me.lastActive, hoverOptions.mode, false);
      } // Built in hover styling


      if (me.active.length && hoverOptions.mode) {
        me.updateHoverStyle(me.active, hoverOptions.mode, true);
      }

      changed = !helpers$1.arrayEquals(me.active, me.lastActive); // Remember Last Actives

      me.lastActive = me.active;
      return changed;
    }
  });
  /**
   * NOTE(SB) We actually don't use this container anymore but we need to keep it
   * for backward compatibility. Though, it can still be useful for plugins that
   * would need to work on multiple charts?!
   */

  Chart.instances = {};
  var core_controller = Chart; // DEPRECATIONS

  /**
   * Provided for backward compatibility, use Chart instead.
   * @class Chart.Controller
   * @deprecated since version 2.6
   * @todo remove at version 3
   * @private
   */

  Chart.Controller = Chart;
  /**
   * Provided for backward compatibility, not available anymore.
   * @namespace Chart
   * @deprecated since version 2.8
   * @todo remove at version 3
   * @private
   */

  Chart.types = {};
  /**
   * Provided for backward compatibility, not available anymore.
   * @namespace Chart.helpers.configMerge
   * @deprecated since version 2.8.0
   * @todo remove at version 3
   * @private
   */

  helpers$1.configMerge = mergeConfig;
  /**
   * Provided for backward compatibility, not available anymore.
   * @namespace Chart.helpers.scaleMerge
   * @deprecated since version 2.8.0
   * @todo remove at version 3
   * @private
   */

  helpers$1.scaleMerge = mergeScaleConfig;

  var core_helpers = function core_helpers() {
    // -- Basic js utility methods
    helpers$1.where = function (collection, filterCallback) {
      if (helpers$1.isArray(collection) && Array.prototype.filter) {
        return collection.filter(filterCallback);
      }

      var filtered = [];
      helpers$1.each(collection, function (item) {
        if (filterCallback(item)) {
          filtered.push(item);
        }
      });
      return filtered;
    };

    helpers$1.findIndex = Array.prototype.findIndex ? function (array, callback, scope) {
      return array.findIndex(callback, scope);
    } : function (array, callback, scope) {
      scope = scope === undefined ? array : scope;

      for (var i = 0, ilen = array.length; i < ilen; ++i) {
        if (callback.call(scope, array[i], i, array)) {
          return i;
        }
      }

      return -1;
    };

    helpers$1.findNextWhere = function (arrayToSearch, filterCallback, startIndex) {
      // Default to start of the array
      if (helpers$1.isNullOrUndef(startIndex)) {
        startIndex = -1;
      }

      for (var i = startIndex + 1; i < arrayToSearch.length; i++) {
        var currentItem = arrayToSearch[i];

        if (filterCallback(currentItem)) {
          return currentItem;
        }
      }
    };

    helpers$1.findPreviousWhere = function (arrayToSearch, filterCallback, startIndex) {
      // Default to end of the array
      if (helpers$1.isNullOrUndef(startIndex)) {
        startIndex = arrayToSearch.length;
      }

      for (var i = startIndex - 1; i >= 0; i--) {
        var currentItem = arrayToSearch[i];

        if (filterCallback(currentItem)) {
          return currentItem;
        }
      }
    }; // -- Math methods


    helpers$1.isNumber = function (n) {
      return !isNaN(parseFloat(n)) && isFinite(n);
    };

    helpers$1.almostEquals = function (x, y, epsilon) {
      return Math.abs(x - y) < epsilon;
    };

    helpers$1.almostWhole = function (x, epsilon) {
      var rounded = Math.round(x);
      return rounded - epsilon < x && rounded + epsilon > x;
    };

    helpers$1.max = function (array) {
      return array.reduce(function (max, value) {
        if (!isNaN(value)) {
          return Math.max(max, value);
        }

        return max;
      }, Number.NEGATIVE_INFINITY);
    };

    helpers$1.min = function (array) {
      return array.reduce(function (min, value) {
        if (!isNaN(value)) {
          return Math.min(min, value);
        }

        return min;
      }, Number.POSITIVE_INFINITY);
    };

    helpers$1.sign = Math.sign ? function (x) {
      return Math.sign(x);
    } : function (x) {
      x = +x; // convert to a number

      if (x === 0 || isNaN(x)) {
        return x;
      }

      return x > 0 ? 1 : -1;
    };
    helpers$1.log10 = Math.log10 ? function (x) {
      return Math.log10(x);
    } : function (x) {
      var exponent = Math.log(x) * Math.LOG10E; // Math.LOG10E = 1 / Math.LN10.
      // Check for whole powers of 10,
      // which due to floating point rounding error should be corrected.

      var powerOf10 = Math.round(exponent);
      var isPowerOf10 = x === Math.pow(10, powerOf10);
      return isPowerOf10 ? powerOf10 : exponent;
    };

    helpers$1.toRadians = function (degrees) {
      return degrees * (Math.PI / 180);
    };

    helpers$1.toDegrees = function (radians) {
      return radians * (180 / Math.PI);
    };
    /**
     * Returns the number of decimal places
     * i.e. the number of digits after the decimal point, of the value of this Number.
     * @param {number} x - A number.
     * @returns {number} The number of decimal places.
     * @private
     */


    helpers$1._decimalPlaces = function (x) {
      if (!helpers$1.isFinite(x)) {
        return;
      }

      var e = 1;
      var p = 0;

      while (Math.round(x * e) / e !== x) {
        e *= 10;
        p++;
      }

      return p;
    }; // Gets the angle from vertical upright to the point about a centre.


    helpers$1.getAngleFromPoint = function (centrePoint, anglePoint) {
      var distanceFromXCenter = anglePoint.x - centrePoint.x;
      var distanceFromYCenter = anglePoint.y - centrePoint.y;
      var radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);
      var angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);

      if (angle < -0.5 * Math.PI) {
        angle += 2.0 * Math.PI; // make sure the returned angle is in the range of (-PI/2, 3PI/2]
      }

      return {
        angle: angle,
        distance: radialDistanceFromCenter
      };
    };

    helpers$1.distanceBetweenPoints = function (pt1, pt2) {
      return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));
    };
    /**
     * Provided for backward compatibility, not available anymore
     * @function Chart.helpers.aliasPixel
     * @deprecated since version 2.8.0
     * @todo remove at version 3
     */


    helpers$1.aliasPixel = function (pixelWidth) {
      return pixelWidth % 2 === 0 ? 0 : 0.5;
    };
    /**
     * Returns the aligned pixel value to avoid anti-aliasing blur
     * @param {Chart} chart - The chart instance.
     * @param {number} pixel - A pixel value.
     * @param {number} width - The width of the element.
     * @returns {number} The aligned pixel value.
     * @private
     */


    helpers$1._alignPixel = function (chart, pixel, width) {
      var devicePixelRatio = chart.currentDevicePixelRatio;
      var halfWidth = width / 2;
      return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;
    };

    helpers$1.splineCurve = function (firstPoint, middlePoint, afterPoint, t) {
      // Props to Rob Spencer at scaled innovation for his post on splining between points
      // http://scaledinnovation.com/analytics/splines/aboutSplines.html
      // This function must also respect "skipped" points
      var previous = firstPoint.skip ? middlePoint : firstPoint;
      var current = middlePoint;
      var next = afterPoint.skip ? middlePoint : afterPoint;
      var d01 = Math.sqrt(Math.pow(current.x - previous.x, 2) + Math.pow(current.y - previous.y, 2));
      var d12 = Math.sqrt(Math.pow(next.x - current.x, 2) + Math.pow(next.y - current.y, 2));
      var s01 = d01 / (d01 + d12);
      var s12 = d12 / (d01 + d12); // If all points are the same, s01 & s02 will be inf

      s01 = isNaN(s01) ? 0 : s01;
      s12 = isNaN(s12) ? 0 : s12;
      var fa = t * s01; // scaling factor for triangle Ta

      var fb = t * s12;
      return {
        previous: {
          x: current.x - fa * (next.x - previous.x),
          y: current.y - fa * (next.y - previous.y)
        },
        next: {
          x: current.x + fb * (next.x - previous.x),
          y: current.y + fb * (next.y - previous.y)
        }
      };
    };

    helpers$1.EPSILON = Number.EPSILON || 1e-14;

    helpers$1.splineCurveMonotone = function (points) {
      // This function calculates Bézier control points in a similar way than |splineCurve|,
      // but preserves monotonicity of the provided data and ensures no local extremums are added
      // between the dataset discrete points due to the interpolation.
      // See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation
      var pointsWithTangents = (points || []).map(function (point) {
        return {
          model: point._model,
          deltaK: 0,
          mK: 0
        };
      }); // Calculate slopes (deltaK) and initialize tangents (mK)

      var pointsLen = pointsWithTangents.length;
      var i, pointBefore, pointCurrent, pointAfter;

      for (i = 0; i < pointsLen; ++i) {
        pointCurrent = pointsWithTangents[i];

        if (pointCurrent.model.skip) {
          continue;
        }

        pointBefore = i > 0 ? pointsWithTangents[i - 1] : null;
        pointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;

        if (pointAfter && !pointAfter.model.skip) {
          var slopeDeltaX = pointAfter.model.x - pointCurrent.model.x; // In the case of two points that appear at the same x pixel, slopeDeltaX is 0

          pointCurrent.deltaK = slopeDeltaX !== 0 ? (pointAfter.model.y - pointCurrent.model.y) / slopeDeltaX : 0;
        }

        if (!pointBefore || pointBefore.model.skip) {
          pointCurrent.mK = pointCurrent.deltaK;
        } else if (!pointAfter || pointAfter.model.skip) {
          pointCurrent.mK = pointBefore.deltaK;
        } else if (this.sign(pointBefore.deltaK) !== this.sign(pointCurrent.deltaK)) {
          pointCurrent.mK = 0;
        } else {
          pointCurrent.mK = (pointBefore.deltaK + pointCurrent.deltaK) / 2;
        }
      } // Adjust tangents to ensure monotonic properties


      var alphaK, betaK, tauK, squaredMagnitude;

      for (i = 0; i < pointsLen - 1; ++i) {
        pointCurrent = pointsWithTangents[i];
        pointAfter = pointsWithTangents[i + 1];

        if (pointCurrent.model.skip || pointAfter.model.skip) {
          continue;
        }

        if (helpers$1.almostEquals(pointCurrent.deltaK, 0, this.EPSILON)) {
          pointCurrent.mK = pointAfter.mK = 0;
          continue;
        }

        alphaK = pointCurrent.mK / pointCurrent.deltaK;
        betaK = pointAfter.mK / pointCurrent.deltaK;
        squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);

        if (squaredMagnitude <= 9) {
          continue;
        }

        tauK = 3 / Math.sqrt(squaredMagnitude);
        pointCurrent.mK = alphaK * tauK * pointCurrent.deltaK;
        pointAfter.mK = betaK * tauK * pointCurrent.deltaK;
      } // Compute control points


      var deltaX;

      for (i = 0; i < pointsLen; ++i) {
        pointCurrent = pointsWithTangents[i];

        if (pointCurrent.model.skip) {
          continue;
        }

        pointBefore = i > 0 ? pointsWithTangents[i - 1] : null;
        pointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;

        if (pointBefore && !pointBefore.model.skip) {
          deltaX = (pointCurrent.model.x - pointBefore.model.x) / 3;
          pointCurrent.model.controlPointPreviousX = pointCurrent.model.x - deltaX;
          pointCurrent.model.controlPointPreviousY = pointCurrent.model.y - deltaX * pointCurrent.mK;
        }

        if (pointAfter && !pointAfter.model.skip) {
          deltaX = (pointAfter.model.x - pointCurrent.model.x) / 3;
          pointCurrent.model.controlPointNextX = pointCurrent.model.x + deltaX;
          pointCurrent.model.controlPointNextY = pointCurrent.model.y + deltaX * pointCurrent.mK;
        }
      }
    };

    helpers$1.nextItem = function (collection, index, loop) {
      if (loop) {
        return index >= collection.length - 1 ? collection[0] : collection[index + 1];
      }

      return index >= collection.length - 1 ? collection[collection.length - 1] : collection[index + 1];
    };

    helpers$1.previousItem = function (collection, index, loop) {
      if (loop) {
        return index <= 0 ? collection[collection.length - 1] : collection[index - 1];
      }

      return index <= 0 ? collection[0] : collection[index - 1];
    }; // Implementation of the nice number algorithm used in determining where axis labels will go


    helpers$1.niceNum = function (range, round) {
      var exponent = Math.floor(helpers$1.log10(range));
      var fraction = range / Math.pow(10, exponent);
      var niceFraction;

      if (round) {
        if (fraction < 1.5) {
          niceFraction = 1;
        } else if (fraction < 3) {
          niceFraction = 2;
        } else if (fraction < 7) {
          niceFraction = 5;
        } else {
          niceFraction = 10;
        }
      } else if (fraction <= 1.0) {
        niceFraction = 1;
      } else if (fraction <= 2) {
        niceFraction = 2;
      } else if (fraction <= 5) {
        niceFraction = 5;
      } else {
        niceFraction = 10;
      }

      return niceFraction * Math.pow(10, exponent);
    }; // Request animation polyfill - https://www.paulirish.com/2011/requestanimationframe-for-smart-animating/


    helpers$1.requestAnimFrame = function () {
      if (typeof window === 'undefined') {
        return function (callback) {
          callback();
        };
      }

      return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {
        return window.setTimeout(callback, 1000 / 60);
      };
    }(); // -- DOM methods


    helpers$1.getRelativePosition = function (evt, chart) {
      var mouseX, mouseY;
      var e = evt.originalEvent || evt;
      var canvas = evt.target || evt.srcElement;
      var boundingRect = canvas.getBoundingClientRect();
      var touches = e.touches;

      if (touches && touches.length > 0) {
        mouseX = touches[0].clientX;
        mouseY = touches[0].clientY;
      } else {
        mouseX = e.clientX;
        mouseY = e.clientY;
      } // Scale mouse coordinates into canvas coordinates
      // by following the pattern laid out by 'jerryj' in the comments of
      // https://www.html5canvastutorials.com/advanced/html5-canvas-mouse-coordinates/


      var paddingLeft = parseFloat(helpers$1.getStyle(canvas, 'padding-left'));
      var paddingTop = parseFloat(helpers$1.getStyle(canvas, 'padding-top'));
      var paddingRight = parseFloat(helpers$1.getStyle(canvas, 'padding-right'));
      var paddingBottom = parseFloat(helpers$1.getStyle(canvas, 'padding-bottom'));
      var width = boundingRect.right - boundingRect.left - paddingLeft - paddingRight;
      var height = boundingRect.bottom - boundingRect.top - paddingTop - paddingBottom; // We divide by the current device pixel ratio, because the canvas is scaled up by that amount in each direction. However
      // the backend model is in unscaled coordinates. Since we are going to deal with our model coordinates, we go back here

      mouseX = Math.round((mouseX - boundingRect.left - paddingLeft) / width * canvas.width / chart.currentDevicePixelRatio);
      mouseY = Math.round((mouseY - boundingRect.top - paddingTop) / height * canvas.height / chart.currentDevicePixelRatio);
      return {
        x: mouseX,
        y: mouseY
      };
    }; // Private helper function to convert max-width/max-height values that may be percentages into a number


    function parseMaxStyle(styleValue, node, parentProperty) {
      var valueInPixels;

      if (typeof styleValue === 'string') {
        valueInPixels = parseInt(styleValue, 10);

        if (styleValue.indexOf('%') !== -1) {
          // percentage * size in dimension
          valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];
        }
      } else {
        valueInPixels = styleValue;
      }

      return valueInPixels;
    }
    /**
     * Returns if the given value contains an effective constraint.
     * @private
     */


    function isConstrainedValue(value) {
      return value !== undefined && value !== null && value !== 'none';
    }
    /**
     * Returns the max width or height of the given DOM node in a cross-browser compatible fashion
     * @param {HTMLElement} domNode - the node to check the constraint on
     * @param {string} maxStyle - the style that defines the maximum for the direction we are using ('max-width' / 'max-height')
     * @param {string} percentageProperty - property of parent to use when calculating width as a percentage
     * @see {@link https://www.nathanaeljones.com/blog/2013/reading-max-width-cross-browser}
     */


    function getConstraintDimension(domNode, maxStyle, percentageProperty) {
      var view = document.defaultView;

      var parentNode = helpers$1._getParentNode(domNode);

      var constrainedNode = view.getComputedStyle(domNode)[maxStyle];
      var constrainedContainer = view.getComputedStyle(parentNode)[maxStyle];
      var hasCNode = isConstrainedValue(constrainedNode);
      var hasCContainer = isConstrainedValue(constrainedContainer);
      var infinity = Number.POSITIVE_INFINITY;

      if (hasCNode || hasCContainer) {
        return Math.min(hasCNode ? parseMaxStyle(constrainedNode, domNode, percentageProperty) : infinity, hasCContainer ? parseMaxStyle(constrainedContainer, parentNode, percentageProperty) : infinity);
      }

      return 'none';
    } // returns Number or undefined if no constraint


    helpers$1.getConstraintWidth = function (domNode) {
      return getConstraintDimension(domNode, 'max-width', 'clientWidth');
    }; // returns Number or undefined if no constraint


    helpers$1.getConstraintHeight = function (domNode) {
      return getConstraintDimension(domNode, 'max-height', 'clientHeight');
    };
    /**
     * @private
    	 */


    helpers$1._calculatePadding = function (container, padding, parentDimension) {
      padding = helpers$1.getStyle(container, padding);
      return padding.indexOf('%') > -1 ? parentDimension * parseInt(padding, 10) / 100 : parseInt(padding, 10);
    };
    /**
     * @private
     */


    helpers$1._getParentNode = function (domNode) {
      var parent = domNode.parentNode;

      if (parent && parent.toString() === '[object ShadowRoot]') {
        parent = parent.host;
      }

      return parent;
    };

    helpers$1.getMaximumWidth = function (domNode) {
      var container = helpers$1._getParentNode(domNode);

      if (!container) {
        return domNode.clientWidth;
      }

      var clientWidth = container.clientWidth;

      var paddingLeft = helpers$1._calculatePadding(container, 'padding-left', clientWidth);

      var paddingRight = helpers$1._calculatePadding(container, 'padding-right', clientWidth);

      var w = clientWidth - paddingLeft - paddingRight;
      var cw = helpers$1.getConstraintWidth(domNode);
      return isNaN(cw) ? w : Math.min(w, cw);
    };

    helpers$1.getMaximumHeight = function (domNode) {
      var container = helpers$1._getParentNode(domNode);

      if (!container) {
        return domNode.clientHeight;
      }

      var clientHeight = container.clientHeight;

      var paddingTop = helpers$1._calculatePadding(container, 'padding-top', clientHeight);

      var paddingBottom = helpers$1._calculatePadding(container, 'padding-bottom', clientHeight);

      var h = clientHeight - paddingTop - paddingBottom;
      var ch = helpers$1.getConstraintHeight(domNode);
      return isNaN(ch) ? h : Math.min(h, ch);
    };

    helpers$1.getStyle = function (el, property) {
      return el.currentStyle ? el.currentStyle[property] : document.defaultView.getComputedStyle(el, null).getPropertyValue(property);
    };

    helpers$1.retinaScale = function (chart, forceRatio) {
      var pixelRatio = chart.currentDevicePixelRatio = forceRatio || typeof window !== 'undefined' && window.devicePixelRatio || 1;

      if (pixelRatio === 1) {
        return;
      }

      var canvas = chart.canvas;
      var height = chart.height;
      var width = chart.width;
      canvas.height = height * pixelRatio;
      canvas.width = width * pixelRatio;
      chart.ctx.scale(pixelRatio, pixelRatio); // If no style has been set on the canvas, the render size is used as display size,
      // making the chart visually bigger, so let's enforce it to the "correct" values.
      // See https://github.com/chartjs/Chart.js/issues/3575

      if (!canvas.style.height && !canvas.style.width) {
        canvas.style.height = height + 'px';
        canvas.style.width = width + 'px';
      }
    }; // -- Canvas methods


    helpers$1.fontString = function (pixelSize, fontStyle, fontFamily) {
      return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;
    };

    helpers$1.longestText = function (ctx, font, arrayOfThings, cache) {
      cache = cache || {};
      var data = cache.data = cache.data || {};
      var gc = cache.garbageCollect = cache.garbageCollect || [];

      if (cache.font !== font) {
        data = cache.data = {};
        gc = cache.garbageCollect = [];
        cache.font = font;
      }

      ctx.font = font;
      var longest = 0;
      helpers$1.each(arrayOfThings, function (thing) {
        // Undefined strings and arrays should not be measured
        if (thing !== undefined && thing !== null && helpers$1.isArray(thing) !== true) {
          longest = helpers$1.measureText(ctx, data, gc, longest, thing);
        } else if (helpers$1.isArray(thing)) {
          // if it is an array lets measure each element
          // to do maybe simplify this function a bit so we can do this more recursively?
          helpers$1.each(thing, function (nestedThing) {
            // Undefined strings and arrays should not be measured
            if (nestedThing !== undefined && nestedThing !== null && !helpers$1.isArray(nestedThing)) {
              longest = helpers$1.measureText(ctx, data, gc, longest, nestedThing);
            }
          });
        }
      });
      var gcLen = gc.length / 2;

      if (gcLen > arrayOfThings.length) {
        for (var i = 0; i < gcLen; i++) {
          delete data[gc[i]];
        }

        gc.splice(0, gcLen);
      }

      return longest;
    };

    helpers$1.measureText = function (ctx, data, gc, longest, string) {
      var textWidth = data[string];

      if (!textWidth) {
        textWidth = data[string] = ctx.measureText(string).width;
        gc.push(string);
      }

      if (textWidth > longest) {
        longest = textWidth;
      }

      return longest;
    };

    helpers$1.numberOfLabelLines = function (arrayOfThings) {
      var numberOfLines = 1;
      helpers$1.each(arrayOfThings, function (thing) {
        if (helpers$1.isArray(thing)) {
          if (thing.length > numberOfLines) {
            numberOfLines = thing.length;
          }
        }
      });
      return numberOfLines;
    };

    helpers$1.color = !chartjsColor ? function (value) {
      console.error('Color.js not found!');
      return value;
    } : function (value) {
      /* global CanvasGradient */
      if (value instanceof CanvasGradient) {
        value = core_defaults.global.defaultColor;
      }

      return chartjsColor(value);
    };

    helpers$1.getHoverColor = function (colorValue) {
      /* global CanvasPattern */
      return colorValue instanceof CanvasPattern || colorValue instanceof CanvasGradient ? colorValue : helpers$1.color(colorValue).saturate(0.5).darken(0.1).rgbString();
    };
  };

  function abstract() {
    throw new Error('This method is not implemented: either no adapter can ' + 'be found or an incomplete integration was provided.');
  }
  /**
   * Date adapter (current used by the time scale)
   * @namespace Chart._adapters._date
   * @memberof Chart._adapters
   * @private
   */

  /**
   * Currently supported unit string values.
   * @typedef {('millisecond'|'second'|'minute'|'hour'|'day'|'week'|'month'|'quarter'|'year')}
   * @memberof Chart._adapters._date
   * @name Unit
   */

  /**
   * @class
   */


  function DateAdapter(options) {
    this.options = options || {};
  }

  helpers$1.extend(DateAdapter.prototype,
  /** @lends DateAdapter */
  {
    /**
     * Returns a map of time formats for the supported formatting units defined
     * in Unit as well as 'datetime' representing a detailed date/time string.
     * @returns {{string: string}}
     */
    formats: abstract,

    /**
     * Parses the given `value` and return the associated timestamp.
     * @param {any} value - the value to parse (usually comes from the data)
     * @param {string} [format] - the expected data format
     * @returns {(number|null)}
     * @function
     */
    parse: abstract,

    /**
     * Returns the formatted date in the specified `format` for a given `timestamp`.
     * @param {number} timestamp - the timestamp to format
     * @param {string} format - the date/time token
     * @return {string}
     * @function
     */
    format: abstract,

    /**
     * Adds the specified `amount` of `unit` to the given `timestamp`.
     * @param {number} timestamp - the input timestamp
     * @param {number} amount - the amount to add
     * @param {Unit} unit - the unit as string
     * @return {number}
     * @function
     */
    add: abstract,

    /**
     * Returns the number of `unit` between the given timestamps.
     * @param {number} max - the input timestamp (reference)
     * @param {number} min - the timestamp to substract
     * @param {Unit} unit - the unit as string
     * @return {number}
     * @function
     */
    diff: abstract,

    /**
     * Returns start of `unit` for the given `timestamp`.
     * @param {number} timestamp - the input timestamp
     * @param {Unit} unit - the unit as string
     * @param {number} [weekday] - the ISO day of the week with 1 being Monday
     * and 7 being Sunday (only needed if param *unit* is `isoWeek`).
     * @function
     */
    startOf: abstract,

    /**
     * Returns end of `unit` for the given `timestamp`.
     * @param {number} timestamp - the input timestamp
     * @param {Unit} unit - the unit as string
     * @function
     */
    endOf: abstract,
    // DEPRECATIONS

    /**
     * Provided for backward compatibility for scale.getValueForPixel(),
     * this method should be overridden only by the moment adapter.
     * @deprecated since version 2.8.0
     * @todo remove at version 3
     * @private
     */
    _create: function _create(value) {
      return value;
    }
  });

  DateAdapter.override = function (members) {
    helpers$1.extend(DateAdapter.prototype, members);
  };

  var _date = DateAdapter;
  var core_adapters = {
    _date: _date
  };
  /**
   * Namespace to hold static tick generation functions
   * @namespace Chart.Ticks
   */

  var core_ticks = {
    /**
     * Namespace to hold formatters for different types of ticks
     * @namespace Chart.Ticks.formatters
     */
    formatters: {
      /**
       * Formatter for value labels
       * @method Chart.Ticks.formatters.values
       * @param value the value to display
       * @return {string|string[]} the label to display
       */
      values: function values(value) {
        return helpers$1.isArray(value) ? value : '' + value;
      },

      /**
       * Formatter for linear numeric ticks
       * @method Chart.Ticks.formatters.linear
       * @param tickValue {number} the value to be formatted
       * @param index {number} the position of the tickValue parameter in the ticks array
       * @param ticks {number[]} the list of ticks being converted
       * @return {string} string representation of the tickValue parameter
       */
      linear: function linear(tickValue, index, ticks) {
        // If we have lots of ticks, don't use the ones
        var delta = ticks.length > 3 ? ticks[2] - ticks[1] : ticks[1] - ticks[0]; // If we have a number like 2.5 as the delta, figure out how many decimal places we need

        if (Math.abs(delta) > 1) {
          if (tickValue !== Math.floor(tickValue)) {
            // not an integer
            delta = tickValue - Math.floor(tickValue);
          }
        }

        var logDelta = helpers$1.log10(Math.abs(delta));
        var tickString = '';

        if (tickValue !== 0) {
          var maxTick = Math.max(Math.abs(ticks[0]), Math.abs(ticks[ticks.length - 1]));

          if (maxTick < 1e-4) {
            // all ticks are small numbers; use scientific notation
            var logTick = helpers$1.log10(Math.abs(tickValue));
            tickString = tickValue.toExponential(Math.floor(logTick) - Math.floor(logDelta));
          } else {
            var numDecimal = -1 * Math.floor(logDelta);
            numDecimal = Math.max(Math.min(numDecimal, 20), 0); // toFixed has a max of 20 decimal places

            tickString = tickValue.toFixed(numDecimal);
          }
        } else {
          tickString = '0'; // never show decimal places for 0
        }

        return tickString;
      },
      logarithmic: function logarithmic(tickValue, index, ticks) {
        var remain = tickValue / Math.pow(10, Math.floor(helpers$1.log10(tickValue)));

        if (tickValue === 0) {
          return '0';
        } else if (remain === 1 || remain === 2 || remain === 5 || index === 0 || index === ticks.length - 1) {
          return tickValue.toExponential();
        }

        return '';
      }
    }
  };
  var valueOrDefault$9 = helpers$1.valueOrDefault;
  var valueAtIndexOrDefault = helpers$1.valueAtIndexOrDefault;

  core_defaults._set('scale', {
    display: true,
    position: 'left',
    offset: false,
    // grid line settings
    gridLines: {
      display: true,
      color: 'rgba(0, 0, 0, 0.1)',
      lineWidth: 1,
      drawBorder: true,
      drawOnChartArea: true,
      drawTicks: true,
      tickMarkLength: 10,
      zeroLineWidth: 1,
      zeroLineColor: 'rgba(0,0,0,0.25)',
      zeroLineBorderDash: [],
      zeroLineBorderDashOffset: 0.0,
      offsetGridLines: false,
      borderDash: [],
      borderDashOffset: 0.0
    },
    // scale label
    scaleLabel: {
      // display property
      display: false,
      // actual label
      labelString: '',
      // top/bottom padding
      padding: {
        top: 4,
        bottom: 4
      }
    },
    // label settings
    ticks: {
      beginAtZero: false,
      minRotation: 0,
      maxRotation: 50,
      mirror: false,
      padding: 0,
      reverse: false,
      display: true,
      autoSkip: true,
      autoSkipPadding: 0,
      labelOffset: 0,
      // We pass through arrays to be rendered as multiline labels, we convert Others to strings here.
      callback: core_ticks.formatters.values,
      minor: {},
      major: {}
    }
  });

  function labelsFromTicks(ticks) {
    var labels = [];
    var i, ilen;

    for (i = 0, ilen = ticks.length; i < ilen; ++i) {
      labels.push(ticks[i].label);
    }

    return labels;
  }

  function getPixelForGridLine(scale, index, offsetGridLines) {
    var lineValue = scale.getPixelForTick(index);

    if (offsetGridLines) {
      if (scale.getTicks().length === 1) {
        lineValue -= scale.isHorizontal() ? Math.max(lineValue - scale.left, scale.right - lineValue) : Math.max(lineValue - scale.top, scale.bottom - lineValue);
      } else if (index === 0) {
        lineValue -= (scale.getPixelForTick(1) - lineValue) / 2;
      } else {
        lineValue -= (lineValue - scale.getPixelForTick(index - 1)) / 2;
      }
    }

    return lineValue;
  }

  function computeTextSize(context, tick, font) {
    return helpers$1.isArray(tick) ? helpers$1.longestText(context, font, tick) : context.measureText(tick).width;
  }

  var core_scale = core_element.extend({
    /**
     * Get the padding needed for the scale
     * @method getPadding
     * @private
     * @returns {Padding} the necessary padding
     */
    getPadding: function getPadding() {
      var me = this;
      return {
        left: me.paddingLeft || 0,
        top: me.paddingTop || 0,
        right: me.paddingRight || 0,
        bottom: me.paddingBottom || 0
      };
    },

    /**
     * Returns the scale tick objects ({label, major})
     * @since 2.7
     */
    getTicks: function getTicks() {
      return this._ticks;
    },
    // These methods are ordered by lifecyle. Utilities then follow.
    // Any function defined here is inherited by all scale types.
    // Any function can be extended by the scale type
    mergeTicksOptions: function mergeTicksOptions() {
      var ticks = this.options.ticks;

      if (ticks.minor === false) {
        ticks.minor = {
          display: false
        };
      }

      if (ticks.major === false) {
        ticks.major = {
          display: false
        };
      }

      for (var key in ticks) {
        if (key !== 'major' && key !== 'minor') {
          if (typeof ticks.minor[key] === 'undefined') {
            ticks.minor[key] = ticks[key];
          }

          if (typeof ticks.major[key] === 'undefined') {
            ticks.major[key] = ticks[key];
          }
        }
      }
    },
    beforeUpdate: function beforeUpdate() {
      helpers$1.callback(this.options.beforeUpdate, [this]);
    },
    update: function update(maxWidth, maxHeight, margins) {
      var me = this;
      var i, ilen, labels, label, ticks, tick; // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)

      me.beforeUpdate(); // Absorb the master measurements

      me.maxWidth = maxWidth;
      me.maxHeight = maxHeight;
      me.margins = helpers$1.extend({
        left: 0,
        right: 0,
        top: 0,
        bottom: 0
      }, margins);
      me._maxLabelLines = 0;
      me.longestLabelWidth = 0;
      me.longestTextCache = me.longestTextCache || {}; // Dimensions

      me.beforeSetDimensions();
      me.setDimensions();
      me.afterSetDimensions(); // Data min/max

      me.beforeDataLimits();
      me.determineDataLimits();
      me.afterDataLimits(); // Ticks - `this.ticks` is now DEPRECATED!
      // Internal ticks are now stored as objects in the PRIVATE `this._ticks` member
      // and must not be accessed directly from outside this class. `this.ticks` being
      // around for long time and not marked as private, we can't change its structure
      // without unexpected breaking changes. If you need to access the scale ticks,
      // use scale.getTicks() instead.

      me.beforeBuildTicks(); // New implementations should return an array of objects but for BACKWARD COMPAT,
      // we still support no return (`this.ticks` internally set by calling this method).

      ticks = me.buildTicks() || []; // Allow modification of ticks in callback.

      ticks = me.afterBuildTicks(ticks) || ticks;
      me.beforeTickToLabelConversion(); // New implementations should return the formatted tick labels but for BACKWARD
      // COMPAT, we still support no return (`this.ticks` internally changed by calling
      // this method and supposed to contain only string values).

      labels = me.convertTicksToLabels(ticks) || me.ticks;
      me.afterTickToLabelConversion();
      me.ticks = labels; // BACKWARD COMPATIBILITY
      // IMPORTANT: from this point, we consider that `this.ticks` will NEVER change!
      // BACKWARD COMPAT: synchronize `_ticks` with labels (so potentially `this.ticks`)

      for (i = 0, ilen = labels.length; i < ilen; ++i) {
        label = labels[i];
        tick = ticks[i];

        if (!tick) {
          ticks.push(tick = {
            label: label,
            major: false
          });
        } else {
          tick.label = label;
        }
      }

      me._ticks = ticks; // Tick Rotation

      me.beforeCalculateTickRotation();
      me.calculateTickRotation();
      me.afterCalculateTickRotation(); // Fit

      me.beforeFit();
      me.fit();
      me.afterFit(); //

      me.afterUpdate();
      return me.minSize;
    },
    afterUpdate: function afterUpdate() {
      helpers$1.callback(this.options.afterUpdate, [this]);
    },
    //
    beforeSetDimensions: function beforeSetDimensions() {
      helpers$1.callback(this.options.beforeSetDimensions, [this]);
    },
    setDimensions: function setDimensions() {
      var me = this; // Set the unconstrained dimension before label rotation

      if (me.isHorizontal()) {
        // Reset position before calculating rotation
        me.width = me.maxWidth;
        me.left = 0;
        me.right = me.width;
      } else {
        me.height = me.maxHeight; // Reset position before calculating rotation

        me.top = 0;
        me.bottom = me.height;
      } // Reset padding


      me.paddingLeft = 0;
      me.paddingTop = 0;
      me.paddingRight = 0;
      me.paddingBottom = 0;
    },
    afterSetDimensions: function afterSetDimensions() {
      helpers$1.callback(this.options.afterSetDimensions, [this]);
    },
    // Data limits
    beforeDataLimits: function beforeDataLimits() {
      helpers$1.callback(this.options.beforeDataLimits, [this]);
    },
    determineDataLimits: helpers$1.noop,
    afterDataLimits: function afterDataLimits() {
      helpers$1.callback(this.options.afterDataLimits, [this]);
    },
    //
    beforeBuildTicks: function beforeBuildTicks() {
      helpers$1.callback(this.options.beforeBuildTicks, [this]);
    },
    buildTicks: helpers$1.noop,
    afterBuildTicks: function afterBuildTicks(ticks) {
      var me = this; // ticks is empty for old axis implementations here

      if (helpers$1.isArray(ticks) && ticks.length) {
        return helpers$1.callback(me.options.afterBuildTicks, [me, ticks]);
      } // Support old implementations (that modified `this.ticks` directly in buildTicks)


      me.ticks = helpers$1.callback(me.options.afterBuildTicks, [me, me.ticks]) || me.ticks;
      return ticks;
    },
    beforeTickToLabelConversion: function beforeTickToLabelConversion() {
      helpers$1.callback(this.options.beforeTickToLabelConversion, [this]);
    },
    convertTicksToLabels: function convertTicksToLabels() {
      var me = this; // Convert ticks to strings

      var tickOpts = me.options.ticks;
      me.ticks = me.ticks.map(tickOpts.userCallback || tickOpts.callback, this);
    },
    afterTickToLabelConversion: function afterTickToLabelConversion() {
      helpers$1.callback(this.options.afterTickToLabelConversion, [this]);
    },
    //
    beforeCalculateTickRotation: function beforeCalculateTickRotation() {
      helpers$1.callback(this.options.beforeCalculateTickRotation, [this]);
    },
    calculateTickRotation: function calculateTickRotation() {
      var me = this;
      var context = me.ctx;
      var tickOpts = me.options.ticks;
      var labels = labelsFromTicks(me._ticks); // Get the width of each grid by calculating the difference
      // between x offsets between 0 and 1.

      var tickFont = helpers$1.options._parseFont(tickOpts);

      context.font = tickFont.string;
      var labelRotation = tickOpts.minRotation || 0;

      if (labels.length && me.options.display && me.isHorizontal()) {
        var originalLabelWidth = helpers$1.longestText(context, tickFont.string, labels, me.longestTextCache);
        var labelWidth = originalLabelWidth;
        var cosRotation, sinRotation; // Allow 3 pixels x2 padding either side for label readability

        var tickWidth = me.getPixelForTick(1) - me.getPixelForTick(0) - 6; // Max label rotation can be set or default to 90 - also act as a loop counter

        while (labelWidth > tickWidth && labelRotation < tickOpts.maxRotation) {
          var angleRadians = helpers$1.toRadians(labelRotation);
          cosRotation = Math.cos(angleRadians);
          sinRotation = Math.sin(angleRadians);

          if (sinRotation * originalLabelWidth > me.maxHeight) {
            // go back one step
            labelRotation--;
            break;
          }

          labelRotation++;
          labelWidth = cosRotation * originalLabelWidth;
        }
      }

      me.labelRotation = labelRotation;
    },
    afterCalculateTickRotation: function afterCalculateTickRotation() {
      helpers$1.callback(this.options.afterCalculateTickRotation, [this]);
    },
    //
    beforeFit: function beforeFit() {
      helpers$1.callback(this.options.beforeFit, [this]);
    },
    fit: function fit() {
      var me = this; // Reset

      var minSize = me.minSize = {
        width: 0,
        height: 0
      };
      var labels = labelsFromTicks(me._ticks);
      var opts = me.options;
      var tickOpts = opts.ticks;
      var scaleLabelOpts = opts.scaleLabel;
      var gridLineOpts = opts.gridLines;

      var display = me._isVisible();

      var position = opts.position;
      var isHorizontal = me.isHorizontal();
      var parseFont = helpers$1.options._parseFont;
      var tickFont = parseFont(tickOpts);
      var tickMarkLength = opts.gridLines.tickMarkLength; // Width

      if (isHorizontal) {
        // subtract the margins to line up with the chartArea if we are a full width scale
        minSize.width = me.isFullWidth() ? me.maxWidth - me.margins.left - me.margins.right : me.maxWidth;
      } else {
        minSize.width = display && gridLineOpts.drawTicks ? tickMarkLength : 0;
      } // height


      if (isHorizontal) {
        minSize.height = display && gridLineOpts.drawTicks ? tickMarkLength : 0;
      } else {
        minSize.height = me.maxHeight; // fill all the height
      } // Are we showing a title for the scale?


      if (scaleLabelOpts.display && display) {
        var scaleLabelFont = parseFont(scaleLabelOpts);
        var scaleLabelPadding = helpers$1.options.toPadding(scaleLabelOpts.padding);
        var deltaHeight = scaleLabelFont.lineHeight + scaleLabelPadding.height;

        if (isHorizontal) {
          minSize.height += deltaHeight;
        } else {
          minSize.width += deltaHeight;
        }
      } // Don't bother fitting the ticks if we are not showing the labels


      if (tickOpts.display && display) {
        var largestTextWidth = helpers$1.longestText(me.ctx, tickFont.string, labels, me.longestTextCache);
        var tallestLabelHeightInLines = helpers$1.numberOfLabelLines(labels);
        var lineSpace = tickFont.size * 0.5;
        var tickPadding = me.options.ticks.padding; // Store max number of lines and widest label for _autoSkip

        me._maxLabelLines = tallestLabelHeightInLines;
        me.longestLabelWidth = largestTextWidth;

        if (isHorizontal) {
          var angleRadians = helpers$1.toRadians(me.labelRotation);
          var cosRotation = Math.cos(angleRadians);
          var sinRotation = Math.sin(angleRadians); // TODO - improve this calculation

          var labelHeight = sinRotation * largestTextWidth + tickFont.lineHeight * tallestLabelHeightInLines + lineSpace; // padding

          minSize.height = Math.min(me.maxHeight, minSize.height + labelHeight + tickPadding);
          me.ctx.font = tickFont.string;
          var firstLabelWidth = computeTextSize(me.ctx, labels[0], tickFont.string);
          var lastLabelWidth = computeTextSize(me.ctx, labels[labels.length - 1], tickFont.string);
          var offsetLeft = me.getPixelForTick(0) - me.left;
          var offsetRight = me.right - me.getPixelForTick(labels.length - 1);
          var paddingLeft, paddingRight; // Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned
          // which means that the right padding is dominated by the font height

          if (me.labelRotation !== 0) {
            paddingLeft = position === 'bottom' ? cosRotation * firstLabelWidth : cosRotation * lineSpace;
            paddingRight = position === 'bottom' ? cosRotation * lineSpace : cosRotation * lastLabelWidth;
          } else {
            paddingLeft = firstLabelWidth / 2;
            paddingRight = lastLabelWidth / 2;
          }

          me.paddingLeft = Math.max(paddingLeft - offsetLeft, 0) + 3; // add 3 px to move away from canvas edges

          me.paddingRight = Math.max(paddingRight - offsetRight, 0) + 3;
        } else {
          // A vertical axis is more constrained by the width. Labels are the
          // dominant factor here, so get that length first and account for padding
          if (tickOpts.mirror) {
            largestTextWidth = 0;
          } else {
            // use lineSpace for consistency with horizontal axis
            // tickPadding is not implemented for horizontal
            largestTextWidth += tickPadding + lineSpace;
          }

          minSize.width = Math.min(me.maxWidth, minSize.width + largestTextWidth);
          me.paddingTop = tickFont.size / 2;
          me.paddingBottom = tickFont.size / 2;
        }
      }

      me.handleMargins();
      me.width = minSize.width;
      me.height = minSize.height;
    },

    /**
     * Handle margins and padding interactions
     * @private
     */
    handleMargins: function handleMargins() {
      var me = this;

      if (me.margins) {
        me.paddingLeft = Math.max(me.paddingLeft - me.margins.left, 0);
        me.paddingTop = Math.max(me.paddingTop - me.margins.top, 0);
        me.paddingRight = Math.max(me.paddingRight - me.margins.right, 0);
        me.paddingBottom = Math.max(me.paddingBottom - me.margins.bottom, 0);
      }
    },
    afterFit: function afterFit() {
      helpers$1.callback(this.options.afterFit, [this]);
    },
    // Shared Methods
    isHorizontal: function isHorizontal() {
      return this.options.position === 'top' || this.options.position === 'bottom';
    },
    isFullWidth: function isFullWidth() {
      return this.options.fullWidth;
    },
    // Get the correct value. NaN bad inputs, If the value type is object get the x or y based on whether we are horizontal or not
    getRightValue: function getRightValue(rawValue) {
      // Null and undefined values first
      if (helpers$1.isNullOrUndef(rawValue)) {
        return NaN;
      } // isNaN(object) returns true, so make sure NaN is checking for a number; Discard Infinite values


      if ((typeof rawValue === 'number' || rawValue instanceof Number) && !isFinite(rawValue)) {
        return NaN;
      } // If it is in fact an object, dive in one more level


      if (rawValue) {
        if (this.isHorizontal()) {
          if (rawValue.x !== undefined) {
            return this.getRightValue(rawValue.x);
          }
        } else if (rawValue.y !== undefined) {
          return this.getRightValue(rawValue.y);
        }
      } // Value is good, return it


      return rawValue;
    },

    /**
     * Used to get the value to display in the tooltip for the data at the given index
     * @param index
     * @param datasetIndex
     */
    getLabelForIndex: helpers$1.noop,

    /**
     * Returns the location of the given data point. Value can either be an index or a numerical value
     * The coordinate (0, 0) is at the upper-left corner of the canvas
     * @param value
     * @param index
     * @param datasetIndex
     */
    getPixelForValue: helpers$1.noop,

    /**
     * Used to get the data value from a given pixel. This is the inverse of getPixelForValue
     * The coordinate (0, 0) is at the upper-left corner of the canvas
     * @param pixel
     */
    getValueForPixel: helpers$1.noop,

    /**
     * Returns the location of the tick at the given index
     * The coordinate (0, 0) is at the upper-left corner of the canvas
     */
    getPixelForTick: function getPixelForTick(index) {
      var me = this;
      var offset = me.options.offset;

      if (me.isHorizontal()) {
        var innerWidth = me.width - (me.paddingLeft + me.paddingRight);
        var tickWidth = innerWidth / Math.max(me._ticks.length - (offset ? 0 : 1), 1);
        var pixel = tickWidth * index + me.paddingLeft;

        if (offset) {
          pixel += tickWidth / 2;
        }

        var finalVal = me.left + pixel;
        finalVal += me.isFullWidth() ? me.margins.left : 0;
        return finalVal;
      }

      var innerHeight = me.height - (me.paddingTop + me.paddingBottom);
      return me.top + index * (innerHeight / (me._ticks.length - 1));
    },

    /**
     * Utility for getting the pixel location of a percentage of scale
     * The coordinate (0, 0) is at the upper-left corner of the canvas
     */
    getPixelForDecimal: function getPixelForDecimal(decimal) {
      var me = this;

      if (me.isHorizontal()) {
        var innerWidth = me.width - (me.paddingLeft + me.paddingRight);
        var valueOffset = innerWidth * decimal + me.paddingLeft;
        var finalVal = me.left + valueOffset;
        finalVal += me.isFullWidth() ? me.margins.left : 0;
        return finalVal;
      }

      return me.top + decimal * me.height;
    },

    /**
     * Returns the pixel for the minimum chart value
     * The coordinate (0, 0) is at the upper-left corner of the canvas
     */
    getBasePixel: function getBasePixel() {
      return this.getPixelForValue(this.getBaseValue());
    },
    getBaseValue: function getBaseValue() {
      var me = this;
      var min = me.min;
      var max = me.max;
      return me.beginAtZero ? 0 : min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;
    },

    /**
     * Returns a subset of ticks to be plotted to avoid overlapping labels.
     * @private
     */
    _autoSkip: function _autoSkip(ticks) {
      var me = this;
      var isHorizontal = me.isHorizontal();
      var optionTicks = me.options.ticks.minor;
      var tickCount = ticks.length;
      var skipRatio = false;
      var maxTicks = optionTicks.maxTicksLimit; // Total space needed to display all ticks. First and last ticks are
      // drawn as their center at end of axis, so tickCount-1

      var ticksLength = me._tickSize() * (tickCount - 1); // Axis length

      var axisLength = isHorizontal ? me.width - (me.paddingLeft + me.paddingRight) : me.height - (me.paddingTop + me.PaddingBottom);
      var result = [];
      var i, tick;

      if (ticksLength > axisLength) {
        skipRatio = 1 + Math.floor(ticksLength / axisLength);
      } // if they defined a max number of optionTicks,
      // increase skipRatio until that number is met


      if (tickCount > maxTicks) {
        skipRatio = Math.max(skipRatio, 1 + Math.floor(tickCount / maxTicks));
      }

      for (i = 0; i < tickCount; i++) {
        tick = ticks[i];

        if (skipRatio > 1 && i % skipRatio > 0) {
          // leave tick in place but make sure it's not displayed (#4635)
          delete tick.label;
        }

        result.push(tick);
      }

      return result;
    },

    /**
     * @private
     */
    _tickSize: function _tickSize() {
      var me = this;
      var isHorizontal = me.isHorizontal();
      var optionTicks = me.options.ticks.minor; // Calculate space needed by label in axis direction.

      var rot = helpers$1.toRadians(me.labelRotation);
      var cos = Math.abs(Math.cos(rot));
      var sin = Math.abs(Math.sin(rot));
      var padding = optionTicks.autoSkipPadding || 0;
      var w = me.longestLabelWidth + padding || 0;

      var tickFont = helpers$1.options._parseFont(optionTicks);

      var h = me._maxLabelLines * tickFont.lineHeight + padding || 0; // Calculate space needed for 1 tick in axis direction.

      return isHorizontal ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;
    },

    /**
     * @private
     */
    _isVisible: function _isVisible() {
      var me = this;
      var chart = me.chart;
      var display = me.options.display;
      var i, ilen, meta;

      if (display !== 'auto') {
        return !!display;
      } // When 'auto', the scale is visible if at least one associated dataset is visible.


      for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {
        if (chart.isDatasetVisible(i)) {
          meta = chart.getDatasetMeta(i);

          if (meta.xAxisID === me.id || meta.yAxisID === me.id) {
            return true;
          }
        }
      }

      return false;
    },

    /**
     * Actually draw the scale on the canvas
     * @param {object} chartArea - the area of the chart to draw full grid lines on
     */
    draw: function draw(chartArea) {
      var me = this;
      var options = me.options;

      if (!me._isVisible()) {
        return;
      }

      var chart = me.chart;
      var context = me.ctx;
      var globalDefaults = core_defaults.global;
      var defaultFontColor = globalDefaults.defaultFontColor;
      var optionTicks = options.ticks.minor;
      var optionMajorTicks = options.ticks.major || optionTicks;
      var gridLines = options.gridLines;
      var scaleLabel = options.scaleLabel;
      var position = options.position;
      var isRotated = me.labelRotation !== 0;
      var isMirrored = optionTicks.mirror;
      var isHorizontal = me.isHorizontal();
      var parseFont = helpers$1.options._parseFont;
      var ticks = optionTicks.display && optionTicks.autoSkip ? me._autoSkip(me.getTicks()) : me.getTicks();
      var tickFontColor = valueOrDefault$9(optionTicks.fontColor, defaultFontColor);
      var tickFont = parseFont(optionTicks);
      var lineHeight = tickFont.lineHeight;
      var majorTickFontColor = valueOrDefault$9(optionMajorTicks.fontColor, defaultFontColor);
      var majorTickFont = parseFont(optionMajorTicks);
      var tickPadding = optionTicks.padding;
      var labelOffset = optionTicks.labelOffset;
      var tl = gridLines.drawTicks ? gridLines.tickMarkLength : 0;
      var scaleLabelFontColor = valueOrDefault$9(scaleLabel.fontColor, defaultFontColor);
      var scaleLabelFont = parseFont(scaleLabel);
      var scaleLabelPadding = helpers$1.options.toPadding(scaleLabel.padding);
      var labelRotationRadians = helpers$1.toRadians(me.labelRotation);
      var itemsToDraw = [];
      var axisWidth = gridLines.drawBorder ? valueAtIndexOrDefault(gridLines.lineWidth, 0, 0) : 0;
      var alignPixel = helpers$1._alignPixel;
      var borderValue, tickStart, tickEnd;

      if (position === 'top') {
        borderValue = alignPixel(chart, me.bottom, axisWidth);
        tickStart = me.bottom - tl;
        tickEnd = borderValue - axisWidth / 2;
      } else if (position === 'bottom') {
        borderValue = alignPixel(chart, me.top, axisWidth);
        tickStart = borderValue + axisWidth / 2;
        tickEnd = me.top + tl;
      } else if (position === 'left') {
        borderValue = alignPixel(chart, me.right, axisWidth);
        tickStart = me.right - tl;
        tickEnd = borderValue - axisWidth / 2;
      } else {
        borderValue = alignPixel(chart, me.left, axisWidth);
        tickStart = borderValue + axisWidth / 2;
        tickEnd = me.left + tl;
      }

      var epsilon = 0.0000001; // 0.0000001 is margin in pixels for Accumulated error.

      helpers$1.each(ticks, function (tick, index) {
        // autoskipper skipped this tick (#4635)
        if (helpers$1.isNullOrUndef(tick.label)) {
          return;
        }

        var label = tick.label;
        var lineWidth, lineColor, borderDash, borderDashOffset;

        if (index === me.zeroLineIndex && options.offset === gridLines.offsetGridLines) {
          // Draw the first index specially
          lineWidth = gridLines.zeroLineWidth;
          lineColor = gridLines.zeroLineColor;
          borderDash = gridLines.zeroLineBorderDash || [];
          borderDashOffset = gridLines.zeroLineBorderDashOffset || 0.0;
        } else {
          lineWidth = valueAtIndexOrDefault(gridLines.lineWidth, index);
          lineColor = valueAtIndexOrDefault(gridLines.color, index);
          borderDash = gridLines.borderDash || [];
          borderDashOffset = gridLines.borderDashOffset || 0.0;
        } // Common properties


        var tx1, ty1, tx2, ty2, x1, y1, x2, y2, labelX, labelY, textOffset, textAlign;
        var labelCount = helpers$1.isArray(label) ? label.length : 1;
        var lineValue = getPixelForGridLine(me, index, gridLines.offsetGridLines);

        if (isHorizontal) {
          var labelYOffset = tl + tickPadding;

          if (lineValue < me.left - epsilon) {
            lineColor = 'rgba(0,0,0,0)';
          }

          tx1 = tx2 = x1 = x2 = alignPixel(chart, lineValue, lineWidth);
          ty1 = tickStart;
          ty2 = tickEnd;
          labelX = me.getPixelForTick(index) + labelOffset; // x values for optionTicks (need to consider offsetLabel option)

          if (position === 'top') {
            y1 = alignPixel(chart, chartArea.top, axisWidth) + axisWidth / 2;
            y2 = chartArea.bottom;
            textOffset = ((!isRotated ? 0.5 : 1) - labelCount) * lineHeight;
            textAlign = !isRotated ? 'center' : 'left';
            labelY = me.bottom - labelYOffset;
          } else {
            y1 = chartArea.top;
            y2 = alignPixel(chart, chartArea.bottom, axisWidth) - axisWidth / 2;
            textOffset = (!isRotated ? 0.5 : 0) * lineHeight;
            textAlign = !isRotated ? 'center' : 'right';
            labelY = me.top + labelYOffset;
          }
        } else {
          var labelXOffset = (isMirrored ? 0 : tl) + tickPadding;

          if (lineValue < me.top - epsilon) {
            lineColor = 'rgba(0,0,0,0)';
          }

          tx1 = tickStart;
          tx2 = tickEnd;
          ty1 = ty2 = y1 = y2 = alignPixel(chart, lineValue, lineWidth);
          labelY = me.getPixelForTick(index) + labelOffset;
          textOffset = (1 - labelCount) * lineHeight / 2;

          if (position === 'left') {
            x1 = alignPixel(chart, chartArea.left, axisWidth) + axisWidth / 2;
            x2 = chartArea.right;
            textAlign = isMirrored ? 'left' : 'right';
            labelX = me.right - labelXOffset;
          } else {
            x1 = chartArea.left;
            x2 = alignPixel(chart, chartArea.right, axisWidth) - axisWidth / 2;
            textAlign = isMirrored ? 'right' : 'left';
            labelX = me.left + labelXOffset;
          }
        }

        itemsToDraw.push({
          tx1: tx1,
          ty1: ty1,
          tx2: tx2,
          ty2: ty2,
          x1: x1,
          y1: y1,
          x2: x2,
          y2: y2,
          labelX: labelX,
          labelY: labelY,
          glWidth: lineWidth,
          glColor: lineColor,
          glBorderDash: borderDash,
          glBorderDashOffset: borderDashOffset,
          rotation: -1 * labelRotationRadians,
          label: label,
          major: tick.major,
          textOffset: textOffset,
          textAlign: textAlign
        });
      }); // Draw all of the tick labels, tick marks, and grid lines at the correct places

      helpers$1.each(itemsToDraw, function (itemToDraw) {
        var glWidth = itemToDraw.glWidth;
        var glColor = itemToDraw.glColor;

        if (gridLines.display && glWidth && glColor) {
          context.save();
          context.lineWidth = glWidth;
          context.strokeStyle = glColor;

          if (context.setLineDash) {
            context.setLineDash(itemToDraw.glBorderDash);
            context.lineDashOffset = itemToDraw.glBorderDashOffset;
          }

          context.beginPath();

          if (gridLines.drawTicks) {
            context.moveTo(itemToDraw.tx1, itemToDraw.ty1);
            context.lineTo(itemToDraw.tx2, itemToDraw.ty2);
          }

          if (gridLines.drawOnChartArea) {
            context.moveTo(itemToDraw.x1, itemToDraw.y1);
            context.lineTo(itemToDraw.x2, itemToDraw.y2);
          }

          context.stroke();
          context.restore();
        }

        if (optionTicks.display) {
          // Make sure we draw text in the correct color and font
          context.save();
          context.translate(itemToDraw.labelX, itemToDraw.labelY);
          context.rotate(itemToDraw.rotation);
          context.font = itemToDraw.major ? majorTickFont.string : tickFont.string;
          context.fillStyle = itemToDraw.major ? majorTickFontColor : tickFontColor;
          context.textBaseline = 'middle';
          context.textAlign = itemToDraw.textAlign;
          var label = itemToDraw.label;
          var y = itemToDraw.textOffset;

          if (helpers$1.isArray(label)) {
            for (var i = 0; i < label.length; ++i) {
              // We just make sure the multiline element is a string here..
              context.fillText('' + label[i], 0, y);
              y += lineHeight;
            }
          } else {
            context.fillText(label, 0, y);
          }

          context.restore();
        }
      });

      if (scaleLabel.display) {
        // Draw the scale label
        var scaleLabelX;
        var scaleLabelY;
        var rotation = 0;
        var halfLineHeight = scaleLabelFont.lineHeight / 2;

        if (isHorizontal) {
          scaleLabelX = me.left + (me.right - me.left) / 2; // midpoint of the width

          scaleLabelY = position === 'bottom' ? me.bottom - halfLineHeight - scaleLabelPadding.bottom : me.top + halfLineHeight + scaleLabelPadding.top;
        } else {
          var isLeft = position === 'left';
          scaleLabelX = isLeft ? me.left + halfLineHeight + scaleLabelPadding.top : me.right - halfLineHeight - scaleLabelPadding.top;
          scaleLabelY = me.top + (me.bottom - me.top) / 2;
          rotation = isLeft ? -0.5 * Math.PI : 0.5 * Math.PI;
        }

        context.save();
        context.translate(scaleLabelX, scaleLabelY);
        context.rotate(rotation);
        context.textAlign = 'center';
        context.textBaseline = 'middle';
        context.fillStyle = scaleLabelFontColor; // render in correct colour

        context.font = scaleLabelFont.string;
        context.fillText(scaleLabel.labelString, 0, 0);
        context.restore();
      }

      if (axisWidth) {
        // Draw the line at the edge of the axis
        var firstLineWidth = axisWidth;
        var lastLineWidth = valueAtIndexOrDefault(gridLines.lineWidth, ticks.length - 1, 0);
        var x1, x2, y1, y2;

        if (isHorizontal) {
          x1 = alignPixel(chart, me.left, firstLineWidth) - firstLineWidth / 2;
          x2 = alignPixel(chart, me.right, lastLineWidth) + lastLineWidth / 2;
          y1 = y2 = borderValue;
        } else {
          y1 = alignPixel(chart, me.top, firstLineWidth) - firstLineWidth / 2;
          y2 = alignPixel(chart, me.bottom, lastLineWidth) + lastLineWidth / 2;
          x1 = x2 = borderValue;
        }

        context.lineWidth = axisWidth;
        context.strokeStyle = valueAtIndexOrDefault(gridLines.color, 0);
        context.beginPath();
        context.moveTo(x1, y1);
        context.lineTo(x2, y2);
        context.stroke();
      }
    }
  });
  var defaultConfig = {
    position: 'bottom'
  };
  var scale_category = core_scale.extend({
    /**
    * Internal function to get the correct labels. If data.xLabels or data.yLabels are defined, use those
    * else fall back to data.labels
    * @private
    */
    getLabels: function getLabels() {
      var data = this.chart.data;
      return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels;
    },
    determineDataLimits: function determineDataLimits() {
      var me = this;
      var labels = me.getLabels();
      me.minIndex = 0;
      me.maxIndex = labels.length - 1;
      var findIndex;

      if (me.options.ticks.min !== undefined) {
        // user specified min value
        findIndex = labels.indexOf(me.options.ticks.min);
        me.minIndex = findIndex !== -1 ? findIndex : me.minIndex;
      }

      if (me.options.ticks.max !== undefined) {
        // user specified max value
        findIndex = labels.indexOf(me.options.ticks.max);
        me.maxIndex = findIndex !== -1 ? findIndex : me.maxIndex;
      }

      me.min = labels[me.minIndex];
      me.max = labels[me.maxIndex];
    },
    buildTicks: function buildTicks() {
      var me = this;
      var labels = me.getLabels(); // If we are viewing some subset of labels, slice the original array

      me.ticks = me.minIndex === 0 && me.maxIndex === labels.length - 1 ? labels : labels.slice(me.minIndex, me.maxIndex + 1);
    },
    getLabelForIndex: function getLabelForIndex(index, datasetIndex) {
      var me = this;
      var chart = me.chart;

      if (chart.getDatasetMeta(datasetIndex).controller._getValueScaleId() === me.id) {
        return me.getRightValue(chart.data.datasets[datasetIndex].data[index]);
      }

      return me.ticks[index - me.minIndex];
    },
    // Used to get data value locations.  Value can either be an index or a numerical value
    getPixelForValue: function getPixelForValue(value, index) {
      var me = this;
      var offset = me.options.offset; // 1 is added because we need the length but we have the indexes

      var offsetAmt = Math.max(me.maxIndex + 1 - me.minIndex - (offset ? 0 : 1), 1); // If value is a data object, then index is the index in the data array,
      // not the index of the scale. We need to change that.

      var valueCategory;

      if (value !== undefined && value !== null) {
        valueCategory = me.isHorizontal() ? value.x : value.y;
      }

      if (valueCategory !== undefined || value !== undefined && isNaN(index)) {
        var labels = me.getLabels();
        value = valueCategory || value;
        var idx = labels.indexOf(value);
        index = idx !== -1 ? idx : index;
      }

      if (me.isHorizontal()) {
        var valueWidth = me.width / offsetAmt;
        var widthOffset = valueWidth * (index - me.minIndex);

        if (offset) {
          widthOffset += valueWidth / 2;
        }

        return me.left + widthOffset;
      }

      var valueHeight = me.height / offsetAmt;
      var heightOffset = valueHeight * (index - me.minIndex);

      if (offset) {
        heightOffset += valueHeight / 2;
      }

      return me.top + heightOffset;
    },
    getPixelForTick: function getPixelForTick(index) {
      return this.getPixelForValue(this.ticks[index], index + this.minIndex, null);
    },
    getValueForPixel: function getValueForPixel(pixel) {
      var me = this;
      var offset = me.options.offset;
      var value;
      var offsetAmt = Math.max(me._ticks.length - (offset ? 0 : 1), 1);
      var horz = me.isHorizontal();
      var valueDimension = (horz ? me.width : me.height) / offsetAmt;
      pixel -= horz ? me.left : me.top;

      if (offset) {
        pixel -= valueDimension / 2;
      }

      if (pixel <= 0) {
        value = 0;
      } else {
        value = Math.round(pixel / valueDimension);
      }

      return value + me.minIndex;
    },
    getBasePixel: function getBasePixel() {
      return this.bottom;
    }
  }); // INTERNAL: static default options, registered in src/index.js

  var _defaults = defaultConfig;
  scale_category._defaults = _defaults;
  var noop = helpers$1.noop;
  var isNullOrUndef = helpers$1.isNullOrUndef;
  /**
   * Generate a set of linear ticks
   * @param generationOptions the options used to generate the ticks
   * @param dataRange the range of the data
   * @returns {number[]} array of tick values
   */

  function generateTicks(generationOptions, dataRange) {
    var ticks = []; // To get a "nice" value for the tick spacing, we will use the appropriately named
    // "nice number" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks
    // for details.

    var MIN_SPACING = 1e-14;
    var stepSize = generationOptions.stepSize;
    var unit = stepSize || 1;
    var maxNumSpaces = generationOptions.maxTicks - 1;
    var min = generationOptions.min;
    var max = generationOptions.max;
    var precision = generationOptions.precision;
    var rmin = dataRange.min;
    var rmax = dataRange.max;
    var spacing = helpers$1.niceNum((rmax - rmin) / maxNumSpaces / unit) * unit;
    var factor, niceMin, niceMax, numSpaces; // Beyond MIN_SPACING floating point numbers being to lose precision
    // such that we can't do the math necessary to generate ticks

    if (spacing < MIN_SPACING && isNullOrUndef(min) && isNullOrUndef(max)) {
      return [rmin, rmax];
    }

    numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);

    if (numSpaces > maxNumSpaces) {
      // If the calculated num of spaces exceeds maxNumSpaces, recalculate it
      spacing = helpers$1.niceNum(numSpaces * spacing / maxNumSpaces / unit) * unit;
    }

    if (stepSize || isNullOrUndef(precision)) {
      // If a precision is not specified, calculate factor based on spacing
      factor = Math.pow(10, helpers$1._decimalPlaces(spacing));
    } else {
      // If the user specified a precision, round to that number of decimal places
      factor = Math.pow(10, precision);
      spacing = Math.ceil(spacing * factor) / factor;
    }

    niceMin = Math.floor(rmin / spacing) * spacing;
    niceMax = Math.ceil(rmax / spacing) * spacing; // If min, max and stepSize is set and they make an evenly spaced scale use it.

    if (stepSize) {
      // If very close to our whole number, use it.
      if (!isNullOrUndef(min) && helpers$1.almostWhole(min / spacing, spacing / 1000)) {
        niceMin = min;
      }

      if (!isNullOrUndef(max) && helpers$1.almostWhole(max / spacing, spacing / 1000)) {
        niceMax = max;
      }
    }

    numSpaces = (niceMax - niceMin) / spacing; // If very close to our rounded value, use it.

    if (helpers$1.almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {
      numSpaces = Math.round(numSpaces);
    } else {
      numSpaces = Math.ceil(numSpaces);
    }

    niceMin = Math.round(niceMin * factor) / factor;
    niceMax = Math.round(niceMax * factor) / factor;
    ticks.push(isNullOrUndef(min) ? niceMin : min);

    for (var j = 1; j < numSpaces; ++j) {
      ticks.push(Math.round((niceMin + j * spacing) * factor) / factor);
    }

    ticks.push(isNullOrUndef(max) ? niceMax : max);
    return ticks;
  }

  var scale_linearbase = core_scale.extend({
    getRightValue: function getRightValue(value) {
      if (typeof value === 'string') {
        return +value;
      }

      return core_scale.prototype.getRightValue.call(this, value);
    },
    handleTickRangeOptions: function handleTickRangeOptions() {
      var me = this;
      var opts = me.options;
      var tickOpts = opts.ticks; // If we are forcing it to begin at 0, but 0 will already be rendered on the chart,
      // do nothing since that would make the chart weird. If the user really wants a weird chart
      // axis, they can manually override it

      if (tickOpts.beginAtZero) {
        var minSign = helpers$1.sign(me.min);
        var maxSign = helpers$1.sign(me.max);

        if (minSign < 0 && maxSign < 0) {
          // move the top up to 0
          me.max = 0;
        } else if (minSign > 0 && maxSign > 0) {
          // move the bottom down to 0
          me.min = 0;
        }
      }

      var setMin = tickOpts.min !== undefined || tickOpts.suggestedMin !== undefined;
      var setMax = tickOpts.max !== undefined || tickOpts.suggestedMax !== undefined;

      if (tickOpts.min !== undefined) {
        me.min = tickOpts.min;
      } else if (tickOpts.suggestedMin !== undefined) {
        if (me.min === null) {
          me.min = tickOpts.suggestedMin;
        } else {
          me.min = Math.min(me.min, tickOpts.suggestedMin);
        }
      }

      if (tickOpts.max !== undefined) {
        me.max = tickOpts.max;
      } else if (tickOpts.suggestedMax !== undefined) {
        if (me.max === null) {
          me.max = tickOpts.suggestedMax;
        } else {
          me.max = Math.max(me.max, tickOpts.suggestedMax);
        }
      }

      if (setMin !== setMax) {
        // We set the min or the max but not both.
        // So ensure that our range is good
        // Inverted or 0 length range can happen when
        // ticks.min is set, and no datasets are visible
        if (me.min >= me.max) {
          if (setMin) {
            me.max = me.min + 1;
          } else {
            me.min = me.max - 1;
          }
        }
      }

      if (me.min === me.max) {
        me.max++;

        if (!tickOpts.beginAtZero) {
          me.min--;
        }
      }
    },
    getTickLimit: function getTickLimit() {
      var me = this;
      var tickOpts = me.options.ticks;
      var stepSize = tickOpts.stepSize;
      var maxTicksLimit = tickOpts.maxTicksLimit;
      var maxTicks;

      if (stepSize) {
        maxTicks = Math.ceil(me.max / stepSize) - Math.floor(me.min / stepSize) + 1;
      } else {
        maxTicks = me._computeTickLimit();
        maxTicksLimit = maxTicksLimit || 11;
      }

      if (maxTicksLimit) {
        maxTicks = Math.min(maxTicksLimit, maxTicks);
      }

      return maxTicks;
    },
    _computeTickLimit: function _computeTickLimit() {
      return Number.POSITIVE_INFINITY;
    },
    handleDirectionalChanges: noop,
    buildTicks: function buildTicks() {
      var me = this;
      var opts = me.options;
      var tickOpts = opts.ticks; // Figure out what the max number of ticks we can support it is based on the size of
      // the axis area. For now, we say that the minimum tick spacing in pixels must be 40
      // We also limit the maximum number of ticks to 11 which gives a nice 10 squares on
      // the graph. Make sure we always have at least 2 ticks

      var maxTicks = me.getTickLimit();
      maxTicks = Math.max(2, maxTicks);
      var numericGeneratorOptions = {
        maxTicks: maxTicks,
        min: tickOpts.min,
        max: tickOpts.max,
        precision: tickOpts.precision,
        stepSize: helpers$1.valueOrDefault(tickOpts.fixedStepSize, tickOpts.stepSize)
      };
      var ticks = me.ticks = generateTicks(numericGeneratorOptions, me);
      me.handleDirectionalChanges(); // At this point, we need to update our max and min given the tick values since we have expanded the
      // range of the scale

      me.max = helpers$1.max(ticks);
      me.min = helpers$1.min(ticks);

      if (tickOpts.reverse) {
        ticks.reverse();
        me.start = me.max;
        me.end = me.min;
      } else {
        me.start = me.min;
        me.end = me.max;
      }
    },
    convertTicksToLabels: function convertTicksToLabels() {
      var me = this;
      me.ticksAsNumbers = me.ticks.slice();
      me.zeroLineIndex = me.ticks.indexOf(0);
      core_scale.prototype.convertTicksToLabels.call(me);
    }
  });
  var defaultConfig$1 = {
    position: 'left',
    ticks: {
      callback: core_ticks.formatters.linear
    }
  };
  var scale_linear = scale_linearbase.extend({
    determineDataLimits: function determineDataLimits() {
      var me = this;
      var opts = me.options;
      var chart = me.chart;
      var data = chart.data;
      var datasets = data.datasets;
      var isHorizontal = me.isHorizontal();
      var DEFAULT_MIN = 0;
      var DEFAULT_MAX = 1;

      function IDMatches(meta) {
        return isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;
      } // First Calculate the range


      me.min = null;
      me.max = null;
      var hasStacks = opts.stacked;

      if (hasStacks === undefined) {
        helpers$1.each(datasets, function (dataset, datasetIndex) {
          if (hasStacks) {
            return;
          }

          var meta = chart.getDatasetMeta(datasetIndex);

          if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) && meta.stack !== undefined) {
            hasStacks = true;
          }
        });
      }

      if (opts.stacked || hasStacks) {
        var valuesPerStack = {};
        helpers$1.each(datasets, function (dataset, datasetIndex) {
          var meta = chart.getDatasetMeta(datasetIndex);
          var key = [meta.type, // we have a separate stack for stack=undefined datasets when the opts.stacked is undefined
          opts.stacked === undefined && meta.stack === undefined ? datasetIndex : '', meta.stack].join('.');

          if (valuesPerStack[key] === undefined) {
            valuesPerStack[key] = {
              positiveValues: [],
              negativeValues: []
            };
          } // Store these per type


          var positiveValues = valuesPerStack[key].positiveValues;
          var negativeValues = valuesPerStack[key].negativeValues;

          if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {
            helpers$1.each(dataset.data, function (rawValue, index) {
              var value = +me.getRightValue(rawValue);

              if (isNaN(value) || meta.data[index].hidden) {
                return;
              }

              positiveValues[index] = positiveValues[index] || 0;
              negativeValues[index] = negativeValues[index] || 0;

              if (opts.relativePoints) {
                positiveValues[index] = 100;
              } else if (value < 0) {
                negativeValues[index] += value;
              } else {
                positiveValues[index] += value;
              }
            });
          }
        });
        helpers$1.each(valuesPerStack, function (valuesForType) {
          var values = valuesForType.positiveValues.concat(valuesForType.negativeValues);
          var minVal = helpers$1.min(values);
          var maxVal = helpers$1.max(values);
          me.min = me.min === null ? minVal : Math.min(me.min, minVal);
          me.max = me.max === null ? maxVal : Math.max(me.max, maxVal);
        });
      } else {
        helpers$1.each(datasets, function (dataset, datasetIndex) {
          var meta = chart.getDatasetMeta(datasetIndex);

          if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {
            helpers$1.each(dataset.data, function (rawValue, index) {
              var value = +me.getRightValue(rawValue);

              if (isNaN(value) || meta.data[index].hidden) {
                return;
              }

              if (me.min === null) {
                me.min = value;
              } else if (value < me.min) {
                me.min = value;
              }

              if (me.max === null) {
                me.max = value;
              } else if (value > me.max) {
                me.max = value;
              }
            });
          }
        });
      }

      me.min = isFinite(me.min) && !isNaN(me.min) ? me.min : DEFAULT_MIN;
      me.max = isFinite(me.max) && !isNaN(me.max) ? me.max : DEFAULT_MAX; // Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero

      this.handleTickRangeOptions();
    },
    // Returns the maximum number of ticks based on the scale dimension
    _computeTickLimit: function _computeTickLimit() {
      var me = this;
      var tickFont;

      if (me.isHorizontal()) {
        return Math.ceil(me.width / 40);
      }

      tickFont = helpers$1.options._parseFont(me.options.ticks);
      return Math.ceil(me.height / tickFont.lineHeight);
    },
    // Called after the ticks are built. We need
    handleDirectionalChanges: function handleDirectionalChanges() {
      if (!this.isHorizontal()) {
        // We are in a vertical orientation. The top value is the highest. So reverse the array
        this.ticks.reverse();
      }
    },
    getLabelForIndex: function getLabelForIndex(index, datasetIndex) {
      return +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);
    },
    // Utils
    getPixelForValue: function getPixelForValue(value) {
      // This must be called after fit has been run so that
      // this.left, this.top, this.right, and this.bottom have been defined
      var me = this;
      var start = me.start;
      var rightValue = +me.getRightValue(value);
      var pixel;
      var range = me.end - start;

      if (me.isHorizontal()) {
        pixel = me.left + me.width / range * (rightValue - start);
      } else {
        pixel = me.bottom - me.height / range * (rightValue - start);
      }

      return pixel;
    },
    getValueForPixel: function getValueForPixel(pixel) {
      var me = this;
      var isHorizontal = me.isHorizontal();
      var innerDimension = isHorizontal ? me.width : me.height;
      var offset = (isHorizontal ? pixel - me.left : me.bottom - pixel) / innerDimension;
      return me.start + (me.end - me.start) * offset;
    },
    getPixelForTick: function getPixelForTick(index) {
      return this.getPixelForValue(this.ticksAsNumbers[index]);
    }
  }); // INTERNAL: static default options, registered in src/index.js

  var _defaults$1 = defaultConfig$1;
  scale_linear._defaults = _defaults$1;
  var valueOrDefault$a = helpers$1.valueOrDefault;
  /**
   * Generate a set of logarithmic ticks
   * @param generationOptions the options used to generate the ticks
   * @param dataRange the range of the data
   * @returns {number[]} array of tick values
   */

  function generateTicks$1(generationOptions, dataRange) {
    var ticks = [];
    var tickVal = valueOrDefault$a(generationOptions.min, Math.pow(10, Math.floor(helpers$1.log10(dataRange.min))));
    var endExp = Math.floor(helpers$1.log10(dataRange.max));
    var endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));
    var exp, significand;

    if (tickVal === 0) {
      exp = Math.floor(helpers$1.log10(dataRange.minNotZero));
      significand = Math.floor(dataRange.minNotZero / Math.pow(10, exp));
      ticks.push(tickVal);
      tickVal = significand * Math.pow(10, exp);
    } else {
      exp = Math.floor(helpers$1.log10(tickVal));
      significand = Math.floor(tickVal / Math.pow(10, exp));
    }

    var precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;

    do {
      ticks.push(tickVal);
      ++significand;

      if (significand === 10) {
        significand = 1;
        ++exp;
        precision = exp >= 0 ? 1 : precision;
      }

      tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;
    } while (exp < endExp || exp === endExp && significand < endSignificand);

    var lastTick = valueOrDefault$a(generationOptions.max, tickVal);
    ticks.push(lastTick);
    return ticks;
  }

  var defaultConfig$2 = {
    position: 'left',
    // label settings
    ticks: {
      callback: core_ticks.formatters.logarithmic
    }
  }; // TODO(v3): change this to positiveOrDefault

  function nonNegativeOrDefault(value, defaultValue) {
    return helpers$1.isFinite(value) && value >= 0 ? value : defaultValue;
  }

  var scale_logarithmic = core_scale.extend({
    determineDataLimits: function determineDataLimits() {
      var me = this;
      var opts = me.options;
      var chart = me.chart;
      var data = chart.data;
      var datasets = data.datasets;
      var isHorizontal = me.isHorizontal();

      function IDMatches(meta) {
        return isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;
      } // Calculate Range


      me.min = null;
      me.max = null;
      me.minNotZero = null;
      var hasStacks = opts.stacked;

      if (hasStacks === undefined) {
        helpers$1.each(datasets, function (dataset, datasetIndex) {
          if (hasStacks) {
            return;
          }

          var meta = chart.getDatasetMeta(datasetIndex);

          if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) && meta.stack !== undefined) {
            hasStacks = true;
          }
        });
      }

      if (opts.stacked || hasStacks) {
        var valuesPerStack = {};
        helpers$1.each(datasets, function (dataset, datasetIndex) {
          var meta = chart.getDatasetMeta(datasetIndex);
          var key = [meta.type, // we have a separate stack for stack=undefined datasets when the opts.stacked is undefined
          opts.stacked === undefined && meta.stack === undefined ? datasetIndex : '', meta.stack].join('.');

          if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {
            if (valuesPerStack[key] === undefined) {
              valuesPerStack[key] = [];
            }

            helpers$1.each(dataset.data, function (rawValue, index) {
              var values = valuesPerStack[key];
              var value = +me.getRightValue(rawValue); // invalid, hidden and negative values are ignored

              if (isNaN(value) || meta.data[index].hidden || value < 0) {
                return;
              }

              values[index] = values[index] || 0;
              values[index] += value;
            });
          }
        });
        helpers$1.each(valuesPerStack, function (valuesForType) {
          if (valuesForType.length > 0) {
            var minVal = helpers$1.min(valuesForType);
            var maxVal = helpers$1.max(valuesForType);
            me.min = me.min === null ? minVal : Math.min(me.min, minVal);
            me.max = me.max === null ? maxVal : Math.max(me.max, maxVal);
          }
        });
      } else {
        helpers$1.each(datasets, function (dataset, datasetIndex) {
          var meta = chart.getDatasetMeta(datasetIndex);

          if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {
            helpers$1.each(dataset.data, function (rawValue, index) {
              var value = +me.getRightValue(rawValue); // invalid, hidden and negative values are ignored

              if (isNaN(value) || meta.data[index].hidden || value < 0) {
                return;
              }

              if (me.min === null) {
                me.min = value;
              } else if (value < me.min) {
                me.min = value;
              }

              if (me.max === null) {
                me.max = value;
              } else if (value > me.max) {
                me.max = value;
              }

              if (value !== 0 && (me.minNotZero === null || value < me.minNotZero)) {
                me.minNotZero = value;
              }
            });
          }
        });
      } // Common base implementation to handle ticks.min, ticks.max


      this.handleTickRangeOptions();
    },
    handleTickRangeOptions: function handleTickRangeOptions() {
      var me = this;
      var tickOpts = me.options.ticks;
      var DEFAULT_MIN = 1;
      var DEFAULT_MAX = 10;
      me.min = nonNegativeOrDefault(tickOpts.min, me.min);
      me.max = nonNegativeOrDefault(tickOpts.max, me.max);

      if (me.min === me.max) {
        if (me.min !== 0 && me.min !== null) {
          me.min = Math.pow(10, Math.floor(helpers$1.log10(me.min)) - 1);
          me.max = Math.pow(10, Math.floor(helpers$1.log10(me.max)) + 1);
        } else {
          me.min = DEFAULT_MIN;
          me.max = DEFAULT_MAX;
        }
      }

      if (me.min === null) {
        me.min = Math.pow(10, Math.floor(helpers$1.log10(me.max)) - 1);
      }

      if (me.max === null) {
        me.max = me.min !== 0 ? Math.pow(10, Math.floor(helpers$1.log10(me.min)) + 1) : DEFAULT_MAX;
      }

      if (me.minNotZero === null) {
        if (me.min > 0) {
          me.minNotZero = me.min;
        } else if (me.max < 1) {
          me.minNotZero = Math.pow(10, Math.floor(helpers$1.log10(me.max)));
        } else {
          me.minNotZero = DEFAULT_MIN;
        }
      }
    },
    buildTicks: function buildTicks() {
      var me = this;
      var tickOpts = me.options.ticks;
      var reverse = !me.isHorizontal();
      var generationOptions = {
        min: nonNegativeOrDefault(tickOpts.min),
        max: nonNegativeOrDefault(tickOpts.max)
      };
      var ticks = me.ticks = generateTicks$1(generationOptions, me); // At this point, we need to update our max and min given the tick values since we have expanded the
      // range of the scale

      me.max = helpers$1.max(ticks);
      me.min = helpers$1.min(ticks);

      if (tickOpts.reverse) {
        reverse = !reverse;
        me.start = me.max;
        me.end = me.min;
      } else {
        me.start = me.min;
        me.end = me.max;
      }

      if (reverse) {
        ticks.reverse();
      }
    },
    convertTicksToLabels: function convertTicksToLabels() {
      this.tickValues = this.ticks.slice();
      core_scale.prototype.convertTicksToLabels.call(this);
    },
    // Get the correct tooltip label
    getLabelForIndex: function getLabelForIndex(index, datasetIndex) {
      return +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);
    },
    getPixelForTick: function getPixelForTick(index) {
      return this.getPixelForValue(this.tickValues[index]);
    },

    /**
     * Returns the value of the first tick.
     * @param {number} value - The minimum not zero value.
     * @return {number} The first tick value.
     * @private
     */
    _getFirstTickValue: function _getFirstTickValue(value) {
      var exp = Math.floor(helpers$1.log10(value));
      var significand = Math.floor(value / Math.pow(10, exp));
      return significand * Math.pow(10, exp);
    },
    getPixelForValue: function getPixelForValue(value) {
      var me = this;
      var tickOpts = me.options.ticks;
      var reverse = tickOpts.reverse;
      var log10 = helpers$1.log10;

      var firstTickValue = me._getFirstTickValue(me.minNotZero);

      var offset = 0;
      var innerDimension, pixel, start, end, sign;
      value = +me.getRightValue(value);

      if (reverse) {
        start = me.end;
        end = me.start;
        sign = -1;
      } else {
        start = me.start;
        end = me.end;
        sign = 1;
      }

      if (me.isHorizontal()) {
        innerDimension = me.width;
        pixel = reverse ? me.right : me.left;
      } else {
        innerDimension = me.height;
        sign *= -1; // invert, since the upper-left corner of the canvas is at pixel (0, 0)

        pixel = reverse ? me.top : me.bottom;
      }

      if (value !== start) {
        if (start === 0) {
          // include zero tick
          offset = valueOrDefault$a(tickOpts.fontSize, core_defaults.global.defaultFontSize);
          innerDimension -= offset;
          start = firstTickValue;
        }

        if (value !== 0) {
          offset += innerDimension / (log10(end) - log10(start)) * (log10(value) - log10(start));
        }

        pixel += sign * offset;
      }

      return pixel;
    },
    getValueForPixel: function getValueForPixel(pixel) {
      var me = this;
      var tickOpts = me.options.ticks;
      var reverse = tickOpts.reverse;
      var log10 = helpers$1.log10;

      var firstTickValue = me._getFirstTickValue(me.minNotZero);

      var innerDimension, start, end, value;

      if (reverse) {
        start = me.end;
        end = me.start;
      } else {
        start = me.start;
        end = me.end;
      }

      if (me.isHorizontal()) {
        innerDimension = me.width;
        value = reverse ? me.right - pixel : pixel - me.left;
      } else {
        innerDimension = me.height;
        value = reverse ? pixel - me.top : me.bottom - pixel;
      }

      if (value !== start) {
        if (start === 0) {
          // include zero tick
          var offset = valueOrDefault$a(tickOpts.fontSize, core_defaults.global.defaultFontSize);
          value -= offset;
          innerDimension -= offset;
          start = firstTickValue;
        }

        value *= log10(end) - log10(start);
        value /= innerDimension;
        value = Math.pow(10, log10(start) + value);
      }

      return value;
    }
  }); // INTERNAL: static default options, registered in src/index.js

  var _defaults$2 = defaultConfig$2;
  scale_logarithmic._defaults = _defaults$2;
  var valueOrDefault$b = helpers$1.valueOrDefault;
  var valueAtIndexOrDefault$1 = helpers$1.valueAtIndexOrDefault;
  var resolve$7 = helpers$1.options.resolve;
  var defaultConfig$3 = {
    display: true,
    // Boolean - Whether to animate scaling the chart from the centre
    animate: true,
    position: 'chartArea',
    angleLines: {
      display: true,
      color: 'rgba(0, 0, 0, 0.1)',
      lineWidth: 1,
      borderDash: [],
      borderDashOffset: 0.0
    },
    gridLines: {
      circular: false
    },
    // label settings
    ticks: {
      // Boolean - Show a backdrop to the scale label
      showLabelBackdrop: true,
      // String - The colour of the label backdrop
      backdropColor: 'rgba(255,255,255,0.75)',
      // Number - The backdrop padding above & below the label in pixels
      backdropPaddingY: 2,
      // Number - The backdrop padding to the side of the label in pixels
      backdropPaddingX: 2,
      callback: core_ticks.formatters.linear
    },
    pointLabels: {
      // Boolean - if true, show point labels
      display: true,
      // Number - Point label font size in pixels
      fontSize: 10,
      // Function - Used to convert point labels
      callback: function callback(label) {
        return label;
      }
    }
  };

  function getValueCount(scale) {
    var opts = scale.options;
    return opts.angleLines.display || opts.pointLabels.display ? scale.chart.data.labels.length : 0;
  }

  function getTickBackdropHeight(opts) {
    var tickOpts = opts.ticks;

    if (tickOpts.display && opts.display) {
      return valueOrDefault$b(tickOpts.fontSize, core_defaults.global.defaultFontSize) + tickOpts.backdropPaddingY * 2;
    }

    return 0;
  }

  function measureLabelSize(ctx, lineHeight, label) {
    if (helpers$1.isArray(label)) {
      return {
        w: helpers$1.longestText(ctx, ctx.font, label),
        h: label.length * lineHeight
      };
    }

    return {
      w: ctx.measureText(label).width,
      h: lineHeight
    };
  }

  function determineLimits(angle, pos, size, min, max) {
    if (angle === min || angle === max) {
      return {
        start: pos - size / 2,
        end: pos + size / 2
      };
    } else if (angle < min || angle > max) {
      return {
        start: pos - size,
        end: pos
      };
    }

    return {
      start: pos,
      end: pos + size
    };
  }
  /**
   * Helper function to fit a radial linear scale with point labels
   */


  function fitWithPointLabels(scale) {
    // Right, this is really confusing and there is a lot of maths going on here
    // The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9
    //
    // Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif
    //
    // Solution:
    //
    // We assume the radius of the polygon is half the size of the canvas at first
    // at each index we check if the text overlaps.
    //
    // Where it does, we store that angle and that index.
    //
    // After finding the largest index and angle we calculate how much we need to remove
    // from the shape radius to move the point inwards by that x.
    //
    // We average the left and right distances to get the maximum shape radius that can fit in the box
    // along with labels.
    //
    // Once we have that, we can find the centre point for the chart, by taking the x text protrusion
    // on each side, removing that from the size, halving it and adding the left x protrusion width.
    //
    // This will mean we have a shape fitted to the canvas, as large as it can be with the labels
    // and position it in the most space efficient manner
    //
    // https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif
    var plFont = helpers$1.options._parseFont(scale.options.pointLabels); // Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.
    // Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points


    var furthestLimits = {
      l: 0,
      r: scale.width,
      t: 0,
      b: scale.height - scale.paddingTop
    };
    var furthestAngles = {};
    var i, textSize, pointPosition;
    scale.ctx.font = plFont.string;
    scale._pointLabelSizes = [];
    var valueCount = getValueCount(scale);

    for (i = 0; i < valueCount; i++) {
      pointPosition = scale.getPointPosition(i, scale.drawingArea + 5);
      textSize = measureLabelSize(scale.ctx, plFont.lineHeight, scale.pointLabels[i] || '');
      scale._pointLabelSizes[i] = textSize; // Add quarter circle to make degree 0 mean top of circle

      var angleRadians = scale.getIndexAngle(i);
      var angle = helpers$1.toDegrees(angleRadians) % 360;
      var hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);
      var vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);

      if (hLimits.start < furthestLimits.l) {
        furthestLimits.l = hLimits.start;
        furthestAngles.l = angleRadians;
      }

      if (hLimits.end > furthestLimits.r) {
        furthestLimits.r = hLimits.end;
        furthestAngles.r = angleRadians;
      }

      if (vLimits.start < furthestLimits.t) {
        furthestLimits.t = vLimits.start;
        furthestAngles.t = angleRadians;
      }

      if (vLimits.end > furthestLimits.b) {
        furthestLimits.b = vLimits.end;
        furthestAngles.b = angleRadians;
      }
    }

    scale.setReductions(scale.drawingArea, furthestLimits, furthestAngles);
  }

  function getTextAlignForAngle(angle) {
    if (angle === 0 || angle === 180) {
      return 'center';
    } else if (angle < 180) {
      return 'left';
    }

    return 'right';
  }

  function fillText(ctx, text, position, lineHeight) {
    var y = position.y + lineHeight / 2;
    var i, ilen;

    if (helpers$1.isArray(text)) {
      for (i = 0, ilen = text.length; i < ilen; ++i) {
        ctx.fillText(text[i], position.x, y);
        y += lineHeight;
      }
    } else {
      ctx.fillText(text, position.x, y);
    }
  }

  function adjustPointPositionForLabelHeight(angle, textSize, position) {
    if (angle === 90 || angle === 270) {
      position.y -= textSize.h / 2;
    } else if (angle > 270 || angle < 90) {
      position.y -= textSize.h;
    }
  }

  function drawPointLabels(scale) {
    var ctx = scale.ctx;
    var opts = scale.options;
    var angleLineOpts = opts.angleLines;
    var gridLineOpts = opts.gridLines;
    var pointLabelOpts = opts.pointLabels;
    var lineWidth = valueOrDefault$b(angleLineOpts.lineWidth, gridLineOpts.lineWidth);
    var lineColor = valueOrDefault$b(angleLineOpts.color, gridLineOpts.color);
    var tickBackdropHeight = getTickBackdropHeight(opts);
    ctx.save();
    ctx.lineWidth = lineWidth;
    ctx.strokeStyle = lineColor;

    if (ctx.setLineDash) {
      ctx.setLineDash(resolve$7([angleLineOpts.borderDash, gridLineOpts.borderDash, []]));
      ctx.lineDashOffset = resolve$7([angleLineOpts.borderDashOffset, gridLineOpts.borderDashOffset, 0.0]);
    }

    var outerDistance = scale.getDistanceFromCenterForValue(opts.ticks.reverse ? scale.min : scale.max); // Point Label Font

    var plFont = helpers$1.options._parseFont(pointLabelOpts);

    ctx.font = plFont.string;
    ctx.textBaseline = 'middle';

    for (var i = getValueCount(scale) - 1; i >= 0; i--) {
      if (angleLineOpts.display && lineWidth && lineColor) {
        var outerPosition = scale.getPointPosition(i, outerDistance);
        ctx.beginPath();
        ctx.moveTo(scale.xCenter, scale.yCenter);
        ctx.lineTo(outerPosition.x, outerPosition.y);
        ctx.stroke();
      }

      if (pointLabelOpts.display) {
        // Extra pixels out for some label spacing
        var extra = i === 0 ? tickBackdropHeight / 2 : 0;
        var pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + 5); // Keep this in loop since we may support array properties here

        var pointLabelFontColor = valueAtIndexOrDefault$1(pointLabelOpts.fontColor, i, core_defaults.global.defaultFontColor);
        ctx.fillStyle = pointLabelFontColor;
        var angleRadians = scale.getIndexAngle(i);
        var angle = helpers$1.toDegrees(angleRadians);
        ctx.textAlign = getTextAlignForAngle(angle);
        adjustPointPositionForLabelHeight(angle, scale._pointLabelSizes[i], pointLabelPosition);
        fillText(ctx, scale.pointLabels[i] || '', pointLabelPosition, plFont.lineHeight);
      }
    }

    ctx.restore();
  }

  function drawRadiusLine(scale, gridLineOpts, radius, index) {
    var ctx = scale.ctx;
    var circular = gridLineOpts.circular;
    var valueCount = getValueCount(scale);
    var lineColor = valueAtIndexOrDefault$1(gridLineOpts.color, index - 1);
    var lineWidth = valueAtIndexOrDefault$1(gridLineOpts.lineWidth, index - 1);
    var pointPosition;

    if (!circular && !valueCount || !lineColor || !lineWidth) {
      return;
    }

    ctx.save();
    ctx.strokeStyle = lineColor;
    ctx.lineWidth = lineWidth;

    if (ctx.setLineDash) {
      ctx.setLineDash(gridLineOpts.borderDash || []);
      ctx.lineDashOffset = gridLineOpts.borderDashOffset || 0.0;
    }

    ctx.beginPath();

    if (circular) {
      // Draw circular arcs between the points
      ctx.arc(scale.xCenter, scale.yCenter, radius, 0, Math.PI * 2);
    } else {
      // Draw straight lines connecting each index
      pointPosition = scale.getPointPosition(0, radius);
      ctx.moveTo(pointPosition.x, pointPosition.y);

      for (var i = 1; i < valueCount; i++) {
        pointPosition = scale.getPointPosition(i, radius);
        ctx.lineTo(pointPosition.x, pointPosition.y);
      }
    }

    ctx.closePath();
    ctx.stroke();
    ctx.restore();
  }

  function numberOrZero(param) {
    return helpers$1.isNumber(param) ? param : 0;
  }

  var scale_radialLinear = scale_linearbase.extend({
    setDimensions: function setDimensions() {
      var me = this; // Set the unconstrained dimension before label rotation

      me.width = me.maxWidth;
      me.height = me.maxHeight;
      me.paddingTop = getTickBackdropHeight(me.options) / 2;
      me.xCenter = Math.floor(me.width / 2);
      me.yCenter = Math.floor((me.height - me.paddingTop) / 2);
      me.drawingArea = Math.min(me.height - me.paddingTop, me.width) / 2;
    },
    determineDataLimits: function determineDataLimits() {
      var me = this;
      var chart = me.chart;
      var min = Number.POSITIVE_INFINITY;
      var max = Number.NEGATIVE_INFINITY;
      helpers$1.each(chart.data.datasets, function (dataset, datasetIndex) {
        if (chart.isDatasetVisible(datasetIndex)) {
          var meta = chart.getDatasetMeta(datasetIndex);
          helpers$1.each(dataset.data, function (rawValue, index) {
            var value = +me.getRightValue(rawValue);

            if (isNaN(value) || meta.data[index].hidden) {
              return;
            }

            min = Math.min(value, min);
            max = Math.max(value, max);
          });
        }
      });
      me.min = min === Number.POSITIVE_INFINITY ? 0 : min;
      me.max = max === Number.NEGATIVE_INFINITY ? 0 : max; // Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero

      me.handleTickRangeOptions();
    },
    // Returns the maximum number of ticks based on the scale dimension
    _computeTickLimit: function _computeTickLimit() {
      return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));
    },
    convertTicksToLabels: function convertTicksToLabels() {
      var me = this;
      scale_linearbase.prototype.convertTicksToLabels.call(me); // Point labels

      me.pointLabels = me.chart.data.labels.map(me.options.pointLabels.callback, me);
    },
    getLabelForIndex: function getLabelForIndex(index, datasetIndex) {
      return +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);
    },
    fit: function fit() {
      var me = this;
      var opts = me.options;

      if (opts.display && opts.pointLabels.display) {
        fitWithPointLabels(me);
      } else {
        me.setCenterPoint(0, 0, 0, 0);
      }
    },

    /**
     * Set radius reductions and determine new radius and center point
     * @private
     */
    setReductions: function setReductions(largestPossibleRadius, furthestLimits, furthestAngles) {
      var me = this;
      var radiusReductionLeft = furthestLimits.l / Math.sin(furthestAngles.l);
      var radiusReductionRight = Math.max(furthestLimits.r - me.width, 0) / Math.sin(furthestAngles.r);
      var radiusReductionTop = -furthestLimits.t / Math.cos(furthestAngles.t);
      var radiusReductionBottom = -Math.max(furthestLimits.b - (me.height - me.paddingTop), 0) / Math.cos(furthestAngles.b);
      radiusReductionLeft = numberOrZero(radiusReductionLeft);
      radiusReductionRight = numberOrZero(radiusReductionRight);
      radiusReductionTop = numberOrZero(radiusReductionTop);
      radiusReductionBottom = numberOrZero(radiusReductionBottom);
      me.drawingArea = Math.min(Math.floor(largestPossibleRadius - (radiusReductionLeft + radiusReductionRight) / 2), Math.floor(largestPossibleRadius - (radiusReductionTop + radiusReductionBottom) / 2));
      me.setCenterPoint(radiusReductionLeft, radiusReductionRight, radiusReductionTop, radiusReductionBottom);
    },
    setCenterPoint: function setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {
      var me = this;
      var maxRight = me.width - rightMovement - me.drawingArea;
      var maxLeft = leftMovement + me.drawingArea;
      var maxTop = topMovement + me.drawingArea;
      var maxBottom = me.height - me.paddingTop - bottomMovement - me.drawingArea;
      me.xCenter = Math.floor((maxLeft + maxRight) / 2 + me.left);
      me.yCenter = Math.floor((maxTop + maxBottom) / 2 + me.top + me.paddingTop);
    },
    getIndexAngle: function getIndexAngle(index) {
      var angleMultiplier = Math.PI * 2 / getValueCount(this);
      var startAngle = this.chart.options && this.chart.options.startAngle ? this.chart.options.startAngle : 0;
      var startAngleRadians = startAngle * Math.PI * 2 / 360; // Start from the top instead of right, so remove a quarter of the circle

      return index * angleMultiplier + startAngleRadians;
    },
    getDistanceFromCenterForValue: function getDistanceFromCenterForValue(value) {
      var me = this;

      if (value === null) {
        return 0; // null always in center
      } // Take into account half font size + the yPadding of the top value


      var scalingFactor = me.drawingArea / (me.max - me.min);

      if (me.options.ticks.reverse) {
        return (me.max - value) * scalingFactor;
      }

      return (value - me.min) * scalingFactor;
    },
    getPointPosition: function getPointPosition(index, distanceFromCenter) {
      var me = this;
      var thisAngle = me.getIndexAngle(index) - Math.PI / 2;
      return {
        x: Math.cos(thisAngle) * distanceFromCenter + me.xCenter,
        y: Math.sin(thisAngle) * distanceFromCenter + me.yCenter
      };
    },
    getPointPositionForValue: function getPointPositionForValue(index, value) {
      return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));
    },
    getBasePosition: function getBasePosition() {
      var me = this;
      var min = me.min;
      var max = me.max;
      return me.getPointPositionForValue(0, me.beginAtZero ? 0 : min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0);
    },
    draw: function draw() {
      var me = this;
      var opts = me.options;
      var gridLineOpts = opts.gridLines;
      var tickOpts = opts.ticks;

      if (opts.display) {
        var ctx = me.ctx;
        var startAngle = this.getIndexAngle(0);

        var tickFont = helpers$1.options._parseFont(tickOpts);

        if (opts.angleLines.display || opts.pointLabels.display) {
          drawPointLabels(me);
        }

        helpers$1.each(me.ticks, function (label, index) {
          // Don't draw a centre value (if it is minimum)
          if (index > 0 || tickOpts.reverse) {
            var yCenterOffset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]); // Draw circular lines around the scale

            if (gridLineOpts.display && index !== 0) {
              drawRadiusLine(me, gridLineOpts, yCenterOffset, index);
            }

            if (tickOpts.display) {
              var tickFontColor = valueOrDefault$b(tickOpts.fontColor, core_defaults.global.defaultFontColor);
              ctx.font = tickFont.string;
              ctx.save();
              ctx.translate(me.xCenter, me.yCenter);
              ctx.rotate(startAngle);

              if (tickOpts.showLabelBackdrop) {
                var labelWidth = ctx.measureText(label).width;
                ctx.fillStyle = tickOpts.backdropColor;
                ctx.fillRect(-labelWidth / 2 - tickOpts.backdropPaddingX, -yCenterOffset - tickFont.size / 2 - tickOpts.backdropPaddingY, labelWidth + tickOpts.backdropPaddingX * 2, tickFont.size + tickOpts.backdropPaddingY * 2);
              }

              ctx.textAlign = 'center';
              ctx.textBaseline = 'middle';
              ctx.fillStyle = tickFontColor;
              ctx.fillText(label, 0, -yCenterOffset);
              ctx.restore();
            }
          }
        });
      }
    }
  }); // INTERNAL: static default options, registered in src/index.js

  var _defaults$3 = defaultConfig$3;
  scale_radialLinear._defaults = _defaults$3;
  var valueOrDefault$c = helpers$1.valueOrDefault; // Integer constants are from the ES6 spec.

  var MIN_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;
  var MAX_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
  var INTERVALS = {
    millisecond: {
      common: true,
      size: 1,
      steps: [1, 2, 5, 10, 20, 50, 100, 250, 500]
    },
    second: {
      common: true,
      size: 1000,
      steps: [1, 2, 5, 10, 15, 30]
    },
    minute: {
      common: true,
      size: 60000,
      steps: [1, 2, 5, 10, 15, 30]
    },
    hour: {
      common: true,
      size: 3600000,
      steps: [1, 2, 3, 6, 12]
    },
    day: {
      common: true,
      size: 86400000,
      steps: [1, 2, 5]
    },
    week: {
      common: false,
      size: 604800000,
      steps: [1, 2, 3, 4]
    },
    month: {
      common: true,
      size: 2.628e9,
      steps: [1, 2, 3]
    },
    quarter: {
      common: false,
      size: 7.884e9,
      steps: [1, 2, 3, 4]
    },
    year: {
      common: true,
      size: 3.154e10
    }
  };
  var UNITS = Object.keys(INTERVALS);

  function sorter(a, b) {
    return a - b;
  }

  function arrayUnique(items) {
    var hash = {};
    var out = [];
    var i, ilen, item;

    for (i = 0, ilen = items.length; i < ilen; ++i) {
      item = items[i];

      if (!hash[item]) {
        hash[item] = true;
        out.push(item);
      }
    }

    return out;
  }
  /**
   * Returns an array of {time, pos} objects used to interpolate a specific `time` or position
   * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is
   * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other
   * extremity (left + width or top + height). Note that it would be more optimized to directly
   * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need
   * to create the lookup table. The table ALWAYS contains at least two items: min and max.
   *
   * @param {number[]} timestamps - timestamps sorted from lowest to highest.
   * @param {string} distribution - If 'linear', timestamps will be spread linearly along the min
   * and max range, so basically, the table will contains only two items: {min, 0} and {max, 1}.
   * If 'series', timestamps will be positioned at the same distance from each other. In this
   * case, only timestamps that break the time linearity are registered, meaning that in the
   * best case, all timestamps are linear, the table contains only min and max.
   */


  function buildLookupTable(timestamps, min, max, distribution) {
    if (distribution === 'linear' || !timestamps.length) {
      return [{
        time: min,
        pos: 0
      }, {
        time: max,
        pos: 1
      }];
    }

    var table = [];
    var items = [min];
    var i, ilen, prev, curr, next;

    for (i = 0, ilen = timestamps.length; i < ilen; ++i) {
      curr = timestamps[i];

      if (curr > min && curr < max) {
        items.push(curr);
      }
    }

    items.push(max);

    for (i = 0, ilen = items.length; i < ilen; ++i) {
      next = items[i + 1];
      prev = items[i - 1];
      curr = items[i]; // only add points that breaks the scale linearity

      if (prev === undefined || next === undefined || Math.round((next + prev) / 2) !== curr) {
        table.push({
          time: curr,
          pos: i / (ilen - 1)
        });
      }
    }

    return table;
  } // @see adapted from https://www.anujgakhar.com/2014/03/01/binary-search-in-javascript/


  function lookup(table, key, value) {
    var lo = 0;
    var hi = table.length - 1;
    var mid, i0, i1;

    while (lo >= 0 && lo <= hi) {
      mid = lo + hi >> 1;
      i0 = table[mid - 1] || null;
      i1 = table[mid];

      if (!i0) {
        // given value is outside table (before first item)
        return {
          lo: null,
          hi: i1
        };
      } else if (i1[key] < value) {
        lo = mid + 1;
      } else if (i0[key] > value) {
        hi = mid - 1;
      } else {
        return {
          lo: i0,
          hi: i1
        };
      }
    } // given value is outside table (after last item)


    return {
      lo: i1,
      hi: null
    };
  }
  /**
   * Linearly interpolates the given source `value` using the table items `skey` values and
   * returns the associated `tkey` value. For example, interpolate(table, 'time', 42, 'pos')
   * returns the position for a timestamp equal to 42. If value is out of bounds, values at
   * index [0, 1] or [n - 1, n] are used for the interpolation.
   */


  function interpolate$1(table, skey, sval, tkey) {
    var range = lookup(table, skey, sval); // Note: the lookup table ALWAYS contains at least 2 items (min and max)

    var prev = !range.lo ? table[0] : !range.hi ? table[table.length - 2] : range.lo;
    var next = !range.lo ? table[1] : !range.hi ? table[table.length - 1] : range.hi;
    var span = next[skey] - prev[skey];
    var ratio = span ? (sval - prev[skey]) / span : 0;
    var offset = (next[tkey] - prev[tkey]) * ratio;
    return prev[tkey] + offset;
  }

  function toTimestamp(scale, input) {
    var adapter = scale._adapter;
    var options = scale.options.time;
    var parser = options.parser;
    var format = parser || options.format;
    var value = input;

    if (typeof parser === 'function') {
      value = parser(value);
    } // Only parse if its not a timestamp already


    if (!helpers$1.isFinite(value)) {
      value = typeof format === 'string' ? adapter.parse(value, format) : adapter.parse(value);
    }

    if (value !== null) {
      return +value;
    } // Labels are in an incompatible format and no `parser` has been provided.
    // The user might still use the deprecated `format` option for parsing.


    if (!parser && typeof format === 'function') {
      value = format(input); // `format` could return something else than a timestamp, if so, parse it

      if (!helpers$1.isFinite(value)) {
        value = adapter.parse(value);
      }
    }

    return value;
  }

  function parse(scale, input) {
    if (helpers$1.isNullOrUndef(input)) {
      return null;
    }

    var options = scale.options.time;
    var value = toTimestamp(scale, scale.getRightValue(input));

    if (value === null) {
      return value;
    }

    if (options.round) {
      value = +scale._adapter.startOf(value, options.round);
    }

    return value;
  }
  /**
   * Returns the number of unit to skip to be able to display up to `capacity` number of ticks
   * in `unit` for the given `min` / `max` range and respecting the interval steps constraints.
   */


  function determineStepSize(min, max, unit, capacity) {
    var range = max - min;
    var interval = INTERVALS[unit];
    var milliseconds = interval.size;
    var steps = interval.steps;
    var i, ilen, factor;

    if (!steps) {
      return Math.ceil(range / (capacity * milliseconds));
    }

    for (i = 0, ilen = steps.length; i < ilen; ++i) {
      factor = steps[i];

      if (Math.ceil(range / (milliseconds * factor)) <= capacity) {
        break;
      }
    }

    return factor;
  }
  /**
   * Figures out what unit results in an appropriate number of auto-generated ticks
   */


  function determineUnitForAutoTicks(minUnit, min, max, capacity) {
    var ilen = UNITS.length;
    var i, interval, factor;

    for (i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {
      interval = INTERVALS[UNITS[i]];
      factor = interval.steps ? interval.steps[interval.steps.length - 1] : MAX_INTEGER;

      if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {
        return UNITS[i];
      }
    }

    return UNITS[ilen - 1];
  }
  /**
   * Figures out what unit to format a set of ticks with
   */


  function determineUnitForFormatting(scale, ticks, minUnit, min, max) {
    var ilen = UNITS.length;
    var i, unit;

    for (i = ilen - 1; i >= UNITS.indexOf(minUnit); i--) {
      unit = UNITS[i];

      if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= ticks.length) {
        return unit;
      }
    }

    return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];
  }

  function determineMajorUnit(unit) {
    for (var i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {
      if (INTERVALS[UNITS[i]].common) {
        return UNITS[i];
      }
    }
  }
  /**
   * Generates a maximum of `capacity` timestamps between min and max, rounded to the
   * `minor` unit, aligned on the `major` unit and using the given scale time `options`.
   * Important: this method can return ticks outside the min and max range, it's the
   * responsibility of the calling code to clamp values if needed.
   */


  function generate(scale, min, max, capacity) {
    var adapter = scale._adapter;
    var options = scale.options;
    var timeOpts = options.time;
    var minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, capacity);
    var major = determineMajorUnit(minor);
    var stepSize = valueOrDefault$c(timeOpts.stepSize, timeOpts.unitStepSize);
    var weekday = minor === 'week' ? timeOpts.isoWeekday : false;
    var majorTicksEnabled = options.ticks.major.enabled;
    var interval = INTERVALS[minor];
    var first = min;
    var last = max;
    var ticks = [];
    var time;

    if (!stepSize) {
      stepSize = determineStepSize(min, max, minor, capacity);
    } // For 'week' unit, handle the first day of week option


    if (weekday) {
      first = +adapter.startOf(first, 'isoWeek', weekday);
      last = +adapter.startOf(last, 'isoWeek', weekday);
    } // Align first/last ticks on unit


    first = +adapter.startOf(first, weekday ? 'day' : minor);
    last = +adapter.startOf(last, weekday ? 'day' : minor); // Make sure that the last tick include max

    if (last < max) {
      last = +adapter.add(last, 1, minor);
    }

    time = first;

    if (majorTicksEnabled && major && !weekday && !timeOpts.round) {
      // Align the first tick on the previous `minor` unit aligned on the `major` unit:
      // we first aligned time on the previous `major` unit then add the number of full
      // stepSize there is between first and the previous major time.
      time = +adapter.startOf(time, major);
      time = +adapter.add(time, ~~((first - time) / (interval.size * stepSize)) * stepSize, minor);
    }

    for (; time < last; time = +adapter.add(time, stepSize, minor)) {
      ticks.push(+time);
    }

    ticks.push(+time);
    return ticks;
  }
  /**
   * Returns the start and end offsets from edges in the form of {start, end}
   * where each value is a relative width to the scale and ranges between 0 and 1.
   * They add extra margins on the both sides by scaling down the original scale.
   * Offsets are added when the `offset` option is true.
   */


  function computeOffsets(table, ticks, min, max, options) {
    var start = 0;
    var end = 0;
    var first, last;

    if (options.offset && ticks.length) {
      if (!options.time.min) {
        first = interpolate$1(table, 'time', ticks[0], 'pos');

        if (ticks.length === 1) {
          start = 1 - first;
        } else {
          start = (interpolate$1(table, 'time', ticks[1], 'pos') - first) / 2;
        }
      }

      if (!options.time.max) {
        last = interpolate$1(table, 'time', ticks[ticks.length - 1], 'pos');

        if (ticks.length === 1) {
          end = last;
        } else {
          end = (last - interpolate$1(table, 'time', ticks[ticks.length - 2], 'pos')) / 2;
        }
      }
    }

    return {
      start: start,
      end: end
    };
  }

  function ticksFromTimestamps(scale, values, majorUnit) {
    var ticks = [];
    var i, ilen, value, major;

    for (i = 0, ilen = values.length; i < ilen; ++i) {
      value = values[i];
      major = majorUnit ? value === +scale._adapter.startOf(value, majorUnit) : false;
      ticks.push({
        value: value,
        major: major
      });
    }

    return ticks;
  }

  var defaultConfig$4 = {
    position: 'bottom',

    /**
     * Data distribution along the scale:
     * - 'linear': data are spread according to their time (distances can vary),
     * - 'series': data are spread at the same distance from each other.
     * @see https://github.com/chartjs/Chart.js/pull/4507
     * @since 2.7.0
     */
    distribution: 'linear',

    /**
     * Scale boundary strategy (bypassed by min/max time options)
     * - `data`: make sure data are fully visible, ticks outside are removed
     * - `ticks`: make sure ticks are fully visible, data outside are truncated
     * @see https://github.com/chartjs/Chart.js/pull/4556
     * @since 2.7.0
     */
    bounds: 'data',
    adapters: {},
    time: {
      parser: false,
      // false == a pattern string from https://momentjs.com/docs/#/parsing/string-format/ or a custom callback that converts its argument to a moment
      format: false,
      // DEPRECATED false == date objects, moment object, callback or a pattern string from https://momentjs.com/docs/#/parsing/string-format/
      unit: false,
      // false == automatic or override with week, month, year, etc.
      round: false,
      // none, or override with week, month, year, etc.
      displayFormat: false,
      // DEPRECATED
      isoWeekday: false,
      // override week start day - see https://momentjs.com/docs/#/get-set/iso-weekday/
      minUnit: 'millisecond',
      displayFormats: {}
    },
    ticks: {
      autoSkip: false,

      /**
       * Ticks generation input values:
       * - 'auto': generates "optimal" ticks based on scale size and time options.
       * - 'data': generates ticks from data (including labels from data {t|x|y} objects).
       * - 'labels': generates ticks from user given `data.labels` values ONLY.
       * @see https://github.com/chartjs/Chart.js/pull/4507
       * @since 2.7.0
       */
      source: 'auto',
      major: {
        enabled: false
      }
    }
  };
  var scale_time = core_scale.extend({
    initialize: function initialize() {
      this.mergeTicksOptions();
      core_scale.prototype.initialize.call(this);
    },
    update: function update() {
      var me = this;
      var options = me.options;
      var time = options.time || (options.time = {});
      var adapter = me._adapter = new core_adapters._date(options.adapters.date); // DEPRECATIONS: output a message only one time per update

      if (time.format) {
        console.warn('options.time.format is deprecated and replaced by options.time.parser.');
      } // Backward compatibility: before introducing adapter, `displayFormats` was
      // supposed to contain *all* unit/string pairs but this can't be resolved
      // when loading the scale (adapters are loaded afterward), so let's populate
      // missing formats on update


      helpers$1.mergeIf(time.displayFormats, adapter.formats());
      return core_scale.prototype.update.apply(me, arguments);
    },

    /**
     * Allows data to be referenced via 't' attribute
     */
    getRightValue: function getRightValue(rawValue) {
      if (rawValue && rawValue.t !== undefined) {
        rawValue = rawValue.t;
      }

      return core_scale.prototype.getRightValue.call(this, rawValue);
    },
    determineDataLimits: function determineDataLimits() {
      var me = this;
      var chart = me.chart;
      var adapter = me._adapter;
      var timeOpts = me.options.time;
      var unit = timeOpts.unit || 'day';
      var min = MAX_INTEGER;
      var max = MIN_INTEGER;
      var timestamps = [];
      var datasets = [];
      var labels = [];
      var i, j, ilen, jlen, data, timestamp;
      var dataLabels = chart.data.labels || []; // Convert labels to timestamps

      for (i = 0, ilen = dataLabels.length; i < ilen; ++i) {
        labels.push(parse(me, dataLabels[i]));
      } // Convert data to timestamps


      for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {
        if (chart.isDatasetVisible(i)) {
          data = chart.data.datasets[i].data; // Let's consider that all data have the same format.

          if (helpers$1.isObject(data[0])) {
            datasets[i] = [];

            for (j = 0, jlen = data.length; j < jlen; ++j) {
              timestamp = parse(me, data[j]);
              timestamps.push(timestamp);
              datasets[i][j] = timestamp;
            }
          } else {
            for (j = 0, jlen = labels.length; j < jlen; ++j) {
              timestamps.push(labels[j]);
            }

            datasets[i] = labels.slice(0);
          }
        } else {
          datasets[i] = [];
        }
      }

      if (labels.length) {
        // Sort labels **after** data have been converted
        labels = arrayUnique(labels).sort(sorter);
        min = Math.min(min, labels[0]);
        max = Math.max(max, labels[labels.length - 1]);
      }

      if (timestamps.length) {
        timestamps = arrayUnique(timestamps).sort(sorter);
        min = Math.min(min, timestamps[0]);
        max = Math.max(max, timestamps[timestamps.length - 1]);
      }

      min = parse(me, timeOpts.min) || min;
      max = parse(me, timeOpts.max) || max; // In case there is no valid min/max, set limits based on unit time option

      min = min === MAX_INTEGER ? +adapter.startOf(Date.now(), unit) : min;
      max = max === MIN_INTEGER ? +adapter.endOf(Date.now(), unit) + 1 : max; // Make sure that max is strictly higher than min (required by the lookup table)

      me.min = Math.min(min, max);
      me.max = Math.max(min + 1, max); // PRIVATE

      me._horizontal = me.isHorizontal();
      me._table = [];
      me._timestamps = {
        data: timestamps,
        datasets: datasets,
        labels: labels
      };
    },
    buildTicks: function buildTicks() {
      var me = this;
      var min = me.min;
      var max = me.max;
      var options = me.options;
      var timeOpts = options.time;
      var timestamps = [];
      var ticks = [];
      var i, ilen, timestamp;

      switch (options.ticks.source) {
        case 'data':
          timestamps = me._timestamps.data;
          break;

        case 'labels':
          timestamps = me._timestamps.labels;
          break;

        case 'auto':
        default:
          timestamps = generate(me, min, max, me.getLabelCapacity(min), options);
      }

      if (options.bounds === 'ticks' && timestamps.length) {
        min = timestamps[0];
        max = timestamps[timestamps.length - 1];
      } // Enforce limits with user min/max options


      min = parse(me, timeOpts.min) || min;
      max = parse(me, timeOpts.max) || max; // Remove ticks outside the min/max range

      for (i = 0, ilen = timestamps.length; i < ilen; ++i) {
        timestamp = timestamps[i];

        if (timestamp >= min && timestamp <= max) {
          ticks.push(timestamp);
        }
      }

      me.min = min;
      me.max = max; // PRIVATE

      me._unit = timeOpts.unit || determineUnitForFormatting(me, ticks, timeOpts.minUnit, me.min, me.max);
      me._majorUnit = determineMajorUnit(me._unit);
      me._table = buildLookupTable(me._timestamps.data, min, max, options.distribution);
      me._offsets = computeOffsets(me._table, ticks, min, max, options);

      if (options.ticks.reverse) {
        ticks.reverse();
      }

      return ticksFromTimestamps(me, ticks, me._majorUnit);
    },
    getLabelForIndex: function getLabelForIndex(index, datasetIndex) {
      var me = this;
      var adapter = me._adapter;
      var data = me.chart.data;
      var timeOpts = me.options.time;
      var label = data.labels && index < data.labels.length ? data.labels[index] : '';
      var value = data.datasets[datasetIndex].data[index];

      if (helpers$1.isObject(value)) {
        label = me.getRightValue(value);
      }

      if (timeOpts.tooltipFormat) {
        return adapter.format(toTimestamp(me, label), timeOpts.tooltipFormat);
      }

      if (typeof label === 'string') {
        return label;
      }

      return adapter.format(toTimestamp(me, label), timeOpts.displayFormats.datetime);
    },

    /**
     * Function to format an individual tick mark
     * @private
     */
    tickFormatFunction: function tickFormatFunction(time, index, ticks, format) {
      var me = this;
      var adapter = me._adapter;
      var options = me.options;
      var formats = options.time.displayFormats;
      var minorFormat = formats[me._unit];
      var majorUnit = me._majorUnit;
      var majorFormat = formats[majorUnit];
      var majorTime = +adapter.startOf(time, majorUnit);
      var majorTickOpts = options.ticks.major;
      var major = majorTickOpts.enabled && majorUnit && majorFormat && time === majorTime;
      var label = adapter.format(time, format ? format : major ? majorFormat : minorFormat);
      var tickOpts = major ? majorTickOpts : options.ticks.minor;
      var formatter = valueOrDefault$c(tickOpts.callback, tickOpts.userCallback);
      return formatter ? formatter(label, index, ticks) : label;
    },
    convertTicksToLabels: function convertTicksToLabels(ticks) {
      var labels = [];
      var i, ilen;

      for (i = 0, ilen = ticks.length; i < ilen; ++i) {
        labels.push(this.tickFormatFunction(ticks[i].value, i, ticks));
      }

      return labels;
    },

    /**
     * @private
     */
    getPixelForOffset: function getPixelForOffset(time) {
      var me = this;
      var isReverse = me.options.ticks.reverse;
      var size = me._horizontal ? me.width : me.height;
      var start = me._horizontal ? isReverse ? me.right : me.left : isReverse ? me.bottom : me.top;
      var pos = interpolate$1(me._table, 'time', time, 'pos');
      var offset = size * (me._offsets.start + pos) / (me._offsets.start + 1 + me._offsets.end);
      return isReverse ? start - offset : start + offset;
    },
    getPixelForValue: function getPixelForValue(value, index, datasetIndex) {
      var me = this;
      var time = null;

      if (index !== undefined && datasetIndex !== undefined) {
        time = me._timestamps.datasets[datasetIndex][index];
      }

      if (time === null) {
        time = parse(me, value);
      }

      if (time !== null) {
        return me.getPixelForOffset(time);
      }
    },
    getPixelForTick: function getPixelForTick(index) {
      var ticks = this.getTicks();
      return index >= 0 && index < ticks.length ? this.getPixelForOffset(ticks[index].value) : null;
    },
    getValueForPixel: function getValueForPixel(pixel) {
      var me = this;
      var size = me._horizontal ? me.width : me.height;
      var start = me._horizontal ? me.left : me.top;
      var pos = (size ? (pixel - start) / size : 0) * (me._offsets.start + 1 + me._offsets.start) - me._offsets.end;
      var time = interpolate$1(me._table, 'pos', pos, 'time'); // DEPRECATION, we should return time directly

      return me._adapter._create(time);
    },

    /**
     * Crude approximation of what the label width might be
     * @private
     */
    getLabelWidth: function getLabelWidth(label) {
      var me = this;
      var ticksOpts = me.options.ticks;
      var tickLabelWidth = me.ctx.measureText(label).width;
      var angle = helpers$1.toRadians(ticksOpts.maxRotation);
      var cosRotation = Math.cos(angle);
      var sinRotation = Math.sin(angle);
      var tickFontSize = valueOrDefault$c(ticksOpts.fontSize, core_defaults.global.defaultFontSize);
      return tickLabelWidth * cosRotation + tickFontSize * sinRotation;
    },

    /**
     * @private
     */
    getLabelCapacity: function getLabelCapacity(exampleTime) {
      var me = this; // pick the longest format (milliseconds) for guestimation

      var format = me.options.time.displayFormats.millisecond;
      var exampleLabel = me.tickFormatFunction(exampleTime, 0, [], format);
      var tickLabelWidth = me.getLabelWidth(exampleLabel);
      var innerWidth = me.isHorizontal() ? me.width : me.height;
      var capacity = Math.floor(innerWidth / tickLabelWidth);
      return capacity > 0 ? capacity : 1;
    }
  }); // INTERNAL: static default options, registered in src/index.js

  var _defaults$4 = defaultConfig$4;
  scale_time._defaults = _defaults$4;
  var scales = {
    category: scale_category,
    linear: scale_linear,
    logarithmic: scale_logarithmic,
    radialLinear: scale_radialLinear,
    time: scale_time
  };
  var FORMATS = {
    datetime: 'MMM D, YYYY, h:mm:ss a',
    millisecond: 'h:mm:ss.SSS a',
    second: 'h:mm:ss a',
    minute: 'h:mm a',
    hour: 'hA',
    day: 'MMM D',
    week: 'll',
    month: 'MMM YYYY',
    quarter: '[Q]Q - YYYY',
    year: 'YYYY'
  };

  core_adapters._date.override(typeof moment === 'function' ? {
    _id: 'moment',
    // DEBUG ONLY
    formats: function formats() {
      return FORMATS;
    },
    parse: function parse(value, format) {
      if (typeof value === 'string' && typeof format === 'string') {
        value = moment(value, format);
      } else if (!(value instanceof moment)) {
        value = moment(value);
      }

      return value.isValid() ? value.valueOf() : null;
    },
    format: function format(time, _format) {
      return moment(time).format(_format);
    },
    add: function add(time, amount, unit) {
      return moment(time).add(amount, unit).valueOf();
    },
    diff: function diff(max, min, unit) {
      return moment.duration(moment(max).diff(moment(min))).as(unit);
    },
    startOf: function startOf(time, unit, weekday) {
      time = moment(time);

      if (unit === 'isoWeek') {
        return time.isoWeekday(weekday).valueOf();
      }

      return time.startOf(unit).valueOf();
    },
    endOf: function endOf(time, unit) {
      return moment(time).endOf(unit).valueOf();
    },
    // DEPRECATIONS

    /**
     * Provided for backward compatibility with scale.getValueForPixel().
     * @deprecated since version 2.8.0
     * @todo remove at version 3
     * @private
     */
    _create: function _create(time) {
      return moment(time);
    }
  } : {});

  core_defaults._set('global', {
    plugins: {
      filler: {
        propagate: true
      }
    }
  });

  var mappers = {
    dataset: function dataset(source) {
      var index = source.fill;
      var chart = source.chart;
      var meta = chart.getDatasetMeta(index);
      var visible = meta && chart.isDatasetVisible(index);
      var points = visible && meta.dataset._children || [];
      var length = points.length || 0;
      return !length ? null : function (point, i) {
        return i < length && points[i]._view || null;
      };
    },
    boundary: function boundary(source) {
      var boundary = source.boundary;
      var x = boundary ? boundary.x : null;
      var y = boundary ? boundary.y : null;
      return function (point) {
        return {
          x: x === null ? point.x : x,
          y: y === null ? point.y : y
        };
      };
    }
  }; // @todo if (fill[0] === '#')

  function decodeFill(el, index, count) {
    var model = el._model || {};
    var fill = model.fill;
    var target;

    if (fill === undefined) {
      fill = !!model.backgroundColor;
    }

    if (fill === false || fill === null) {
      return false;
    }

    if (fill === true) {
      return 'origin';
    }

    target = parseFloat(fill, 10);

    if (isFinite(target) && Math.floor(target) === target) {
      if (fill[0] === '-' || fill[0] === '+') {
        target = index + target;
      }

      if (target === index || target < 0 || target >= count) {
        return false;
      }

      return target;
    }

    switch (fill) {
      // compatibility
      case 'bottom':
        return 'start';

      case 'top':
        return 'end';

      case 'zero':
        return 'origin';
      // supported boundaries

      case 'origin':
      case 'start':
      case 'end':
        return fill;
      // invalid fill values

      default:
        return false;
    }
  }

  function computeBoundary(source) {
    var model = source.el._model || {};
    var scale = source.el._scale || {};
    var fill = source.fill;
    var target = null;
    var horizontal;

    if (isFinite(fill)) {
      return null;
    } // Backward compatibility: until v3, we still need to support boundary values set on
    // the model (scaleTop, scaleBottom and scaleZero) because some external plugins and
    // controllers might still use it (e.g. the Smith chart).


    if (fill === 'start') {
      target = model.scaleBottom === undefined ? scale.bottom : model.scaleBottom;
    } else if (fill === 'end') {
      target = model.scaleTop === undefined ? scale.top : model.scaleTop;
    } else if (model.scaleZero !== undefined) {
      target = model.scaleZero;
    } else if (scale.getBasePosition) {
      target = scale.getBasePosition();
    } else if (scale.getBasePixel) {
      target = scale.getBasePixel();
    }

    if (target !== undefined && target !== null) {
      if (target.x !== undefined && target.y !== undefined) {
        return target;
      }

      if (helpers$1.isFinite(target)) {
        horizontal = scale.isHorizontal();
        return {
          x: horizontal ? target : null,
          y: horizontal ? null : target
        };
      }
    }

    return null;
  }

  function resolveTarget(sources, index, propagate) {
    var source = sources[index];
    var fill = source.fill;
    var visited = [index];
    var target;

    if (!propagate) {
      return fill;
    }

    while (fill !== false && visited.indexOf(fill) === -1) {
      if (!isFinite(fill)) {
        return fill;
      }

      target = sources[fill];

      if (!target) {
        return false;
      }

      if (target.visible) {
        return fill;
      }

      visited.push(fill);
      fill = target.fill;
    }

    return false;
  }

  function createMapper(source) {
    var fill = source.fill;
    var type = 'dataset';

    if (fill === false) {
      return null;
    }

    if (!isFinite(fill)) {
      type = 'boundary';
    }

    return mappers[type](source);
  }

  function isDrawable(point) {
    return point && !point.skip;
  }

  function drawArea(ctx, curve0, curve1, len0, len1) {
    var i;

    if (!len0 || !len1) {
      return;
    } // building first area curve (normal)


    ctx.moveTo(curve0[0].x, curve0[0].y);

    for (i = 1; i < len0; ++i) {
      helpers$1.canvas.lineTo(ctx, curve0[i - 1], curve0[i]);
    } // joining the two area curves


    ctx.lineTo(curve1[len1 - 1].x, curve1[len1 - 1].y); // building opposite area curve (reverse)

    for (i = len1 - 1; i > 0; --i) {
      helpers$1.canvas.lineTo(ctx, curve1[i], curve1[i - 1], true);
    }
  }

  function doFill(ctx, points, mapper, view, color, loop) {
    var count = points.length;
    var span = view.spanGaps;
    var curve0 = [];
    var curve1 = [];
    var len0 = 0;
    var len1 = 0;
    var i, ilen, index, p0, p1, d0, d1;
    ctx.beginPath();

    for (i = 0, ilen = count + !!loop; i < ilen; ++i) {
      index = i % count;
      p0 = points[index]._view;
      p1 = mapper(p0, index, view);
      d0 = isDrawable(p0);
      d1 = isDrawable(p1);

      if (d0 && d1) {
        len0 = curve0.push(p0);
        len1 = curve1.push(p1);
      } else if (len0 && len1) {
        if (!span) {
          drawArea(ctx, curve0, curve1, len0, len1);
          len0 = len1 = 0;
          curve0 = [];
          curve1 = [];
        } else {
          if (d0) {
            curve0.push(p0);
          }

          if (d1) {
            curve1.push(p1);
          }
        }
      }
    }

    drawArea(ctx, curve0, curve1, len0, len1);
    ctx.closePath();
    ctx.fillStyle = color;
    ctx.fill();
  }

  var plugin_filler = {
    id: 'filler',
    afterDatasetsUpdate: function afterDatasetsUpdate(chart, options) {
      var count = (chart.data.datasets || []).length;
      var propagate = options.propagate;
      var sources = [];
      var meta, i, el, source;

      for (i = 0; i < count; ++i) {
        meta = chart.getDatasetMeta(i);
        el = meta.dataset;
        source = null;

        if (el && el._model && el instanceof elements.Line) {
          source = {
            visible: chart.isDatasetVisible(i),
            fill: decodeFill(el, i, count),
            chart: chart,
            el: el
          };
        }

        meta.$filler = source;
        sources.push(source);
      }

      for (i = 0; i < count; ++i) {
        source = sources[i];

        if (!source) {
          continue;
        }

        source.fill = resolveTarget(sources, i, propagate);
        source.boundary = computeBoundary(source);
        source.mapper = createMapper(source);
      }
    },
    beforeDatasetDraw: function beforeDatasetDraw(chart, args) {
      var meta = args.meta.$filler;

      if (!meta) {
        return;
      }

      var ctx = chart.ctx;
      var el = meta.el;
      var view = el._view;
      var points = el._children || [];
      var mapper = meta.mapper;
      var color = view.backgroundColor || core_defaults.global.defaultColor;

      if (mapper && color && points.length) {
        helpers$1.canvas.clipArea(ctx, chart.chartArea);
        doFill(ctx, points, mapper, view, color, el._loop);
        helpers$1.canvas.unclipArea(ctx);
      }
    }
  };
  var noop$1 = helpers$1.noop;
  var valueOrDefault$d = helpers$1.valueOrDefault;

  core_defaults._set('global', {
    legend: {
      display: true,
      position: 'top',
      fullWidth: true,
      reverse: false,
      weight: 1000,
      // a callback that will handle
      onClick: function onClick(e, legendItem) {
        var index = legendItem.datasetIndex;
        var ci = this.chart;
        var meta = ci.getDatasetMeta(index); // See controller.isDatasetVisible comment

        meta.hidden = meta.hidden === null ? !ci.data.datasets[index].hidden : null; // We hid a dataset ... rerender the chart

        ci.update();
      },
      onHover: null,
      onLeave: null,
      labels: {
        boxWidth: 40,
        padding: 10,
        // Generates labels shown in the legend
        // Valid properties to return:
        // text : text to display
        // fillStyle : fill of coloured box
        // strokeStyle: stroke of coloured box
        // hidden : if this legend item refers to a hidden item
        // lineCap : cap style for line
        // lineDash
        // lineDashOffset :
        // lineJoin :
        // lineWidth :
        generateLabels: function generateLabels(chart) {
          var data = chart.data;
          return helpers$1.isArray(data.datasets) ? data.datasets.map(function (dataset, i) {
            return {
              text: dataset.label,
              fillStyle: !helpers$1.isArray(dataset.backgroundColor) ? dataset.backgroundColor : dataset.backgroundColor[0],
              hidden: !chart.isDatasetVisible(i),
              lineCap: dataset.borderCapStyle,
              lineDash: dataset.borderDash,
              lineDashOffset: dataset.borderDashOffset,
              lineJoin: dataset.borderJoinStyle,
              lineWidth: dataset.borderWidth,
              strokeStyle: dataset.borderColor,
              pointStyle: dataset.pointStyle,
              // Below is extra data used for toggling the datasets
              datasetIndex: i
            };
          }, this) : [];
        }
      }
    },
    legendCallback: function legendCallback(chart) {
      var text = [];
      text.push('<ul class="' + chart.id + '-legend">');

      for (var i = 0; i < chart.data.datasets.length; i++) {
        text.push('<li><span style="background-color:' + chart.data.datasets[i].backgroundColor + '"></span>');

        if (chart.data.datasets[i].label) {
          text.push(chart.data.datasets[i].label);
        }

        text.push('</li>');
      }

      text.push('</ul>');
      return text.join('');
    }
  });
  /**
   * Helper function to get the box width based on the usePointStyle option
   * @param {object} labelopts - the label options on the legend
   * @param {number} fontSize - the label font size
   * @return {number} width of the color box area
   */


  function getBoxWidth(labelOpts, fontSize) {
    return labelOpts.usePointStyle && labelOpts.boxWidth > fontSize ? fontSize : labelOpts.boxWidth;
  }
  /**
   * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required!
   */


  var Legend = core_element.extend({
    initialize: function initialize(config) {
      helpers$1.extend(this, config); // Contains hit boxes for each dataset (in dataset order)

      this.legendHitBoxes = [];
      /**
      	 * @private
      	 */

      this._hoveredItem = null; // Are we in doughnut mode which has a different data type

      this.doughnutMode = false;
    },
    // These methods are ordered by lifecycle. Utilities then follow.
    // Any function defined here is inherited by all legend types.
    // Any function can be extended by the legend type
    beforeUpdate: noop$1,
    update: function update(maxWidth, maxHeight, margins) {
      var me = this; // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)

      me.beforeUpdate(); // Absorb the master measurements

      me.maxWidth = maxWidth;
      me.maxHeight = maxHeight;
      me.margins = margins; // Dimensions

      me.beforeSetDimensions();
      me.setDimensions();
      me.afterSetDimensions(); // Labels

      me.beforeBuildLabels();
      me.buildLabels();
      me.afterBuildLabels(); // Fit

      me.beforeFit();
      me.fit();
      me.afterFit(); //

      me.afterUpdate();
      return me.minSize;
    },
    afterUpdate: noop$1,
    //
    beforeSetDimensions: noop$1,
    setDimensions: function setDimensions() {
      var me = this; // Set the unconstrained dimension before label rotation

      if (me.isHorizontal()) {
        // Reset position before calculating rotation
        me.width = me.maxWidth;
        me.left = 0;
        me.right = me.width;
      } else {
        me.height = me.maxHeight; // Reset position before calculating rotation

        me.top = 0;
        me.bottom = me.height;
      } // Reset padding


      me.paddingLeft = 0;
      me.paddingTop = 0;
      me.paddingRight = 0;
      me.paddingBottom = 0; // Reset minSize

      me.minSize = {
        width: 0,
        height: 0
      };
    },
    afterSetDimensions: noop$1,
    //
    beforeBuildLabels: noop$1,
    buildLabels: function buildLabels() {
      var me = this;
      var labelOpts = me.options.labels || {};
      var legendItems = helpers$1.callback(labelOpts.generateLabels, [me.chart], me) || [];

      if (labelOpts.filter) {
        legendItems = legendItems.filter(function (item) {
          return labelOpts.filter(item, me.chart.data);
        });
      }

      if (me.options.reverse) {
        legendItems.reverse();
      }

      me.legendItems = legendItems;
    },
    afterBuildLabels: noop$1,
    //
    beforeFit: noop$1,
    fit: function fit() {
      var me = this;
      var opts = me.options;
      var labelOpts = opts.labels;
      var display = opts.display;
      var ctx = me.ctx;

      var labelFont = helpers$1.options._parseFont(labelOpts);

      var fontSize = labelFont.size; // Reset hit boxes

      var hitboxes = me.legendHitBoxes = [];
      var minSize = me.minSize;
      var isHorizontal = me.isHorizontal();

      if (isHorizontal) {
        minSize.width = me.maxWidth; // fill all the width

        minSize.height = display ? 10 : 0;
      } else {
        minSize.width = display ? 10 : 0;
        minSize.height = me.maxHeight; // fill all the height
      } // Increase sizes here


      if (display) {
        ctx.font = labelFont.string;

        if (isHorizontal) {
          // Labels
          // Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one
          var lineWidths = me.lineWidths = [0];
          var totalHeight = 0;
          ctx.textAlign = 'left';
          ctx.textBaseline = 'top';
          helpers$1.each(me.legendItems, function (legendItem, i) {
            var boxWidth = getBoxWidth(labelOpts, fontSize);
            var width = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;

            if (i === 0 || lineWidths[lineWidths.length - 1] + width + labelOpts.padding > minSize.width) {
              totalHeight += fontSize + labelOpts.padding;
              lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = labelOpts.padding;
            } // Store the hitbox width and height here. Final position will be updated in `draw`


            hitboxes[i] = {
              left: 0,
              top: 0,
              width: width,
              height: fontSize
            };
            lineWidths[lineWidths.length - 1] += width + labelOpts.padding;
          });
          minSize.height += totalHeight;
        } else {
          var vPadding = labelOpts.padding;
          var columnWidths = me.columnWidths = [];
          var totalWidth = labelOpts.padding;
          var currentColWidth = 0;
          var currentColHeight = 0;
          var itemHeight = fontSize + vPadding;
          helpers$1.each(me.legendItems, function (legendItem, i) {
            var boxWidth = getBoxWidth(labelOpts, fontSize);
            var itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width; // If too tall, go to new column

            if (i > 0 && currentColHeight + itemHeight > minSize.height - vPadding) {
              totalWidth += currentColWidth + labelOpts.padding;
              columnWidths.push(currentColWidth); // previous column width

              currentColWidth = 0;
              currentColHeight = 0;
            } // Get max width


            currentColWidth = Math.max(currentColWidth, itemWidth);
            currentColHeight += itemHeight; // Store the hitbox width and height here. Final position will be updated in `draw`

            hitboxes[i] = {
              left: 0,
              top: 0,
              width: itemWidth,
              height: fontSize
            };
          });
          totalWidth += currentColWidth;
          columnWidths.push(currentColWidth);
          minSize.width += totalWidth;
        }
      }

      me.width = minSize.width;
      me.height = minSize.height;
    },
    afterFit: noop$1,
    // Shared Methods
    isHorizontal: function isHorizontal() {
      return this.options.position === 'top' || this.options.position === 'bottom';
    },
    // Actually draw the legend on the canvas
    draw: function draw() {
      var me = this;
      var opts = me.options;
      var labelOpts = opts.labels;
      var globalDefaults = core_defaults.global;
      var defaultColor = globalDefaults.defaultColor;
      var lineDefault = globalDefaults.elements.line;
      var legendWidth = me.width;
      var lineWidths = me.lineWidths;

      if (opts.display) {
        var ctx = me.ctx;
        var fontColor = valueOrDefault$d(labelOpts.fontColor, globalDefaults.defaultFontColor);

        var labelFont = helpers$1.options._parseFont(labelOpts);

        var fontSize = labelFont.size;
        var cursor; // Canvas setup

        ctx.textAlign = 'left';
        ctx.textBaseline = 'middle';
        ctx.lineWidth = 0.5;
        ctx.strokeStyle = fontColor; // for strikethrough effect

        ctx.fillStyle = fontColor; // render in correct colour

        ctx.font = labelFont.string;
        var boxWidth = getBoxWidth(labelOpts, fontSize);
        var hitboxes = me.legendHitBoxes; // current position

        var drawLegendBox = function drawLegendBox(x, y, legendItem) {
          if (isNaN(boxWidth) || boxWidth <= 0) {
            return;
          } // Set the ctx for the box


          ctx.save();
          var lineWidth = valueOrDefault$d(legendItem.lineWidth, lineDefault.borderWidth);
          ctx.fillStyle = valueOrDefault$d(legendItem.fillStyle, defaultColor);
          ctx.lineCap = valueOrDefault$d(legendItem.lineCap, lineDefault.borderCapStyle);
          ctx.lineDashOffset = valueOrDefault$d(legendItem.lineDashOffset, lineDefault.borderDashOffset);
          ctx.lineJoin = valueOrDefault$d(legendItem.lineJoin, lineDefault.borderJoinStyle);
          ctx.lineWidth = lineWidth;
          ctx.strokeStyle = valueOrDefault$d(legendItem.strokeStyle, defaultColor);

          if (ctx.setLineDash) {
            // IE 9 and 10 do not support line dash
            ctx.setLineDash(valueOrDefault$d(legendItem.lineDash, lineDefault.borderDash));
          }

          if (opts.labels && opts.labels.usePointStyle) {
            // Recalculate x and y for drawPoint() because its expecting
            // x and y to be center of figure (instead of top left)
            var radius = boxWidth * Math.SQRT2 / 2;
            var centerX = x + boxWidth / 2;
            var centerY = y + fontSize / 2; // Draw pointStyle as legend symbol

            helpers$1.canvas.drawPoint(ctx, legendItem.pointStyle, radius, centerX, centerY);
          } else {
            // Draw box as legend symbol
            if (lineWidth !== 0) {
              ctx.strokeRect(x, y, boxWidth, fontSize);
            }

            ctx.fillRect(x, y, boxWidth, fontSize);
          }

          ctx.restore();
        };

        var fillText = function fillText(x, y, legendItem, textWidth) {
          var halfFontSize = fontSize / 2;
          var xLeft = boxWidth + halfFontSize + x;
          var yMiddle = y + halfFontSize;
          ctx.fillText(legendItem.text, xLeft, yMiddle);

          if (legendItem.hidden) {
            // Strikethrough the text if hidden
            ctx.beginPath();
            ctx.lineWidth = 2;
            ctx.moveTo(xLeft, yMiddle);
            ctx.lineTo(xLeft + textWidth, yMiddle);
            ctx.stroke();
          }
        }; // Horizontal


        var isHorizontal = me.isHorizontal();

        if (isHorizontal) {
          cursor = {
            x: me.left + (legendWidth - lineWidths[0]) / 2 + labelOpts.padding,
            y: me.top + labelOpts.padding,
            line: 0
          };
        } else {
          cursor = {
            x: me.left + labelOpts.padding,
            y: me.top + labelOpts.padding,
            line: 0
          };
        }

        var itemHeight = fontSize + labelOpts.padding;
        helpers$1.each(me.legendItems, function (legendItem, i) {
          var textWidth = ctx.measureText(legendItem.text).width;
          var width = boxWidth + fontSize / 2 + textWidth;
          var x = cursor.x;
          var y = cursor.y; // Use (me.left + me.minSize.width) and (me.top + me.minSize.height)
          // instead of me.right and me.bottom because me.width and me.height
          // may have been changed since me.minSize was calculated

          if (isHorizontal) {
            if (i > 0 && x + width + labelOpts.padding > me.left + me.minSize.width) {
              y = cursor.y += itemHeight;
              cursor.line++;
              x = cursor.x = me.left + (legendWidth - lineWidths[cursor.line]) / 2 + labelOpts.padding;
            }
          } else if (i > 0 && y + itemHeight > me.top + me.minSize.height) {
            x = cursor.x = x + me.columnWidths[cursor.line] + labelOpts.padding;
            y = cursor.y = me.top + labelOpts.padding;
            cursor.line++;
          }

          drawLegendBox(x, y, legendItem);
          hitboxes[i].left = x;
          hitboxes[i].top = y; // Fill the actual label

          fillText(x, y, legendItem, textWidth);

          if (isHorizontal) {
            cursor.x += width + labelOpts.padding;
          } else {
            cursor.y += itemHeight;
          }
        });
      }
    },

    /**
     * @private
     */
    _getLegendItemAt: function _getLegendItemAt(x, y) {
      var me = this;
      var i, hitBox, lh;

      if (x >= me.left && x <= me.right && y >= me.top && y <= me.bottom) {
        // See if we are touching one of the dataset boxes
        lh = me.legendHitBoxes;

        for (i = 0; i < lh.length; ++i) {
          hitBox = lh[i];

          if (x >= hitBox.left && x <= hitBox.left + hitBox.width && y >= hitBox.top && y <= hitBox.top + hitBox.height) {
            // Touching an element
            return me.legendItems[i];
          }
        }
      }

      return null;
    },

    /**
     * Handle an event
     * @private
     * @param {IEvent} event - The event to handle
     */
    handleEvent: function handleEvent(e) {
      var me = this;
      var opts = me.options;
      var type = e.type === 'mouseup' ? 'click' : e.type;
      var hoveredItem;

      if (type === 'mousemove') {
        if (!opts.onHover && !opts.onLeave) {
          return;
        }
      } else if (type === 'click') {
        if (!opts.onClick) {
          return;
        }
      } else {
        return;
      } // Chart event already has relative position in it


      hoveredItem = me._getLegendItemAt(e.x, e.y);

      if (type === 'click') {
        if (hoveredItem && opts.onClick) {
          // use e.native for backwards compatibility
          opts.onClick.call(me, e.native, hoveredItem);
        }
      } else {
        if (opts.onLeave && hoveredItem !== me._hoveredItem) {
          if (me._hoveredItem) {
            opts.onLeave.call(me, e.native, me._hoveredItem);
          }

          me._hoveredItem = hoveredItem;
        }

        if (opts.onHover && hoveredItem) {
          // use e.native for backwards compatibility
          opts.onHover.call(me, e.native, hoveredItem);
        }
      }
    }
  });

  function createNewLegendAndAttach(chart, legendOpts) {
    var legend = new Legend({
      ctx: chart.ctx,
      options: legendOpts,
      chart: chart
    });
    core_layouts.configure(chart, legend, legendOpts);
    core_layouts.addBox(chart, legend);
    chart.legend = legend;
  }

  var plugin_legend = {
    id: 'legend',

    /**
     * Backward compatibility: since 2.1.5, the legend is registered as a plugin, making
     * Chart.Legend obsolete. To avoid a breaking change, we export the Legend as part of
     * the plugin, which one will be re-exposed in the chart.js file.
     * https://github.com/chartjs/Chart.js/pull/2640
     * @private
     */
    _element: Legend,
    beforeInit: function beforeInit(chart) {
      var legendOpts = chart.options.legend;

      if (legendOpts) {
        createNewLegendAndAttach(chart, legendOpts);
      }
    },
    beforeUpdate: function beforeUpdate(chart) {
      var legendOpts = chart.options.legend;
      var legend = chart.legend;

      if (legendOpts) {
        helpers$1.mergeIf(legendOpts, core_defaults.global.legend);

        if (legend) {
          core_layouts.configure(chart, legend, legendOpts);
          legend.options = legendOpts;
        } else {
          createNewLegendAndAttach(chart, legendOpts);
        }
      } else if (legend) {
        core_layouts.removeBox(chart, legend);
        delete chart.legend;
      }
    },
    afterEvent: function afterEvent(chart, e) {
      var legend = chart.legend;

      if (legend) {
        legend.handleEvent(e);
      }
    }
  };
  var noop$2 = helpers$1.noop;

  core_defaults._set('global', {
    title: {
      display: false,
      fontStyle: 'bold',
      fullWidth: true,
      padding: 10,
      position: 'top',
      text: '',
      weight: 2000 // by default greater than legend (1000) to be above

    }
  });
  /**
   * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required!
   */


  var Title = core_element.extend({
    initialize: function initialize(config) {
      var me = this;
      helpers$1.extend(me, config); // Contains hit boxes for each dataset (in dataset order)

      me.legendHitBoxes = [];
    },
    // These methods are ordered by lifecycle. Utilities then follow.
    beforeUpdate: noop$2,
    update: function update(maxWidth, maxHeight, margins) {
      var me = this; // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)

      me.beforeUpdate(); // Absorb the master measurements

      me.maxWidth = maxWidth;
      me.maxHeight = maxHeight;
      me.margins = margins; // Dimensions

      me.beforeSetDimensions();
      me.setDimensions();
      me.afterSetDimensions(); // Labels

      me.beforeBuildLabels();
      me.buildLabels();
      me.afterBuildLabels(); // Fit

      me.beforeFit();
      me.fit();
      me.afterFit(); //

      me.afterUpdate();
      return me.minSize;
    },
    afterUpdate: noop$2,
    //
    beforeSetDimensions: noop$2,
    setDimensions: function setDimensions() {
      var me = this; // Set the unconstrained dimension before label rotation

      if (me.isHorizontal()) {
        // Reset position before calculating rotation
        me.width = me.maxWidth;
        me.left = 0;
        me.right = me.width;
      } else {
        me.height = me.maxHeight; // Reset position before calculating rotation

        me.top = 0;
        me.bottom = me.height;
      } // Reset padding


      me.paddingLeft = 0;
      me.paddingTop = 0;
      me.paddingRight = 0;
      me.paddingBottom = 0; // Reset minSize

      me.minSize = {
        width: 0,
        height: 0
      };
    },
    afterSetDimensions: noop$2,
    //
    beforeBuildLabels: noop$2,
    buildLabels: noop$2,
    afterBuildLabels: noop$2,
    //
    beforeFit: noop$2,
    fit: function fit() {
      var me = this;
      var opts = me.options;
      var display = opts.display;
      var minSize = me.minSize;
      var lineCount = helpers$1.isArray(opts.text) ? opts.text.length : 1;

      var fontOpts = helpers$1.options._parseFont(opts);

      var textSize = display ? lineCount * fontOpts.lineHeight + opts.padding * 2 : 0;

      if (me.isHorizontal()) {
        minSize.width = me.maxWidth; // fill all the width

        minSize.height = textSize;
      } else {
        minSize.width = textSize;
        minSize.height = me.maxHeight; // fill all the height
      }

      me.width = minSize.width;
      me.height = minSize.height;
    },
    afterFit: noop$2,
    // Shared Methods
    isHorizontal: function isHorizontal() {
      var pos = this.options.position;
      return pos === 'top' || pos === 'bottom';
    },
    // Actually draw the title block on the canvas
    draw: function draw() {
      var me = this;
      var ctx = me.ctx;
      var opts = me.options;

      if (opts.display) {
        var fontOpts = helpers$1.options._parseFont(opts);

        var lineHeight = fontOpts.lineHeight;
        var offset = lineHeight / 2 + opts.padding;
        var rotation = 0;
        var top = me.top;
        var left = me.left;
        var bottom = me.bottom;
        var right = me.right;
        var maxWidth, titleX, titleY;
        ctx.fillStyle = helpers$1.valueOrDefault(opts.fontColor, core_defaults.global.defaultFontColor); // render in correct colour

        ctx.font = fontOpts.string; // Horizontal

        if (me.isHorizontal()) {
          titleX = left + (right - left) / 2; // midpoint of the width

          titleY = top + offset;
          maxWidth = right - left;
        } else {
          titleX = opts.position === 'left' ? left + offset : right - offset;
          titleY = top + (bottom - top) / 2;
          maxWidth = bottom - top;
          rotation = Math.PI * (opts.position === 'left' ? -0.5 : 0.5);
        }

        ctx.save();
        ctx.translate(titleX, titleY);
        ctx.rotate(rotation);
        ctx.textAlign = 'center';
        ctx.textBaseline = 'middle';
        var text = opts.text;

        if (helpers$1.isArray(text)) {
          var y = 0;

          for (var i = 0; i < text.length; ++i) {
            ctx.fillText(text[i], 0, y, maxWidth);
            y += lineHeight;
          }
        } else {
          ctx.fillText(text, 0, 0, maxWidth);
        }

        ctx.restore();
      }
    }
  });

  function createNewTitleBlockAndAttach(chart, titleOpts) {
    var title = new Title({
      ctx: chart.ctx,
      options: titleOpts,
      chart: chart
    });
    core_layouts.configure(chart, title, titleOpts);
    core_layouts.addBox(chart, title);
    chart.titleBlock = title;
  }

  var plugin_title = {
    id: 'title',

    /**
     * Backward compatibility: since 2.1.5, the title is registered as a plugin, making
     * Chart.Title obsolete. To avoid a breaking change, we export the Title as part of
     * the plugin, which one will be re-exposed in the chart.js file.
     * https://github.com/chartjs/Chart.js/pull/2640
     * @private
     */
    _element: Title,
    beforeInit: function beforeInit(chart) {
      var titleOpts = chart.options.title;

      if (titleOpts) {
        createNewTitleBlockAndAttach(chart, titleOpts);
      }
    },
    beforeUpdate: function beforeUpdate(chart) {
      var titleOpts = chart.options.title;
      var titleBlock = chart.titleBlock;

      if (titleOpts) {
        helpers$1.mergeIf(titleOpts, core_defaults.global.title);

        if (titleBlock) {
          core_layouts.configure(chart, titleBlock, titleOpts);
          titleBlock.options = titleOpts;
        } else {
          createNewTitleBlockAndAttach(chart, titleOpts);
        }
      } else if (titleBlock) {
        core_layouts.removeBox(chart, titleBlock);
        delete chart.titleBlock;
      }
    }
  };
  var plugins = {};
  var filler = plugin_filler;
  var legend = plugin_legend;
  var title = plugin_title;
  plugins.filler = filler;
  plugins.legend = legend;
  plugins.title = title;
  /**
   * @namespace Chart
   */

  core_controller.helpers = helpers$1; // @todo dispatch these helpers into appropriated helpers/helpers.* file and write unit tests!

  core_helpers(core_controller);
  core_controller._adapters = core_adapters;
  core_controller.Animation = core_animation;
  core_controller.animationService = core_animations;
  core_controller.controllers = controllers;
  core_controller.DatasetController = core_datasetController;
  core_controller.defaults = core_defaults;
  core_controller.Element = core_element;
  core_controller.elements = elements;
  core_controller.Interaction = core_interaction;
  core_controller.layouts = core_layouts;
  core_controller.platform = platform;
  core_controller.plugins = core_plugins;
  core_controller.Scale = core_scale;
  core_controller.scaleService = core_scaleService;
  core_controller.Ticks = core_ticks;
  core_controller.Tooltip = core_tooltip; // Register built-in scales

  core_controller.helpers.each(scales, function (scale, type) {
    core_controller.scaleService.registerScaleType(type, scale, scale._defaults);
  }); // Load to register built-in adapters (as side effects)
  // Loading built-in plugins

  for (var k in plugins) {
    if (plugins.hasOwnProperty(k)) {
      core_controller.plugins.register(plugins[k]);
    }
  }

  core_controller.platform.initialize();
  var src = core_controller;

  if (typeof window !== 'undefined') {
    window.Chart = core_controller;
  } // DEPRECATIONS

  /**
   * Provided for backward compatibility, not available anymore
   * @namespace Chart.Chart
   * @deprecated since version 2.8.0
   * @todo remove at version 3
   * @private
   */


  core_controller.Chart = core_controller;
  /**
   * Provided for backward compatibility, not available anymore
   * @namespace Chart.Legend
   * @deprecated since version 2.1.5
   * @todo remove at version 3
   * @private
   */

  core_controller.Legend = plugins.legend._element;
  /**
   * Provided for backward compatibility, not available anymore
   * @namespace Chart.Title
   * @deprecated since version 2.1.5
   * @todo remove at version 3
   * @private
   */

  core_controller.Title = plugins.title._element;
  /**
   * Provided for backward compatibility, use Chart.plugins instead
   * @namespace Chart.pluginService
   * @deprecated since version 2.1.5
   * @todo remove at version 3
   * @private
   */

  core_controller.pluginService = core_controller.plugins;
  /**
   * Provided for backward compatibility, inheriting from Chart.PlugingBase has no
   * effect, instead simply create/register plugins via plain JavaScript objects.
   * @interface Chart.PluginBase
   * @deprecated since version 2.5.0
   * @todo remove at version 3
   * @private
   */

  core_controller.PluginBase = core_controller.Element.extend({});
  /**
   * Provided for backward compatibility, use Chart.helpers.canvas instead.
   * @namespace Chart.canvasHelpers
   * @deprecated since version 2.6.0
   * @todo remove at version 3
   * @private
   */

  core_controller.canvasHelpers = core_controller.helpers.canvas;
  /**
   * Provided for backward compatibility, use Chart.layouts instead.
   * @namespace Chart.layoutService
   * @deprecated since version 2.7.3
   * @todo remove at version 3
   * @private
   */

  core_controller.layoutService = core_controller.layouts;
  /**
   * Provided for backward compatibility, not available anymore.
   * @namespace Chart.LinearScaleBase
   * @deprecated since version 2.8
   * @todo remove at version 3
   * @private
   */

  core_controller.LinearScaleBase = scale_linearbase;
  /**
   * Provided for backward compatibility, instead we should create a new Chart
   * by setting the type in the config (`new Chart(id, {type: '{chart-type}'}`).
   * @deprecated since version 2.8.0
   * @todo remove at version 3
   */

  core_controller.helpers.each(['Bar', 'Bubble', 'Doughnut', 'Line', 'PolarArea', 'Radar', 'Scatter'], function (klass) {
    core_controller[klass] = function (ctx, cfg) {
      return new core_controller(ctx, core_controller.helpers.merge(cfg || {}, {
        type: klass.charAt(0).toLowerCase() + klass.slice(1)
      }));
    };
  });
  return src;
});

/***/ }),

/***/ "./node_modules/core-js/internals/a-callable.js":
/*!******************************************************!*\
  !*** ./node_modules/core-js/internals/a-callable.js ***!
  \******************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js/internals/is-callable.js");

var tryToString = __webpack_require__(/*! ../internals/try-to-string */ "./node_modules/core-js/internals/try-to-string.js"); // `Assert: IsCallable(argument) is true`


module.exports = function (argument) {
  if (isCallable(argument)) return argument;
  throw TypeError(tryToString(argument) + ' is not a function');
};

/***/ }),

/***/ "./node_modules/core-js/internals/add-to-unscopables.js":
/*!**************************************************************!*\
  !*** ./node_modules/core-js/internals/add-to-unscopables.js ***!
  \**************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js");

var create = __webpack_require__(/*! ../internals/object-create */ "./node_modules/core-js/internals/object-create.js");

var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js");

var UNSCOPABLES = wellKnownSymbol('unscopables');
var ArrayPrototype = Array.prototype; // Array.prototype[@@unscopables]
// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables

if (ArrayPrototype[UNSCOPABLES] == undefined) {
  definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {
    configurable: true,
    value: create(null)
  });
} // add a key to Array.prototype[@@unscopables]


module.exports = function (key) {
  ArrayPrototype[UNSCOPABLES][key] = true;
};

/***/ }),

/***/ "./node_modules/core-js/internals/an-object.js":
/*!*****************************************************!*\
  !*** ./node_modules/core-js/internals/an-object.js ***!
  \*****************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js"); // `Assert: Type(argument) is Object`


module.exports = function (argument) {
  if (isObject(argument)) return argument;
  throw TypeError(String(argument) + ' is not an object');
};

/***/ }),

/***/ "./node_modules/core-js/internals/array-includes.js":
/*!**********************************************************!*\
  !*** ./node_modules/core-js/internals/array-includes.js ***!
  \**********************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js/internals/to-indexed-object.js");

var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ "./node_modules/core-js/internals/to-absolute-index.js");

var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ "./node_modules/core-js/internals/length-of-array-like.js"); // `Array.prototype.{ indexOf, includes }` methods implementation


var createMethod = function createMethod(IS_INCLUDES) {
  return function ($this, el, fromIndex) {
    var O = toIndexedObject($this);
    var length = lengthOfArrayLike(O);
    var index = toAbsoluteIndex(fromIndex, length);
    var value; // Array#includes uses SameValueZero equality algorithm
    // eslint-disable-next-line no-self-compare -- NaN check

    if (IS_INCLUDES && el != el) while (length > index) {
      value = O[index++]; // eslint-disable-next-line no-self-compare -- NaN check

      if (value != value) return true; // Array#indexOf ignores holes, Array#includes - not
    } else for (; length > index; index++) {
      if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;
    }
    return !IS_INCLUDES && -1;
  };
};

module.exports = {
  // `Array.prototype.includes` method
  // https://tc39.es/ecma262/#sec-array.prototype.includes
  includes: createMethod(true),
  // `Array.prototype.indexOf` method
  // https://tc39.es/ecma262/#sec-array.prototype.indexof
  indexOf: createMethod(false)
};

/***/ }),

/***/ "./node_modules/core-js/internals/array-iteration.js":
/*!***********************************************************!*\
  !*** ./node_modules/core-js/internals/array-iteration.js ***!
  \***********************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var bind = __webpack_require__(/*! ../internals/function-bind-context */ "./node_modules/core-js/internals/function-bind-context.js");

var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ "./node_modules/core-js/internals/indexed-object.js");

var toObject = __webpack_require__(/*! ../internals/to-object */ "./node_modules/core-js/internals/to-object.js");

var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ "./node_modules/core-js/internals/length-of-array-like.js");

var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ "./node_modules/core-js/internals/array-species-create.js");

var push = [].push; // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation

var createMethod = function createMethod(TYPE) {
  var IS_MAP = TYPE == 1;
  var IS_FILTER = TYPE == 2;
  var IS_SOME = TYPE == 3;
  var IS_EVERY = TYPE == 4;
  var IS_FIND_INDEX = TYPE == 6;
  var IS_FILTER_REJECT = TYPE == 7;
  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
  return function ($this, callbackfn, that, specificCreate) {
    var O = toObject($this);
    var self = IndexedObject(O);
    var boundFunction = bind(callbackfn, that, 3);
    var length = lengthOfArrayLike(self);
    var index = 0;
    var create = specificCreate || arraySpeciesCreate;
    var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;
    var value, result;

    for (; length > index; index++) {
      if (NO_HOLES || index in self) {
        value = self[index];
        result = boundFunction(value, index, O);

        if (TYPE) {
          if (IS_MAP) target[index] = result; // map
          else if (result) switch (TYPE) {
            case 3:
              return true;
            // some

            case 5:
              return value;
            // find

            case 6:
              return index;
            // findIndex

            case 2:
              push.call(target, value);
            // filter
          } else switch (TYPE) {
            case 4:
              return false;
            // every

            case 7:
              push.call(target, value);
            // filterReject
          }
        }
      }
    }

    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;
  };
};

module.exports = {
  // `Array.prototype.forEach` method
  // https://tc39.es/ecma262/#sec-array.prototype.foreach
  forEach: createMethod(0),
  // `Array.prototype.map` method
  // https://tc39.es/ecma262/#sec-array.prototype.map
  map: createMethod(1),
  // `Array.prototype.filter` method
  // https://tc39.es/ecma262/#sec-array.prototype.filter
  filter: createMethod(2),
  // `Array.prototype.some` method
  // https://tc39.es/ecma262/#sec-array.prototype.some
  some: createMethod(3),
  // `Array.prototype.every` method
  // https://tc39.es/ecma262/#sec-array.prototype.every
  every: createMethod(4),
  // `Array.prototype.find` method
  // https://tc39.es/ecma262/#sec-array.prototype.find
  find: createMethod(5),
  // `Array.prototype.findIndex` method
  // https://tc39.es/ecma262/#sec-array.prototype.findIndex
  findIndex: createMethod(6),
  // `Array.prototype.filterReject` method
  // https://github.com/tc39/proposal-array-filtering
  filterReject: createMethod(7)
};

/***/ }),

/***/ "./node_modules/core-js/internals/array-species-constructor.js":
/*!*********************************************************************!*\
  !*** ./node_modules/core-js/internals/array-species-constructor.js ***!
  \*********************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var isArray = __webpack_require__(/*! ../internals/is-array */ "./node_modules/core-js/internals/is-array.js");

var isConstructor = __webpack_require__(/*! ../internals/is-constructor */ "./node_modules/core-js/internals/is-constructor.js");

var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js");

var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js");

var SPECIES = wellKnownSymbol('species'); // a part of `ArraySpeciesCreate` abstract operation
// https://tc39.es/ecma262/#sec-arrayspeciescreate

module.exports = function (originalArray) {
  var C;

  if (isArray(originalArray)) {
    C = originalArray.constructor; // cross-realm fallback

    if (isConstructor(C) && (C === Array || isArray(C.prototype))) C = undefined;else if (isObject(C)) {
      C = C[SPECIES];
      if (C === null) C = undefined;
    }
  }

  return C === undefined ? Array : C;
};

/***/ }),

/***/ "./node_modules/core-js/internals/array-species-create.js":
/*!****************************************************************!*\
  !*** ./node_modules/core-js/internals/array-species-create.js ***!
  \****************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var arraySpeciesConstructor = __webpack_require__(/*! ../internals/array-species-constructor */ "./node_modules/core-js/internals/array-species-constructor.js"); // `ArraySpeciesCreate` abstract operation
// https://tc39.es/ecma262/#sec-arrayspeciescreate


module.exports = function (originalArray, length) {
  return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);
};

/***/ }),

/***/ "./node_modules/core-js/internals/classof-raw.js":
/*!*******************************************************!*\
  !*** ./node_modules/core-js/internals/classof-raw.js ***!
  \*******************************************************/
/***/ (function(module) {

var toString = {}.toString;

module.exports = function (it) {
  return toString.call(it).slice(8, -1);
};

/***/ }),

/***/ "./node_modules/core-js/internals/classof.js":
/*!***************************************************!*\
  !*** ./node_modules/core-js/internals/classof.js ***!
  \***************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ "./node_modules/core-js/internals/to-string-tag-support.js");

var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js/internals/is-callable.js");

var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js/internals/classof-raw.js");

var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js");

var TO_STRING_TAG = wellKnownSymbol('toStringTag'); // ES3 wrong here

var CORRECT_ARGUMENTS = classofRaw(function () {
  return arguments;
}()) == 'Arguments'; // fallback for IE11 Script Access Denied error

var tryGet = function tryGet(it, key) {
  try {
    return it[key];
  } catch (error) {
    /* empty */
  }
}; // getting tag from ES6+ `Object.prototype.toString`


module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {
  var O, tag, result;
  return it === undefined ? 'Undefined' : it === null ? 'Null' // @@toStringTag case
  : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag // builtinTag case
  : CORRECT_ARGUMENTS ? classofRaw(O) // ES3 arguments fallback
  : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;
};

/***/ }),

/***/ "./node_modules/core-js/internals/copy-constructor-properties.js":
/*!***********************************************************************!*\
  !*** ./node_modules/core-js/internals/copy-constructor-properties.js ***!
  \***********************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js/internals/has-own-property.js");

var ownKeys = __webpack_require__(/*! ../internals/own-keys */ "./node_modules/core-js/internals/own-keys.js");

var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "./node_modules/core-js/internals/object-get-own-property-descriptor.js");

var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js");

module.exports = function (target, source) {
  var keys = ownKeys(source);
  var defineProperty = definePropertyModule.f;
  var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;

  for (var i = 0; i < keys.length; i++) {
    var key = keys[i];
    if (!hasOwn(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));
  }
};

/***/ }),

/***/ "./node_modules/core-js/internals/create-non-enumerable-property.js":
/*!**************************************************************************!*\
  !*** ./node_modules/core-js/internals/create-non-enumerable-property.js ***!
  \**************************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js");

var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js");

var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "./node_modules/core-js/internals/create-property-descriptor.js");

module.exports = DESCRIPTORS ? function (object, key, value) {
  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));
} : function (object, key, value) {
  object[key] = value;
  return object;
};

/***/ }),

/***/ "./node_modules/core-js/internals/create-property-descriptor.js":
/*!**********************************************************************!*\
  !*** ./node_modules/core-js/internals/create-property-descriptor.js ***!
  \**********************************************************************/
/***/ (function(module) {

module.exports = function (bitmap, value) {
  return {
    enumerable: !(bitmap & 1),
    configurable: !(bitmap & 2),
    writable: !(bitmap & 4),
    value: value
  };
};

/***/ }),

/***/ "./node_modules/core-js/internals/descriptors.js":
/*!*******************************************************!*\
  !*** ./node_modules/core-js/internals/descriptors.js ***!
  \*******************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js"); // Detect IE8's incomplete defineProperty implementation


module.exports = !fails(function () {
  // eslint-disable-next-line es/no-object-defineproperty -- required for testing
  return Object.defineProperty({}, 1, {
    get: function get() {
      return 7;
    }
  })[1] != 7;
});

/***/ }),

/***/ "./node_modules/core-js/internals/document-create-element.js":
/*!*******************************************************************!*\
  !*** ./node_modules/core-js/internals/document-create-element.js ***!
  \*******************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js");

var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js");

var document = global.document; // typeof document.createElement is 'object' in old IE

var EXISTS = isObject(document) && isObject(document.createElement);

module.exports = function (it) {
  return EXISTS ? document.createElement(it) : {};
};

/***/ }),

/***/ "./node_modules/core-js/internals/engine-user-agent.js":
/*!*************************************************************!*\
  !*** ./node_modules/core-js/internals/engine-user-agent.js ***!
  \*************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js/internals/get-built-in.js");

module.exports = getBuiltIn('navigator', 'userAgent') || '';

/***/ }),

/***/ "./node_modules/core-js/internals/engine-v8-version.js":
/*!*************************************************************!*\
  !*** ./node_modules/core-js/internals/engine-v8-version.js ***!
  \*************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js");

var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ "./node_modules/core-js/internals/engine-user-agent.js");

var process = global.process;
var Deno = global.Deno;
var versions = process && process.versions || Deno && Deno.version;
var v8 = versions && versions.v8;
var match, version;

if (v8) {
  match = v8.split('.');
  version = match[0] < 4 ? 1 : match[0] + match[1];
} else if (userAgent) {
  match = userAgent.match(/Edge\/(\d+)/);

  if (!match || match[1] >= 74) {
    match = userAgent.match(/Chrome\/(\d+)/);
    if (match) version = match[1];
  }
}

module.exports = version && +version;

/***/ }),

/***/ "./node_modules/core-js/internals/enum-bug-keys.js":
/*!*********************************************************!*\
  !*** ./node_modules/core-js/internals/enum-bug-keys.js ***!
  \*********************************************************/
/***/ (function(module) {

// IE8- don't enum bug keys
module.exports = ['constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'valueOf'];

/***/ }),

/***/ "./node_modules/core-js/internals/export.js":
/*!**************************************************!*\
  !*** ./node_modules/core-js/internals/export.js ***!
  \**************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js");

var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "./node_modules/core-js/internals/object-get-own-property-descriptor.js").f;

var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js/internals/create-non-enumerable-property.js");

var redefine = __webpack_require__(/*! ../internals/redefine */ "./node_modules/core-js/internals/redefine.js");

var setGlobal = __webpack_require__(/*! ../internals/set-global */ "./node_modules/core-js/internals/set-global.js");

var copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ "./node_modules/core-js/internals/copy-constructor-properties.js");

var isForced = __webpack_require__(/*! ../internals/is-forced */ "./node_modules/core-js/internals/is-forced.js");
/*
  options.target      - name of the target object
  options.global      - target is the global object
  options.stat        - export as static methods of target
  options.proto       - export as prototype methods of target
  options.real        - real prototype method for the `pure` version
  options.forced      - export even if the native feature is available
  options.bind        - bind methods to the target, required for the `pure` version
  options.wrap        - wrap constructors to preventing global pollution, required for the `pure` version
  options.unsafe      - use the simple assignment of property instead of delete + defineProperty
  options.sham        - add a flag to not completely full polyfills
  options.enumerable  - export as enumerable property
  options.noTargetGet - prevent calling a getter on target
  options.name        - the .name of the function if it does not match the key
*/


module.exports = function (options, source) {
  var TARGET = options.target;
  var GLOBAL = options.global;
  var STATIC = options.stat;
  var FORCED, target, key, targetProperty, sourceProperty, descriptor;

  if (GLOBAL) {
    target = global;
  } else if (STATIC) {
    target = global[TARGET] || setGlobal(TARGET, {});
  } else {
    target = (global[TARGET] || {}).prototype;
  }

  if (target) for (key in source) {
    sourceProperty = source[key];

    if (options.noTargetGet) {
      descriptor = getOwnPropertyDescriptor(target, key);
      targetProperty = descriptor && descriptor.value;
    } else targetProperty = target[key];

    FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); // contained in target

    if (!FORCED && targetProperty !== undefined) {
      if (_typeof(sourceProperty) === _typeof(targetProperty)) continue;
      copyConstructorProperties(sourceProperty, targetProperty);
    } // add a flag to not completely full polyfills


    if (options.sham || targetProperty && targetProperty.sham) {
      createNonEnumerableProperty(sourceProperty, 'sham', true);
    } // extend global


    redefine(target, key, sourceProperty, options);
  }
};

/***/ }),

/***/ "./node_modules/core-js/internals/fails.js":
/*!*************************************************!*\
  !*** ./node_modules/core-js/internals/fails.js ***!
  \*************************************************/
/***/ (function(module) {

module.exports = function (exec) {
  try {
    return !!exec();
  } catch (error) {
    return true;
  }
};

/***/ }),

/***/ "./node_modules/core-js/internals/function-bind-context.js":
/*!*****************************************************************!*\
  !*** ./node_modules/core-js/internals/function-bind-context.js ***!
  \*****************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var aCallable = __webpack_require__(/*! ../internals/a-callable */ "./node_modules/core-js/internals/a-callable.js"); // optional / simple context binding


module.exports = function (fn, that, length) {
  aCallable(fn);
  if (that === undefined) return fn;

  switch (length) {
    case 0:
      return function () {
        return fn.call(that);
      };

    case 1:
      return function (a) {
        return fn.call(that, a);
      };

    case 2:
      return function (a, b) {
        return fn.call(that, a, b);
      };

    case 3:
      return function (a, b, c) {
        return fn.call(that, a, b, c);
      };
  }

  return function () {
    return fn.apply(that, arguments);
  };
};

/***/ }),

/***/ "./node_modules/core-js/internals/function-name.js":
/*!*********************************************************!*\
  !*** ./node_modules/core-js/internals/function-name.js ***!
  \*********************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js");

var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js/internals/has-own-property.js");

var FunctionPrototype = Function.prototype; // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe

var getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;
var EXISTS = hasOwn(FunctionPrototype, 'name'); // additional protection from minified / mangled / dropped function names

var PROPER = EXISTS && function something() {
  /* empty */
}.name === 'something';

var CONFIGURABLE = EXISTS && (!DESCRIPTORS || DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable);
module.exports = {
  EXISTS: EXISTS,
  PROPER: PROPER,
  CONFIGURABLE: CONFIGURABLE
};

/***/ }),

/***/ "./node_modules/core-js/internals/get-built-in.js":
/*!********************************************************!*\
  !*** ./node_modules/core-js/internals/get-built-in.js ***!
  \********************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js");

var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js/internals/is-callable.js");

var aFunction = function aFunction(argument) {
  return isCallable(argument) ? argument : undefined;
};

module.exports = function (namespace, method) {
  return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];
};

/***/ }),

/***/ "./node_modules/core-js/internals/get-method.js":
/*!******************************************************!*\
  !*** ./node_modules/core-js/internals/get-method.js ***!
  \******************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var aCallable = __webpack_require__(/*! ../internals/a-callable */ "./node_modules/core-js/internals/a-callable.js"); // `GetMethod` abstract operation
// https://tc39.es/ecma262/#sec-getmethod


module.exports = function (V, P) {
  var func = V[P];
  return func == null ? undefined : aCallable(func);
};

/***/ }),

/***/ "./node_modules/core-js/internals/global.js":
/*!**************************************************!*\
  !*** ./node_modules/core-js/internals/global.js ***!
  \**************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

var check = function check(it) {
  return it && it.Math == Math && it;
}; // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028


module.exports = // eslint-disable-next-line es/no-global-this -- safe
check((typeof globalThis === "undefined" ? "undefined" : _typeof(globalThis)) == 'object' && globalThis) || check((typeof window === "undefined" ? "undefined" : _typeof(window)) == 'object' && window) || // eslint-disable-next-line no-restricted-globals -- safe
check((typeof self === "undefined" ? "undefined" : _typeof(self)) == 'object' && self) || check((typeof __webpack_require__.g === "undefined" ? "undefined" : _typeof(__webpack_require__.g)) == 'object' && __webpack_require__.g) || // eslint-disable-next-line no-new-func -- fallback
function () {
  return this;
}() || Function('return this')();

/***/ }),

/***/ "./node_modules/core-js/internals/has-own-property.js":
/*!************************************************************!*\
  !*** ./node_modules/core-js/internals/has-own-property.js ***!
  \************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var toObject = __webpack_require__(/*! ../internals/to-object */ "./node_modules/core-js/internals/to-object.js");

var hasOwnProperty = {}.hasOwnProperty; // `HasOwnProperty` abstract operation
// https://tc39.es/ecma262/#sec-hasownproperty

module.exports = Object.hasOwn || function hasOwn(it, key) {
  return hasOwnProperty.call(toObject(it), key);
};

/***/ }),

/***/ "./node_modules/core-js/internals/hidden-keys.js":
/*!*******************************************************!*\
  !*** ./node_modules/core-js/internals/hidden-keys.js ***!
  \*******************************************************/
/***/ (function(module) {

module.exports = {};

/***/ }),

/***/ "./node_modules/core-js/internals/html.js":
/*!************************************************!*\
  !*** ./node_modules/core-js/internals/html.js ***!
  \************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js/internals/get-built-in.js");

module.exports = getBuiltIn('document', 'documentElement');

/***/ }),

/***/ "./node_modules/core-js/internals/ie8-dom-define.js":
/*!**********************************************************!*\
  !*** ./node_modules/core-js/internals/ie8-dom-define.js ***!
  \**********************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js");

var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js");

var createElement = __webpack_require__(/*! ../internals/document-create-element */ "./node_modules/core-js/internals/document-create-element.js"); // Thank's IE8 for his funny defineProperty


module.exports = !DESCRIPTORS && !fails(function () {
  // eslint-disable-next-line es/no-object-defineproperty -- requied for testing
  return Object.defineProperty(createElement('div'), 'a', {
    get: function get() {
      return 7;
    }
  }).a != 7;
});

/***/ }),

/***/ "./node_modules/core-js/internals/indexed-object.js":
/*!**********************************************************!*\
  !*** ./node_modules/core-js/internals/indexed-object.js ***!
  \**********************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js");

var classof = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js/internals/classof-raw.js");

var split = ''.split; // fallback for non-array-like ES3 and non-enumerable old V8 strings

module.exports = fails(function () {
  // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346
  // eslint-disable-next-line no-prototype-builtins -- safe
  return !Object('z').propertyIsEnumerable(0);
}) ? function (it) {
  return classof(it) == 'String' ? split.call(it, '') : Object(it);
} : Object;

/***/ }),

/***/ "./node_modules/core-js/internals/inspect-source.js":
/*!**********************************************************!*\
  !*** ./node_modules/core-js/internals/inspect-source.js ***!
  \**********************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js/internals/is-callable.js");

var store = __webpack_require__(/*! ../internals/shared-store */ "./node_modules/core-js/internals/shared-store.js");

var functionToString = Function.toString; // this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper

if (!isCallable(store.inspectSource)) {
  store.inspectSource = function (it) {
    return functionToString.call(it);
  };
}

module.exports = store.inspectSource;

/***/ }),

/***/ "./node_modules/core-js/internals/internal-state.js":
/*!**********************************************************!*\
  !*** ./node_modules/core-js/internals/internal-state.js ***!
  \**********************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/native-weak-map */ "./node_modules/core-js/internals/native-weak-map.js");

var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js");

var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js");

var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js/internals/create-non-enumerable-property.js");

var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js/internals/has-own-property.js");

var shared = __webpack_require__(/*! ../internals/shared-store */ "./node_modules/core-js/internals/shared-store.js");

var sharedKey = __webpack_require__(/*! ../internals/shared-key */ "./node_modules/core-js/internals/shared-key.js");

var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "./node_modules/core-js/internals/hidden-keys.js");

var OBJECT_ALREADY_INITIALIZED = 'Object already initialized';
var WeakMap = global.WeakMap;
var set, get, has;

var enforce = function enforce(it) {
  return has(it) ? get(it) : set(it, {});
};

var getterFor = function getterFor(TYPE) {
  return function (it) {
    var state;

    if (!isObject(it) || (state = get(it)).type !== TYPE) {
      throw TypeError('Incompatible receiver, ' + TYPE + ' required');
    }

    return state;
  };
};

if (NATIVE_WEAK_MAP || shared.state) {
  var store = shared.state || (shared.state = new WeakMap());
  var wmget = store.get;
  var wmhas = store.has;
  var wmset = store.set;

  set = function set(it, metadata) {
    if (wmhas.call(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);
    metadata.facade = it;
    wmset.call(store, it, metadata);
    return metadata;
  };

  get = function get(it) {
    return wmget.call(store, it) || {};
  };

  has = function has(it) {
    return wmhas.call(store, it);
  };
} else {
  var STATE = sharedKey('state');
  hiddenKeys[STATE] = true;

  set = function set(it, metadata) {
    if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);
    metadata.facade = it;
    createNonEnumerableProperty(it, STATE, metadata);
    return metadata;
  };

  get = function get(it) {
    return hasOwn(it, STATE) ? it[STATE] : {};
  };

  has = function has(it) {
    return hasOwn(it, STATE);
  };
}

module.exports = {
  set: set,
  get: get,
  has: has,
  enforce: enforce,
  getterFor: getterFor
};

/***/ }),

/***/ "./node_modules/core-js/internals/is-array.js":
/*!****************************************************!*\
  !*** ./node_modules/core-js/internals/is-array.js ***!
  \****************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var classof = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js/internals/classof-raw.js"); // `IsArray` abstract operation
// https://tc39.es/ecma262/#sec-isarray
// eslint-disable-next-line es/no-array-isarray -- safe


module.exports = Array.isArray || function isArray(argument) {
  return classof(argument) == 'Array';
};

/***/ }),

/***/ "./node_modules/core-js/internals/is-callable.js":
/*!*******************************************************!*\
  !*** ./node_modules/core-js/internals/is-callable.js ***!
  \*******************************************************/
/***/ (function(module) {

// `IsCallable` abstract operation
// https://tc39.es/ecma262/#sec-iscallable
module.exports = function (argument) {
  return typeof argument === 'function';
};

/***/ }),

/***/ "./node_modules/core-js/internals/is-constructor.js":
/*!**********************************************************!*\
  !*** ./node_modules/core-js/internals/is-constructor.js ***!
  \**********************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js");

var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js/internals/is-callable.js");

var classof = __webpack_require__(/*! ../internals/classof */ "./node_modules/core-js/internals/classof.js");

var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js/internals/get-built-in.js");

var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ "./node_modules/core-js/internals/inspect-source.js");

var empty = [];
var construct = getBuiltIn('Reflect', 'construct');
var constructorRegExp = /^\s*(?:class|function)\b/;
var exec = constructorRegExp.exec;
var INCORRECT_TO_STRING = !constructorRegExp.exec(function () {
  /* empty */
});

var isConstructorModern = function isConstructorModern(argument) {
  if (!isCallable(argument)) return false;

  try {
    construct(Object, empty, argument);
    return true;
  } catch (error) {
    return false;
  }
};

var isConstructorLegacy = function isConstructorLegacy(argument) {
  if (!isCallable(argument)) return false;

  switch (classof(argument)) {
    case 'AsyncFunction':
    case 'GeneratorFunction':
    case 'AsyncGeneratorFunction':
      return false;
    // we can't check .prototype since constructors produced by .bind haven't it
  }

  return INCORRECT_TO_STRING || !!exec.call(constructorRegExp, inspectSource(argument));
}; // `IsConstructor` abstract operation
// https://tc39.es/ecma262/#sec-isconstructor


module.exports = !construct || fails(function () {
  var called;
  return isConstructorModern(isConstructorModern.call) || !isConstructorModern(Object) || !isConstructorModern(function () {
    called = true;
  }) || called;
}) ? isConstructorLegacy : isConstructorModern;

/***/ }),

/***/ "./node_modules/core-js/internals/is-forced.js":
/*!*****************************************************!*\
  !*** ./node_modules/core-js/internals/is-forced.js ***!
  \*****************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js");

var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js/internals/is-callable.js");

var replacement = /#|\.prototype\./;

var isForced = function isForced(feature, detection) {
  var value = data[normalize(feature)];
  return value == POLYFILL ? true : value == NATIVE ? false : isCallable(detection) ? fails(detection) : !!detection;
};

var normalize = isForced.normalize = function (string) {
  return String(string).replace(replacement, '.').toLowerCase();
};

var data = isForced.data = {};
var NATIVE = isForced.NATIVE = 'N';
var POLYFILL = isForced.POLYFILL = 'P';
module.exports = isForced;

/***/ }),

/***/ "./node_modules/core-js/internals/is-object.js":
/*!*****************************************************!*\
  !*** ./node_modules/core-js/internals/is-object.js ***!
  \*****************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js/internals/is-callable.js");

module.exports = function (it) {
  return _typeof(it) === 'object' ? it !== null : isCallable(it);
};

/***/ }),

/***/ "./node_modules/core-js/internals/is-pure.js":
/*!***************************************************!*\
  !*** ./node_modules/core-js/internals/is-pure.js ***!
  \***************************************************/
/***/ (function(module) {

module.exports = false;

/***/ }),

/***/ "./node_modules/core-js/internals/is-symbol.js":
/*!*****************************************************!*\
  !*** ./node_modules/core-js/internals/is-symbol.js ***!
  \*****************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js/internals/is-callable.js");

var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js/internals/get-built-in.js");

var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ "./node_modules/core-js/internals/use-symbol-as-uid.js");

module.exports = USE_SYMBOL_AS_UID ? function (it) {
  return _typeof(it) == 'symbol';
} : function (it) {
  var $Symbol = getBuiltIn('Symbol');
  return isCallable($Symbol) && Object(it) instanceof $Symbol;
};

/***/ }),

/***/ "./node_modules/core-js/internals/length-of-array-like.js":
/*!****************************************************************!*\
  !*** ./node_modules/core-js/internals/length-of-array-like.js ***!
  \****************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var toLength = __webpack_require__(/*! ../internals/to-length */ "./node_modules/core-js/internals/to-length.js"); // `LengthOfArrayLike` abstract operation
// https://tc39.es/ecma262/#sec-lengthofarraylike


module.exports = function (obj) {
  return toLength(obj.length);
};

/***/ }),

/***/ "./node_modules/core-js/internals/native-symbol.js":
/*!*********************************************************!*\
  !*** ./node_modules/core-js/internals/native-symbol.js ***!
  \*********************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

/* eslint-disable es/no-symbol -- required for testing */
var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ "./node_modules/core-js/internals/engine-v8-version.js");

var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js"); // eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing


module.exports = !!Object.getOwnPropertySymbols && !fails(function () {
  var symbol = Symbol(); // Chrome 38 Symbol has incorrect toString conversion
  // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances

  return !String(symbol) || !(Object(symbol) instanceof Symbol) || // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances
  !Symbol.sham && V8_VERSION && V8_VERSION < 41;
});

/***/ }),

/***/ "./node_modules/core-js/internals/native-weak-map.js":
/*!***********************************************************!*\
  !*** ./node_modules/core-js/internals/native-weak-map.js ***!
  \***********************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js");

var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js/internals/is-callable.js");

var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ "./node_modules/core-js/internals/inspect-source.js");

var WeakMap = global.WeakMap;
module.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap));

/***/ }),

/***/ "./node_modules/core-js/internals/object-assign.js":
/*!*********************************************************!*\
  !*** ./node_modules/core-js/internals/object-assign.js ***!
  \*********************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

"use strict";


var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js");

var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js");

var objectKeys = __webpack_require__(/*! ../internals/object-keys */ "./node_modules/core-js/internals/object-keys.js");

var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ "./node_modules/core-js/internals/object-get-own-property-symbols.js");

var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ "./node_modules/core-js/internals/object-property-is-enumerable.js");

var toObject = __webpack_require__(/*! ../internals/to-object */ "./node_modules/core-js/internals/to-object.js");

var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ "./node_modules/core-js/internals/indexed-object.js"); // eslint-disable-next-line es/no-object-assign -- safe


var $assign = Object.assign; // eslint-disable-next-line es/no-object-defineproperty -- required for testing

var defineProperty = Object.defineProperty; // `Object.assign` method
// https://tc39.es/ecma262/#sec-object.assign

module.exports = !$assign || fails(function () {
  // should have correct order of operations (Edge bug)
  if (DESCRIPTORS && $assign({
    b: 1
  }, $assign(defineProperty({}, 'a', {
    enumerable: true,
    get: function get() {
      defineProperty(this, 'b', {
        value: 3,
        enumerable: false
      });
    }
  }), {
    b: 2
  })).b !== 1) return true; // should work with symbols and should have deterministic property order (V8 bug)

  var A = {};
  var B = {}; // eslint-disable-next-line es/no-symbol -- safe

  var symbol = Symbol();
  var alphabet = 'abcdefghijklmnopqrst';
  A[symbol] = 7;
  alphabet.split('').forEach(function (chr) {
    B[chr] = chr;
  });
  return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet;
}) ? function assign(target, source) {
  // eslint-disable-line no-unused-vars -- required for `.length`
  var T = toObject(target);
  var argumentsLength = arguments.length;
  var index = 1;
  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
  var propertyIsEnumerable = propertyIsEnumerableModule.f;

  while (argumentsLength > index) {
    var S = IndexedObject(arguments[index++]);
    var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);
    var length = keys.length;
    var j = 0;
    var key;

    while (length > j) {
      key = keys[j++];
      if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key];
    }
  }

  return T;
} : $assign;

/***/ }),

/***/ "./node_modules/core-js/internals/object-create.js":
/*!*********************************************************!*\
  !*** ./node_modules/core-js/internals/object-create.js ***!
  \*********************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

/* global ActiveXObject -- old IE, WSH */
var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js");

var defineProperties = __webpack_require__(/*! ../internals/object-define-properties */ "./node_modules/core-js/internals/object-define-properties.js");

var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ "./node_modules/core-js/internals/enum-bug-keys.js");

var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "./node_modules/core-js/internals/hidden-keys.js");

var html = __webpack_require__(/*! ../internals/html */ "./node_modules/core-js/internals/html.js");

var documentCreateElement = __webpack_require__(/*! ../internals/document-create-element */ "./node_modules/core-js/internals/document-create-element.js");

var sharedKey = __webpack_require__(/*! ../internals/shared-key */ "./node_modules/core-js/internals/shared-key.js");

var GT = '>';
var LT = '<';
var PROTOTYPE = 'prototype';
var SCRIPT = 'script';
var IE_PROTO = sharedKey('IE_PROTO');

var EmptyConstructor = function EmptyConstructor() {
  /* empty */
};

var scriptTag = function scriptTag(content) {
  return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;
}; // Create object with fake `null` prototype: use ActiveX Object with cleared prototype


var NullProtoObjectViaActiveX = function NullProtoObjectViaActiveX(activeXDocument) {
  activeXDocument.write(scriptTag(''));
  activeXDocument.close();
  var temp = activeXDocument.parentWindow.Object;
  activeXDocument = null; // avoid memory leak

  return temp;
}; // Create object with fake `null` prototype: use iframe Object with cleared prototype


var NullProtoObjectViaIFrame = function NullProtoObjectViaIFrame() {
  // Thrash, waste and sodomy: IE GC bug
  var iframe = documentCreateElement('iframe');
  var JS = 'java' + SCRIPT + ':';
  var iframeDocument;
  iframe.style.display = 'none';
  html.appendChild(iframe); // https://github.com/zloirock/core-js/issues/475

  iframe.src = String(JS);
  iframeDocument = iframe.contentWindow.document;
  iframeDocument.open();
  iframeDocument.write(scriptTag('document.F=Object'));
  iframeDocument.close();
  return iframeDocument.F;
}; // Check for document.domain and active x support
// No need to use active x approach when document.domain is not set
// see https://github.com/es-shims/es5-shim/issues/150
// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346
// avoid IE GC bug


var activeXDocument;

var _NullProtoObject = function NullProtoObject() {
  try {
    activeXDocument = new ActiveXObject('htmlfile');
  } catch (error) {
    /* ignore */
  }

  _NullProtoObject = typeof document != 'undefined' ? document.domain && activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) // old IE
  : NullProtoObjectViaIFrame() : NullProtoObjectViaActiveX(activeXDocument); // WSH

  var length = enumBugKeys.length;

  while (length--) {
    delete _NullProtoObject[PROTOTYPE][enumBugKeys[length]];
  }

  return _NullProtoObject();
};

hiddenKeys[IE_PROTO] = true; // `Object.create` method
// https://tc39.es/ecma262/#sec-object.create

module.exports = Object.create || function create(O, Properties) {
  var result;

  if (O !== null) {
    EmptyConstructor[PROTOTYPE] = anObject(O);
    result = new EmptyConstructor();
    EmptyConstructor[PROTOTYPE] = null; // add "__proto__" for Object.getPrototypeOf polyfill

    result[IE_PROTO] = O;
  } else result = _NullProtoObject();

  return Properties === undefined ? result : defineProperties(result, Properties);
};

/***/ }),

/***/ "./node_modules/core-js/internals/object-define-properties.js":
/*!********************************************************************!*\
  !*** ./node_modules/core-js/internals/object-define-properties.js ***!
  \********************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js");

var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js");

var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js");

var objectKeys = __webpack_require__(/*! ../internals/object-keys */ "./node_modules/core-js/internals/object-keys.js"); // `Object.defineProperties` method
// https://tc39.es/ecma262/#sec-object.defineproperties
// eslint-disable-next-line es/no-object-defineproperties -- safe


module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {
  anObject(O);
  var keys = objectKeys(Properties);
  var length = keys.length;
  var index = 0;
  var key;

  while (length > index) {
    definePropertyModule.f(O, key = keys[index++], Properties[key]);
  }

  return O;
};

/***/ }),

/***/ "./node_modules/core-js/internals/object-define-property.js":
/*!******************************************************************!*\
  !*** ./node_modules/core-js/internals/object-define-property.js ***!
  \******************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js");

var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ "./node_modules/core-js/internals/ie8-dom-define.js");

var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js");

var toPropertyKey = __webpack_require__(/*! ../internals/to-property-key */ "./node_modules/core-js/internals/to-property-key.js"); // eslint-disable-next-line es/no-object-defineproperty -- safe


var $defineProperty = Object.defineProperty; // `Object.defineProperty` method
// https://tc39.es/ecma262/#sec-object.defineproperty

exports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) {
  anObject(O);
  P = toPropertyKey(P);
  anObject(Attributes);
  if (IE8_DOM_DEFINE) try {
    return $defineProperty(O, P, Attributes);
  } catch (error) {
    /* empty */
  }
  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');
  if ('value' in Attributes) O[P] = Attributes.value;
  return O;
};

/***/ }),

/***/ "./node_modules/core-js/internals/object-get-own-property-descriptor.js":
/*!******************************************************************************!*\
  !*** ./node_modules/core-js/internals/object-get-own-property-descriptor.js ***!
  \******************************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js");

var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ "./node_modules/core-js/internals/object-property-is-enumerable.js");

var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "./node_modules/core-js/internals/create-property-descriptor.js");

var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js/internals/to-indexed-object.js");

var toPropertyKey = __webpack_require__(/*! ../internals/to-property-key */ "./node_modules/core-js/internals/to-property-key.js");

var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js/internals/has-own-property.js");

var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ "./node_modules/core-js/internals/ie8-dom-define.js"); // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe


var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; // `Object.getOwnPropertyDescriptor` method
// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor

exports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {
  O = toIndexedObject(O);
  P = toPropertyKey(P);
  if (IE8_DOM_DEFINE) try {
    return $getOwnPropertyDescriptor(O, P);
  } catch (error) {
    /* empty */
  }
  if (hasOwn(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);
};

/***/ }),

/***/ "./node_modules/core-js/internals/object-get-own-property-names.js":
/*!*************************************************************************!*\
  !*** ./node_modules/core-js/internals/object-get-own-property-names.js ***!
  \*************************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ "./node_modules/core-js/internals/object-keys-internal.js");

var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ "./node_modules/core-js/internals/enum-bug-keys.js");

var hiddenKeys = enumBugKeys.concat('length', 'prototype'); // `Object.getOwnPropertyNames` method
// https://tc39.es/ecma262/#sec-object.getownpropertynames
// eslint-disable-next-line es/no-object-getownpropertynames -- safe

exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
  return internalObjectKeys(O, hiddenKeys);
};

/***/ }),

/***/ "./node_modules/core-js/internals/object-get-own-property-symbols.js":
/*!***************************************************************************!*\
  !*** ./node_modules/core-js/internals/object-get-own-property-symbols.js ***!
  \***************************************************************************/
/***/ (function(__unused_webpack_module, exports) {

// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe
exports.f = Object.getOwnPropertySymbols;

/***/ }),

/***/ "./node_modules/core-js/internals/object-keys-internal.js":
/*!****************************************************************!*\
  !*** ./node_modules/core-js/internals/object-keys-internal.js ***!
  \****************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js/internals/has-own-property.js");

var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js/internals/to-indexed-object.js");

var indexOf = __webpack_require__(/*! ../internals/array-includes */ "./node_modules/core-js/internals/array-includes.js").indexOf;

var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "./node_modules/core-js/internals/hidden-keys.js");

module.exports = function (object, names) {
  var O = toIndexedObject(object);
  var i = 0;
  var result = [];
  var key;

  for (key in O) {
    !hasOwn(hiddenKeys, key) && hasOwn(O, key) && result.push(key);
  } // Don't enum bug & hidden keys


  while (names.length > i) {
    if (hasOwn(O, key = names[i++])) {
      ~indexOf(result, key) || result.push(key);
    }
  }

  return result;
};

/***/ }),

/***/ "./node_modules/core-js/internals/object-keys.js":
/*!*******************************************************!*\
  !*** ./node_modules/core-js/internals/object-keys.js ***!
  \*******************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ "./node_modules/core-js/internals/object-keys-internal.js");

var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ "./node_modules/core-js/internals/enum-bug-keys.js"); // `Object.keys` method
// https://tc39.es/ecma262/#sec-object.keys
// eslint-disable-next-line es/no-object-keys -- safe


module.exports = Object.keys || function keys(O) {
  return internalObjectKeys(O, enumBugKeys);
};

/***/ }),

/***/ "./node_modules/core-js/internals/object-property-is-enumerable.js":
/*!*************************************************************************!*\
  !*** ./node_modules/core-js/internals/object-property-is-enumerable.js ***!
  \*************************************************************************/
/***/ (function(__unused_webpack_module, exports) {

"use strict";


var $propertyIsEnumerable = {}.propertyIsEnumerable; // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe

var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; // Nashorn ~ JDK8 bug

var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({
  1: 2
}, 1); // `Object.prototype.propertyIsEnumerable` method implementation
// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable

exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {
  var descriptor = getOwnPropertyDescriptor(this, V);
  return !!descriptor && descriptor.enumerable;
} : $propertyIsEnumerable;

/***/ }),

/***/ "./node_modules/core-js/internals/object-to-array.js":
/*!***********************************************************!*\
  !*** ./node_modules/core-js/internals/object-to-array.js ***!
  \***********************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js");

var objectKeys = __webpack_require__(/*! ../internals/object-keys */ "./node_modules/core-js/internals/object-keys.js");

var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js/internals/to-indexed-object.js");

var propertyIsEnumerable = __webpack_require__(/*! ../internals/object-property-is-enumerable */ "./node_modules/core-js/internals/object-property-is-enumerable.js").f; // `Object.{ entries, values }` methods implementation


var createMethod = function createMethod(TO_ENTRIES) {
  return function (it) {
    var O = toIndexedObject(it);
    var keys = objectKeys(O);
    var length = keys.length;
    var i = 0;
    var result = [];
    var key;

    while (length > i) {
      key = keys[i++];

      if (!DESCRIPTORS || propertyIsEnumerable.call(O, key)) {
        result.push(TO_ENTRIES ? [key, O[key]] : O[key]);
      }
    }

    return result;
  };
};

module.exports = {
  // `Object.entries` method
  // https://tc39.es/ecma262/#sec-object.entries
  entries: createMethod(true),
  // `Object.values` method
  // https://tc39.es/ecma262/#sec-object.values
  values: createMethod(false)
};

/***/ }),

/***/ "./node_modules/core-js/internals/ordinary-to-primitive.js":
/*!*****************************************************************!*\
  !*** ./node_modules/core-js/internals/ordinary-to-primitive.js ***!
  \*****************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js/internals/is-callable.js");

var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js"); // `OrdinaryToPrimitive` abstract operation
// https://tc39.es/ecma262/#sec-ordinarytoprimitive


module.exports = function (input, pref) {
  var fn, val;
  if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = fn.call(input))) return val;
  if (isCallable(fn = input.valueOf) && !isObject(val = fn.call(input))) return val;
  if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = fn.call(input))) return val;
  throw TypeError("Can't convert object to primitive value");
};

/***/ }),

/***/ "./node_modules/core-js/internals/own-keys.js":
/*!****************************************************!*\
  !*** ./node_modules/core-js/internals/own-keys.js ***!
  \****************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js/internals/get-built-in.js");

var getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ "./node_modules/core-js/internals/object-get-own-property-names.js");

var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ "./node_modules/core-js/internals/object-get-own-property-symbols.js");

var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); // all object keys, includes non-enumerable and symbols


module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {
  var keys = getOwnPropertyNamesModule.f(anObject(it));
  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
  return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;
};

/***/ }),

/***/ "./node_modules/core-js/internals/redefine.js":
/*!****************************************************!*\
  !*** ./node_modules/core-js/internals/redefine.js ***!
  \****************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js");

var isCallable = __webpack_require__(/*! ../internals/is-callable */ "./node_modules/core-js/internals/is-callable.js");

var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js/internals/has-own-property.js");

var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js/internals/create-non-enumerable-property.js");

var setGlobal = __webpack_require__(/*! ../internals/set-global */ "./node_modules/core-js/internals/set-global.js");

var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ "./node_modules/core-js/internals/inspect-source.js");

var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "./node_modules/core-js/internals/internal-state.js");

var CONFIGURABLE_FUNCTION_NAME = __webpack_require__(/*! ../internals/function-name */ "./node_modules/core-js/internals/function-name.js").CONFIGURABLE;

var getInternalState = InternalStateModule.get;
var enforceInternalState = InternalStateModule.enforce;
var TEMPLATE = String(String).split('String');
(module.exports = function (O, key, value, options) {
  var unsafe = options ? !!options.unsafe : false;
  var simple = options ? !!options.enumerable : false;
  var noTargetGet = options ? !!options.noTargetGet : false;
  var name = options && options.name !== undefined ? options.name : key;
  var state;

  if (isCallable(value)) {
    if (String(name).slice(0, 7) === 'Symbol(') {
      name = '[' + String(name).replace(/^Symbol\(([^)]*)\)/, '$1') + ']';
    }

    if (!hasOwn(value, 'name') || CONFIGURABLE_FUNCTION_NAME && value.name !== name) {
      createNonEnumerableProperty(value, 'name', name);
    }

    state = enforceInternalState(value);

    if (!state.source) {
      state.source = TEMPLATE.join(typeof name == 'string' ? name : '');
    }
  }

  if (O === global) {
    if (simple) O[key] = value;else setGlobal(key, value);
    return;
  } else if (!unsafe) {
    delete O[key];
  } else if (!noTargetGet && O[key]) {
    simple = true;
  }

  if (simple) O[key] = value;else createNonEnumerableProperty(O, key, value); // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
})(Function.prototype, 'toString', function toString() {
  return isCallable(this) && getInternalState(this).source || inspectSource(this);
});

/***/ }),

/***/ "./node_modules/core-js/internals/require-object-coercible.js":
/*!********************************************************************!*\
  !*** ./node_modules/core-js/internals/require-object-coercible.js ***!
  \********************************************************************/
/***/ (function(module) {

// `RequireObjectCoercible` abstract operation
// https://tc39.es/ecma262/#sec-requireobjectcoercible
module.exports = function (it) {
  if (it == undefined) throw TypeError("Can't call method on " + it);
  return it;
};

/***/ }),

/***/ "./node_modules/core-js/internals/set-global.js":
/*!******************************************************!*\
  !*** ./node_modules/core-js/internals/set-global.js ***!
  \******************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js");

module.exports = function (key, value) {
  try {
    // eslint-disable-next-line es/no-object-defineproperty -- safe
    Object.defineProperty(global, key, {
      value: value,
      configurable: true,
      writable: true
    });
  } catch (error) {
    global[key] = value;
  }

  return value;
};

/***/ }),

/***/ "./node_modules/core-js/internals/shared-key.js":
/*!******************************************************!*\
  !*** ./node_modules/core-js/internals/shared-key.js ***!
  \******************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var shared = __webpack_require__(/*! ../internals/shared */ "./node_modules/core-js/internals/shared.js");

var uid = __webpack_require__(/*! ../internals/uid */ "./node_modules/core-js/internals/uid.js");

var keys = shared('keys');

module.exports = function (key) {
  return keys[key] || (keys[key] = uid(key));
};

/***/ }),

/***/ "./node_modules/core-js/internals/shared-store.js":
/*!********************************************************!*\
  !*** ./node_modules/core-js/internals/shared-store.js ***!
  \********************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js");

var setGlobal = __webpack_require__(/*! ../internals/set-global */ "./node_modules/core-js/internals/set-global.js");

var SHARED = '__core-js_shared__';
var store = global[SHARED] || setGlobal(SHARED, {});
module.exports = store;

/***/ }),

/***/ "./node_modules/core-js/internals/shared.js":
/*!**************************************************!*\
  !*** ./node_modules/core-js/internals/shared.js ***!
  \**************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js/internals/is-pure.js");

var store = __webpack_require__(/*! ../internals/shared-store */ "./node_modules/core-js/internals/shared-store.js");

(module.exports = function (key, value) {
  return store[key] || (store[key] = value !== undefined ? value : {});
})('versions', []).push({
  version: '3.18.3',
  mode: IS_PURE ? 'pure' : 'global',
  copyright: '© 2021 Denis Pushkarev (zloirock.ru)'
});

/***/ }),

/***/ "./node_modules/core-js/internals/to-absolute-index.js":
/*!*************************************************************!*\
  !*** ./node_modules/core-js/internals/to-absolute-index.js ***!
  \*************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ "./node_modules/core-js/internals/to-integer-or-infinity.js");

var max = Math.max;
var min = Math.min; // Helper for a popular repeating case of the spec:
// Let integer be ? ToInteger(index).
// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).

module.exports = function (index, length) {
  var integer = toIntegerOrInfinity(index);
  return integer < 0 ? max(integer + length, 0) : min(integer, length);
};

/***/ }),

/***/ "./node_modules/core-js/internals/to-indexed-object.js":
/*!*************************************************************!*\
  !*** ./node_modules/core-js/internals/to-indexed-object.js ***!
  \*************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

// toObject with fallback for non-array-like ES3 strings
var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ "./node_modules/core-js/internals/indexed-object.js");

var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js/internals/require-object-coercible.js");

module.exports = function (it) {
  return IndexedObject(requireObjectCoercible(it));
};

/***/ }),

/***/ "./node_modules/core-js/internals/to-integer-or-infinity.js":
/*!******************************************************************!*\
  !*** ./node_modules/core-js/internals/to-integer-or-infinity.js ***!
  \******************************************************************/
/***/ (function(module) {

var ceil = Math.ceil;
var floor = Math.floor; // `ToIntegerOrInfinity` abstract operation
// https://tc39.es/ecma262/#sec-tointegerorinfinity

module.exports = function (argument) {
  var number = +argument; // eslint-disable-next-line no-self-compare -- safe

  return number !== number || number === 0 ? 0 : (number > 0 ? floor : ceil)(number);
};

/***/ }),

/***/ "./node_modules/core-js/internals/to-length.js":
/*!*****************************************************!*\
  !*** ./node_modules/core-js/internals/to-length.js ***!
  \*****************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ "./node_modules/core-js/internals/to-integer-or-infinity.js");

var min = Math.min; // `ToLength` abstract operation
// https://tc39.es/ecma262/#sec-tolength

module.exports = function (argument) {
  return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991
};

/***/ }),

/***/ "./node_modules/core-js/internals/to-object.js":
/*!*****************************************************!*\
  !*** ./node_modules/core-js/internals/to-object.js ***!
  \*****************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js/internals/require-object-coercible.js"); // `ToObject` abstract operation
// https://tc39.es/ecma262/#sec-toobject


module.exports = function (argument) {
  return Object(requireObjectCoercible(argument));
};

/***/ }),

/***/ "./node_modules/core-js/internals/to-primitive.js":
/*!********************************************************!*\
  !*** ./node_modules/core-js/internals/to-primitive.js ***!
  \********************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js");

var isSymbol = __webpack_require__(/*! ../internals/is-symbol */ "./node_modules/core-js/internals/is-symbol.js");

var getMethod = __webpack_require__(/*! ../internals/get-method */ "./node_modules/core-js/internals/get-method.js");

var ordinaryToPrimitive = __webpack_require__(/*! ../internals/ordinary-to-primitive */ "./node_modules/core-js/internals/ordinary-to-primitive.js");

var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js");

var TO_PRIMITIVE = wellKnownSymbol('toPrimitive'); // `ToPrimitive` abstract operation
// https://tc39.es/ecma262/#sec-toprimitive

module.exports = function (input, pref) {
  if (!isObject(input) || isSymbol(input)) return input;
  var exoticToPrim = getMethod(input, TO_PRIMITIVE);
  var result;

  if (exoticToPrim) {
    if (pref === undefined) pref = 'default';
    result = exoticToPrim.call(input, pref);
    if (!isObject(result) || isSymbol(result)) return result;
    throw TypeError("Can't convert object to primitive value");
  }

  if (pref === undefined) pref = 'number';
  return ordinaryToPrimitive(input, pref);
};

/***/ }),

/***/ "./node_modules/core-js/internals/to-property-key.js":
/*!***********************************************************!*\
  !*** ./node_modules/core-js/internals/to-property-key.js ***!
  \***********************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ "./node_modules/core-js/internals/to-primitive.js");

var isSymbol = __webpack_require__(/*! ../internals/is-symbol */ "./node_modules/core-js/internals/is-symbol.js"); // `ToPropertyKey` abstract operation
// https://tc39.es/ecma262/#sec-topropertykey


module.exports = function (argument) {
  var key = toPrimitive(argument, 'string');
  return isSymbol(key) ? key : String(key);
};

/***/ }),

/***/ "./node_modules/core-js/internals/to-string-tag-support.js":
/*!*****************************************************************!*\
  !*** ./node_modules/core-js/internals/to-string-tag-support.js ***!
  \*****************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js");

var TO_STRING_TAG = wellKnownSymbol('toStringTag');
var test = {};
test[TO_STRING_TAG] = 'z';
module.exports = String(test) === '[object z]';

/***/ }),

/***/ "./node_modules/core-js/internals/try-to-string.js":
/*!*********************************************************!*\
  !*** ./node_modules/core-js/internals/try-to-string.js ***!
  \*********************************************************/
/***/ (function(module) {

module.exports = function (argument) {
  try {
    return String(argument);
  } catch (error) {
    return 'Object';
  }
};

/***/ }),

/***/ "./node_modules/core-js/internals/uid.js":
/*!***********************************************!*\
  !*** ./node_modules/core-js/internals/uid.js ***!
  \***********************************************/
/***/ (function(module) {

var id = 0;
var postfix = Math.random();

module.exports = function (key) {
  return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);
};

/***/ }),

/***/ "./node_modules/core-js/internals/use-symbol-as-uid.js":
/*!*************************************************************!*\
  !*** ./node_modules/core-js/internals/use-symbol-as-uid.js ***!
  \*************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

/* eslint-disable es/no-symbol -- required for testing */
var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ "./node_modules/core-js/internals/native-symbol.js");

module.exports = NATIVE_SYMBOL && !Symbol.sham && _typeof(Symbol.iterator) == 'symbol';

/***/ }),

/***/ "./node_modules/core-js/internals/well-known-symbol.js":
/*!*************************************************************!*\
  !*** ./node_modules/core-js/internals/well-known-symbol.js ***!
  \*************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js");

var shared = __webpack_require__(/*! ../internals/shared */ "./node_modules/core-js/internals/shared.js");

var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "./node_modules/core-js/internals/has-own-property.js");

var uid = __webpack_require__(/*! ../internals/uid */ "./node_modules/core-js/internals/uid.js");

var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ "./node_modules/core-js/internals/native-symbol.js");

var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ "./node_modules/core-js/internals/use-symbol-as-uid.js");

var WellKnownSymbolsStore = shared('wks');
var _Symbol = global.Symbol;
var createWellKnownSymbol = USE_SYMBOL_AS_UID ? _Symbol : _Symbol && _Symbol.withoutSetter || uid;

module.exports = function (name) {
  if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {
    if (NATIVE_SYMBOL && hasOwn(_Symbol, name)) {
      WellKnownSymbolsStore[name] = _Symbol[name];
    } else {
      WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);
    }
  }

  return WellKnownSymbolsStore[name];
};

/***/ }),

/***/ "./node_modules/core-js/modules/es.array.find.js":
/*!*******************************************************!*\
  !*** ./node_modules/core-js/modules/es.array.find.js ***!
  \*******************************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

"use strict";


var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js");

var $find = __webpack_require__(/*! ../internals/array-iteration */ "./node_modules/core-js/internals/array-iteration.js").find;

var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ "./node_modules/core-js/internals/add-to-unscopables.js");

var FIND = 'find';
var SKIPS_HOLES = true; // Shouldn't skip holes

if (FIND in []) Array(1)[FIND](function () {
  SKIPS_HOLES = false;
}); // `Array.prototype.find` method
// https://tc39.es/ecma262/#sec-array.prototype.find

$({
  target: 'Array',
  proto: true,
  forced: SKIPS_HOLES
}, {
  find: function find(callbackfn
  /* , that = undefined */
  ) {
    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  }
}); // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables

addToUnscopables(FIND);

/***/ }),

/***/ "./node_modules/core-js/modules/es.object.assign.js":
/*!**********************************************************!*\
  !*** ./node_modules/core-js/modules/es.object.assign.js ***!
  \**********************************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js");

var assign = __webpack_require__(/*! ../internals/object-assign */ "./node_modules/core-js/internals/object-assign.js"); // `Object.assign` method
// https://tc39.es/ecma262/#sec-object.assign
// eslint-disable-next-line es/no-object-assign -- required for testing


$({
  target: 'Object',
  stat: true,
  forced: Object.assign !== assign
}, {
  assign: assign
});

/***/ }),

/***/ "./node_modules/core-js/modules/es.object.entries.js":
/*!***********************************************************!*\
  !*** ./node_modules/core-js/modules/es.object.entries.js ***!
  \***********************************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js");

var $entries = __webpack_require__(/*! ../internals/object-to-array */ "./node_modules/core-js/internals/object-to-array.js").entries; // `Object.entries` method
// https://tc39.es/ecma262/#sec-object.entries


$({
  target: 'Object',
  stat: true
}, {
  entries: function entries(O) {
    return $entries(O);
  }
});

/***/ }),

/***/ "./node_modules/css-loader/dist/runtime/api.js":
/*!*****************************************************!*\
  !*** ./node_modules/css-loader/dist/runtime/api.js ***!
  \*****************************************************/
/***/ (function(module) {

"use strict";

/*
  MIT License http://www.opensource.org/licenses/mit-license.php
  Author Tobias Koppers @sokra
*/

module.exports = function (cssWithMappingToString) {
  var list = []; // return the list of modules as css string

  list.toString = function toString() {
    return this.map(function (item) {
      var content = "";
      var needLayer = typeof item[5] !== "undefined";

      if (item[4]) {
        content += "@supports (".concat(item[4], ") {");
      }

      if (item[2]) {
        content += "@media ".concat(item[2], " {");
      }

      if (needLayer) {
        content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {");
      }

      content += cssWithMappingToString(item);

      if (needLayer) {
        content += "}";
      }

      if (item[2]) {
        content += "}";
      }

      if (item[4]) {
        content += "}";
      }

      return content;
    }).join("");
  }; // import a list of modules into the list


  list.i = function i(modules, media, dedupe, supports, layer) {
    if (typeof modules === "string") {
      modules = [[null, modules, undefined]];
    }

    var alreadyImportedModules = {};

    if (dedupe) {
      for (var _i = 0; _i < this.length; _i++) {
        var id = this[_i][0];

        if (id != null) {
          alreadyImportedModules[id] = true;
        }
      }
    }

    for (var _i2 = 0; _i2 < modules.length; _i2++) {
      var item = [].concat(modules[_i2]);

      if (dedupe && alreadyImportedModules[item[0]]) {
        continue;
      }

      if (typeof layer !== "undefined") {
        if (typeof item[5] === "undefined") {
          item[5] = layer;
        } else {
          item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}");
          item[5] = layer;
        }
      }

      if (media) {
        if (!item[2]) {
          item[2] = media;
        } else {
          item[1] = "@media ".concat(item[2], " {").concat(item[1], "}");
          item[2] = media;
        }
      }

      if (supports) {
        if (!item[4]) {
          item[4] = "".concat(supports);
        } else {
          item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}");
          item[4] = supports;
        }
      }

      list.push(item);
    }
  };

  return list;
};

/***/ }),

/***/ "./node_modules/css-loader/dist/runtime/sourceMaps.js":
/*!************************************************************!*\
  !*** ./node_modules/css-loader/dist/runtime/sourceMaps.js ***!
  \************************************************************/
/***/ (function(module) {

"use strict";


module.exports = function (item) {
  var content = item[1];
  var cssMapping = item[3];

  if (!cssMapping) {
    return content;
  }

  if (typeof btoa === "function") {
    var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));
    var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64);
    var sourceMapping = "/*# ".concat(data, " */");
    var sourceURLs = cssMapping.sources.map(function (source) {
      return "/*# sourceURL=".concat(cssMapping.sourceRoot || "").concat(source, " */");
    });
    return [content].concat(sourceURLs).concat([sourceMapping]).join("\n");
  }

  return [content].join("\n");
};

/***/ }),

/***/ "./node_modules/dom7/dist/dom7.modular.js":
/*!************************************************!*\
  !*** ./node_modules/dom7/dist/dom7.modular.js ***!
  \************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "$": function() { return /* binding */ $; },
/* harmony export */   "addClass": function() { return /* binding */ addClass; },
/* harmony export */   "removeClass": function() { return /* binding */ removeClass; },
/* harmony export */   "hasClass": function() { return /* binding */ hasClass; },
/* harmony export */   "toggleClass": function() { return /* binding */ toggleClass; },
/* harmony export */   "attr": function() { return /* binding */ attr; },
/* harmony export */   "removeAttr": function() { return /* binding */ removeAttr; },
/* harmony export */   "prop": function() { return /* binding */ prop; },
/* harmony export */   "data": function() { return /* binding */ data; },
/* harmony export */   "removeData": function() { return /* binding */ removeData; },
/* harmony export */   "dataset": function() { return /* binding */ dataset; },
/* harmony export */   "val": function() { return /* binding */ val; },
/* harmony export */   "transform": function() { return /* binding */ transform; },
/* harmony export */   "transition": function() { return /* binding */ transition; },
/* harmony export */   "on": function() { return /* binding */ on; },
/* harmony export */   "off": function() { return /* binding */ off; },
/* harmony export */   "once": function() { return /* binding */ once; },
/* harmony export */   "trigger": function() { return /* binding */ trigger; },
/* harmony export */   "transitionEnd": function() { return /* binding */ transitionEnd; },
/* harmony export */   "animationEnd": function() { return /* binding */ animationEnd; },
/* harmony export */   "width": function() { return /* binding */ width; },
/* harmony export */   "outerWidth": function() { return /* binding */ outerWidth; },
/* harmony export */   "height": function() { return /* binding */ height; },
/* harmony export */   "outerHeight": function() { return /* binding */ outerHeight; },
/* harmony export */   "offset": function() { return /* binding */ offset; },
/* harmony export */   "hide": function() { return /* binding */ hide; },
/* harmony export */   "show": function() { return /* binding */ show; },
/* harmony export */   "styles": function() { return /* binding */ styles; },
/* harmony export */   "css": function() { return /* binding */ css; },
/* harmony export */   "toArray": function() { return /* binding */ toArray; },
/* harmony export */   "each": function() { return /* binding */ each; },
/* harmony export */   "forEach": function() { return /* binding */ forEach; },
/* harmony export */   "filter": function() { return /* binding */ filter; },
/* harmony export */   "map": function() { return /* binding */ map; },
/* harmony export */   "html": function() { return /* binding */ html; },
/* harmony export */   "text": function() { return /* binding */ text; },
/* harmony export */   "is": function() { return /* binding */ is; },
/* harmony export */   "indexOf": function() { return /* binding */ indexOf; },
/* harmony export */   "index": function() { return /* binding */ index; },
/* harmony export */   "eq": function() { return /* binding */ eq; },
/* harmony export */   "append": function() { return /* binding */ append; },
/* harmony export */   "appendTo": function() { return /* binding */ appendTo; },
/* harmony export */   "prepend": function() { return /* binding */ prepend; },
/* harmony export */   "prependTo": function() { return /* binding */ prependTo; },
/* harmony export */   "insertBefore": function() { return /* binding */ insertBefore; },
/* harmony export */   "insertAfter": function() { return /* binding */ insertAfter; },
/* harmony export */   "next": function() { return /* binding */ next; },
/* harmony export */   "nextAll": function() { return /* binding */ nextAll; },
/* harmony export */   "prev": function() { return /* binding */ prev; },
/* harmony export */   "prevAll": function() { return /* binding */ prevAll; },
/* harmony export */   "siblings": function() { return /* binding */ siblings; },
/* harmony export */   "parent": function() { return /* binding */ parent; },
/* harmony export */   "parents": function() { return /* binding */ parents; },
/* harmony export */   "closest": function() { return /* binding */ closest; },
/* harmony export */   "find": function() { return /* binding */ find; },
/* harmony export */   "children": function() { return /* binding */ children; },
/* harmony export */   "remove": function() { return /* binding */ remove; },
/* harmony export */   "detach": function() { return /* binding */ detach; },
/* harmony export */   "add": function() { return /* binding */ add; },
/* harmony export */   "empty": function() { return /* binding */ empty; },
/* harmony export */   "scrollTo": function() { return /* binding */ scrollTo; },
/* harmony export */   "scrollTop": function() { return /* binding */ scrollTop; },
/* harmony export */   "scrollLeft": function() { return /* binding */ scrollLeft; },
/* harmony export */   "animate": function() { return /* binding */ animate; },
/* harmony export */   "stop": function() { return /* binding */ stop; },
/* harmony export */   "click": function() { return /* binding */ click; },
/* harmony export */   "blur": function() { return /* binding */ blur; },
/* harmony export */   "focus": function() { return /* binding */ focus; },
/* harmony export */   "focusin": function() { return /* binding */ focusin; },
/* harmony export */   "focusout": function() { return /* binding */ focusout; },
/* harmony export */   "keyup": function() { return /* binding */ keyup; },
/* harmony export */   "keydown": function() { return /* binding */ keydown; },
/* harmony export */   "keypress": function() { return /* binding */ keypress; },
/* harmony export */   "submit": function() { return /* binding */ submit; },
/* harmony export */   "change": function() { return /* binding */ change; },
/* harmony export */   "mousedown": function() { return /* binding */ mousedown; },
/* harmony export */   "mousemove": function() { return /* binding */ mousemove; },
/* harmony export */   "mouseup": function() { return /* binding */ mouseup; },
/* harmony export */   "mouseenter": function() { return /* binding */ mouseenter; },
/* harmony export */   "mouseleave": function() { return /* binding */ mouseleave; },
/* harmony export */   "mouseout": function() { return /* binding */ mouseout; },
/* harmony export */   "mouseover": function() { return /* binding */ mouseover; },
/* harmony export */   "touchstart": function() { return /* binding */ touchstart; },
/* harmony export */   "touchend": function() { return /* binding */ touchend; },
/* harmony export */   "touchmove": function() { return /* binding */ touchmove; },
/* harmony export */   "resize": function() { return /* binding */ resize; },
/* harmony export */   "scroll": function() { return /* binding */ scroll; }
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js");
/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/dist/ssr-window.esm.js");


/**
 * Dom7 2.1.5
 * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API
 * http://framework7.io/docs/dom.html
 *
 * Copyright 2020, Vladimir Kharlampidi
 * The iDangero.us
 * http://www.idangero.us/
 *
 * Licensed under MIT
 *
 * Released on: May 15, 2020
 */


var Dom7 = function Dom7(arr) {
  (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__["default"])(this, Dom7);

  var self = this; // Create array-like object

  for (var i = 0; i < arr.length; i += 1) {
    self[i] = arr[i];
  }

  self.length = arr.length; // Return collection with methods

  return this;
};

function $(selector, context) {
  var arr = [];
  var i = 0;

  if (selector && !context) {
    if (selector instanceof Dom7) {
      return selector;
    }
  }

  if (selector) {
    // String
    if (typeof selector === 'string') {
      var els;
      var tempParent;

      var _html = selector.trim();

      if (_html.indexOf('<') >= 0 && _html.indexOf('>') >= 0) {
        var toCreate = 'div';
        if (_html.indexOf('<li') === 0) toCreate = 'ul';
        if (_html.indexOf('<tr') === 0) toCreate = 'tbody';
        if (_html.indexOf('<td') === 0 || _html.indexOf('<th') === 0) toCreate = 'tr';
        if (_html.indexOf('<tbody') === 0) toCreate = 'table';
        if (_html.indexOf('<option') === 0) toCreate = 'select';
        tempParent = ssr_window__WEBPACK_IMPORTED_MODULE_1__.document.createElement(toCreate);
        tempParent.innerHTML = _html;

        for (i = 0; i < tempParent.childNodes.length; i += 1) {
          arr.push(tempParent.childNodes[i]);
        }
      } else {
        if (!context && selector[0] === '#' && !selector.match(/[ .<>:~]/)) {
          // Pure ID selector
          els = [ssr_window__WEBPACK_IMPORTED_MODULE_1__.document.getElementById(selector.trim().split('#')[1])];
        } else {
          // Other selectors
          els = (context || ssr_window__WEBPACK_IMPORTED_MODULE_1__.document).querySelectorAll(selector.trim());
        }

        for (i = 0; i < els.length; i += 1) {
          if (els[i]) arr.push(els[i]);
        }
      }
    } else if (selector.nodeType || selector === ssr_window__WEBPACK_IMPORTED_MODULE_1__.window || selector === ssr_window__WEBPACK_IMPORTED_MODULE_1__.document) {
      // Node/element
      arr.push(selector);
    } else if (selector.length > 0 && selector[0].nodeType) {
      // Array of elements or instance of Dom
      for (i = 0; i < selector.length; i += 1) {
        arr.push(selector[i]);
      }
    }
  }

  return new Dom7(arr);
}

$.fn = Dom7.prototype;
$.Class = Dom7;
$.Dom7 = Dom7;

function unique(arr) {
  var uniqueArray = [];

  for (var i = 0; i < arr.length; i += 1) {
    if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);
  }

  return uniqueArray;
}

function toCamelCase(string) {
  return string.toLowerCase().replace(/-(.)/g, function (match, group1) {
    return group1.toUpperCase();
  });
}

function requestAnimationFrame(callback) {
  if (ssr_window__WEBPACK_IMPORTED_MODULE_1__.window.requestAnimationFrame) return ssr_window__WEBPACK_IMPORTED_MODULE_1__.window.requestAnimationFrame(callback);else if (ssr_window__WEBPACK_IMPORTED_MODULE_1__.window.webkitRequestAnimationFrame) return ssr_window__WEBPACK_IMPORTED_MODULE_1__.window.webkitRequestAnimationFrame(callback);
  return ssr_window__WEBPACK_IMPORTED_MODULE_1__.window.setTimeout(callback, 1000 / 60);
}

function cancelAnimationFrame(id) {
  if (ssr_window__WEBPACK_IMPORTED_MODULE_1__.window.cancelAnimationFrame) return ssr_window__WEBPACK_IMPORTED_MODULE_1__.window.cancelAnimationFrame(id);else if (ssr_window__WEBPACK_IMPORTED_MODULE_1__.window.webkitCancelAnimationFrame) return ssr_window__WEBPACK_IMPORTED_MODULE_1__.window.webkitCancelAnimationFrame(id);
  return ssr_window__WEBPACK_IMPORTED_MODULE_1__.window.clearTimeout(id);
} // Classes and attributes


function addClass(className) {
  if (typeof className === 'undefined') {
    return this;
  }

  var classes = className.split(' ');

  for (var i = 0; i < classes.length; i += 1) {
    for (var j = 0; j < this.length; j += 1) {
      if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.add(classes[i]);
    }
  }

  return this;
}

function removeClass(className) {
  var classes = className.split(' ');

  for (var i = 0; i < classes.length; i += 1) {
    for (var j = 0; j < this.length; j += 1) {
      if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.remove(classes[i]);
    }
  }

  return this;
}

function hasClass(className) {
  if (!this[0]) return false;
  return this[0].classList.contains(className);
}

function toggleClass(className) {
  var classes = className.split(' ');

  for (var i = 0; i < classes.length; i += 1) {
    for (var j = 0; j < this.length; j += 1) {
      if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.toggle(classes[i]);
    }
  }

  return this;
}

function attr(attrs, value) {
  if (arguments.length === 1 && typeof attrs === 'string') {
    // Get attr
    if (this[0]) return this[0].getAttribute(attrs);
    return undefined;
  } // Set attrs


  for (var i = 0; i < this.length; i += 1) {
    if (arguments.length === 2) {
      // String
      this[i].setAttribute(attrs, value);
    } else {
      // Object
      // eslint-disable-next-line
      for (var attrName in attrs) {
        this[i][attrName] = attrs[attrName];
        this[i].setAttribute(attrName, attrs[attrName]);
      }
    }
  }

  return this;
} // eslint-disable-next-line


function removeAttr(attr) {
  for (var i = 0; i < this.length; i += 1) {
    this[i].removeAttribute(attr);
  }

  return this;
} // eslint-disable-next-line


function prop(props, value) {
  if (arguments.length === 1 && typeof props === 'string') {
    // Get prop
    if (this[0]) return this[0][props];
  } else {
    // Set props
    for (var i = 0; i < this.length; i += 1) {
      if (arguments.length === 2) {
        // String
        this[i][props] = value;
      } else {
        // Object
        // eslint-disable-next-line
        for (var propName in props) {
          this[i][propName] = props[propName];
        }
      }
    }

    return this;
  }
}

function data(key, value) {
  var el;

  if (typeof value === 'undefined') {
    el = this[0]; // Get value

    if (el) {
      if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {
        return el.dom7ElementDataStorage[key];
      }

      var dataKey = el.getAttribute("data-".concat(key));

      if (dataKey) {
        return dataKey;
      }

      return undefined;
    }

    return undefined;
  } // Set value


  for (var i = 0; i < this.length; i += 1) {
    el = this[i];
    if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};
    el.dom7ElementDataStorage[key] = value;
  }

  return this;
}

function removeData(key) {
  for (var i = 0; i < this.length; i += 1) {
    var el = this[i];

    if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {
      el.dom7ElementDataStorage[key] = null;
      delete el.dom7ElementDataStorage[key];
    }
  }
}

function dataset() {
  var el = this[0];
  if (!el) return undefined;
  var dataset = {}; // eslint-disable-line

  if (el.dataset) {
    // eslint-disable-next-line
    for (var dataKey in el.dataset) {
      dataset[dataKey] = el.dataset[dataKey];
    }
  } else {
    for (var i = 0; i < el.attributes.length; i += 1) {
      // eslint-disable-next-line
      var _attr = el.attributes[i];

      if (_attr.name.indexOf('data-') >= 0) {
        dataset[toCamelCase(_attr.name.split('data-')[1])] = _attr.value;
      }
    }
  } // eslint-disable-next-line


  for (var key in dataset) {
    if (dataset[key] === 'false') dataset[key] = false;else if (dataset[key] === 'true') dataset[key] = true;else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;
  }

  return dataset;
}

function val(value) {
  var dom = this;

  if (typeof value === 'undefined') {
    if (dom[0]) {
      if (dom[0].multiple && dom[0].nodeName.toLowerCase() === 'select') {
        var values = [];

        for (var i = 0; i < dom[0].selectedOptions.length; i += 1) {
          values.push(dom[0].selectedOptions[i].value);
        }

        return values;
      }

      return dom[0].value;
    }

    return undefined;
  }

  for (var _i = 0; _i < dom.length; _i += 1) {
    var el = dom[_i];

    if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') {
      for (var j = 0; j < el.options.length; j += 1) {
        el.options[j].selected = value.indexOf(el.options[j].value) >= 0;
      }
    } else {
      el.value = value;
    }
  }

  return dom;
} // Transforms
// eslint-disable-next-line


function transform(transform) {
  for (var i = 0; i < this.length; i += 1) {
    var elStyle = this[i].style;
    elStyle.webkitTransform = transform;
    elStyle.transform = transform;
  }

  return this;
}

function transition(duration) {
  if (typeof duration !== 'string') {
    duration = "".concat(duration, "ms"); // eslint-disable-line
  }

  for (var i = 0; i < this.length; i += 1) {
    var elStyle = this[i].style;
    elStyle.webkitTransitionDuration = duration;
    elStyle.transitionDuration = duration;
  }

  return this;
} // Events


function on() {
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
    args[_key] = arguments[_key];
  }

  var eventType = args[0],
      targetSelector = args[1],
      listener = args[2],
      capture = args[3];

  if (typeof args[1] === 'function') {
    eventType = args[0];
    listener = args[1];
    capture = args[2];
    targetSelector = undefined;
  }

  if (!capture) capture = false;

  function handleLiveEvent(e) {
    var target = e.target;
    if (!target) return;
    var eventData = e.target.dom7EventData || [];

    if (eventData.indexOf(e) < 0) {
      eventData.unshift(e);
    }

    if ($(target).is(targetSelector)) listener.apply(target, eventData);else {
      var _parents = $(target).parents(); // eslint-disable-line


      for (var k = 0; k < _parents.length; k += 1) {
        if ($(_parents[k]).is(targetSelector)) listener.apply(_parents[k], eventData);
      }
    }
  }

  function handleEvent(e) {
    var eventData = e && e.target ? e.target.dom7EventData || [] : [];

    if (eventData.indexOf(e) < 0) {
      eventData.unshift(e);
    }

    listener.apply(this, eventData);
  }

  var events = eventType.split(' ');
  var j;

  for (var i = 0; i < this.length; i += 1) {
    var el = this[i];

    if (!targetSelector) {
      for (j = 0; j < events.length; j += 1) {
        var event = events[j];
        if (!el.dom7Listeners) el.dom7Listeners = {};
        if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];
        el.dom7Listeners[event].push({
          listener: listener,
          proxyListener: handleEvent
        });
        el.addEventListener(event, handleEvent, capture);
      }
    } else {
      // Live events
      for (j = 0; j < events.length; j += 1) {
        var _event = events[j];
        if (!el.dom7LiveListeners) el.dom7LiveListeners = {};
        if (!el.dom7LiveListeners[_event]) el.dom7LiveListeners[_event] = [];

        el.dom7LiveListeners[_event].push({
          listener: listener,
          proxyListener: handleLiveEvent
        });

        el.addEventListener(_event, handleLiveEvent, capture);
      }
    }
  }

  return this;
}

function off() {
  for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
    args[_key2] = arguments[_key2];
  }

  var eventType = args[0],
      targetSelector = args[1],
      listener = args[2],
      capture = args[3];

  if (typeof args[1] === 'function') {
    eventType = args[0];
    listener = args[1];
    capture = args[2];
    targetSelector = undefined;
  }

  if (!capture) capture = false;
  var events = eventType.split(' ');

  for (var i = 0; i < events.length; i += 1) {
    var event = events[i];

    for (var j = 0; j < this.length; j += 1) {
      var el = this[j];
      var handlers = void 0;

      if (!targetSelector && el.dom7Listeners) {
        handlers = el.dom7Listeners[event];
      } else if (targetSelector && el.dom7LiveListeners) {
        handlers = el.dom7LiveListeners[event];
      }

      if (handlers && handlers.length) {
        for (var k = handlers.length - 1; k >= 0; k -= 1) {
          var handler = handlers[k];

          if (listener && handler.listener === listener) {
            el.removeEventListener(event, handler.proxyListener, capture);
            handlers.splice(k, 1);
          } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {
            el.removeEventListener(event, handler.proxyListener, capture);
            handlers.splice(k, 1);
          } else if (!listener) {
            el.removeEventListener(event, handler.proxyListener, capture);
            handlers.splice(k, 1);
          }
        }
      }
    }
  }

  return this;
}

function once() {
  var dom = this;

  for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
    args[_key3] = arguments[_key3];
  }

  var eventName = args[0],
      targetSelector = args[1],
      listener = args[2],
      capture = args[3];

  if (typeof args[1] === 'function') {
    eventName = args[0];
    listener = args[1];
    capture = args[2];
    targetSelector = undefined;
  }

  function onceHandler() {
    for (var _len4 = arguments.length, eventArgs = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
      eventArgs[_key4] = arguments[_key4];
    }

    listener.apply(this, eventArgs);
    dom.off(eventName, targetSelector, onceHandler, capture);

    if (onceHandler.dom7proxy) {
      delete onceHandler.dom7proxy;
    }
  }

  onceHandler.dom7proxy = listener;
  return dom.on(eventName, targetSelector, onceHandler, capture);
}

function trigger() {
  for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
    args[_key5] = arguments[_key5];
  }

  var events = args[0].split(' ');
  var eventData = args[1];

  for (var i = 0; i < events.length; i += 1) {
    var event = events[i];

    for (var j = 0; j < this.length; j += 1) {
      var el = this[j];
      var evt = void 0;

      try {
        evt = new ssr_window__WEBPACK_IMPORTED_MODULE_1__.window.CustomEvent(event, {
          detail: eventData,
          bubbles: true,
          cancelable: true
        });
      } catch (e) {
        evt = ssr_window__WEBPACK_IMPORTED_MODULE_1__.document.createEvent('Event');
        evt.initEvent(event, true, true);
        evt.detail = eventData;
      } // eslint-disable-next-line


      el.dom7EventData = args.filter(function (data, dataIndex) {
        return dataIndex > 0;
      });
      el.dispatchEvent(evt);
      el.dom7EventData = [];
      delete el.dom7EventData;
    }
  }

  return this;
}

function transitionEnd(callback) {
  var events = ['webkitTransitionEnd', 'transitionend'];
  var dom = this;
  var i;

  function fireCallBack(e) {
    /* jshint validthis:true */
    if (e.target !== this) return;
    callback.call(this, e);

    for (i = 0; i < events.length; i += 1) {
      dom.off(events[i], fireCallBack);
    }
  }

  if (callback) {
    for (i = 0; i < events.length; i += 1) {
      dom.on(events[i], fireCallBack);
    }
  }

  return this;
}

function animationEnd(callback) {
  var events = ['webkitAnimationEnd', 'animationend'];
  var dom = this;
  var i;

  function fireCallBack(e) {
    if (e.target !== this) return;
    callback.call(this, e);

    for (i = 0; i < events.length; i += 1) {
      dom.off(events[i], fireCallBack);
    }
  }

  if (callback) {
    for (i = 0; i < events.length; i += 1) {
      dom.on(events[i], fireCallBack);
    }
  }

  return this;
} // Sizing/Styles


function width() {
  if (this[0] === ssr_window__WEBPACK_IMPORTED_MODULE_1__.window) {
    return ssr_window__WEBPACK_IMPORTED_MODULE_1__.window.innerWidth;
  }

  if (this.length > 0) {
    return parseFloat(this.css('width'));
  }

  return null;
}

function outerWidth(includeMargins) {
  if (this.length > 0) {
    if (includeMargins) {
      // eslint-disable-next-line
      var _styles = this.styles();

      return this[0].offsetWidth + parseFloat(_styles.getPropertyValue('margin-right')) + parseFloat(_styles.getPropertyValue('margin-left'));
    }

    return this[0].offsetWidth;
  }

  return null;
}

function height() {
  if (this[0] === ssr_window__WEBPACK_IMPORTED_MODULE_1__.window) {
    return ssr_window__WEBPACK_IMPORTED_MODULE_1__.window.innerHeight;
  }

  if (this.length > 0) {
    return parseFloat(this.css('height'));
  }

  return null;
}

function outerHeight(includeMargins) {
  if (this.length > 0) {
    if (includeMargins) {
      // eslint-disable-next-line
      var _styles2 = this.styles();

      return this[0].offsetHeight + parseFloat(_styles2.getPropertyValue('margin-top')) + parseFloat(_styles2.getPropertyValue('margin-bottom'));
    }

    return this[0].offsetHeight;
  }

  return null;
}

function offset() {
  if (this.length > 0) {
    var el = this[0];
    var box = el.getBoundingClientRect();
    var body = ssr_window__WEBPACK_IMPORTED_MODULE_1__.document.body;
    var clientTop = el.clientTop || body.clientTop || 0;
    var clientLeft = el.clientLeft || body.clientLeft || 0;

    var _scrollTop = el === ssr_window__WEBPACK_IMPORTED_MODULE_1__.window ? ssr_window__WEBPACK_IMPORTED_MODULE_1__.window.scrollY : el.scrollTop;

    var _scrollLeft = el === ssr_window__WEBPACK_IMPORTED_MODULE_1__.window ? ssr_window__WEBPACK_IMPORTED_MODULE_1__.window.scrollX : el.scrollLeft;

    return {
      top: box.top + _scrollTop - clientTop,
      left: box.left + _scrollLeft - clientLeft
    };
  }

  return null;
}

function hide() {
  for (var i = 0; i < this.length; i += 1) {
    this[i].style.display = 'none';
  }

  return this;
}

function show() {
  for (var i = 0; i < this.length; i += 1) {
    var el = this[i];

    if (el.style.display === 'none') {
      el.style.display = '';
    }

    if (ssr_window__WEBPACK_IMPORTED_MODULE_1__.window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {
      // Still not visible
      el.style.display = 'block';
    }
  }

  return this;
}

function styles() {
  if (this[0]) return ssr_window__WEBPACK_IMPORTED_MODULE_1__.window.getComputedStyle(this[0], null);
  return {};
}

function css(props, value) {
  var i;

  if (arguments.length === 1) {
    if (typeof props === 'string') {
      if (this[0]) return ssr_window__WEBPACK_IMPORTED_MODULE_1__.window.getComputedStyle(this[0], null).getPropertyValue(props);
    } else {
      for (i = 0; i < this.length; i += 1) {
        // eslint-disable-next-line
        for (var _prop in props) {
          this[i].style[_prop] = props[_prop];
        }
      }

      return this;
    }
  }

  if (arguments.length === 2 && typeof props === 'string') {
    for (i = 0; i < this.length; i += 1) {
      this[i].style[props] = value;
    }

    return this;
  }

  return this;
} // Dom manipulation


function toArray() {
  var arr = [];

  for (var i = 0; i < this.length; i += 1) {
    arr.push(this[i]);
  }

  return arr;
} // Iterate over the collection passing elements to `callback`


function each(callback) {
  // Don't bother continuing without a callback
  if (!callback) return this; // Iterate over the current collection

  for (var i = 0; i < this.length; i += 1) {
    // If the callback returns false
    if (callback.call(this[i], i, this[i]) === false) {
      // End the loop early
      return this;
    }
  } // Return `this` to allow chained DOM operations


  return this;
}

function forEach(callback) {
  // Don't bother continuing without a callback
  if (!callback) return this; // Iterate over the current collection

  for (var i = 0; i < this.length; i += 1) {
    // If the callback returns false
    if (callback.call(this[i], this[i], i) === false) {
      // End the loop early
      return this;
    }
  } // Return `this` to allow chained DOM operations


  return this;
}

function filter(callback) {
  var matchedItems = [];
  var dom = this;

  for (var i = 0; i < dom.length; i += 1) {
    if (callback.call(dom[i], i, dom[i])) matchedItems.push(dom[i]);
  }

  return new Dom7(matchedItems);
}

function map(callback) {
  var modifiedItems = [];
  var dom = this;

  for (var i = 0; i < dom.length; i += 1) {
    modifiedItems.push(callback.call(dom[i], i, dom[i]));
  }

  return new Dom7(modifiedItems);
} // eslint-disable-next-line


function html(html) {
  if (typeof html === 'undefined') {
    return this[0] ? this[0].innerHTML : undefined;
  }

  for (var i = 0; i < this.length; i += 1) {
    this[i].innerHTML = html;
  }

  return this;
} // eslint-disable-next-line


function text(text) {
  if (typeof text === 'undefined') {
    if (this[0]) {
      return this[0].textContent.trim();
    }

    return null;
  }

  for (var i = 0; i < this.length; i += 1) {
    this[i].textContent = text;
  }

  return this;
}

function is(selector) {
  var el = this[0];
  var compareWith;
  var i;
  if (!el || typeof selector === 'undefined') return false;

  if (typeof selector === 'string') {
    if (el.matches) return el.matches(selector);else if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);else if (el.msMatchesSelector) return el.msMatchesSelector(selector);
    compareWith = $(selector);

    for (i = 0; i < compareWith.length; i += 1) {
      if (compareWith[i] === el) return true;
    }

    return false;
  } else if (selector === ssr_window__WEBPACK_IMPORTED_MODULE_1__.document) return el === ssr_window__WEBPACK_IMPORTED_MODULE_1__.document;else if (selector === ssr_window__WEBPACK_IMPORTED_MODULE_1__.window) return el === ssr_window__WEBPACK_IMPORTED_MODULE_1__.window;

  if (selector.nodeType || selector instanceof Dom7) {
    compareWith = selector.nodeType ? [selector] : selector;

    for (i = 0; i < compareWith.length; i += 1) {
      if (compareWith[i] === el) return true;
    }

    return false;
  }

  return false;
}

function indexOf(el) {
  for (var i = 0; i < this.length; i += 1) {
    if (this[i] === el) return i;
  }

  return -1;
}

function index() {
  var child = this[0];
  var i;

  if (child) {
    i = 0; // eslint-disable-next-line

    while ((child = child.previousSibling) !== null) {
      if (child.nodeType === 1) i += 1;
    }

    return i;
  }

  return undefined;
} // eslint-disable-next-line


function eq(index) {
  if (typeof index === 'undefined') return this;
  var length = this.length;
  var returnIndex;

  if (index > length - 1) {
    return new Dom7([]);
  }

  if (index < 0) {
    returnIndex = length + index;
    if (returnIndex < 0) return new Dom7([]);
    return new Dom7([this[returnIndex]]);
  }

  return new Dom7([this[index]]);
}

function append() {
  var newChild;

  for (var k = 0; k < arguments.length; k += 1) {
    newChild = k < 0 || arguments.length <= k ? undefined : arguments[k];

    for (var i = 0; i < this.length; i += 1) {
      if (typeof newChild === 'string') {
        var tempDiv = ssr_window__WEBPACK_IMPORTED_MODULE_1__.document.createElement('div');
        tempDiv.innerHTML = newChild;

        while (tempDiv.firstChild) {
          this[i].appendChild(tempDiv.firstChild);
        }
      } else if (newChild instanceof Dom7) {
        for (var j = 0; j < newChild.length; j += 1) {
          this[i].appendChild(newChild[j]);
        }
      } else {
        this[i].appendChild(newChild);
      }
    }
  }

  return this;
} // eslint-disable-next-line


function appendTo(parent) {
  $(parent).append(this);
  return this;
}

function prepend(newChild) {
  var i;
  var j;

  for (i = 0; i < this.length; i += 1) {
    if (typeof newChild === 'string') {
      var tempDiv = ssr_window__WEBPACK_IMPORTED_MODULE_1__.document.createElement('div');
      tempDiv.innerHTML = newChild;

      for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {
        this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);
      }
    } else if (newChild instanceof Dom7) {
      for (j = 0; j < newChild.length; j += 1) {
        this[i].insertBefore(newChild[j], this[i].childNodes[0]);
      }
    } else {
      this[i].insertBefore(newChild, this[i].childNodes[0]);
    }
  }

  return this;
} // eslint-disable-next-line


function prependTo(parent) {
  $(parent).prepend(this);
  return this;
}

function insertBefore(selector) {
  var before = $(selector);

  for (var i = 0; i < this.length; i += 1) {
    if (before.length === 1) {
      before[0].parentNode.insertBefore(this[i], before[0]);
    } else if (before.length > 1) {
      for (var j = 0; j < before.length; j += 1) {
        before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);
      }
    }
  }
}

function insertAfter(selector) {
  var after = $(selector);

  for (var i = 0; i < this.length; i += 1) {
    if (after.length === 1) {
      after[0].parentNode.insertBefore(this[i], after[0].nextSibling);
    } else if (after.length > 1) {
      for (var j = 0; j < after.length; j += 1) {
        after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);
      }
    }
  }
}

function next(selector) {
  if (this.length > 0) {
    if (selector) {
      if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {
        return new Dom7([this[0].nextElementSibling]);
      }

      return new Dom7([]);
    }

    if (this[0].nextElementSibling) return new Dom7([this[0].nextElementSibling]);
    return new Dom7([]);
  }

  return new Dom7([]);
}

function nextAll(selector) {
  var nextEls = [];
  var el = this[0];
  if (!el) return new Dom7([]);

  while (el.nextElementSibling) {
    var _next = el.nextElementSibling; // eslint-disable-line

    if (selector) {
      if ($(_next).is(selector)) nextEls.push(_next);
    } else nextEls.push(_next);

    el = _next;
  }

  return new Dom7(nextEls);
}

function prev(selector) {
  if (this.length > 0) {
    var el = this[0];

    if (selector) {
      if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {
        return new Dom7([el.previousElementSibling]);
      }

      return new Dom7([]);
    }

    if (el.previousElementSibling) return new Dom7([el.previousElementSibling]);
    return new Dom7([]);
  }

  return new Dom7([]);
}

function prevAll(selector) {
  var prevEls = [];
  var el = this[0];
  if (!el) return new Dom7([]);

  while (el.previousElementSibling) {
    var _prev = el.previousElementSibling; // eslint-disable-line

    if (selector) {
      if ($(_prev).is(selector)) prevEls.push(_prev);
    } else prevEls.push(_prev);

    el = _prev;
  }

  return new Dom7(prevEls);
}

function siblings(selector) {
  return this.nextAll(selector).add(this.prevAll(selector));
}

function parent(selector) {
  var parents = []; // eslint-disable-line

  for (var i = 0; i < this.length; i += 1) {
    if (this[i].parentNode !== null) {
      if (selector) {
        if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);
      } else {
        parents.push(this[i].parentNode);
      }
    }
  }

  return $(unique(parents));
}

function parents(selector) {
  var parents = []; // eslint-disable-line

  for (var i = 0; i < this.length; i += 1) {
    var _parent = this[i].parentNode; // eslint-disable-line

    while (_parent) {
      if (selector) {
        if ($(_parent).is(selector)) parents.push(_parent);
      } else {
        parents.push(_parent);
      }

      _parent = _parent.parentNode;
    }
  }

  return $(unique(parents));
}

function closest(selector) {
  var closest = this; // eslint-disable-line

  if (typeof selector === 'undefined') {
    return new Dom7([]);
  }

  if (!closest.is(selector)) {
    closest = closest.parents(selector).eq(0);
  }

  return closest;
}

function find(selector) {
  var foundElements = [];

  for (var i = 0; i < this.length; i += 1) {
    var found = this[i].querySelectorAll(selector);

    for (var j = 0; j < found.length; j += 1) {
      foundElements.push(found[j]);
    }
  }

  return new Dom7(foundElements);
}

function children(selector) {
  var children = []; // eslint-disable-line

  for (var i = 0; i < this.length; i += 1) {
    var childNodes = this[i].childNodes;

    for (var j = 0; j < childNodes.length; j += 1) {
      if (!selector) {
        if (childNodes[j].nodeType === 1) children.push(childNodes[j]);
      } else if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) {
        children.push(childNodes[j]);
      }
    }
  }

  return new Dom7(unique(children));
}

function remove() {
  for (var i = 0; i < this.length; i += 1) {
    if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);
  }

  return this;
}

function detach() {
  return this.remove();
}

function add() {
  var dom = this;
  var i;
  var j;

  for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
    args[_key6] = arguments[_key6];
  }

  for (i = 0; i < args.length; i += 1) {
    var toAdd = $(args[i]);

    for (j = 0; j < toAdd.length; j += 1) {
      dom[dom.length] = toAdd[j];
      dom.length += 1;
    }
  }

  return dom;
}

function empty() {
  for (var i = 0; i < this.length; i += 1) {
    var el = this[i];

    if (el.nodeType === 1) {
      for (var j = 0; j < el.childNodes.length; j += 1) {
        if (el.childNodes[j].parentNode) {
          el.childNodes[j].parentNode.removeChild(el.childNodes[j]);
        }
      }

      el.textContent = '';
    }
  }

  return this;
}

function scrollTo() {
  for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
    args[_key7] = arguments[_key7];
  }

  var left = args[0],
      top = args[1],
      duration = args[2],
      easing = args[3],
      callback = args[4];

  if (args.length === 4 && typeof easing === 'function') {
    callback = easing;
    left = args[0];
    top = args[1];
    duration = args[2];
    callback = args[3];
    easing = args[4];
  }

  if (typeof easing === 'undefined') easing = 'swing';
  return this.each(function animate() {
    var el = this;
    var currentTop;
    var currentLeft;
    var maxTop;
    var maxLeft;
    var newTop;
    var newLeft;
    var scrollTop; // eslint-disable-line

    var scrollLeft; // eslint-disable-line

    var animateTop = top > 0 || top === 0;
    var animateLeft = left > 0 || left === 0;

    if (typeof easing === 'undefined') {
      easing = 'swing';
    }

    if (animateTop) {
      currentTop = el.scrollTop;

      if (!duration) {
        el.scrollTop = top;
      }
    }

    if (animateLeft) {
      currentLeft = el.scrollLeft;

      if (!duration) {
        el.scrollLeft = left;
      }
    }

    if (!duration) return;

    if (animateTop) {
      maxTop = el.scrollHeight - el.offsetHeight;
      newTop = Math.max(Math.min(top, maxTop), 0);
    }

    if (animateLeft) {
      maxLeft = el.scrollWidth - el.offsetWidth;
      newLeft = Math.max(Math.min(left, maxLeft), 0);
    }

    var startTime = null;
    if (animateTop && newTop === currentTop) animateTop = false;
    if (animateLeft && newLeft === currentLeft) animateLeft = false;

    function render() {
      var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date().getTime();

      if (startTime === null) {
        startTime = time;
      }

      var progress = Math.max(Math.min((time - startTime) / duration, 1), 0);
      var easeProgress = easing === 'linear' ? progress : 0.5 - Math.cos(progress * Math.PI) / 2;
      var done;
      if (animateTop) scrollTop = currentTop + easeProgress * (newTop - currentTop);
      if (animateLeft) scrollLeft = currentLeft + easeProgress * (newLeft - currentLeft);

      if (animateTop && newTop > currentTop && scrollTop >= newTop) {
        el.scrollTop = newTop;
        done = true;
      }

      if (animateTop && newTop < currentTop && scrollTop <= newTop) {
        el.scrollTop = newTop;
        done = true;
      }

      if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {
        el.scrollLeft = newLeft;
        done = true;
      }

      if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {
        el.scrollLeft = newLeft;
        done = true;
      }

      if (done) {
        if (callback) callback();
        return;
      }

      if (animateTop) el.scrollTop = scrollTop;
      if (animateLeft) el.scrollLeft = scrollLeft;
      requestAnimationFrame(render);
    }

    requestAnimationFrame(render);
  });
} // scrollTop(top, duration, easing, callback) {


function scrollTop() {
  for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
    args[_key8] = arguments[_key8];
  }

  var top = args[0],
      duration = args[1],
      easing = args[2],
      callback = args[3];

  if (args.length === 3 && typeof easing === 'function') {
    top = args[0];
    duration = args[1];
    callback = args[2];
    easing = args[3];
  }

  var dom = this;

  if (typeof top === 'undefined') {
    if (dom.length > 0) return dom[0].scrollTop;
    return null;
  }

  return dom.scrollTo(undefined, top, duration, easing, callback);
}

function scrollLeft() {
  for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
    args[_key9] = arguments[_key9];
  }

  var left = args[0],
      duration = args[1],
      easing = args[2],
      callback = args[3];

  if (args.length === 3 && typeof easing === 'function') {
    left = args[0];
    duration = args[1];
    callback = args[2];
    easing = args[3];
  }

  var dom = this;

  if (typeof left === 'undefined') {
    if (dom.length > 0) return dom[0].scrollLeft;
    return null;
  }

  return dom.scrollTo(left, undefined, duration, easing, callback);
}

function animate(initialProps, initialParams) {
  var els = this;
  var a = {
    props: Object.assign({}, initialProps),
    params: Object.assign({
      duration: 300,
      easing: 'swing' // or 'linear'

      /* Callbacks
      begin(elements)
      complete(elements)
      progress(elements, complete, remaining, start, tweenValue)
      */

    }, initialParams),
    elements: els,
    animating: false,
    que: [],
    easingProgress: function easingProgress(easing, progress) {
      if (easing === 'swing') {
        return 0.5 - Math.cos(progress * Math.PI) / 2;
      }

      if (typeof easing === 'function') {
        return easing(progress);
      }

      return progress;
    },
    stop: function stop() {
      if (a.frameId) {
        cancelAnimationFrame(a.frameId);
      }

      a.animating = false;
      a.elements.each(function (index, el) {
        var element = el;
        delete element.dom7AnimateInstance;
      });
      a.que = [];
    },
    done: function done(complete) {
      a.animating = false;
      a.elements.each(function (index, el) {
        var element = el;
        delete element.dom7AnimateInstance;
      });
      if (complete) complete(els);

      if (a.que.length > 0) {
        var que = a.que.shift();
        a.animate(que[0], que[1]);
      }
    },
    animate: function animate(props, params) {
      if (a.animating) {
        a.que.push([props, params]);
        return a;
      }

      var elements = []; // Define & Cache Initials & Units

      a.elements.each(function (index, el) {
        var initialFullValue;
        var initialValue;
        var unit;
        var finalValue;
        var finalFullValue;
        if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;
        elements[index] = {
          container: el
        };
        Object.keys(props).forEach(function (prop) {
          initialFullValue = ssr_window__WEBPACK_IMPORTED_MODULE_1__.window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');
          initialValue = parseFloat(initialFullValue);
          unit = initialFullValue.replace(initialValue, '');
          finalValue = parseFloat(props[prop]);
          finalFullValue = props[prop] + unit;
          elements[index][prop] = {
            initialFullValue: initialFullValue,
            initialValue: initialValue,
            unit: unit,
            finalValue: finalValue,
            finalFullValue: finalFullValue,
            currentValue: initialValue
          };
        });
      });
      var startTime = null;
      var time;
      var elementsDone = 0;
      var propsDone = 0;
      var done;
      var began = false;
      a.animating = true;

      function render() {
        time = new Date().getTime();
        var progress;
        var easeProgress; // let el;

        if (!began) {
          began = true;
          if (params.begin) params.begin(els);
        }

        if (startTime === null) {
          startTime = time;
        }

        if (params.progress) {
          // eslint-disable-next-line
          params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), startTime + params.duration - time < 0 ? 0 : startTime + params.duration - time, startTime);
        }

        elements.forEach(function (element) {
          var el = element;
          if (done || el.done) return;
          Object.keys(props).forEach(function (prop) {
            if (done || el.done) return;
            progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);
            easeProgress = a.easingProgress(params.easing, progress);
            var _el$prop = el[prop],
                initialValue = _el$prop.initialValue,
                finalValue = _el$prop.finalValue,
                unit = _el$prop.unit;
            el[prop].currentValue = initialValue + easeProgress * (finalValue - initialValue);
            var currentValue = el[prop].currentValue;

            if (finalValue > initialValue && currentValue >= finalValue || finalValue < initialValue && currentValue <= finalValue) {
              el.container.style[prop] = finalValue + unit;
              propsDone += 1;

              if (propsDone === Object.keys(props).length) {
                el.done = true;
                elementsDone += 1;
              }

              if (elementsDone === elements.length) {
                done = true;
              }
            }

            if (done) {
              a.done(params.complete);
              return;
            }

            el.container.style[prop] = currentValue + unit;
          });
        });
        if (done) return; // Then call

        a.frameId = requestAnimationFrame(render);
      }

      a.frameId = requestAnimationFrame(render);
      return a;
    }
  };

  if (a.elements.length === 0) {
    return els;
  }

  var animateInstance;

  for (var i = 0; i < a.elements.length; i += 1) {
    if (a.elements[i].dom7AnimateInstance) {
      animateInstance = a.elements[i].dom7AnimateInstance;
    } else a.elements[i].dom7AnimateInstance = a;
  }

  if (!animateInstance) {
    animateInstance = a;
  }

  if (initialProps === 'stop') {
    animateInstance.stop();
  } else {
    animateInstance.animate(a.props, a.params);
  }

  return els;
}

function stop() {
  var els = this;

  for (var i = 0; i < els.length; i += 1) {
    if (els[i].dom7AnimateInstance) {
      els[i].dom7AnimateInstance.stop();
    }
  }
}

var noTrigger = 'resize scroll'.split(' ');

function eventShortcut(name) {
  for (var _len10 = arguments.length, args = new Array(_len10 > 1 ? _len10 - 1 : 0), _key10 = 1; _key10 < _len10; _key10++) {
    args[_key10 - 1] = arguments[_key10];
  }

  if (typeof args[0] === 'undefined') {
    for (var i = 0; i < this.length; i += 1) {
      if (noTrigger.indexOf(name) < 0) {
        if (name in this[i]) this[i][name]();else {
          $(this[i]).trigger(name);
        }
      }
    }

    return this;
  }

  return this.on.apply(this, [name].concat(args));
}

function click() {
  for (var _len11 = arguments.length, args = new Array(_len11), _key11 = 0; _key11 < _len11; _key11++) {
    args[_key11] = arguments[_key11];
  }

  return eventShortcut.bind(this).apply(void 0, ['click'].concat(args));
}

function blur() {
  for (var _len12 = arguments.length, args = new Array(_len12), _key12 = 0; _key12 < _len12; _key12++) {
    args[_key12] = arguments[_key12];
  }

  return eventShortcut.bind(this).apply(void 0, ['blur'].concat(args));
}

function focus() {
  for (var _len13 = arguments.length, args = new Array(_len13), _key13 = 0; _key13 < _len13; _key13++) {
    args[_key13] = arguments[_key13];
  }

  return eventShortcut.bind(this).apply(void 0, ['focus'].concat(args));
}

function focusin() {
  for (var _len14 = arguments.length, args = new Array(_len14), _key14 = 0; _key14 < _len14; _key14++) {
    args[_key14] = arguments[_key14];
  }

  return eventShortcut.bind(this).apply(void 0, ['focusin'].concat(args));
}

function focusout() {
  for (var _len15 = arguments.length, args = new Array(_len15), _key15 = 0; _key15 < _len15; _key15++) {
    args[_key15] = arguments[_key15];
  }

  return eventShortcut.bind(this).apply(void 0, ['focusout'].concat(args));
}

function keyup() {
  for (var _len16 = arguments.length, args = new Array(_len16), _key16 = 0; _key16 < _len16; _key16++) {
    args[_key16] = arguments[_key16];
  }

  return eventShortcut.bind(this).apply(void 0, ['keyup'].concat(args));
}

function keydown() {
  for (var _len17 = arguments.length, args = new Array(_len17), _key17 = 0; _key17 < _len17; _key17++) {
    args[_key17] = arguments[_key17];
  }

  return eventShortcut.bind(this).apply(void 0, ['keydown'].concat(args));
}

function keypress() {
  for (var _len18 = arguments.length, args = new Array(_len18), _key18 = 0; _key18 < _len18; _key18++) {
    args[_key18] = arguments[_key18];
  }

  return eventShortcut.bind(this).apply(void 0, ['keypress'].concat(args));
}

function submit() {
  for (var _len19 = arguments.length, args = new Array(_len19), _key19 = 0; _key19 < _len19; _key19++) {
    args[_key19] = arguments[_key19];
  }

  return eventShortcut.bind(this).apply(void 0, ['submit'].concat(args));
}

function change() {
  for (var _len20 = arguments.length, args = new Array(_len20), _key20 = 0; _key20 < _len20; _key20++) {
    args[_key20] = arguments[_key20];
  }

  return eventShortcut.bind(this).apply(void 0, ['change'].concat(args));
}

function mousedown() {
  for (var _len21 = arguments.length, args = new Array(_len21), _key21 = 0; _key21 < _len21; _key21++) {
    args[_key21] = arguments[_key21];
  }

  return eventShortcut.bind(this).apply(void 0, ['mousedown'].concat(args));
}

function mousemove() {
  for (var _len22 = arguments.length, args = new Array(_len22), _key22 = 0; _key22 < _len22; _key22++) {
    args[_key22] = arguments[_key22];
  }

  return eventShortcut.bind(this).apply(void 0, ['mousemove'].concat(args));
}

function mouseup() {
  for (var _len23 = arguments.length, args = new Array(_len23), _key23 = 0; _key23 < _len23; _key23++) {
    args[_key23] = arguments[_key23];
  }

  return eventShortcut.bind(this).apply(void 0, ['mouseup'].concat(args));
}

function mouseenter() {
  for (var _len24 = arguments.length, args = new Array(_len24), _key24 = 0; _key24 < _len24; _key24++) {
    args[_key24] = arguments[_key24];
  }

  return eventShortcut.bind(this).apply(void 0, ['mouseenter'].concat(args));
}

function mouseleave() {
  for (var _len25 = arguments.length, args = new Array(_len25), _key25 = 0; _key25 < _len25; _key25++) {
    args[_key25] = arguments[_key25];
  }

  return eventShortcut.bind(this).apply(void 0, ['mouseleave'].concat(args));
}

function mouseout() {
  for (var _len26 = arguments.length, args = new Array(_len26), _key26 = 0; _key26 < _len26; _key26++) {
    args[_key26] = arguments[_key26];
  }

  return eventShortcut.bind(this).apply(void 0, ['mouseout'].concat(args));
}

function mouseover() {
  for (var _len27 = arguments.length, args = new Array(_len27), _key27 = 0; _key27 < _len27; _key27++) {
    args[_key27] = arguments[_key27];
  }

  return eventShortcut.bind(this).apply(void 0, ['mouseover'].concat(args));
}

function touchstart() {
  for (var _len28 = arguments.length, args = new Array(_len28), _key28 = 0; _key28 < _len28; _key28++) {
    args[_key28] = arguments[_key28];
  }

  return eventShortcut.bind(this).apply(void 0, ['touchstart'].concat(args));
}

function touchend() {
  for (var _len29 = arguments.length, args = new Array(_len29), _key29 = 0; _key29 < _len29; _key29++) {
    args[_key29] = arguments[_key29];
  }

  return eventShortcut.bind(this).apply(void 0, ['touchend'].concat(args));
}

function touchmove() {
  for (var _len30 = arguments.length, args = new Array(_len30), _key30 = 0; _key30 < _len30; _key30++) {
    args[_key30] = arguments[_key30];
  }

  return eventShortcut.bind(this).apply(void 0, ['touchmove'].concat(args));
}

function resize() {
  for (var _len31 = arguments.length, args = new Array(_len31), _key31 = 0; _key31 < _len31; _key31++) {
    args[_key31] = arguments[_key31];
  }

  return eventShortcut.bind(this).apply(void 0, ['resize'].concat(args));
}

function scroll() {
  for (var _len32 = arguments.length, args = new Array(_len32), _key32 = 0; _key32 < _len32; _key32++) {
    args[_key32] = arguments[_key32];
  }

  return eventShortcut.bind(this).apply(void 0, ['scroll'].concat(args));
}



/***/ }),

/***/ "./node_modules/element-closest-polyfill/index.js":
/*!********************************************************!*\
  !*** ./node_modules/element-closest-polyfill/index.js ***!
  \********************************************************/
/***/ (function() {

if (typeof Element !== "undefined") {
  if (!Element.prototype.matches) {
    Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;
  }

  if (!Element.prototype.closest) {
    Element.prototype.closest = function (s) {
      var el = this;

      do {
        if (el.matches(s)) return el;
        el = el.parentElement || el.parentNode;
      } while (el !== null && el.nodeType === 1);

      return null;
    };
  }
}

/***/ }),

/***/ "./node_modules/ellipsis.js/ellipsis.js":
/*!**********************************************!*\
  !*** ./node_modules/ellipsis.js/ellipsis.js ***!
  \**********************************************/
/***/ (function(module, exports) {

var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function () {
  'use strict';

  var defaultConf = {
    ellipsis: '…',
    debounce: 0,
    responsive: true,
    className: '.clamp',
    lines: 2,
    portrait: null,
    break_word: true
  };
  var _idCounter = 0;
  var RAF_SUPPORTED = !!window.requestAnimationFrame;

  var newId = function newId() {
    _idCounter += 1;
    return _idCounter;
  };

  var setIdAttribute = function setIdAttribute(element, id) {
    element.setAttribute('data-ellipsis-id', id);
  };

  var getIdAttribute = function getIdAttribute(element) {
    return element.getAttribute('data-ellipsis-id');
  };

  var storeCache = function storeCache(cache, element) {
    var id = newId();
    setIdAttribute(element, id);
    cache[id] = cache[id] || {};
    cache[id].element = element;
    cache[id].innerHTML = element.innerHTML;
  };

  var retrieveCache = function retrieveCache(cache, element) {
    if (cache) {
      return cache[getIdAttribute(element)];
    } else {
      return null;
    }
  };

  var getCachedElements = function getCachedElements(cache) {
    return Object.keys(cache).map(function (value, index) {
      return cache[value].element;
    });
  };

  var merge = function merge(obj1, obj2) {
    var obj3 = {};

    for (var attrn in obj1) {
      obj3[attrn] = obj1[attrn];
    }

    for (var attrnm in obj2) {
      obj3[attrnm] = obj2[attrnm];
    }

    return obj3;
  };

  function Ellipsis(opts) {
    var conf = merge(defaultConf, opts || {});
    this.create(conf);
    this.add();
  }

  Ellipsis.prototype = {
    conf: {},
    prop: {},
    lines: {},
    temp: null,
    listener: null,
    create: function create(opts) {
      this.conf = opts;
      this.lines = {
        get current() {
          if (opts.portrait && window.innerHeight > window.innerWidth) {
            return opts.portrait;
          }

          return opts.lines;
        }

      };

      if (this.conf.responsive) {
        this.temp = {};
        var debounceTime = this.conf.debounce;
        var listener;

        if (RAF_SUPPORTED && !debounceTime) {
          this._isScheduled = false;
          var self = this;

          listener = function listener(event) {
            if (!self._isScheduled) {
              self._isScheduled = true;
              window.requestAnimationFrame(function () {
                self._isScheduled = false;
                self.add(getCachedElements(self.temp));
              });
            }
          };
        } else {
          // This is for in case the `debounce` is set to 0 and the browser
          // does not support requestAnimationFrame. We don't want to swamp
          // the browser on a resize so we "fake" the requestAnimationFrame
          // functionality with the same debounce time (60 FPS).
          debounceTime = debounceTime || 16;
          var debounce;

          listener = function listener(event) {
            clearTimeout(debounce);
            debounce = setTimeout(function () {
              this.add(getCachedElements(this.temp));
            }.bind(this), debounceTime);
          };
        }

        this.listener = listener.bind(this);
        window.addEventListener('resize', this.listener, false);
        window.removeEventListener('beforeunload', this.listener, false);
      }
    },
    destroy: function destroy() {
      this.listener && window.removeEventListener('resize', this.listener, false);
    },
    createProp: function createProp(element) {
      this.prop = {
        get height() {
          var viewportOffset = element.getBoundingClientRect();
          return parseInt(viewportOffset.bottom - viewportOffset.top, 10);
        },

        get lineheight() {
          var lineh = getComputedStyle(element).getPropertyValue("line-height");

          if (String('normal|initial|inherit').indexOf(lineh) > -1) {
            //very specific case
            lineh = parseInt(getComputedStyle(element).getPropertyValue("font-size"), 10) + 2;
          }

          return parseInt(lineh, 10);
        }

      };
    },
    add: function add(elements) {
      if (!elements && this.conf.className) {
        elements = document.querySelectorAll(this.conf.className);
      }

      if (elements) {
        if (elements.length) {
          for (var i = 0; i < elements.length; i++) {
            this.addElement(elements[i]);
          }
        } else if (elements.length === undefined) {
          this.addElement(elements);
        }
      }
    },
    addElement: function addElement(element) {
      if (this.conf.responsive) {
        var cached = retrieveCache(this.temp, element);

        if (!cached) {
          storeCache(this.temp, element);
        } else {
          // insert cached element for Resizing
          if (element.innerHTML !== cached.innerHTML) {
            element.innerHTML = cached.innerHTML;
          }
        }
      }

      this.createProp(element);

      if (this.isNotCorrect()) {
        if (element.childNodes.length && element.childNodes.length > 1) {
          this.handleChildren(element);
        } else if (element.childNodes.length && element.childNodes.length === 1 && element.childNodes[0].nodeType === 3) {
          this.simpleText(element);
        }
      }
    },
    breakWord: function breakWord(str, str2, fix) {
      var words = str.split(' ');
      words.pop();

      if (fix) {
        words.pop();
      }

      if (!str2) {
        if (words[words.length - 1]) {
          words[words.length - 1] = words[words.length - 1].replace(/(,$)/g, "").replace(/(\.$)/g, "");
        }

        words.push(this.conf.ellipsis);
        return words.join(' ');
      } else {
        if (words[words.length - 1]) {
          words[words.length - 1] = words[words.length - 1].replace(/(,$)/g, "").replace(/(\.$)/g, "");
          words.push(this.conf.ellipsis);
          return [words.join(' '), str2];
        } else if (!words[words.length - 1] && str2) {
          var st = ' ' + str2.trim().replace(/(,$)/g, "").replace(/(\.$)/g, "") + ' ';
          words.push(this.conf.ellipsis);
          return [words.join(' '), st];
        }
      }
    },
    simpleText: function simpleText(element) {
      var childText = element.childNodes[0].nodeValue;

      while (this.prop.height > this.prop.lineheight * this.lines.current) {
        element.childNodes[0].nodeValue = childText.slice(0, -1);
        childText = element.childNodes[0].nodeValue;
      }

      if (this.conf.break_word) {
        element.childNodes[0].nodeValue = childText.slice(0, -this.conf.ellipsis.length) + this.conf.ellipsis;

        if (this.isNotCorrect()) {
          //edge case
          element.childNodes[0].nodeValue = ' ' + element.childNodes[0].nodeValue.slice(0, -(this.conf.ellipsis.length + 1)).trim().slice(0, -this.conf.ellipsis.length) + this.conf.ellipsis;
        }
      } else {
        element.childNodes[0].nodeValue = this.breakWord(element.childNodes[0].nodeValue);

        if (this.isNotCorrect()) {
          //edge case
          element.childNodes[0].nodeValue = this.breakWord(element.childNodes[0].nodeValue, null, true);
        }
      }
    },
    isNotCorrect: function isNotCorrect() {
      return this.prop.height > this.prop.lineheight * this.lines.current;
    },
    processBreak: function processBreak(dOne, dTwo, fix) {
      var r = this.breakWord(dOne.innerText || dOne.nodeValue, dTwo.innerText || dTwo.nodeValue, fix);

      if (dOne.innerText) {
        dOne.innerText = r[0];
      } else {
        dOne.nodeValue = r[0];
      }

      if (dTwo.innerText) {
        dTwo.innerText = r[1];
      } else {
        dTwo.nodeValue = r[1];
      }
    },
    handleChildren: function handleChildren(e) {
      var domChildren = e.childNodes;
      var childText;

      for (var i = domChildren.length - 1; i >= 0; i--) {
        var displayOrigin;

        if (domChildren[i].nodeType === 8) {
          continue; // skip comment nodes
        }

        if (domChildren[i].nodeType === 3) {
          displayOrigin = domChildren[i].nodeValue;
          domChildren[i].nodeValue = '';
        } else {
          displayOrigin = getComputedStyle(domChildren[i]).getPropertyValue("display");
          domChildren[i].style.display = 'none';
        }

        if (this.prop.height <= this.prop.lineheight * this.lines.current) {
          if (domChildren[i].nodeType === 3) {
            domChildren[i].nodeValue = displayOrigin;
            childText = domChildren[i].nodeValue;

            while (this.prop.height > this.prop.lineheight * this.lines.current) {
              domChildren[i].nodeValue = childText.slice(0, -1);
              childText = domChildren[i].nodeValue;
            }

            if (this.conf.break_word) {
              domChildren[i].nodeValue = childText.slice(0, -this.conf.ellipsis.length) + this.conf.ellipsis;

              if (this.isNotCorrect()) {
                //edge case
                domChildren[i].nodeValue = ' ' + domChildren[i].nodeValue.slice(0, -this.conf.ellipsis.length).trim().slice(0, -this.conf.ellipsis.length);

                if (domChildren[i].nodeValue.length > 1) {
                  domChildren[i].nodeValue = domChildren[i].nodeValue.slice(0, -this.conf.ellipsis.length) + this.conf.ellipsis;
                } else {
                  continue;
                }
              }
            } else {
              if (!domChildren[i].innerText && !domChildren[i].nodeValue) {
                continue;
              }

              this.processBreak(domChildren[i], domChildren[i - 1]);

              if (this.isNotCorrect()) {
                //edge case
                this.processBreak(domChildren[i], domChildren[i - 1], true);

                if (this.isNotCorrect()) {
                  e.removeChild(domChildren[i]);
                  continue;
                }
              }
            }
          } else {
            domChildren[i].style.display = displayOrigin;
            childText = domChildren[i].innerText;

            while (this.prop.height > this.prop.lineheight * this.lines.current) {
              domChildren[i].innerText = childText.slice(0, -1);
              childText = domChildren[i].innerText;
            }

            if (this.conf.break_word) {
              domChildren[i].innerText = childText.slice(0, -this.conf.ellipsis.length) + this.conf.ellipsis;

              if (this.isNotCorrect()) {
                //edge case
                domChildren[i].innerText = ' ' + domChildren[i].innerText.slice(0, -this.conf.ellipsis.length).trim().slice(0, -this.conf.ellipsis.length);

                if (domChildren[i].innerText.length > 1) {
                  domChildren[i].innerText = domChildren[i].innerText.slice(0, -this.conf.ellipsis.length) + this.conf.ellipsis;
                } else {
                  continue;
                }
              }
            } else {
              if (!domChildren[i].innerText && !domChildren[i].nodeValue) {
                continue;
              }

              this.processBreak(domChildren[i], domChildren[i - 1]);

              if (this.isNotCorrect()) {
                //edge case
                this.processBreak(domChildren[i], domChildren[i - 1], true);

                if (this.isNotCorrect()) {
                  e.removeChild(domChildren[i]);
                  continue;
                }
              }
            }
          }

          break;
        } else {
          e.removeChild(domChildren[i]);
        }
      }
    }
  };

  var EllipsisClass = function EllipsisClass(opts) {
    return new Ellipsis(opts);
  }; //RequireJS Style


  if (true) {
    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {
      return EllipsisClass;
    }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
  }

  self.Ellipsis = EllipsisClass;
  return EllipsisClass;
})();

/***/ }),

/***/ "./node_modules/events/events.js":
/*!***************************************!*\
  !*** ./node_modules/events/events.js ***!
  \***************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

"use strict";
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.


var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

var R = (typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === 'object' ? Reflect : null;
var ReflectApply = R && typeof R.apply === 'function' ? R.apply : function ReflectApply(target, receiver, args) {
  return Function.prototype.apply.call(target, receiver, args);
};
var ReflectOwnKeys;

if (R && typeof R.ownKeys === 'function') {
  ReflectOwnKeys = R.ownKeys;
} else if (Object.getOwnPropertySymbols) {
  ReflectOwnKeys = function ReflectOwnKeys(target) {
    return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));
  };
} else {
  ReflectOwnKeys = function ReflectOwnKeys(target) {
    return Object.getOwnPropertyNames(target);
  };
}

function ProcessEmitWarning(warning) {
  if (console && console.warn) console.warn(warning);
}

var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {
  return value !== value;
};

function EventEmitter() {
  EventEmitter.init.call(this);
}

module.exports = EventEmitter;
module.exports.once = once; // Backwards-compat with node 0.10.x

EventEmitter.EventEmitter = EventEmitter;
EventEmitter.prototype._events = undefined;
EventEmitter.prototype._eventsCount = 0;
EventEmitter.prototype._maxListeners = undefined; // By default EventEmitters will print a warning if more than 10 listeners are
// added to it. This is a useful default which helps finding memory leaks.

var defaultMaxListeners = 10;

function checkListener(listener) {
  if (typeof listener !== 'function') {
    throw new TypeError('The "listener" argument must be of type Function. Received type ' + _typeof(listener));
  }
}

Object.defineProperty(EventEmitter, 'defaultMaxListeners', {
  enumerable: true,
  get: function get() {
    return defaultMaxListeners;
  },
  set: function set(arg) {
    if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {
      throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.');
    }

    defaultMaxListeners = arg;
  }
});

EventEmitter.init = function () {
  if (this._events === undefined || this._events === Object.getPrototypeOf(this)._events) {
    this._events = Object.create(null);
    this._eventsCount = 0;
  }

  this._maxListeners = this._maxListeners || undefined;
}; // Obviously not all Emitters should be limited to 10. This function allows
// that to be increased. Set to zero for unlimited.


EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {
  if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {
    throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.');
  }

  this._maxListeners = n;
  return this;
};

function _getMaxListeners(that) {
  if (that._maxListeners === undefined) return EventEmitter.defaultMaxListeners;
  return that._maxListeners;
}

EventEmitter.prototype.getMaxListeners = function getMaxListeners() {
  return _getMaxListeners(this);
};

EventEmitter.prototype.emit = function emit(type) {
  var args = [];

  for (var i = 1; i < arguments.length; i++) {
    args.push(arguments[i]);
  }

  var doError = type === 'error';
  var events = this._events;
  if (events !== undefined) doError = doError && events.error === undefined;else if (!doError) return false; // If there is no 'error' event listener then throw.

  if (doError) {
    var er;
    if (args.length > 0) er = args[0];

    if (er instanceof Error) {
      // Note: The comments on the `throw` lines are intentional, they show
      // up in Node's output if this results in an unhandled exception.
      throw er; // Unhandled 'error' event
    } // At least give some kind of context to the user


    var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));
    err.context = er;
    throw err; // Unhandled 'error' event
  }

  var handler = events[type];
  if (handler === undefined) return false;

  if (typeof handler === 'function') {
    ReflectApply(handler, this, args);
  } else {
    var len = handler.length;
    var listeners = arrayClone(handler, len);

    for (var i = 0; i < len; ++i) {
      ReflectApply(listeners[i], this, args);
    }
  }

  return true;
};

function _addListener(target, type, listener, prepend) {
  var m;
  var events;
  var existing;
  checkListener(listener);
  events = target._events;

  if (events === undefined) {
    events = target._events = Object.create(null);
    target._eventsCount = 0;
  } else {
    // To avoid recursion in the case that type === "newListener"! Before
    // adding it to the listeners, first emit "newListener".
    if (events.newListener !== undefined) {
      target.emit('newListener', type, listener.listener ? listener.listener : listener); // Re-assign `events` because a newListener handler could have caused the
      // this._events to be assigned to a new object

      events = target._events;
    }

    existing = events[type];
  }

  if (existing === undefined) {
    // Optimize the case of one listener. Don't need the extra array object.
    existing = events[type] = listener;
    ++target._eventsCount;
  } else {
    if (typeof existing === 'function') {
      // Adding the second element, need to change to array.
      existing = events[type] = prepend ? [listener, existing] : [existing, listener]; // If we've already got an array, just append.
    } else if (prepend) {
      existing.unshift(listener);
    } else {
      existing.push(listener);
    } // Check for listener leak


    m = _getMaxListeners(target);

    if (m > 0 && existing.length > m && !existing.warned) {
      existing.warned = true; // No error code for this since it is a Warning
      // eslint-disable-next-line no-restricted-syntax

      var w = new Error('Possible EventEmitter memory leak detected. ' + existing.length + ' ' + String(type) + ' listeners ' + 'added. Use emitter.setMaxListeners() to ' + 'increase limit');
      w.name = 'MaxListenersExceededWarning';
      w.emitter = target;
      w.type = type;
      w.count = existing.length;
      ProcessEmitWarning(w);
    }
  }

  return target;
}

EventEmitter.prototype.addListener = function addListener(type, listener) {
  return _addListener(this, type, listener, false);
};

EventEmitter.prototype.on = EventEmitter.prototype.addListener;

EventEmitter.prototype.prependListener = function prependListener(type, listener) {
  return _addListener(this, type, listener, true);
};

function onceWrapper() {
  if (!this.fired) {
    this.target.removeListener(this.type, this.wrapFn);
    this.fired = true;
    if (arguments.length === 0) return this.listener.call(this.target);
    return this.listener.apply(this.target, arguments);
  }
}

function _onceWrap(target, type, listener) {
  var state = {
    fired: false,
    wrapFn: undefined,
    target: target,
    type: type,
    listener: listener
  };
  var wrapped = onceWrapper.bind(state);
  wrapped.listener = listener;
  state.wrapFn = wrapped;
  return wrapped;
}

EventEmitter.prototype.once = function once(type, listener) {
  checkListener(listener);
  this.on(type, _onceWrap(this, type, listener));
  return this;
};

EventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) {
  checkListener(listener);
  this.prependListener(type, _onceWrap(this, type, listener));
  return this;
}; // Emits a 'removeListener' event if and only if the listener was removed.


EventEmitter.prototype.removeListener = function removeListener(type, listener) {
  var list, events, position, i, originalListener;
  checkListener(listener);
  events = this._events;
  if (events === undefined) return this;
  list = events[type];
  if (list === undefined) return this;

  if (list === listener || list.listener === listener) {
    if (--this._eventsCount === 0) this._events = Object.create(null);else {
      delete events[type];
      if (events.removeListener) this.emit('removeListener', type, list.listener || listener);
    }
  } else if (typeof list !== 'function') {
    position = -1;

    for (i = list.length - 1; i >= 0; i--) {
      if (list[i] === listener || list[i].listener === listener) {
        originalListener = list[i].listener;
        position = i;
        break;
      }
    }

    if (position < 0) return this;
    if (position === 0) list.shift();else {
      spliceOne(list, position);
    }
    if (list.length === 1) events[type] = list[0];
    if (events.removeListener !== undefined) this.emit('removeListener', type, originalListener || listener);
  }

  return this;
};

EventEmitter.prototype.off = EventEmitter.prototype.removeListener;

EventEmitter.prototype.removeAllListeners = function removeAllListeners(type) {
  var listeners, events, i;
  events = this._events;
  if (events === undefined) return this; // not listening for removeListener, no need to emit

  if (events.removeListener === undefined) {
    if (arguments.length === 0) {
      this._events = Object.create(null);
      this._eventsCount = 0;
    } else if (events[type] !== undefined) {
      if (--this._eventsCount === 0) this._events = Object.create(null);else delete events[type];
    }

    return this;
  } // emit removeListener for all listeners on all events


  if (arguments.length === 0) {
    var keys = Object.keys(events);
    var key;

    for (i = 0; i < keys.length; ++i) {
      key = keys[i];
      if (key === 'removeListener') continue;
      this.removeAllListeners(key);
    }

    this.removeAllListeners('removeListener');
    this._events = Object.create(null);
    this._eventsCount = 0;
    return this;
  }

  listeners = events[type];

  if (typeof listeners === 'function') {
    this.removeListener(type, listeners);
  } else if (listeners !== undefined) {
    // LIFO order
    for (i = listeners.length - 1; i >= 0; i--) {
      this.removeListener(type, listeners[i]);
    }
  }

  return this;
};

function _listeners(target, type, unwrap) {
  var events = target._events;
  if (events === undefined) return [];
  var evlistener = events[type];
  if (evlistener === undefined) return [];
  if (typeof evlistener === 'function') return unwrap ? [evlistener.listener || evlistener] : [evlistener];
  return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);
}

EventEmitter.prototype.listeners = function listeners(type) {
  return _listeners(this, type, true);
};

EventEmitter.prototype.rawListeners = function rawListeners(type) {
  return _listeners(this, type, false);
};

EventEmitter.listenerCount = function (emitter, type) {
  if (typeof emitter.listenerCount === 'function') {
    return emitter.listenerCount(type);
  } else {
    return listenerCount.call(emitter, type);
  }
};

EventEmitter.prototype.listenerCount = listenerCount;

function listenerCount(type) {
  var events = this._events;

  if (events !== undefined) {
    var evlistener = events[type];

    if (typeof evlistener === 'function') {
      return 1;
    } else if (evlistener !== undefined) {
      return evlistener.length;
    }
  }

  return 0;
}

EventEmitter.prototype.eventNames = function eventNames() {
  return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];
};

function arrayClone(arr, n) {
  var copy = new Array(n);

  for (var i = 0; i < n; ++i) {
    copy[i] = arr[i];
  }

  return copy;
}

function spliceOne(list, index) {
  for (; index + 1 < list.length; index++) {
    list[index] = list[index + 1];
  }

  list.pop();
}

function unwrapListeners(arr) {
  var ret = new Array(arr.length);

  for (var i = 0; i < ret.length; ++i) {
    ret[i] = arr[i].listener || arr[i];
  }

  return ret;
}

function once(emitter, name) {
  return new Promise(function (resolve, reject) {
    function errorListener(err) {
      emitter.removeListener(name, resolver);
      reject(err);
    }

    function resolver() {
      if (typeof emitter.removeListener === 'function') {
        emitter.removeListener('error', errorListener);
      }

      resolve([].slice.call(arguments));
    }

    ;
    eventTargetAgnosticAddListener(emitter, name, resolver, {
      once: true
    });

    if (name !== 'error') {
      addErrorHandlerIfEventEmitter(emitter, errorListener, {
        once: true
      });
    }
  });
}

function addErrorHandlerIfEventEmitter(emitter, handler, flags) {
  if (typeof emitter.on === 'function') {
    eventTargetAgnosticAddListener(emitter, 'error', handler, flags);
  }
}

function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
  if (typeof emitter.on === 'function') {
    if (flags.once) {
      emitter.once(name, listener);
    } else {
      emitter.on(name, listener);
    }
  } else if (typeof emitter.addEventListener === 'function') {
    // EventTarget does not have `error` event semantics like Node
    // EventEmitters, we do not listen for `error` events here.
    emitter.addEventListener(name, function wrapListener(arg) {
      // IE does not have builtin `{ once: true }` support so we
      // have to do it manually.
      if (flags.once) {
        emitter.removeEventListener(name, wrapListener);
      }

      listener(arg);
    });
  } else {
    throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + _typeof(emitter));
  }
}

/***/ }),

/***/ "./node_modules/intersection-observer/intersection-observer.js":
/*!*********************************************************************!*\
  !*** ./node_modules/intersection-observer/intersection-observer.js ***!
  \*********************************************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {

var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

/**
 * Copyright 2016 Google Inc. All Rights Reserved.
 *
 * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.
 *
 *  https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document
 *
 */
(function () {
  'use strict'; // Exit early if we're not running in a browser.

  if ((typeof window === "undefined" ? "undefined" : _typeof(window)) !== 'object') {
    return;
  } // Exit early if all IntersectionObserver and IntersectionObserverEntry
  // features are natively supported.


  if ('IntersectionObserver' in window && 'IntersectionObserverEntry' in window && 'intersectionRatio' in window.IntersectionObserverEntry.prototype) {
    // Minimal polyfill for Edge 15's lack of `isIntersecting`
    // See: https://github.com/w3c/IntersectionObserver/issues/211
    if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) {
      Object.defineProperty(window.IntersectionObserverEntry.prototype, 'isIntersecting', {
        get: function get() {
          return this.intersectionRatio > 0;
        }
      });
    }

    return;
  }
  /**
   * Returns the embedding frame element, if any.
   * @param {!Document} doc
   * @return {!Element}
   */


  function getFrameElement(doc) {
    try {
      return doc.defaultView && doc.defaultView.frameElement || null;
    } catch (e) {
      // Ignore the error.
      return null;
    }
  }
  /**
   * A local reference to the root document.
   */


  var document = function (startDoc) {
    var doc = startDoc;
    var frame = getFrameElement(doc);

    while (frame) {
      doc = frame.ownerDocument;
      frame = getFrameElement(doc);
    }

    return doc;
  }(window.document);
  /**
   * An IntersectionObserver registry. This registry exists to hold a strong
   * reference to IntersectionObserver instances currently observing a target
   * element. Without this registry, instances without another reference may be
   * garbage collected.
   */


  var registry = [];
  /**
   * The signal updater for cross-origin intersection. When not null, it means
   * that the polyfill is configured to work in a cross-origin mode.
   * @type {function(DOMRect|ClientRect, DOMRect|ClientRect)}
   */

  var crossOriginUpdater = null;
  /**
   * The current cross-origin intersection. Only used in the cross-origin mode.
   * @type {DOMRect|ClientRect}
   */

  var crossOriginRect = null;
  /**
   * Creates the global IntersectionObserverEntry constructor.
   * https://w3c.github.io/IntersectionObserver/#intersection-observer-entry
   * @param {Object} entry A dictionary of instance properties.
   * @constructor
   */

  function IntersectionObserverEntry(entry) {
    this.time = entry.time;
    this.target = entry.target;
    this.rootBounds = ensureDOMRect(entry.rootBounds);
    this.boundingClientRect = ensureDOMRect(entry.boundingClientRect);
    this.intersectionRect = ensureDOMRect(entry.intersectionRect || getEmptyRect());
    this.isIntersecting = !!entry.intersectionRect; // Calculates the intersection ratio.

    var targetRect = this.boundingClientRect;
    var targetArea = targetRect.width * targetRect.height;
    var intersectionRect = this.intersectionRect;
    var intersectionArea = intersectionRect.width * intersectionRect.height; // Sets intersection ratio.

    if (targetArea) {
      // Round the intersection ratio to avoid floating point math issues:
      // https://github.com/w3c/IntersectionObserver/issues/324
      this.intersectionRatio = Number((intersectionArea / targetArea).toFixed(4));
    } else {
      // If area is zero and is intersecting, sets to 1, otherwise to 0
      this.intersectionRatio = this.isIntersecting ? 1 : 0;
    }
  }
  /**
   * Creates the global IntersectionObserver constructor.
   * https://w3c.github.io/IntersectionObserver/#intersection-observer-interface
   * @param {Function} callback The function to be invoked after intersection
   *     changes have queued. The function is not invoked if the queue has
   *     been emptied by calling the `takeRecords` method.
   * @param {Object=} opt_options Optional configuration options.
   * @constructor
   */


  function IntersectionObserver(callback, opt_options) {
    var options = opt_options || {};

    if (typeof callback != 'function') {
      throw new Error('callback must be a function');
    }

    if (options.root && options.root.nodeType != 1 && options.root.nodeType != 9) {
      throw new Error('root must be a Document or Element');
    } // Binds and throttles `this._checkForIntersections`.


    this._checkForIntersections = throttle(this._checkForIntersections.bind(this), this.THROTTLE_TIMEOUT); // Private properties.

    this._callback = callback;
    this._observationTargets = [];
    this._queuedEntries = [];
    this._rootMarginValues = this._parseRootMargin(options.rootMargin); // Public properties.

    this.thresholds = this._initThresholds(options.threshold);
    this.root = options.root || null;
    this.rootMargin = this._rootMarginValues.map(function (margin) {
      return margin.value + margin.unit;
    }).join(' ');
    /** @private @const {!Array<!Document>} */

    this._monitoringDocuments = [];
    /** @private @const {!Array<function()>} */

    this._monitoringUnsubscribes = [];
  }
  /**
   * The minimum interval within which the document will be checked for
   * intersection changes.
   */


  IntersectionObserver.prototype.THROTTLE_TIMEOUT = 100;
  /**
   * The frequency in which the polyfill polls for intersection changes.
   * this can be updated on a per instance basis and must be set prior to
   * calling `observe` on the first target.
   */

  IntersectionObserver.prototype.POLL_INTERVAL = null;
  /**
   * Use a mutation observer on the root element
   * to detect intersection changes.
   */

  IntersectionObserver.prototype.USE_MUTATION_OBSERVER = true;
  /**
   * Sets up the polyfill in the cross-origin mode. The result is the
   * updater function that accepts two arguments: `boundingClientRect` and
   * `intersectionRect` - just as these fields would be available to the
   * parent via `IntersectionObserverEntry`. This function should be called
   * each time the iframe receives intersection information from the parent
   * window, e.g. via messaging.
   * @return {function(DOMRect|ClientRect, DOMRect|ClientRect)}
   */

  IntersectionObserver._setupCrossOriginUpdater = function () {
    if (!crossOriginUpdater) {
      /**
       * @param {DOMRect|ClientRect} boundingClientRect
       * @param {DOMRect|ClientRect} intersectionRect
       */
      crossOriginUpdater = function crossOriginUpdater(boundingClientRect, intersectionRect) {
        if (!boundingClientRect || !intersectionRect) {
          crossOriginRect = getEmptyRect();
        } else {
          crossOriginRect = convertFromParentRect(boundingClientRect, intersectionRect);
        }

        registry.forEach(function (observer) {
          observer._checkForIntersections();
        });
      };
    }

    return crossOriginUpdater;
  };
  /**
   * Resets the cross-origin mode.
   */


  IntersectionObserver._resetCrossOriginUpdater = function () {
    crossOriginUpdater = null;
    crossOriginRect = null;
  };
  /**
   * Starts observing a target element for intersection changes based on
   * the thresholds values.
   * @param {Element} target The DOM element to observe.
   */


  IntersectionObserver.prototype.observe = function (target) {
    var isTargetAlreadyObserved = this._observationTargets.some(function (item) {
      return item.element == target;
    });

    if (isTargetAlreadyObserved) {
      return;
    }

    if (!(target && target.nodeType == 1)) {
      throw new Error('target must be an Element');
    }

    this._registerInstance();

    this._observationTargets.push({
      element: target,
      entry: null
    });

    this._monitorIntersections(target.ownerDocument);

    this._checkForIntersections();
  };
  /**
   * Stops observing a target element for intersection changes.
   * @param {Element} target The DOM element to observe.
   */


  IntersectionObserver.prototype.unobserve = function (target) {
    this._observationTargets = this._observationTargets.filter(function (item) {
      return item.element != target;
    });

    this._unmonitorIntersections(target.ownerDocument);

    if (this._observationTargets.length == 0) {
      this._unregisterInstance();
    }
  };
  /**
   * Stops observing all target elements for intersection changes.
   */


  IntersectionObserver.prototype.disconnect = function () {
    this._observationTargets = [];

    this._unmonitorAllIntersections();

    this._unregisterInstance();
  };
  /**
   * Returns any queue entries that have not yet been reported to the
   * callback and clears the queue. This can be used in conjunction with the
   * callback to obtain the absolute most up-to-date intersection information.
   * @return {Array} The currently queued entries.
   */


  IntersectionObserver.prototype.takeRecords = function () {
    var records = this._queuedEntries.slice();

    this._queuedEntries = [];
    return records;
  };
  /**
   * Accepts the threshold value from the user configuration object and
   * returns a sorted array of unique threshold values. If a value is not
   * between 0 and 1 and error is thrown.
   * @private
   * @param {Array|number=} opt_threshold An optional threshold value or
   *     a list of threshold values, defaulting to [0].
   * @return {Array} A sorted list of unique and valid threshold values.
   */


  IntersectionObserver.prototype._initThresholds = function (opt_threshold) {
    var threshold = opt_threshold || [0];
    if (!Array.isArray(threshold)) threshold = [threshold];
    return threshold.sort().filter(function (t, i, a) {
      if (typeof t != 'number' || isNaN(t) || t < 0 || t > 1) {
        throw new Error('threshold must be a number between 0 and 1 inclusively');
      }

      return t !== a[i - 1];
    });
  };
  /**
   * Accepts the rootMargin value from the user configuration object
   * and returns an array of the four margin values as an object containing
   * the value and unit properties. If any of the values are not properly
   * formatted or use a unit other than px or %, and error is thrown.
   * @private
   * @param {string=} opt_rootMargin An optional rootMargin value,
   *     defaulting to '0px'.
   * @return {Array<Object>} An array of margin objects with the keys
   *     value and unit.
   */


  IntersectionObserver.prototype._parseRootMargin = function (opt_rootMargin) {
    var marginString = opt_rootMargin || '0px';
    var margins = marginString.split(/\s+/).map(function (margin) {
      var parts = /^(-?\d*\.?\d+)(px|%)$/.exec(margin);

      if (!parts) {
        throw new Error('rootMargin must be specified in pixels or percent');
      }

      return {
        value: parseFloat(parts[1]),
        unit: parts[2]
      };
    }); // Handles shorthand.

    margins[1] = margins[1] || margins[0];
    margins[2] = margins[2] || margins[0];
    margins[3] = margins[3] || margins[1];
    return margins;
  };
  /**
   * Starts polling for intersection changes if the polling is not already
   * happening, and if the page's visibility state is visible.
   * @param {!Document} doc
   * @private
   */


  IntersectionObserver.prototype._monitorIntersections = function (doc) {
    var win = doc.defaultView;

    if (!win) {
      // Already destroyed.
      return;
    }

    if (this._monitoringDocuments.indexOf(doc) != -1) {
      // Already monitoring.
      return;
    } // Private state for monitoring.


    var callback = this._checkForIntersections;
    var monitoringInterval = null;
    var domObserver = null; // If a poll interval is set, use polling instead of listening to
    // resize and scroll events or DOM mutations.

    if (this.POLL_INTERVAL) {
      monitoringInterval = win.setInterval(callback, this.POLL_INTERVAL);
    } else {
      addEvent(win, 'resize', callback, true);
      addEvent(doc, 'scroll', callback, true);

      if (this.USE_MUTATION_OBSERVER && 'MutationObserver' in win) {
        domObserver = new win.MutationObserver(callback);
        domObserver.observe(doc, {
          attributes: true,
          childList: true,
          characterData: true,
          subtree: true
        });
      }
    }

    this._monitoringDocuments.push(doc);

    this._monitoringUnsubscribes.push(function () {
      // Get the window object again. When a friendly iframe is destroyed, it
      // will be null.
      var win = doc.defaultView;

      if (win) {
        if (monitoringInterval) {
          win.clearInterval(monitoringInterval);
        }

        removeEvent(win, 'resize', callback, true);
      }

      removeEvent(doc, 'scroll', callback, true);

      if (domObserver) {
        domObserver.disconnect();
      }
    }); // Also monitor the parent.


    var rootDoc = this.root && (this.root.ownerDocument || this.root) || document;

    if (doc != rootDoc) {
      var frame = getFrameElement(doc);

      if (frame) {
        this._monitorIntersections(frame.ownerDocument);
      }
    }
  };
  /**
   * Stops polling for intersection changes.
   * @param {!Document} doc
   * @private
   */


  IntersectionObserver.prototype._unmonitorIntersections = function (doc) {
    var index = this._monitoringDocuments.indexOf(doc);

    if (index == -1) {
      return;
    }

    var rootDoc = this.root && (this.root.ownerDocument || this.root) || document; // Check if any dependent targets are still remaining.

    var hasDependentTargets = this._observationTargets.some(function (item) {
      var itemDoc = item.element.ownerDocument; // Target is in this context.

      if (itemDoc == doc) {
        return true;
      } // Target is nested in this context.


      while (itemDoc && itemDoc != rootDoc) {
        var frame = getFrameElement(itemDoc);
        itemDoc = frame && frame.ownerDocument;

        if (itemDoc == doc) {
          return true;
        }
      }

      return false;
    });

    if (hasDependentTargets) {
      return;
    } // Unsubscribe.


    var unsubscribe = this._monitoringUnsubscribes[index];

    this._monitoringDocuments.splice(index, 1);

    this._monitoringUnsubscribes.splice(index, 1);

    unsubscribe(); // Also unmonitor the parent.

    if (doc != rootDoc) {
      var frame = getFrameElement(doc);

      if (frame) {
        this._unmonitorIntersections(frame.ownerDocument);
      }
    }
  };
  /**
   * Stops polling for intersection changes.
   * @param {!Document} doc
   * @private
   */


  IntersectionObserver.prototype._unmonitorAllIntersections = function () {
    var unsubscribes = this._monitoringUnsubscribes.slice(0);

    this._monitoringDocuments.length = 0;
    this._monitoringUnsubscribes.length = 0;

    for (var i = 0; i < unsubscribes.length; i++) {
      unsubscribes[i]();
    }
  };
  /**
   * Scans each observation target for intersection changes and adds them
   * to the internal entries queue. If new entries are found, it
   * schedules the callback to be invoked.
   * @private
   */


  IntersectionObserver.prototype._checkForIntersections = function () {
    if (!this.root && crossOriginUpdater && !crossOriginRect) {
      // Cross origin monitoring, but no initial data available yet.
      return;
    }

    var rootIsInDom = this._rootIsInDom();

    var rootRect = rootIsInDom ? this._getRootRect() : getEmptyRect();

    this._observationTargets.forEach(function (item) {
      var target = item.element;
      var targetRect = getBoundingClientRect(target);

      var rootContainsTarget = this._rootContainsTarget(target);

      var oldEntry = item.entry;

      var intersectionRect = rootIsInDom && rootContainsTarget && this._computeTargetAndRootIntersection(target, targetRect, rootRect);

      var rootBounds = null;

      if (!this._rootContainsTarget(target)) {
        rootBounds = getEmptyRect();
      } else if (!crossOriginUpdater || this.root) {
        rootBounds = rootRect;
      }

      var newEntry = item.entry = new IntersectionObserverEntry({
        time: now(),
        target: target,
        boundingClientRect: targetRect,
        rootBounds: rootBounds,
        intersectionRect: intersectionRect
      });

      if (!oldEntry) {
        this._queuedEntries.push(newEntry);
      } else if (rootIsInDom && rootContainsTarget) {
        // If the new entry intersection ratio has crossed any of the
        // thresholds, add a new entry.
        if (this._hasCrossedThreshold(oldEntry, newEntry)) {
          this._queuedEntries.push(newEntry);
        }
      } else {
        // If the root is not in the DOM or target is not contained within
        // root but the previous entry for this target had an intersection,
        // add a new record indicating removal.
        if (oldEntry && oldEntry.isIntersecting) {
          this._queuedEntries.push(newEntry);
        }
      }
    }, this);

    if (this._queuedEntries.length) {
      this._callback(this.takeRecords(), this);
    }
  };
  /**
   * Accepts a target and root rect computes the intersection between then
   * following the algorithm in the spec.
   * TODO(philipwalton): at this time clip-path is not considered.
   * https://w3c.github.io/IntersectionObserver/#calculate-intersection-rect-algo
   * @param {Element} target The target DOM element
   * @param {Object} targetRect The bounding rect of the target.
   * @param {Object} rootRect The bounding rect of the root after being
   *     expanded by the rootMargin value.
   * @return {?Object} The final intersection rect object or undefined if no
   *     intersection is found.
   * @private
   */


  IntersectionObserver.prototype._computeTargetAndRootIntersection = function (target, targetRect, rootRect) {
    // If the element isn't displayed, an intersection can't happen.
    if (window.getComputedStyle(target).display == 'none') return;
    var intersectionRect = targetRect;
    var parent = getParentNode(target);
    var atRoot = false;

    while (!atRoot && parent) {
      var parentRect = null;
      var parentComputedStyle = parent.nodeType == 1 ? window.getComputedStyle(parent) : {}; // If the parent isn't displayed, an intersection can't happen.

      if (parentComputedStyle.display == 'none') return null;

      if (parent == this.root || parent.nodeType ==
      /* DOCUMENT */
      9) {
        atRoot = true;

        if (parent == this.root || parent == document) {
          if (crossOriginUpdater && !this.root) {
            if (!crossOriginRect || crossOriginRect.width == 0 && crossOriginRect.height == 0) {
              // A 0-size cross-origin intersection means no-intersection.
              parent = null;
              parentRect = null;
              intersectionRect = null;
            } else {
              parentRect = crossOriginRect;
            }
          } else {
            parentRect = rootRect;
          }
        } else {
          // Check if there's a frame that can be navigated to.
          var frame = getParentNode(parent);
          var frameRect = frame && getBoundingClientRect(frame);

          var frameIntersect = frame && this._computeTargetAndRootIntersection(frame, frameRect, rootRect);

          if (frameRect && frameIntersect) {
            parent = frame;
            parentRect = convertFromParentRect(frameRect, frameIntersect);
          } else {
            parent = null;
            intersectionRect = null;
          }
        }
      } else {
        // If the element has a non-visible overflow, and it's not the <body>
        // or <html> element, update the intersection rect.
        // Note: <body> and <html> cannot be clipped to a rect that's not also
        // the document rect, so no need to compute a new intersection.
        var doc = parent.ownerDocument;

        if (parent != doc.body && parent != doc.documentElement && parentComputedStyle.overflow != 'visible') {
          parentRect = getBoundingClientRect(parent);
        }
      } // If either of the above conditionals set a new parentRect,
      // calculate new intersection data.


      if (parentRect) {
        intersectionRect = computeRectIntersection(parentRect, intersectionRect);
      }

      if (!intersectionRect) break;
      parent = parent && getParentNode(parent);
    }

    return intersectionRect;
  };
  /**
   * Returns the root rect after being expanded by the rootMargin value.
   * @return {ClientRect} The expanded root rect.
   * @private
   */


  IntersectionObserver.prototype._getRootRect = function () {
    var rootRect;

    if (this.root && !isDoc(this.root)) {
      rootRect = getBoundingClientRect(this.root);
    } else {
      // Use <html>/<body> instead of window since scroll bars affect size.
      var doc = isDoc(this.root) ? this.root : document;
      var html = doc.documentElement;
      var body = doc.body;
      rootRect = {
        top: 0,
        left: 0,
        right: html.clientWidth || body.clientWidth,
        width: html.clientWidth || body.clientWidth,
        bottom: html.clientHeight || body.clientHeight,
        height: html.clientHeight || body.clientHeight
      };
    }

    return this._expandRectByRootMargin(rootRect);
  };
  /**
   * Accepts a rect and expands it by the rootMargin value.
   * @param {DOMRect|ClientRect} rect The rect object to expand.
   * @return {ClientRect} The expanded rect.
   * @private
   */


  IntersectionObserver.prototype._expandRectByRootMargin = function (rect) {
    var margins = this._rootMarginValues.map(function (margin, i) {
      return margin.unit == 'px' ? margin.value : margin.value * (i % 2 ? rect.width : rect.height) / 100;
    });

    var newRect = {
      top: rect.top - margins[0],
      right: rect.right + margins[1],
      bottom: rect.bottom + margins[2],
      left: rect.left - margins[3]
    };
    newRect.width = newRect.right - newRect.left;
    newRect.height = newRect.bottom - newRect.top;
    return newRect;
  };
  /**
   * Accepts an old and new entry and returns true if at least one of the
   * threshold values has been crossed.
   * @param {?IntersectionObserverEntry} oldEntry The previous entry for a
   *    particular target element or null if no previous entry exists.
   * @param {IntersectionObserverEntry} newEntry The current entry for a
   *    particular target element.
   * @return {boolean} Returns true if a any threshold has been crossed.
   * @private
   */


  IntersectionObserver.prototype._hasCrossedThreshold = function (oldEntry, newEntry) {
    // To make comparing easier, an entry that has a ratio of 0
    // but does not actually intersect is given a value of -1
    var oldRatio = oldEntry && oldEntry.isIntersecting ? oldEntry.intersectionRatio || 0 : -1;
    var newRatio = newEntry.isIntersecting ? newEntry.intersectionRatio || 0 : -1; // Ignore unchanged ratios

    if (oldRatio === newRatio) return;

    for (var i = 0; i < this.thresholds.length; i++) {
      var threshold = this.thresholds[i]; // Return true if an entry matches a threshold or if the new ratio
      // and the old ratio are on the opposite sides of a threshold.

      if (threshold == oldRatio || threshold == newRatio || threshold < oldRatio !== threshold < newRatio) {
        return true;
      }
    }
  };
  /**
   * Returns whether or not the root element is an element and is in the DOM.
   * @return {boolean} True if the root element is an element and is in the DOM.
   * @private
   */


  IntersectionObserver.prototype._rootIsInDom = function () {
    return !this.root || containsDeep(document, this.root);
  };
  /**
   * Returns whether or not the target element is a child of root.
   * @param {Element} target The target element to check.
   * @return {boolean} True if the target element is a child of root.
   * @private
   */


  IntersectionObserver.prototype._rootContainsTarget = function (target) {
    var rootDoc = this.root && (this.root.ownerDocument || this.root) || document;
    return containsDeep(rootDoc, target) && (!this.root || rootDoc == target.ownerDocument);
  };
  /**
   * Adds the instance to the global IntersectionObserver registry if it isn't
   * already present.
   * @private
   */


  IntersectionObserver.prototype._registerInstance = function () {
    if (registry.indexOf(this) < 0) {
      registry.push(this);
    }
  };
  /**
   * Removes the instance from the global IntersectionObserver registry.
   * @private
   */


  IntersectionObserver.prototype._unregisterInstance = function () {
    var index = registry.indexOf(this);
    if (index != -1) registry.splice(index, 1);
  };
  /**
   * Returns the result of the performance.now() method or null in browsers
   * that don't support the API.
   * @return {number} The elapsed time since the page was requested.
   */


  function now() {
    return window.performance && performance.now && performance.now();
  }
  /**
   * Throttles a function and delays its execution, so it's only called at most
   * once within a given time period.
   * @param {Function} fn The function to throttle.
   * @param {number} timeout The amount of time that must pass before the
   *     function can be called again.
   * @return {Function} The throttled function.
   */


  function throttle(fn, timeout) {
    var timer = null;
    return function () {
      if (!timer) {
        timer = setTimeout(function () {
          fn();
          timer = null;
        }, timeout);
      }
    };
  }
  /**
   * Adds an event handler to a DOM node ensuring cross-browser compatibility.
   * @param {Node} node The DOM node to add the event handler to.
   * @param {string} event The event name.
   * @param {Function} fn The event handler to add.
   * @param {boolean} opt_useCapture Optionally adds the even to the capture
   *     phase. Note: this only works in modern browsers.
   */


  function addEvent(node, event, fn, opt_useCapture) {
    if (typeof node.addEventListener == 'function') {
      node.addEventListener(event, fn, opt_useCapture || false);
    } else if (typeof node.attachEvent == 'function') {
      node.attachEvent('on' + event, fn);
    }
  }
  /**
   * Removes a previously added event handler from a DOM node.
   * @param {Node} node The DOM node to remove the event handler from.
   * @param {string} event The event name.
   * @param {Function} fn The event handler to remove.
   * @param {boolean} opt_useCapture If the event handler was added with this
   *     flag set to true, it should be set to true here in order to remove it.
   */


  function removeEvent(node, event, fn, opt_useCapture) {
    if (typeof node.removeEventListener == 'function') {
      node.removeEventListener(event, fn, opt_useCapture || false);
    } else if (typeof node.detatchEvent == 'function') {
      node.detatchEvent('on' + event, fn);
    }
  }
  /**
   * Returns the intersection between two rect objects.
   * @param {Object} rect1 The first rect.
   * @param {Object} rect2 The second rect.
   * @return {?Object|?ClientRect} The intersection rect or undefined if no
   *     intersection is found.
   */


  function computeRectIntersection(rect1, rect2) {
    var top = Math.max(rect1.top, rect2.top);
    var bottom = Math.min(rect1.bottom, rect2.bottom);
    var left = Math.max(rect1.left, rect2.left);
    var right = Math.min(rect1.right, rect2.right);
    var width = right - left;
    var height = bottom - top;
    return width >= 0 && height >= 0 && {
      top: top,
      bottom: bottom,
      left: left,
      right: right,
      width: width,
      height: height
    } || null;
  }
  /**
   * Shims the native getBoundingClientRect for compatibility with older IE.
   * @param {Element} el The element whose bounding rect to get.
   * @return {DOMRect|ClientRect} The (possibly shimmed) rect of the element.
   */


  function getBoundingClientRect(el) {
    var rect;

    try {
      rect = el.getBoundingClientRect();
    } catch (err) {// Ignore Windows 7 IE11 "Unspecified error"
      // https://github.com/w3c/IntersectionObserver/pull/205
    }

    if (!rect) return getEmptyRect(); // Older IE

    if (!(rect.width && rect.height)) {
      rect = {
        top: rect.top,
        right: rect.right,
        bottom: rect.bottom,
        left: rect.left,
        width: rect.right - rect.left,
        height: rect.bottom - rect.top
      };
    }

    return rect;
  }
  /**
   * Returns an empty rect object. An empty rect is returned when an element
   * is not in the DOM.
   * @return {ClientRect} The empty rect.
   */


  function getEmptyRect() {
    return {
      top: 0,
      bottom: 0,
      left: 0,
      right: 0,
      width: 0,
      height: 0
    };
  }
  /**
   * Ensure that the result has all of the necessary fields of the DOMRect.
   * Specifically this ensures that `x` and `y` fields are set.
   *
   * @param {?DOMRect|?ClientRect} rect
   * @return {?DOMRect}
   */


  function ensureDOMRect(rect) {
    // A `DOMRect` object has `x` and `y` fields.
    if (!rect || 'x' in rect) {
      return rect;
    } // A IE's `ClientRect` type does not have `x` and `y`. The same is the case
    // for internally calculated Rect objects. For the purposes of
    // `IntersectionObserver`, it's sufficient to simply mirror `left` and `top`
    // for these fields.


    return {
      top: rect.top,
      y: rect.top,
      bottom: rect.bottom,
      left: rect.left,
      x: rect.left,
      right: rect.right,
      width: rect.width,
      height: rect.height
    };
  }
  /**
   * Inverts the intersection and bounding rect from the parent (frame) BCR to
   * the local BCR space.
   * @param {DOMRect|ClientRect} parentBoundingRect The parent's bound client rect.
   * @param {DOMRect|ClientRect} parentIntersectionRect The parent's own intersection rect.
   * @return {ClientRect} The local root bounding rect for the parent's children.
   */


  function convertFromParentRect(parentBoundingRect, parentIntersectionRect) {
    var top = parentIntersectionRect.top - parentBoundingRect.top;
    var left = parentIntersectionRect.left - parentBoundingRect.left;
    return {
      top: top,
      left: left,
      height: parentIntersectionRect.height,
      width: parentIntersectionRect.width,
      bottom: top + parentIntersectionRect.height,
      right: left + parentIntersectionRect.width
    };
  }
  /**
   * Checks to see if a parent element contains a child element (including inside
   * shadow DOM).
   * @param {Node} parent The parent element.
   * @param {Node} child The child element.
   * @return {boolean} True if the parent node contains the child node.
   */


  function containsDeep(parent, child) {
    var node = child;

    while (node) {
      if (node == parent) return true;
      node = getParentNode(node);
    }

    return false;
  }
  /**
   * Gets the parent node of an element or its host element if the parent node
   * is a shadow root.
   * @param {Node} node The node whose parent to get.
   * @return {Node|null} The parent node or null if no parent exists.
   */


  function getParentNode(node) {
    var parent = node.parentNode;

    if (node.nodeType ==
    /* DOCUMENT */
    9 && node != document) {
      // If this node is a document node, look for the embedding frame.
      return getFrameElement(node);
    } // If the parent has element that is assigned through shadow root slot


    if (parent && parent.assignedSlot) {
      parent = parent.assignedSlot.parentNode;
    }

    if (parent && parent.nodeType == 11 && parent.host) {
      // If the parent is a shadow root, return the host element.
      return parent.host;
    }

    return parent;
  }
  /**
   * Returns true if `node` is a Document.
   * @param {!Node} node
   * @returns {boolean}
   */


  function isDoc(node) {
    return node && node.nodeType === 9;
  } // Exposes the constructors globally.


  window.IntersectionObserver = IntersectionObserver;
  window.IntersectionObserverEntry = IntersectionObserverEntry;
})();

/***/ }),

/***/ "./node_modules/moment/locale/af.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/af.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Afrikaans [af]
//! author : Werner Mollentze : https://github.com/wernerm
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var af = moment.defineLocale('af', {
    months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),
    monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),
    weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),
    weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),
    weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),
    meridiemParse: /vm|nm/i,
    isPM: function isPM(input) {
      return /^nm$/i.test(input);
    },
    meridiem: function meridiem(hours, minutes, isLower) {
      if (hours < 12) {
        return isLower ? 'vm' : 'VM';
      } else {
        return isLower ? 'nm' : 'NM';
      }
    },
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd, D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[Vandag om] LT',
      nextDay: '[Môre om] LT',
      nextWeek: 'dddd [om] LT',
      lastDay: '[Gister om] LT',
      lastWeek: '[Laas] dddd [om] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'oor %s',
      past: '%s gelede',
      s: "'n paar sekondes",
      ss: '%d sekondes',
      m: "'n minuut",
      mm: '%d minute',
      h: "'n uur",
      hh: '%d ure',
      d: "'n dag",
      dd: '%d dae',
      M: "'n maand",
      MM: '%d maande',
      y: "'n jaar",
      yy: '%d jaar'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
    ordinal: function ordinal(number) {
      return number + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter
    },
    week: {
      dow: 1,
      // Maandag is die eerste dag van die week.
      doy: 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar.

    }
  });
  return af;
});

/***/ }),

/***/ "./node_modules/moment/locale/ar-dz.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/ar-dz.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Arabic (Algeria) [ar-dz]
//! author : Amine Roukh: https://github.com/Amine27
//! author : Abdel Said: https://github.com/abdelsaid
//! author : Ahmed Elkhatib
//! author : forabi https://github.com/forabi
//! author : Noureddine LOUAHEDJ : https://github.com/noureddinem
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var pluralForm = function pluralForm(n) {
    return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;
  },
      plurals = {
    s: ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],
    m: ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],
    h: ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],
    d: ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],
    M: ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],
    y: ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']
  },
      pluralize = function pluralize(u) {
    return function (number, withoutSuffix, string, isFuture) {
      var f = pluralForm(number),
          str = plurals[u][pluralForm(number)];

      if (f === 2) {
        str = str[withoutSuffix ? 0 : 1];
      }

      return str.replace(/%d/i, number);
    };
  },
      months = ['جانفي', 'فيفري', 'مارس', 'أفريل', 'ماي', 'جوان', 'جويلية', 'أوت', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'];

  var arDz = moment.defineLocale('ar-dz', {
    months: months,
    monthsShort: months,
    weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
    weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
    weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: "D/\u200FM/\u200FYYYY",
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd D MMMM YYYY HH:mm'
    },
    meridiemParse: /ص|م/,
    isPM: function isPM(input) {
      return 'م' === input;
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 12) {
        return 'ص';
      } else {
        return 'م';
      }
    },
    calendar: {
      sameDay: '[اليوم عند الساعة] LT',
      nextDay: '[غدًا عند الساعة] LT',
      nextWeek: 'dddd [عند الساعة] LT',
      lastDay: '[أمس عند الساعة] LT',
      lastWeek: 'dddd [عند الساعة] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'بعد %s',
      past: 'منذ %s',
      s: pluralize('s'),
      ss: pluralize('s'),
      m: pluralize('m'),
      mm: pluralize('m'),
      h: pluralize('h'),
      hh: pluralize('h'),
      d: pluralize('d'),
      dd: pluralize('d'),
      M: pluralize('M'),
      MM: pluralize('M'),
      y: pluralize('y'),
      yy: pluralize('y')
    },
    postformat: function postformat(string) {
      return string.replace(/,/g, '،');
    },
    week: {
      dow: 0,
      // Sunday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return arDz;
});

/***/ }),

/***/ "./node_modules/moment/locale/ar-kw.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/ar-kw.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Arabic (Kuwait) [ar-kw]
//! author : Nusret Parlak: https://github.com/nusretparlak
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var arKw = moment.defineLocale('ar-kw', {
    months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
    monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
    weekdays: 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
    weekdaysShort: 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
    weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[اليوم على الساعة] LT',
      nextDay: '[غدا على الساعة] LT',
      nextWeek: 'dddd [على الساعة] LT',
      lastDay: '[أمس على الساعة] LT',
      lastWeek: 'dddd [على الساعة] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'في %s',
      past: 'منذ %s',
      s: 'ثوان',
      ss: '%d ثانية',
      m: 'دقيقة',
      mm: '%d دقائق',
      h: 'ساعة',
      hh: '%d ساعات',
      d: 'يوم',
      dd: '%d أيام',
      M: 'شهر',
      MM: '%d أشهر',
      y: 'سنة',
      yy: '%d سنوات'
    },
    week: {
      dow: 0,
      // Sunday is the first day of the week.
      doy: 12 // The week that contains Jan 12th is the first week of the year.

    }
  });
  return arKw;
});

/***/ }),

/***/ "./node_modules/moment/locale/ar-ly.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/ar-ly.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Arabic (Lybia) [ar-ly]
//! author : Ali Hmer: https://github.com/kikoanis
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var symbolMap = {
    1: '1',
    2: '2',
    3: '3',
    4: '4',
    5: '5',
    6: '6',
    7: '7',
    8: '8',
    9: '9',
    0: '0'
  },
      pluralForm = function pluralForm(n) {
    return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;
  },
      plurals = {
    s: ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],
    m: ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],
    h: ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],
    d: ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],
    M: ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],
    y: ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']
  },
      pluralize = function pluralize(u) {
    return function (number, withoutSuffix, string, isFuture) {
      var f = pluralForm(number),
          str = plurals[u][pluralForm(number)];

      if (f === 2) {
        str = str[withoutSuffix ? 0 : 1];
      }

      return str.replace(/%d/i, number);
    };
  },
      months = ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'];

  var arLy = moment.defineLocale('ar-ly', {
    months: months,
    monthsShort: months,
    weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
    weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
    weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: "D/\u200FM/\u200FYYYY",
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd D MMMM YYYY HH:mm'
    },
    meridiemParse: /ص|م/,
    isPM: function isPM(input) {
      return 'م' === input;
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 12) {
        return 'ص';
      } else {
        return 'م';
      }
    },
    calendar: {
      sameDay: '[اليوم عند الساعة] LT',
      nextDay: '[غدًا عند الساعة] LT',
      nextWeek: 'dddd [عند الساعة] LT',
      lastDay: '[أمس عند الساعة] LT',
      lastWeek: 'dddd [عند الساعة] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'بعد %s',
      past: 'منذ %s',
      s: pluralize('s'),
      ss: pluralize('s'),
      m: pluralize('m'),
      mm: pluralize('m'),
      h: pluralize('h'),
      hh: pluralize('h'),
      d: pluralize('d'),
      dd: pluralize('d'),
      M: pluralize('M'),
      MM: pluralize('M'),
      y: pluralize('y'),
      yy: pluralize('y')
    },
    preparse: function preparse(string) {
      return string.replace(/،/g, ',');
    },
    postformat: function postformat(string) {
      return string.replace(/\d/g, function (match) {
        return symbolMap[match];
      }).replace(/,/g, '،');
    },
    week: {
      dow: 6,
      // Saturday is the first day of the week.
      doy: 12 // The week that contains Jan 12th is the first week of the year.

    }
  });
  return arLy;
});

/***/ }),

/***/ "./node_modules/moment/locale/ar-ma.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/ar-ma.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Arabic (Morocco) [ar-ma]
//! author : ElFadili Yassine : https://github.com/ElFadiliY
//! author : Abdel Said : https://github.com/abdelsaid
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var arMa = moment.defineLocale('ar-ma', {
    months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
    monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
    weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
    weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
    weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[اليوم على الساعة] LT',
      nextDay: '[غدا على الساعة] LT',
      nextWeek: 'dddd [على الساعة] LT',
      lastDay: '[أمس على الساعة] LT',
      lastWeek: 'dddd [على الساعة] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'في %s',
      past: 'منذ %s',
      s: 'ثوان',
      ss: '%d ثانية',
      m: 'دقيقة',
      mm: '%d دقائق',
      h: 'ساعة',
      hh: '%d ساعات',
      d: 'يوم',
      dd: '%d أيام',
      M: 'شهر',
      MM: '%d أشهر',
      y: 'سنة',
      yy: '%d سنوات'
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return arMa;
});

/***/ }),

/***/ "./node_modules/moment/locale/ar-sa.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/ar-sa.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Arabic (Saudi Arabia) [ar-sa]
//! author : Suhail Alkowaileet : https://github.com/xsoh
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var symbolMap = {
    1: '١',
    2: '٢',
    3: '٣',
    4: '٤',
    5: '٥',
    6: '٦',
    7: '٧',
    8: '٨',
    9: '٩',
    0: '٠'
  },
      numberMap = {
    '١': '1',
    '٢': '2',
    '٣': '3',
    '٤': '4',
    '٥': '5',
    '٦': '6',
    '٧': '7',
    '٨': '8',
    '٩': '9',
    '٠': '0'
  };
  var arSa = moment.defineLocale('ar-sa', {
    months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
    monthsShort: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
    weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
    weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
    weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd D MMMM YYYY HH:mm'
    },
    meridiemParse: /ص|م/,
    isPM: function isPM(input) {
      return 'م' === input;
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 12) {
        return 'ص';
      } else {
        return 'م';
      }
    },
    calendar: {
      sameDay: '[اليوم على الساعة] LT',
      nextDay: '[غدا على الساعة] LT',
      nextWeek: 'dddd [على الساعة] LT',
      lastDay: '[أمس على الساعة] LT',
      lastWeek: 'dddd [على الساعة] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'في %s',
      past: 'منذ %s',
      s: 'ثوان',
      ss: '%d ثانية',
      m: 'دقيقة',
      mm: '%d دقائق',
      h: 'ساعة',
      hh: '%d ساعات',
      d: 'يوم',
      dd: '%d أيام',
      M: 'شهر',
      MM: '%d أشهر',
      y: 'سنة',
      yy: '%d سنوات'
    },
    preparse: function preparse(string) {
      return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
        return numberMap[match];
      }).replace(/،/g, ',');
    },
    postformat: function postformat(string) {
      return string.replace(/\d/g, function (match) {
        return symbolMap[match];
      }).replace(/,/g, '،');
    },
    week: {
      dow: 0,
      // Sunday is the first day of the week.
      doy: 6 // The week that contains Jan 6th is the first week of the year.

    }
  });
  return arSa;
});

/***/ }),

/***/ "./node_modules/moment/locale/ar-tn.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/ar-tn.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale  :  Arabic (Tunisia) [ar-tn]
//! author : Nader Toukabri : https://github.com/naderio
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var arTn = moment.defineLocale('ar-tn', {
    months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
    monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
    weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
    weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
    weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[اليوم على الساعة] LT',
      nextDay: '[غدا على الساعة] LT',
      nextWeek: 'dddd [على الساعة] LT',
      lastDay: '[أمس على الساعة] LT',
      lastWeek: 'dddd [على الساعة] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'في %s',
      past: 'منذ %s',
      s: 'ثوان',
      ss: '%d ثانية',
      m: 'دقيقة',
      mm: '%d دقائق',
      h: 'ساعة',
      hh: '%d ساعات',
      d: 'يوم',
      dd: '%d أيام',
      M: 'شهر',
      MM: '%d أشهر',
      y: 'سنة',
      yy: '%d سنوات'
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return arTn;
});

/***/ }),

/***/ "./node_modules/moment/locale/ar.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ar.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Arabic [ar]
//! author : Abdel Said: https://github.com/abdelsaid
//! author : Ahmed Elkhatib
//! author : forabi https://github.com/forabi
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var symbolMap = {
    1: '١',
    2: '٢',
    3: '٣',
    4: '٤',
    5: '٥',
    6: '٦',
    7: '٧',
    8: '٨',
    9: '٩',
    0: '٠'
  },
      numberMap = {
    '١': '1',
    '٢': '2',
    '٣': '3',
    '٤': '4',
    '٥': '5',
    '٦': '6',
    '٧': '7',
    '٨': '8',
    '٩': '9',
    '٠': '0'
  },
      pluralForm = function pluralForm(n) {
    return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;
  },
      plurals = {
    s: ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],
    m: ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],
    h: ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],
    d: ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],
    M: ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],
    y: ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']
  },
      pluralize = function pluralize(u) {
    return function (number, withoutSuffix, string, isFuture) {
      var f = pluralForm(number),
          str = plurals[u][pluralForm(number)];

      if (f === 2) {
        str = str[withoutSuffix ? 0 : 1];
      }

      return str.replace(/%d/i, number);
    };
  },
      months = ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'];

  var ar = moment.defineLocale('ar', {
    months: months,
    monthsShort: months,
    weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
    weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
    weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: "D/\u200FM/\u200FYYYY",
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd D MMMM YYYY HH:mm'
    },
    meridiemParse: /ص|م/,
    isPM: function isPM(input) {
      return 'م' === input;
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 12) {
        return 'ص';
      } else {
        return 'م';
      }
    },
    calendar: {
      sameDay: '[اليوم عند الساعة] LT',
      nextDay: '[غدًا عند الساعة] LT',
      nextWeek: 'dddd [عند الساعة] LT',
      lastDay: '[أمس عند الساعة] LT',
      lastWeek: 'dddd [عند الساعة] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'بعد %s',
      past: 'منذ %s',
      s: pluralize('s'),
      ss: pluralize('s'),
      m: pluralize('m'),
      mm: pluralize('m'),
      h: pluralize('h'),
      hh: pluralize('h'),
      d: pluralize('d'),
      dd: pluralize('d'),
      M: pluralize('M'),
      MM: pluralize('M'),
      y: pluralize('y'),
      yy: pluralize('y')
    },
    preparse: function preparse(string) {
      return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
        return numberMap[match];
      }).replace(/،/g, ',');
    },
    postformat: function postformat(string) {
      return string.replace(/\d/g, function (match) {
        return symbolMap[match];
      }).replace(/,/g, '،');
    },
    week: {
      dow: 6,
      // Saturday is the first day of the week.
      doy: 12 // The week that contains Jan 12th is the first week of the year.

    }
  });
  return ar;
});

/***/ }),

/***/ "./node_modules/moment/locale/az.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/az.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Azerbaijani [az]
//! author : topchiyev : https://github.com/topchiyev
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var suffixes = {
    1: '-inci',
    5: '-inci',
    8: '-inci',
    70: '-inci',
    80: '-inci',
    2: '-nci',
    7: '-nci',
    20: '-nci',
    50: '-nci',
    3: '-üncü',
    4: '-üncü',
    100: '-üncü',
    6: '-ncı',
    9: '-uncu',
    10: '-uncu',
    30: '-uncu',
    60: '-ıncı',
    90: '-ıncı'
  };
  var az = moment.defineLocale('az', {
    months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),
    monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),
    weekdays: 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),
    weekdaysShort: 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),
    weekdaysMin: 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd, D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[bugün saat] LT',
      nextDay: '[sabah saat] LT',
      nextWeek: '[gələn həftə] dddd [saat] LT',
      lastDay: '[dünən] LT',
      lastWeek: '[keçən həftə] dddd [saat] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s sonra',
      past: '%s əvvəl',
      s: 'bir neçə saniyə',
      ss: '%d saniyə',
      m: 'bir dəqiqə',
      mm: '%d dəqiqə',
      h: 'bir saat',
      hh: '%d saat',
      d: 'bir gün',
      dd: '%d gün',
      M: 'bir ay',
      MM: '%d ay',
      y: 'bir il',
      yy: '%d il'
    },
    meridiemParse: /gecə|səhər|gündüz|axşam/,
    isPM: function isPM(input) {
      return /^(gündüz|axşam)$/.test(input);
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 4) {
        return 'gecə';
      } else if (hour < 12) {
        return 'səhər';
      } else if (hour < 17) {
        return 'gündüz';
      } else {
        return 'axşam';
      }
    },
    dayOfMonthOrdinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,
    ordinal: function ordinal(number) {
      if (number === 0) {
        // special case for zero
        return number + '-ıncı';
      }

      var a = number % 10,
          b = number % 100 - a,
          c = number >= 100 ? 100 : null;
      return number + (suffixes[a] || suffixes[b] || suffixes[c]);
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 7 // The week that contains Jan 7th is the first week of the year.

    }
  });
  return az;
});

/***/ }),

/***/ "./node_modules/moment/locale/be.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/be.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Belarusian [be]
//! author : Dmitry Demidov : https://github.com/demidov91
//! author: Praleska: http://praleska.pro/
//! Author : Menelion Elensúle : https://github.com/Oire
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  function plural(word, num) {
    var forms = word.split('_');
    return num % 10 === 1 && num % 100 !== 11 ? forms[0] : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2];
  }

  function relativeTimeWithPlural(number, withoutSuffix, key) {
    var format = {
      ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',
      mm: withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',
      hh: withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',
      dd: 'дзень_дні_дзён',
      MM: 'месяц_месяцы_месяцаў',
      yy: 'год_гады_гадоў'
    };

    if (key === 'm') {
      return withoutSuffix ? 'хвіліна' : 'хвіліну';
    } else if (key === 'h') {
      return withoutSuffix ? 'гадзіна' : 'гадзіну';
    } else {
      return number + ' ' + plural(format[key], +number);
    }
  }

  var be = moment.defineLocale('be', {
    months: {
      format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'),
      standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_')
    },
    monthsShort: 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),
    weekdays: {
      format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'),
      standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),
      isFormat: /\[ ?[Ууў] ?(?:мінулую|наступную)? ?\] ?dddd/
    },
    weekdaysShort: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
    weekdaysMin: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'D MMMM YYYY г.',
      LLL: 'D MMMM YYYY г., HH:mm',
      LLLL: 'dddd, D MMMM YYYY г., HH:mm'
    },
    calendar: {
      sameDay: '[Сёння ў] LT',
      nextDay: '[Заўтра ў] LT',
      lastDay: '[Учора ў] LT',
      nextWeek: function nextWeek() {
        return '[У] dddd [ў] LT';
      },
      lastWeek: function lastWeek() {
        switch (this.day()) {
          case 0:
          case 3:
          case 5:
          case 6:
            return '[У мінулую] dddd [ў] LT';

          case 1:
          case 2:
          case 4:
            return '[У мінулы] dddd [ў] LT';
        }
      },
      sameElse: 'L'
    },
    relativeTime: {
      future: 'праз %s',
      past: '%s таму',
      s: 'некалькі секунд',
      m: relativeTimeWithPlural,
      mm: relativeTimeWithPlural,
      h: relativeTimeWithPlural,
      hh: relativeTimeWithPlural,
      d: 'дзень',
      dd: relativeTimeWithPlural,
      M: 'месяц',
      MM: relativeTimeWithPlural,
      y: 'год',
      yy: relativeTimeWithPlural
    },
    meridiemParse: /ночы|раніцы|дня|вечара/,
    isPM: function isPM(input) {
      return /^(дня|вечара)$/.test(input);
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 4) {
        return 'ночы';
      } else if (hour < 12) {
        return 'раніцы';
      } else if (hour < 17) {
        return 'дня';
      } else {
        return 'вечара';
      }
    },
    dayOfMonthOrdinalParse: /\d{1,2}-(і|ы|га)/,
    ordinal: function ordinal(number, period) {
      switch (period) {
        case 'M':
        case 'd':
        case 'DDD':
        case 'w':
        case 'W':
          return (number % 10 === 2 || number % 10 === 3) && number % 100 !== 12 && number % 100 !== 13 ? number + '-і' : number + '-ы';

        case 'D':
          return number + '-га';

        default:
          return number;
      }
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 7 // The week that contains Jan 7th is the first week of the year.

    }
  });
  return be;
});

/***/ }),

/***/ "./node_modules/moment/locale/bg.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/bg.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Bulgarian [bg]
//! author : Krasen Borisov : https://github.com/kraz
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var bg = moment.defineLocale('bg', {
    months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),
    monthsShort: 'яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),
    weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),
    weekdaysShort: 'нед_пон_вто_сря_чет_пет_съб'.split('_'),
    weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
    longDateFormat: {
      LT: 'H:mm',
      LTS: 'H:mm:ss',
      L: 'D.MM.YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY H:mm',
      LLLL: 'dddd, D MMMM YYYY H:mm'
    },
    calendar: {
      sameDay: '[Днес в] LT',
      nextDay: '[Утре в] LT',
      nextWeek: 'dddd [в] LT',
      lastDay: '[Вчера в] LT',
      lastWeek: function lastWeek() {
        switch (this.day()) {
          case 0:
          case 3:
          case 6:
            return '[Миналата] dddd [в] LT';

          case 1:
          case 2:
          case 4:
          case 5:
            return '[Миналия] dddd [в] LT';
        }
      },
      sameElse: 'L'
    },
    relativeTime: {
      future: 'след %s',
      past: 'преди %s',
      s: 'няколко секунди',
      ss: '%d секунди',
      m: 'минута',
      mm: '%d минути',
      h: 'час',
      hh: '%d часа',
      d: 'ден',
      dd: '%d дена',
      w: 'седмица',
      ww: '%d седмици',
      M: 'месец',
      MM: '%d месеца',
      y: 'година',
      yy: '%d години'
    },
    dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
    ordinal: function ordinal(number) {
      var lastDigit = number % 10,
          last2Digits = number % 100;

      if (number === 0) {
        return number + '-ев';
      } else if (last2Digits === 0) {
        return number + '-ен';
      } else if (last2Digits > 10 && last2Digits < 20) {
        return number + '-ти';
      } else if (lastDigit === 1) {
        return number + '-ви';
      } else if (lastDigit === 2) {
        return number + '-ри';
      } else if (lastDigit === 7 || lastDigit === 8) {
        return number + '-ми';
      } else {
        return number + '-ти';
      }
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 7 // The week that contains Jan 7th is the first week of the year.

    }
  });
  return bg;
});

/***/ }),

/***/ "./node_modules/moment/locale/bm.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/bm.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Bambara [bm]
//! author : Estelle Comment : https://github.com/estellecomment
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var bm = moment.defineLocale('bm', {
    months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split('_'),
    monthsShort: 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),
    weekdays: 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),
    weekdaysShort: 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),
    weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'MMMM [tile] D [san] YYYY',
      LLL: 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',
      LLLL: 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm'
    },
    calendar: {
      sameDay: '[Bi lɛrɛ] LT',
      nextDay: '[Sini lɛrɛ] LT',
      nextWeek: 'dddd [don lɛrɛ] LT',
      lastDay: '[Kunu lɛrɛ] LT',
      lastWeek: 'dddd [tɛmɛnen lɛrɛ] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s kɔnɔ',
      past: 'a bɛ %s bɔ',
      s: 'sanga dama dama',
      ss: 'sekondi %d',
      m: 'miniti kelen',
      mm: 'miniti %d',
      h: 'lɛrɛ kelen',
      hh: 'lɛrɛ %d',
      d: 'tile kelen',
      dd: 'tile %d',
      M: 'kalo kelen',
      MM: 'kalo %d',
      y: 'san kelen',
      yy: 'san %d'
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return bm;
});

/***/ }),

/***/ "./node_modules/moment/locale/bn-bd.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/bn-bd.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Bengali (Bangladesh) [bn-bd]
//! author : Asraf Hossain Patoary : https://github.com/ashwoolford
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var symbolMap = {
    1: '১',
    2: '২',
    3: '৩',
    4: '৪',
    5: '৫',
    6: '৬',
    7: '৭',
    8: '৮',
    9: '৯',
    0: '০'
  },
      numberMap = {
    '১': '1',
    '২': '2',
    '৩': '3',
    '৪': '4',
    '৫': '5',
    '৬': '6',
    '৭': '7',
    '৮': '8',
    '৯': '9',
    '০': '0'
  };
  var bnBd = moment.defineLocale('bn-bd', {
    months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),
    monthsShort: 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),
    weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),
    weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),
    weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),
    longDateFormat: {
      LT: 'A h:mm সময়',
      LTS: 'A h:mm:ss সময়',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY, A h:mm সময়',
      LLLL: 'dddd, D MMMM YYYY, A h:mm সময়'
    },
    calendar: {
      sameDay: '[আজ] LT',
      nextDay: '[আগামীকাল] LT',
      nextWeek: 'dddd, LT',
      lastDay: '[গতকাল] LT',
      lastWeek: '[গত] dddd, LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s পরে',
      past: '%s আগে',
      s: 'কয়েক সেকেন্ড',
      ss: '%d সেকেন্ড',
      m: 'এক মিনিট',
      mm: '%d মিনিট',
      h: 'এক ঘন্টা',
      hh: '%d ঘন্টা',
      d: 'এক দিন',
      dd: '%d দিন',
      M: 'এক মাস',
      MM: '%d মাস',
      y: 'এক বছর',
      yy: '%d বছর'
    },
    preparse: function preparse(string) {
      return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {
        return numberMap[match];
      });
    },
    postformat: function postformat(string) {
      return string.replace(/\d/g, function (match) {
        return symbolMap[match];
      });
    },
    meridiemParse: /রাত|ভোর|সকাল|দুপুর|বিকাল|সন্ধ্যা|রাত/,
    meridiemHour: function meridiemHour(hour, meridiem) {
      if (hour === 12) {
        hour = 0;
      }

      if (meridiem === 'রাত') {
        return hour < 4 ? hour : hour + 12;
      } else if (meridiem === 'ভোর') {
        return hour;
      } else if (meridiem === 'সকাল') {
        return hour;
      } else if (meridiem === 'দুপুর') {
        return hour >= 3 ? hour : hour + 12;
      } else if (meridiem === 'বিকাল') {
        return hour + 12;
      } else if (meridiem === 'সন্ধ্যা') {
        return hour + 12;
      }
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 4) {
        return 'রাত';
      } else if (hour < 6) {
        return 'ভোর';
      } else if (hour < 12) {
        return 'সকাল';
      } else if (hour < 15) {
        return 'দুপুর';
      } else if (hour < 18) {
        return 'বিকাল';
      } else if (hour < 20) {
        return 'সন্ধ্যা';
      } else {
        return 'রাত';
      }
    },
    week: {
      dow: 0,
      // Sunday is the first day of the week.
      doy: 6 // The week that contains Jan 6th is the first week of the year.

    }
  });
  return bnBd;
});

/***/ }),

/***/ "./node_modules/moment/locale/bn.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/bn.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Bengali [bn]
//! author : Kaushik Gandhi : https://github.com/kaushikgandhi
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var symbolMap = {
    1: '১',
    2: '২',
    3: '৩',
    4: '৪',
    5: '৫',
    6: '৬',
    7: '৭',
    8: '৮',
    9: '৯',
    0: '০'
  },
      numberMap = {
    '১': '1',
    '২': '2',
    '৩': '3',
    '৪': '4',
    '৫': '5',
    '৬': '6',
    '৭': '7',
    '৮': '8',
    '৯': '9',
    '০': '0'
  };
  var bn = moment.defineLocale('bn', {
    months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),
    monthsShort: 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),
    weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),
    weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),
    weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),
    longDateFormat: {
      LT: 'A h:mm সময়',
      LTS: 'A h:mm:ss সময়',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY, A h:mm সময়',
      LLLL: 'dddd, D MMMM YYYY, A h:mm সময়'
    },
    calendar: {
      sameDay: '[আজ] LT',
      nextDay: '[আগামীকাল] LT',
      nextWeek: 'dddd, LT',
      lastDay: '[গতকাল] LT',
      lastWeek: '[গত] dddd, LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s পরে',
      past: '%s আগে',
      s: 'কয়েক সেকেন্ড',
      ss: '%d সেকেন্ড',
      m: 'এক মিনিট',
      mm: '%d মিনিট',
      h: 'এক ঘন্টা',
      hh: '%d ঘন্টা',
      d: 'এক দিন',
      dd: '%d দিন',
      M: 'এক মাস',
      MM: '%d মাস',
      y: 'এক বছর',
      yy: '%d বছর'
    },
    preparse: function preparse(string) {
      return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {
        return numberMap[match];
      });
    },
    postformat: function postformat(string) {
      return string.replace(/\d/g, function (match) {
        return symbolMap[match];
      });
    },
    meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,
    meridiemHour: function meridiemHour(hour, meridiem) {
      if (hour === 12) {
        hour = 0;
      }

      if (meridiem === 'রাত' && hour >= 4 || meridiem === 'দুপুর' && hour < 5 || meridiem === 'বিকাল') {
        return hour + 12;
      } else {
        return hour;
      }
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 4) {
        return 'রাত';
      } else if (hour < 10) {
        return 'সকাল';
      } else if (hour < 17) {
        return 'দুপুর';
      } else if (hour < 20) {
        return 'বিকাল';
      } else {
        return 'রাত';
      }
    },
    week: {
      dow: 0,
      // Sunday is the first day of the week.
      doy: 6 // The week that contains Jan 6th is the first week of the year.

    }
  });
  return bn;
});

/***/ }),

/***/ "./node_modules/moment/locale/bo.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/bo.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Tibetan [bo]
//! author : Thupten N. Chakrishar : https://github.com/vajradog
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var symbolMap = {
    1: '༡',
    2: '༢',
    3: '༣',
    4: '༤',
    5: '༥',
    6: '༦',
    7: '༧',
    8: '༨',
    9: '༩',
    0: '༠'
  },
      numberMap = {
    '༡': '1',
    '༢': '2',
    '༣': '3',
    '༤': '4',
    '༥': '5',
    '༦': '6',
    '༧': '7',
    '༨': '8',
    '༩': '9',
    '༠': '0'
  };
  var bo = moment.defineLocale('bo', {
    months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),
    monthsShort: 'ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12'.split('_'),
    monthsShortRegex: /^(ཟླ་\d{1,2})/,
    monthsParseExact: true,
    weekdays: 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),
    weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),
    weekdaysMin: 'ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན'.split('_'),
    longDateFormat: {
      LT: 'A h:mm',
      LTS: 'A h:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY, A h:mm',
      LLLL: 'dddd, D MMMM YYYY, A h:mm'
    },
    calendar: {
      sameDay: '[དི་རིང] LT',
      nextDay: '[སང་ཉིན] LT',
      nextWeek: '[བདུན་ཕྲག་རྗེས་མ], LT',
      lastDay: '[ཁ་སང] LT',
      lastWeek: '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s ལ་',
      past: '%s སྔན་ལ',
      s: 'ལམ་སང',
      ss: '%d སྐར་ཆ།',
      m: 'སྐར་མ་གཅིག',
      mm: '%d སྐར་མ',
      h: 'ཆུ་ཚོད་གཅིག',
      hh: '%d ཆུ་ཚོད',
      d: 'ཉིན་གཅིག',
      dd: '%d ཉིན་',
      M: 'ཟླ་བ་གཅིག',
      MM: '%d ཟླ་བ',
      y: 'ལོ་གཅིག',
      yy: '%d ལོ'
    },
    preparse: function preparse(string) {
      return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {
        return numberMap[match];
      });
    },
    postformat: function postformat(string) {
      return string.replace(/\d/g, function (match) {
        return symbolMap[match];
      });
    },
    meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,
    meridiemHour: function meridiemHour(hour, meridiem) {
      if (hour === 12) {
        hour = 0;
      }

      if (meridiem === 'མཚན་མོ' && hour >= 4 || meridiem === 'ཉིན་གུང' && hour < 5 || meridiem === 'དགོང་དག') {
        return hour + 12;
      } else {
        return hour;
      }
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 4) {
        return 'མཚན་མོ';
      } else if (hour < 10) {
        return 'ཞོགས་ཀས';
      } else if (hour < 17) {
        return 'ཉིན་གུང';
      } else if (hour < 20) {
        return 'དགོང་དག';
      } else {
        return 'མཚན་མོ';
      }
    },
    week: {
      dow: 0,
      // Sunday is the first day of the week.
      doy: 6 // The week that contains Jan 6th is the first week of the year.

    }
  });
  return bo;
});

/***/ }),

/***/ "./node_modules/moment/locale/br.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/br.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Breton [br]
//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  function relativeTimeWithMutation(number, withoutSuffix, key) {
    var format = {
      mm: 'munutenn',
      MM: 'miz',
      dd: 'devezh'
    };
    return number + ' ' + mutation(format[key], number);
  }

  function specialMutationForYears(number) {
    switch (lastNumber(number)) {
      case 1:
      case 3:
      case 4:
      case 5:
      case 9:
        return number + ' bloaz';

      default:
        return number + ' vloaz';
    }
  }

  function lastNumber(number) {
    if (number > 9) {
      return lastNumber(number % 10);
    }

    return number;
  }

  function mutation(text, number) {
    if (number === 2) {
      return softMutation(text);
    }

    return text;
  }

  function softMutation(text) {
    var mutationTable = {
      m: 'v',
      b: 'v',
      d: 'z'
    };

    if (mutationTable[text.charAt(0)] === undefined) {
      return text;
    }

    return mutationTable[text.charAt(0)] + text.substring(1);
  }

  var monthsParse = [/^gen/i, /^c[ʼ\']hwe/i, /^meu/i, /^ebr/i, /^mae/i, /^(mez|eve)/i, /^gou/i, /^eos/i, /^gwe/i, /^her/i, /^du/i, /^ker/i],
      monthsRegex = /^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,
      monthsStrictRegex = /^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,
      monthsShortStrictRegex = /^(gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,
      fullWeekdaysParse = [/^sul/i, /^lun/i, /^meurzh/i, /^merc[ʼ\']her/i, /^yaou/i, /^gwener/i, /^sadorn/i],
      shortWeekdaysParse = [/^Sul/i, /^Lun/i, /^Meu/i, /^Mer/i, /^Yao/i, /^Gwe/i, /^Sad/i],
      minWeekdaysParse = [/^Su/i, /^Lu/i, /^Me([^r]|$)/i, /^Mer/i, /^Ya/i, /^Gw/i, /^Sa/i];
  var br = moment.defineLocale('br', {
    months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),
    monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),
    weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'),
    weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),
    weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),
    weekdaysParse: minWeekdaysParse,
    fullWeekdaysParse: fullWeekdaysParse,
    shortWeekdaysParse: shortWeekdaysParse,
    minWeekdaysParse: minWeekdaysParse,
    monthsRegex: monthsRegex,
    monthsShortRegex: monthsRegex,
    monthsStrictRegex: monthsStrictRegex,
    monthsShortStrictRegex: monthsShortStrictRegex,
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D [a viz] MMMM YYYY',
      LLL: 'D [a viz] MMMM YYYY HH:mm',
      LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[Hiziv da] LT',
      nextDay: '[Warcʼhoazh da] LT',
      nextWeek: 'dddd [da] LT',
      lastDay: '[Decʼh da] LT',
      lastWeek: 'dddd [paset da] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'a-benn %s',
      past: '%s ʼzo',
      s: 'un nebeud segondennoù',
      ss: '%d eilenn',
      m: 'ur vunutenn',
      mm: relativeTimeWithMutation,
      h: 'un eur',
      hh: '%d eur',
      d: 'un devezh',
      dd: relativeTimeWithMutation,
      M: 'ur miz',
      MM: relativeTimeWithMutation,
      y: 'ur bloaz',
      yy: specialMutationForYears
    },
    dayOfMonthOrdinalParse: /\d{1,2}(añ|vet)/,
    ordinal: function ordinal(number) {
      var output = number === 1 ? 'añ' : 'vet';
      return number + output;
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    },
    meridiemParse: /a.m.|g.m./,
    // goude merenn | a-raok merenn
    isPM: function isPM(token) {
      return token === 'g.m.';
    },
    meridiem: function meridiem(hour, minute, isLower) {
      return hour < 12 ? 'a.m.' : 'g.m.';
    }
  });
  return br;
});

/***/ }),

/***/ "./node_modules/moment/locale/bs.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/bs.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Bosnian [bs]
//! author : Nedim Cholich : https://github.com/frontyard
//! based on (hr) translation by Bojan Marković
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  function translate(number, withoutSuffix, key) {
    var result = number + ' ';

    switch (key) {
      case 'ss':
        if (number === 1) {
          result += 'sekunda';
        } else if (number === 2 || number === 3 || number === 4) {
          result += 'sekunde';
        } else {
          result += 'sekundi';
        }

        return result;

      case 'm':
        return withoutSuffix ? 'jedna minuta' : 'jedne minute';

      case 'mm':
        if (number === 1) {
          result += 'minuta';
        } else if (number === 2 || number === 3 || number === 4) {
          result += 'minute';
        } else {
          result += 'minuta';
        }

        return result;

      case 'h':
        return withoutSuffix ? 'jedan sat' : 'jednog sata';

      case 'hh':
        if (number === 1) {
          result += 'sat';
        } else if (number === 2 || number === 3 || number === 4) {
          result += 'sata';
        } else {
          result += 'sati';
        }

        return result;

      case 'dd':
        if (number === 1) {
          result += 'dan';
        } else {
          result += 'dana';
        }

        return result;

      case 'MM':
        if (number === 1) {
          result += 'mjesec';
        } else if (number === 2 || number === 3 || number === 4) {
          result += 'mjeseca';
        } else {
          result += 'mjeseci';
        }

        return result;

      case 'yy':
        if (number === 1) {
          result += 'godina';
        } else if (number === 2 || number === 3 || number === 4) {
          result += 'godine';
        } else {
          result += 'godina';
        }

        return result;
    }
  }

  var bs = moment.defineLocale('bs', {
    months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),
    monthsShort: 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),
    monthsParseExact: true,
    weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
    weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
    weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'H:mm',
      LTS: 'H:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'D. MMMM YYYY',
      LLL: 'D. MMMM YYYY H:mm',
      LLLL: 'dddd, D. MMMM YYYY H:mm'
    },
    calendar: {
      sameDay: '[danas u] LT',
      nextDay: '[sutra u] LT',
      nextWeek: function nextWeek() {
        switch (this.day()) {
          case 0:
            return '[u] [nedjelju] [u] LT';

          case 3:
            return '[u] [srijedu] [u] LT';

          case 6:
            return '[u] [subotu] [u] LT';

          case 1:
          case 2:
          case 4:
          case 5:
            return '[u] dddd [u] LT';
        }
      },
      lastDay: '[jučer u] LT',
      lastWeek: function lastWeek() {
        switch (this.day()) {
          case 0:
          case 3:
            return '[prošlu] dddd [u] LT';

          case 6:
            return '[prošle] [subote] [u] LT';

          case 1:
          case 2:
          case 4:
          case 5:
            return '[prošli] dddd [u] LT';
        }
      },
      sameElse: 'L'
    },
    relativeTime: {
      future: 'za %s',
      past: 'prije %s',
      s: 'par sekundi',
      ss: translate,
      m: translate,
      mm: translate,
      h: translate,
      hh: translate,
      d: 'dan',
      dd: translate,
      M: 'mjesec',
      MM: translate,
      y: 'godinu',
      yy: translate
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 7 // The week that contains Jan 7th is the first week of the year.

    }
  });
  return bs;
});

/***/ }),

/***/ "./node_modules/moment/locale/ca.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ca.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Catalan [ca]
//! author : Juan G. Hurtado : https://github.com/juanghurtado
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var ca = moment.defineLocale('ca', {
    months: {
      standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),
      format: "de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split('_'),
      isFormat: /D[oD]?(\s)+MMMM/
    },
    monthsShort: 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split('_'),
    monthsParseExact: true,
    weekdays: 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),
    weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),
    weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'H:mm',
      LTS: 'H:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM [de] YYYY',
      ll: 'D MMM YYYY',
      LLL: 'D MMMM [de] YYYY [a les] H:mm',
      lll: 'D MMM YYYY, H:mm',
      LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',
      llll: 'ddd D MMM YYYY, H:mm'
    },
    calendar: {
      sameDay: function sameDay() {
        return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
      },
      nextDay: function nextDay() {
        return '[demà a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
      },
      nextWeek: function nextWeek() {
        return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
      },
      lastDay: function lastDay() {
        return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
      },
      lastWeek: function lastWeek() {
        return '[el] dddd [passat a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
      },
      sameElse: 'L'
    },
    relativeTime: {
      future: "d'aquí %s",
      past: 'fa %s',
      s: 'uns segons',
      ss: '%d segons',
      m: 'un minut',
      mm: '%d minuts',
      h: 'una hora',
      hh: '%d hores',
      d: 'un dia',
      dd: '%d dies',
      M: 'un mes',
      MM: '%d mesos',
      y: 'un any',
      yy: '%d anys'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/,
    ordinal: function ordinal(number, period) {
      var output = number === 1 ? 'r' : number === 2 ? 'n' : number === 3 ? 'r' : number === 4 ? 't' : 'è';

      if (period === 'w' || period === 'W') {
        output = 'a';
      }

      return number + output;
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return ca;
});

/***/ }),

/***/ "./node_modules/moment/locale/cs.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/cs.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Czech [cs]
//! author : petrbela : https://github.com/petrbela
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'),
      monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'),
      monthsParse = [/^led/i, /^úno/i, /^bře/i, /^dub/i, /^kvě/i, /^(čvn|červen$|června)/i, /^(čvc|červenec|července)/i, /^srp/i, /^zář/i, /^říj/i, /^lis/i, /^pro/i],
      // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.
  // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.
  monthsRegex = /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;

  function plural(n) {
    return n > 1 && n < 5 && ~~(n / 10) !== 1;
  }

  function translate(number, withoutSuffix, key, isFuture) {
    var result = number + ' ';

    switch (key) {
      case 's':
        // a few seconds / in a few seconds / a few seconds ago
        return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami';

      case 'ss':
        // 9 seconds / in 9 seconds / 9 seconds ago
        if (withoutSuffix || isFuture) {
          return result + (plural(number) ? 'sekundy' : 'sekund');
        } else {
          return result + 'sekundami';
        }

      case 'm':
        // a minute / in a minute / a minute ago
        return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';

      case 'mm':
        // 9 minutes / in 9 minutes / 9 minutes ago
        if (withoutSuffix || isFuture) {
          return result + (plural(number) ? 'minuty' : 'minut');
        } else {
          return result + 'minutami';
        }

      case 'h':
        // an hour / in an hour / an hour ago
        return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';

      case 'hh':
        // 9 hours / in 9 hours / 9 hours ago
        if (withoutSuffix || isFuture) {
          return result + (plural(number) ? 'hodiny' : 'hodin');
        } else {
          return result + 'hodinami';
        }

      case 'd':
        // a day / in a day / a day ago
        return withoutSuffix || isFuture ? 'den' : 'dnem';

      case 'dd':
        // 9 days / in 9 days / 9 days ago
        if (withoutSuffix || isFuture) {
          return result + (plural(number) ? 'dny' : 'dní');
        } else {
          return result + 'dny';
        }

      case 'M':
        // a month / in a month / a month ago
        return withoutSuffix || isFuture ? 'měsíc' : 'měsícem';

      case 'MM':
        // 9 months / in 9 months / 9 months ago
        if (withoutSuffix || isFuture) {
          return result + (plural(number) ? 'měsíce' : 'měsíců');
        } else {
          return result + 'měsíci';
        }

      case 'y':
        // a year / in a year / a year ago
        return withoutSuffix || isFuture ? 'rok' : 'rokem';

      case 'yy':
        // 9 years / in 9 years / 9 years ago
        if (withoutSuffix || isFuture) {
          return result + (plural(number) ? 'roky' : 'let');
        } else {
          return result + 'lety';
        }

    }
  }

  var cs = moment.defineLocale('cs', {
    months: months,
    monthsShort: monthsShort,
    monthsRegex: monthsRegex,
    monthsShortRegex: monthsRegex,
    // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.
    // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.
    monthsStrictRegex: /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,
    monthsShortStrictRegex: /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,
    weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),
    weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'),
    weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'),
    longDateFormat: {
      LT: 'H:mm',
      LTS: 'H:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'D. MMMM YYYY',
      LLL: 'D. MMMM YYYY H:mm',
      LLLL: 'dddd D. MMMM YYYY H:mm',
      l: 'D. M. YYYY'
    },
    calendar: {
      sameDay: '[dnes v] LT',
      nextDay: '[zítra v] LT',
      nextWeek: function nextWeek() {
        switch (this.day()) {
          case 0:
            return '[v neděli v] LT';

          case 1:
          case 2:
            return '[v] dddd [v] LT';

          case 3:
            return '[ve středu v] LT';

          case 4:
            return '[ve čtvrtek v] LT';

          case 5:
            return '[v pátek v] LT';

          case 6:
            return '[v sobotu v] LT';
        }
      },
      lastDay: '[včera v] LT',
      lastWeek: function lastWeek() {
        switch (this.day()) {
          case 0:
            return '[minulou neděli v] LT';

          case 1:
          case 2:
            return '[minulé] dddd [v] LT';

          case 3:
            return '[minulou středu v] LT';

          case 4:
          case 5:
            return '[minulý] dddd [v] LT';

          case 6:
            return '[minulou sobotu v] LT';
        }
      },
      sameElse: 'L'
    },
    relativeTime: {
      future: 'za %s',
      past: 'před %s',
      s: translate,
      ss: translate,
      m: translate,
      mm: translate,
      h: translate,
      hh: translate,
      d: translate,
      dd: translate,
      M: translate,
      MM: translate,
      y: translate,
      yy: translate
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return cs;
});

/***/ }),

/***/ "./node_modules/moment/locale/cv.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/cv.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Chuvash [cv]
//! author : Anatoly Mironov : https://github.com/mirontoli
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var cv = moment.defineLocale('cv', {
    months: 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),
    monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),
    weekdays: 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),
    weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),
    weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD-MM-YYYY',
      LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',
      LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',
      LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'
    },
    calendar: {
      sameDay: '[Паян] LT [сехетре]',
      nextDay: '[Ыран] LT [сехетре]',
      lastDay: '[Ӗнер] LT [сехетре]',
      nextWeek: '[Ҫитес] dddd LT [сехетре]',
      lastWeek: '[Иртнӗ] dddd LT [сехетре]',
      sameElse: 'L'
    },
    relativeTime: {
      future: function future(output) {
        var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран';
        return output + affix;
      },
      past: '%s каялла',
      s: 'пӗр-ик ҫеккунт',
      ss: '%d ҫеккунт',
      m: 'пӗр минут',
      mm: '%d минут',
      h: 'пӗр сехет',
      hh: '%d сехет',
      d: 'пӗр кун',
      dd: '%d кун',
      M: 'пӗр уйӑх',
      MM: '%d уйӑх',
      y: 'пӗр ҫул',
      yy: '%d ҫул'
    },
    dayOfMonthOrdinalParse: /\d{1,2}-мӗш/,
    ordinal: '%d-мӗш',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 7 // The week that contains Jan 7th is the first week of the year.

    }
  });
  return cv;
});

/***/ }),

/***/ "./node_modules/moment/locale/cy.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/cy.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Welsh [cy]
//! author : Robert Allen : https://github.com/robgallen
//! author : https://github.com/ryangreaves
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var cy = moment.defineLocale('cy', {
    months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),
    monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),
    weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),
    weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),
    weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),
    weekdaysParseExact: true,
    // time formats are the same as en-gb
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd, D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[Heddiw am] LT',
      nextDay: '[Yfory am] LT',
      nextWeek: 'dddd [am] LT',
      lastDay: '[Ddoe am] LT',
      lastWeek: 'dddd [diwethaf am] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'mewn %s',
      past: '%s yn ôl',
      s: 'ychydig eiliadau',
      ss: '%d eiliad',
      m: 'munud',
      mm: '%d munud',
      h: 'awr',
      hh: '%d awr',
      d: 'diwrnod',
      dd: '%d diwrnod',
      M: 'mis',
      MM: '%d mis',
      y: 'blwyddyn',
      yy: '%d flynedd'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,
    // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh
    ordinal: function ordinal(number) {
      var b = number,
          output = '',
          lookup = ['', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed
      'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed
      ];

      if (b > 20) {
        if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {
          output = 'fed'; // not 30ain, 70ain or 90ain
        } else {
          output = 'ain';
        }
      } else if (b > 0) {
        output = lookup[b];
      }

      return number + output;
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return cy;
});

/***/ }),

/***/ "./node_modules/moment/locale/da.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/da.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Danish [da]
//! author : Ulrik Nielsen : https://github.com/mrbase
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var da = moment.defineLocale('da', {
    months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),
    monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
    weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
    weekdaysShort: 'søn_man_tir_ons_tor_fre_lør'.split('_'),
    weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'D. MMMM YYYY',
      LLL: 'D. MMMM YYYY HH:mm',
      LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm'
    },
    calendar: {
      sameDay: '[i dag kl.] LT',
      nextDay: '[i morgen kl.] LT',
      nextWeek: 'på dddd [kl.] LT',
      lastDay: '[i går kl.] LT',
      lastWeek: '[i] dddd[s kl.] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'om %s',
      past: '%s siden',
      s: 'få sekunder',
      ss: '%d sekunder',
      m: 'et minut',
      mm: '%d minutter',
      h: 'en time',
      hh: '%d timer',
      d: 'en dag',
      dd: '%d dage',
      M: 'en måned',
      MM: '%d måneder',
      y: 'et år',
      yy: '%d år'
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return da;
});

/***/ }),

/***/ "./node_modules/moment/locale/de-at.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/de-at.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : German (Austria) [de-at]
//! author : lluchs : https://github.com/lluchs
//! author: Menelion Elensúle: https://github.com/Oire
//! author : Martin Groller : https://github.com/MadMG
//! author : Mikolaj Dadela : https://github.com/mik01aj
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  function processRelativeTime(number, withoutSuffix, key, isFuture) {
    var format = {
      m: ['eine Minute', 'einer Minute'],
      h: ['eine Stunde', 'einer Stunde'],
      d: ['ein Tag', 'einem Tag'],
      dd: [number + ' Tage', number + ' Tagen'],
      w: ['eine Woche', 'einer Woche'],
      M: ['ein Monat', 'einem Monat'],
      MM: [number + ' Monate', number + ' Monaten'],
      y: ['ein Jahr', 'einem Jahr'],
      yy: [number + ' Jahre', number + ' Jahren']
    };
    return withoutSuffix ? format[key][0] : format[key][1];
  }

  var deAt = moment.defineLocale('de-at', {
    months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
    monthsShort: 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),
    monthsParseExact: true,
    weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
    weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
    weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'D. MMMM YYYY',
      LLL: 'D. MMMM YYYY HH:mm',
      LLLL: 'dddd, D. MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[heute um] LT [Uhr]',
      sameElse: 'L',
      nextDay: '[morgen um] LT [Uhr]',
      nextWeek: 'dddd [um] LT [Uhr]',
      lastDay: '[gestern um] LT [Uhr]',
      lastWeek: '[letzten] dddd [um] LT [Uhr]'
    },
    relativeTime: {
      future: 'in %s',
      past: 'vor %s',
      s: 'ein paar Sekunden',
      ss: '%d Sekunden',
      m: processRelativeTime,
      mm: '%d Minuten',
      h: processRelativeTime,
      hh: '%d Stunden',
      d: processRelativeTime,
      dd: processRelativeTime,
      w: processRelativeTime,
      ww: '%d Wochen',
      M: processRelativeTime,
      MM: processRelativeTime,
      y: processRelativeTime,
      yy: processRelativeTime
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return deAt;
});

/***/ }),

/***/ "./node_modules/moment/locale/de-ch.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/de-ch.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : German (Switzerland) [de-ch]
//! author : sschueller : https://github.com/sschueller
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  function processRelativeTime(number, withoutSuffix, key, isFuture) {
    var format = {
      m: ['eine Minute', 'einer Minute'],
      h: ['eine Stunde', 'einer Stunde'],
      d: ['ein Tag', 'einem Tag'],
      dd: [number + ' Tage', number + ' Tagen'],
      w: ['eine Woche', 'einer Woche'],
      M: ['ein Monat', 'einem Monat'],
      MM: [number + ' Monate', number + ' Monaten'],
      y: ['ein Jahr', 'einem Jahr'],
      yy: [number + ' Jahre', number + ' Jahren']
    };
    return withoutSuffix ? format[key][0] : format[key][1];
  }

  var deCh = moment.defineLocale('de-ch', {
    months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
    monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),
    monthsParseExact: true,
    weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
    weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
    weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'D. MMMM YYYY',
      LLL: 'D. MMMM YYYY HH:mm',
      LLLL: 'dddd, D. MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[heute um] LT [Uhr]',
      sameElse: 'L',
      nextDay: '[morgen um] LT [Uhr]',
      nextWeek: 'dddd [um] LT [Uhr]',
      lastDay: '[gestern um] LT [Uhr]',
      lastWeek: '[letzten] dddd [um] LT [Uhr]'
    },
    relativeTime: {
      future: 'in %s',
      past: 'vor %s',
      s: 'ein paar Sekunden',
      ss: '%d Sekunden',
      m: processRelativeTime,
      mm: '%d Minuten',
      h: processRelativeTime,
      hh: '%d Stunden',
      d: processRelativeTime,
      dd: processRelativeTime,
      w: processRelativeTime,
      ww: '%d Wochen',
      M: processRelativeTime,
      MM: processRelativeTime,
      y: processRelativeTime,
      yy: processRelativeTime
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return deCh;
});

/***/ }),

/***/ "./node_modules/moment/locale/de.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/de.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : German [de]
//! author : lluchs : https://github.com/lluchs
//! author: Menelion Elensúle: https://github.com/Oire
//! author : Mikolaj Dadela : https://github.com/mik01aj
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  function processRelativeTime(number, withoutSuffix, key, isFuture) {
    var format = {
      m: ['eine Minute', 'einer Minute'],
      h: ['eine Stunde', 'einer Stunde'],
      d: ['ein Tag', 'einem Tag'],
      dd: [number + ' Tage', number + ' Tagen'],
      w: ['eine Woche', 'einer Woche'],
      M: ['ein Monat', 'einem Monat'],
      MM: [number + ' Monate', number + ' Monaten'],
      y: ['ein Jahr', 'einem Jahr'],
      yy: [number + ' Jahre', number + ' Jahren']
    };
    return withoutSuffix ? format[key][0] : format[key][1];
  }

  var de = moment.defineLocale('de', {
    months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
    monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),
    monthsParseExact: true,
    weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
    weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
    weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'D. MMMM YYYY',
      LLL: 'D. MMMM YYYY HH:mm',
      LLLL: 'dddd, D. MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[heute um] LT [Uhr]',
      sameElse: 'L',
      nextDay: '[morgen um] LT [Uhr]',
      nextWeek: 'dddd [um] LT [Uhr]',
      lastDay: '[gestern um] LT [Uhr]',
      lastWeek: '[letzten] dddd [um] LT [Uhr]'
    },
    relativeTime: {
      future: 'in %s',
      past: 'vor %s',
      s: 'ein paar Sekunden',
      ss: '%d Sekunden',
      m: processRelativeTime,
      mm: '%d Minuten',
      h: processRelativeTime,
      hh: '%d Stunden',
      d: processRelativeTime,
      dd: processRelativeTime,
      w: processRelativeTime,
      ww: '%d Wochen',
      M: processRelativeTime,
      MM: processRelativeTime,
      y: processRelativeTime,
      yy: processRelativeTime
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return de;
});

/***/ }),

/***/ "./node_modules/moment/locale/dv.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/dv.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Maldivian [dv]
//! author : Jawish Hameed : https://github.com/jawish
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var months = ['ޖެނުއަރީ', 'ފެބްރުއަރީ', 'މާރިޗު', 'އޭޕްރީލު', 'މޭ', 'ޖޫން', 'ޖުލައި', 'އޯގަސްޓު', 'ސެޕްޓެމްބަރު', 'އޮކްޓޯބަރު', 'ނޮވެމްބަރު', 'ޑިސެމްބަރު'],
      weekdays = ['އާދިއްތަ', 'ހޯމަ', 'އަންގާރަ', 'ބުދަ', 'ބުރާސްފަތި', 'ހުކުރު', 'ހޮނިހިރު'];
  var dv = moment.defineLocale('dv', {
    months: months,
    monthsShort: months,
    weekdays: weekdays,
    weekdaysShort: weekdays,
    weekdaysMin: 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'D/M/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd D MMMM YYYY HH:mm'
    },
    meridiemParse: /މކ|މފ/,
    isPM: function isPM(input) {
      return 'މފ' === input;
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 12) {
        return 'މކ';
      } else {
        return 'މފ';
      }
    },
    calendar: {
      sameDay: '[މިއަދު] LT',
      nextDay: '[މާދަމާ] LT',
      nextWeek: 'dddd LT',
      lastDay: '[އިއްޔެ] LT',
      lastWeek: '[ފާއިތުވި] dddd LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'ތެރޭގައި %s',
      past: 'ކުރިން %s',
      s: 'ސިކުންތުކޮޅެއް',
      ss: 'd% ސިކުންތު',
      m: 'މިނިޓެއް',
      mm: 'މިނިޓު %d',
      h: 'ގަޑިއިރެއް',
      hh: 'ގަޑިއިރު %d',
      d: 'ދުވަހެއް',
      dd: 'ދުވަސް %d',
      M: 'މަހެއް',
      MM: 'މަސް %d',
      y: 'އަހަރެއް',
      yy: 'އަހަރު %d'
    },
    preparse: function preparse(string) {
      return string.replace(/،/g, ',');
    },
    postformat: function postformat(string) {
      return string.replace(/,/g, '،');
    },
    week: {
      dow: 7,
      // Sunday is the first day of the week.
      doy: 12 // The week that contains Jan 12th is the first week of the year.

    }
  });
  return dv;
});

/***/ }),

/***/ "./node_modules/moment/locale/el.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/el.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Greek [el]
//! author : Aggelos Karalias : https://github.com/mehiel
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  function isFunction(input) {
    return typeof Function !== 'undefined' && input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';
  }

  var el = moment.defineLocale('el', {
    monthsNominativeEl: 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),
    monthsGenitiveEl: 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'),
    months: function months(momentToFormat, format) {
      if (!momentToFormat) {
        return this._monthsNominativeEl;
      } else if (typeof format === 'string' && /D/.test(format.substring(0, format.indexOf('MMMM')))) {
        // if there is a day number before 'MMMM'
        return this._monthsGenitiveEl[momentToFormat.month()];
      } else {
        return this._monthsNominativeEl[momentToFormat.month()];
      }
    },
    monthsShort: 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),
    weekdays: 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'),
    weekdaysShort: 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),
    weekdaysMin: 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),
    meridiem: function meridiem(hours, minutes, isLower) {
      if (hours > 11) {
        return isLower ? 'μμ' : 'ΜΜ';
      } else {
        return isLower ? 'πμ' : 'ΠΜ';
      }
    },
    isPM: function isPM(input) {
      return (input + '').toLowerCase()[0] === 'μ';
    },
    meridiemParse: /[ΠΜ]\.?Μ?\.?/i,
    longDateFormat: {
      LT: 'h:mm A',
      LTS: 'h:mm:ss A',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY h:mm A',
      LLLL: 'dddd, D MMMM YYYY h:mm A'
    },
    calendarEl: {
      sameDay: '[Σήμερα {}] LT',
      nextDay: '[Αύριο {}] LT',
      nextWeek: 'dddd [{}] LT',
      lastDay: '[Χθες {}] LT',
      lastWeek: function lastWeek() {
        switch (this.day()) {
          case 6:
            return '[το προηγούμενο] dddd [{}] LT';

          default:
            return '[την προηγούμενη] dddd [{}] LT';
        }
      },
      sameElse: 'L'
    },
    calendar: function calendar(key, mom) {
      var output = this._calendarEl[key],
          hours = mom && mom.hours();

      if (isFunction(output)) {
        output = output.apply(mom);
      }

      return output.replace('{}', hours % 12 === 1 ? 'στη' : 'στις');
    },
    relativeTime: {
      future: 'σε %s',
      past: '%s πριν',
      s: 'λίγα δευτερόλεπτα',
      ss: '%d δευτερόλεπτα',
      m: 'ένα λεπτό',
      mm: '%d λεπτά',
      h: 'μία ώρα',
      hh: '%d ώρες',
      d: 'μία μέρα',
      dd: '%d μέρες',
      M: 'ένας μήνας',
      MM: '%d μήνες',
      y: 'ένας χρόνος',
      yy: '%d χρόνια'
    },
    dayOfMonthOrdinalParse: /\d{1,2}η/,
    ordinal: '%dη',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4st is the first week of the year.

    }
  });
  return el;
});

/***/ }),

/***/ "./node_modules/moment/locale/en-au.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/en-au.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : English (Australia) [en-au]
//! author : Jared Morse : https://github.com/jarcoal
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var enAu = moment.defineLocale('en-au', {
    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
    longDateFormat: {
      LT: 'h:mm A',
      LTS: 'h:mm:ss A',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY h:mm A',
      LLLL: 'dddd, D MMMM YYYY h:mm A'
    },
    calendar: {
      sameDay: '[Today at] LT',
      nextDay: '[Tomorrow at] LT',
      nextWeek: 'dddd [at] LT',
      lastDay: '[Yesterday at] LT',
      lastWeek: '[Last] dddd [at] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'in %s',
      past: '%s ago',
      s: 'a few seconds',
      ss: '%d seconds',
      m: 'a minute',
      mm: '%d minutes',
      h: 'an hour',
      hh: '%d hours',
      d: 'a day',
      dd: '%d days',
      M: 'a month',
      MM: '%d months',
      y: 'a year',
      yy: '%d years'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
    ordinal: function ordinal(number) {
      var b = number % 10,
          output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';
      return number + output;
    },
    week: {
      dow: 0,
      // Sunday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return enAu;
});

/***/ }),

/***/ "./node_modules/moment/locale/en-ca.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/en-ca.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : English (Canada) [en-ca]
//! author : Jonathan Abourbih : https://github.com/jonbca
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var enCa = moment.defineLocale('en-ca', {
    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
    longDateFormat: {
      LT: 'h:mm A',
      LTS: 'h:mm:ss A',
      L: 'YYYY-MM-DD',
      LL: 'MMMM D, YYYY',
      LLL: 'MMMM D, YYYY h:mm A',
      LLLL: 'dddd, MMMM D, YYYY h:mm A'
    },
    calendar: {
      sameDay: '[Today at] LT',
      nextDay: '[Tomorrow at] LT',
      nextWeek: 'dddd [at] LT',
      lastDay: '[Yesterday at] LT',
      lastWeek: '[Last] dddd [at] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'in %s',
      past: '%s ago',
      s: 'a few seconds',
      ss: '%d seconds',
      m: 'a minute',
      mm: '%d minutes',
      h: 'an hour',
      hh: '%d hours',
      d: 'a day',
      dd: '%d days',
      M: 'a month',
      MM: '%d months',
      y: 'a year',
      yy: '%d years'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
    ordinal: function ordinal(number) {
      var b = number % 10,
          output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';
      return number + output;
    }
  });
  return enCa;
});

/***/ }),

/***/ "./node_modules/moment/locale/en-gb.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/en-gb.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : English (United Kingdom) [en-gb]
//! author : Chris Gedrim : https://github.com/chrisgedrim
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var enGb = moment.defineLocale('en-gb', {
    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd, D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[Today at] LT',
      nextDay: '[Tomorrow at] LT',
      nextWeek: 'dddd [at] LT',
      lastDay: '[Yesterday at] LT',
      lastWeek: '[Last] dddd [at] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'in %s',
      past: '%s ago',
      s: 'a few seconds',
      ss: '%d seconds',
      m: 'a minute',
      mm: '%d minutes',
      h: 'an hour',
      hh: '%d hours',
      d: 'a day',
      dd: '%d days',
      M: 'a month',
      MM: '%d months',
      y: 'a year',
      yy: '%d years'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
    ordinal: function ordinal(number) {
      var b = number % 10,
          output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';
      return number + output;
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return enGb;
});

/***/ }),

/***/ "./node_modules/moment/locale/en-ie.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/en-ie.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : English (Ireland) [en-ie]
//! author : Chris Cartlidge : https://github.com/chriscartlidge
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var enIe = moment.defineLocale('en-ie', {
    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[Today at] LT',
      nextDay: '[Tomorrow at] LT',
      nextWeek: 'dddd [at] LT',
      lastDay: '[Yesterday at] LT',
      lastWeek: '[Last] dddd [at] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'in %s',
      past: '%s ago',
      s: 'a few seconds',
      ss: '%d seconds',
      m: 'a minute',
      mm: '%d minutes',
      h: 'an hour',
      hh: '%d hours',
      d: 'a day',
      dd: '%d days',
      M: 'a month',
      MM: '%d months',
      y: 'a year',
      yy: '%d years'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
    ordinal: function ordinal(number) {
      var b = number % 10,
          output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';
      return number + output;
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return enIe;
});

/***/ }),

/***/ "./node_modules/moment/locale/en-il.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/en-il.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : English (Israel) [en-il]
//! author : Chris Gedrim : https://github.com/chrisgedrim
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var enIl = moment.defineLocale('en-il', {
    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd, D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[Today at] LT',
      nextDay: '[Tomorrow at] LT',
      nextWeek: 'dddd [at] LT',
      lastDay: '[Yesterday at] LT',
      lastWeek: '[Last] dddd [at] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'in %s',
      past: '%s ago',
      s: 'a few seconds',
      ss: '%d seconds',
      m: 'a minute',
      mm: '%d minutes',
      h: 'an hour',
      hh: '%d hours',
      d: 'a day',
      dd: '%d days',
      M: 'a month',
      MM: '%d months',
      y: 'a year',
      yy: '%d years'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
    ordinal: function ordinal(number) {
      var b = number % 10,
          output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';
      return number + output;
    }
  });
  return enIl;
});

/***/ }),

/***/ "./node_modules/moment/locale/en-in.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/en-in.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : English (India) [en-in]
//! author : Jatin Agrawal : https://github.com/jatinag22
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var enIn = moment.defineLocale('en-in', {
    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
    longDateFormat: {
      LT: 'h:mm A',
      LTS: 'h:mm:ss A',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY h:mm A',
      LLLL: 'dddd, D MMMM YYYY h:mm A'
    },
    calendar: {
      sameDay: '[Today at] LT',
      nextDay: '[Tomorrow at] LT',
      nextWeek: 'dddd [at] LT',
      lastDay: '[Yesterday at] LT',
      lastWeek: '[Last] dddd [at] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'in %s',
      past: '%s ago',
      s: 'a few seconds',
      ss: '%d seconds',
      m: 'a minute',
      mm: '%d minutes',
      h: 'an hour',
      hh: '%d hours',
      d: 'a day',
      dd: '%d days',
      M: 'a month',
      MM: '%d months',
      y: 'a year',
      yy: '%d years'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
    ordinal: function ordinal(number) {
      var b = number % 10,
          output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';
      return number + output;
    },
    week: {
      dow: 0,
      // Sunday is the first day of the week.
      doy: 6 // The week that contains Jan 1st is the first week of the year.

    }
  });
  return enIn;
});

/***/ }),

/***/ "./node_modules/moment/locale/en-nz.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/en-nz.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : English (New Zealand) [en-nz]
//! author : Luke McGregor : https://github.com/lukemcgregor
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var enNz = moment.defineLocale('en-nz', {
    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
    longDateFormat: {
      LT: 'h:mm A',
      LTS: 'h:mm:ss A',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY h:mm A',
      LLLL: 'dddd, D MMMM YYYY h:mm A'
    },
    calendar: {
      sameDay: '[Today at] LT',
      nextDay: '[Tomorrow at] LT',
      nextWeek: 'dddd [at] LT',
      lastDay: '[Yesterday at] LT',
      lastWeek: '[Last] dddd [at] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'in %s',
      past: '%s ago',
      s: 'a few seconds',
      ss: '%d seconds',
      m: 'a minute',
      mm: '%d minutes',
      h: 'an hour',
      hh: '%d hours',
      d: 'a day',
      dd: '%d days',
      M: 'a month',
      MM: '%d months',
      y: 'a year',
      yy: '%d years'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
    ordinal: function ordinal(number) {
      var b = number % 10,
          output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';
      return number + output;
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return enNz;
});

/***/ }),

/***/ "./node_modules/moment/locale/en-sg.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/en-sg.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : English (Singapore) [en-sg]
//! author : Matthew Castrillon-Madrigal : https://github.com/techdimension
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var enSg = moment.defineLocale('en-sg', {
    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd, D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[Today at] LT',
      nextDay: '[Tomorrow at] LT',
      nextWeek: 'dddd [at] LT',
      lastDay: '[Yesterday at] LT',
      lastWeek: '[Last] dddd [at] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'in %s',
      past: '%s ago',
      s: 'a few seconds',
      ss: '%d seconds',
      m: 'a minute',
      mm: '%d minutes',
      h: 'an hour',
      hh: '%d hours',
      d: 'a day',
      dd: '%d days',
      M: 'a month',
      MM: '%d months',
      y: 'a year',
      yy: '%d years'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
    ordinal: function ordinal(number) {
      var b = number % 10,
          output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';
      return number + output;
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return enSg;
});

/***/ }),

/***/ "./node_modules/moment/locale/eo.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/eo.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Esperanto [eo]
//! author : Colin Dean : https://github.com/colindean
//! author : Mia Nordentoft Imperatori : https://github.com/miestasmia
//! comment : miestasmia corrected the translation by colindean
//! comment : Vivakvo corrected the translation by colindean and miestasmia
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var eo = moment.defineLocale('eo', {
    months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'),
    monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aŭg_sept_okt_nov_dec'.split('_'),
    weekdays: 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),
    weekdaysShort: 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),
    weekdaysMin: 'di_lu_ma_me_ĵa_ve_sa'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'YYYY-MM-DD',
      LL: '[la] D[-an de] MMMM, YYYY',
      LLL: '[la] D[-an de] MMMM, YYYY HH:mm',
      LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm',
      llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm'
    },
    meridiemParse: /[ap]\.t\.m/i,
    isPM: function isPM(input) {
      return input.charAt(0).toLowerCase() === 'p';
    },
    meridiem: function meridiem(hours, minutes, isLower) {
      if (hours > 11) {
        return isLower ? 'p.t.m.' : 'P.T.M.';
      } else {
        return isLower ? 'a.t.m.' : 'A.T.M.';
      }
    },
    calendar: {
      sameDay: '[Hodiaŭ je] LT',
      nextDay: '[Morgaŭ je] LT',
      nextWeek: 'dddd[n je] LT',
      lastDay: '[Hieraŭ je] LT',
      lastWeek: '[pasintan] dddd[n je] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'post %s',
      past: 'antaŭ %s',
      s: 'kelkaj sekundoj',
      ss: '%d sekundoj',
      m: 'unu minuto',
      mm: '%d minutoj',
      h: 'unu horo',
      hh: '%d horoj',
      d: 'unu tago',
      //ne 'diurno', ĉar estas uzita por proksimumo
      dd: '%d tagoj',
      M: 'unu monato',
      MM: '%d monatoj',
      y: 'unu jaro',
      yy: '%d jaroj'
    },
    dayOfMonthOrdinalParse: /\d{1,2}a/,
    ordinal: '%da',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 7 // The week that contains Jan 7th is the first week of the year.

    }
  });
  return eo;
});

/***/ }),

/***/ "./node_modules/moment/locale/es-do.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/es-do.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Spanish (Dominican Republic) [es-do]
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),
      _monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
      monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i],
      monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;

  var esDo = moment.defineLocale('es-do', {
    months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
    monthsShort: function monthsShort(m, format) {
      if (!m) {
        return monthsShortDot;
      } else if (/-MMM-/.test(format)) {
        return _monthsShort[m.month()];
      } else {
        return monthsShortDot[m.month()];
      }
    },
    monthsRegex: monthsRegex,
    monthsShortRegex: monthsRegex,
    monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
    monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,
    weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
    weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
    weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'h:mm A',
      LTS: 'h:mm:ss A',
      L: 'DD/MM/YYYY',
      LL: 'D [de] MMMM [de] YYYY',
      LLL: 'D [de] MMMM [de] YYYY h:mm A',
      LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A'
    },
    calendar: {
      sameDay: function sameDay() {
        return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
      },
      nextDay: function nextDay() {
        return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
      },
      nextWeek: function nextWeek() {
        return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
      },
      lastDay: function lastDay() {
        return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
      },
      lastWeek: function lastWeek() {
        return '[el] dddd [pasado a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
      },
      sameElse: 'L'
    },
    relativeTime: {
      future: 'en %s',
      past: 'hace %s',
      s: 'unos segundos',
      ss: '%d segundos',
      m: 'un minuto',
      mm: '%d minutos',
      h: 'una hora',
      hh: '%d horas',
      d: 'un día',
      dd: '%d días',
      w: 'una semana',
      ww: '%d semanas',
      M: 'un mes',
      MM: '%d meses',
      y: 'un año',
      yy: '%d años'
    },
    dayOfMonthOrdinalParse: /\d{1,2}º/,
    ordinal: '%dº',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return esDo;
});

/***/ }),

/***/ "./node_modules/moment/locale/es-mx.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/es-mx.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Spanish (Mexico) [es-mx]
//! author : JC Franco : https://github.com/jcfranco
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),
      _monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
      monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i],
      monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;

  var esMx = moment.defineLocale('es-mx', {
    months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
    monthsShort: function monthsShort(m, format) {
      if (!m) {
        return monthsShortDot;
      } else if (/-MMM-/.test(format)) {
        return _monthsShort[m.month()];
      } else {
        return monthsShortDot[m.month()];
      }
    },
    monthsRegex: monthsRegex,
    monthsShortRegex: monthsRegex,
    monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
    monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,
    weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
    weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
    weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'H:mm',
      LTS: 'H:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D [de] MMMM [de] YYYY',
      LLL: 'D [de] MMMM [de] YYYY H:mm',
      LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm'
    },
    calendar: {
      sameDay: function sameDay() {
        return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
      },
      nextDay: function nextDay() {
        return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
      },
      nextWeek: function nextWeek() {
        return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
      },
      lastDay: function lastDay() {
        return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
      },
      lastWeek: function lastWeek() {
        return '[el] dddd [pasado a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
      },
      sameElse: 'L'
    },
    relativeTime: {
      future: 'en %s',
      past: 'hace %s',
      s: 'unos segundos',
      ss: '%d segundos',
      m: 'un minuto',
      mm: '%d minutos',
      h: 'una hora',
      hh: '%d horas',
      d: 'un día',
      dd: '%d días',
      w: 'una semana',
      ww: '%d semanas',
      M: 'un mes',
      MM: '%d meses',
      y: 'un año',
      yy: '%d años'
    },
    dayOfMonthOrdinalParse: /\d{1,2}º/,
    ordinal: '%dº',
    week: {
      dow: 0,
      // Sunday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    },
    invalidDate: 'Fecha inválida'
  });
  return esMx;
});

/***/ }),

/***/ "./node_modules/moment/locale/es-us.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/es-us.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Spanish (United States) [es-us]
//! author : bustta : https://github.com/bustta
//! author : chrisrodz : https://github.com/chrisrodz
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),
      _monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
      monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i],
      monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;

  var esUs = moment.defineLocale('es-us', {
    months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
    monthsShort: function monthsShort(m, format) {
      if (!m) {
        return monthsShortDot;
      } else if (/-MMM-/.test(format)) {
        return _monthsShort[m.month()];
      } else {
        return monthsShortDot[m.month()];
      }
    },
    monthsRegex: monthsRegex,
    monthsShortRegex: monthsRegex,
    monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
    monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,
    weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
    weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
    weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'h:mm A',
      LTS: 'h:mm:ss A',
      L: 'MM/DD/YYYY',
      LL: 'D [de] MMMM [de] YYYY',
      LLL: 'D [de] MMMM [de] YYYY h:mm A',
      LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A'
    },
    calendar: {
      sameDay: function sameDay() {
        return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
      },
      nextDay: function nextDay() {
        return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
      },
      nextWeek: function nextWeek() {
        return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
      },
      lastDay: function lastDay() {
        return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
      },
      lastWeek: function lastWeek() {
        return '[el] dddd [pasado a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
      },
      sameElse: 'L'
    },
    relativeTime: {
      future: 'en %s',
      past: 'hace %s',
      s: 'unos segundos',
      ss: '%d segundos',
      m: 'un minuto',
      mm: '%d minutos',
      h: 'una hora',
      hh: '%d horas',
      d: 'un día',
      dd: '%d días',
      w: 'una semana',
      ww: '%d semanas',
      M: 'un mes',
      MM: '%d meses',
      y: 'un año',
      yy: '%d años'
    },
    dayOfMonthOrdinalParse: /\d{1,2}º/,
    ordinal: '%dº',
    week: {
      dow: 0,
      // Sunday is the first day of the week.
      doy: 6 // The week that contains Jan 6th is the first week of the year.

    }
  });
  return esUs;
});

/***/ }),

/***/ "./node_modules/moment/locale/es.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/es.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Spanish [es]
//! author : Julio Napurí : https://github.com/julionc
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),
      _monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
      monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i],
      monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;

  var es = moment.defineLocale('es', {
    months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
    monthsShort: function monthsShort(m, format) {
      if (!m) {
        return monthsShortDot;
      } else if (/-MMM-/.test(format)) {
        return _monthsShort[m.month()];
      } else {
        return monthsShortDot[m.month()];
      }
    },
    monthsRegex: monthsRegex,
    monthsShortRegex: monthsRegex,
    monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
    monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,
    weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
    weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
    weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'H:mm',
      LTS: 'H:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D [de] MMMM [de] YYYY',
      LLL: 'D [de] MMMM [de] YYYY H:mm',
      LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm'
    },
    calendar: {
      sameDay: function sameDay() {
        return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
      },
      nextDay: function nextDay() {
        return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
      },
      nextWeek: function nextWeek() {
        return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
      },
      lastDay: function lastDay() {
        return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
      },
      lastWeek: function lastWeek() {
        return '[el] dddd [pasado a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
      },
      sameElse: 'L'
    },
    relativeTime: {
      future: 'en %s',
      past: 'hace %s',
      s: 'unos segundos',
      ss: '%d segundos',
      m: 'un minuto',
      mm: '%d minutos',
      h: 'una hora',
      hh: '%d horas',
      d: 'un día',
      dd: '%d días',
      w: 'una semana',
      ww: '%d semanas',
      M: 'un mes',
      MM: '%d meses',
      y: 'un año',
      yy: '%d años'
    },
    dayOfMonthOrdinalParse: /\d{1,2}º/,
    ordinal: '%dº',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    },
    invalidDate: 'Fecha inválida'
  });
  return es;
});

/***/ }),

/***/ "./node_modules/moment/locale/et.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/et.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Estonian [et]
//! author : Henry Kehlmann : https://github.com/madhenry
//! improvements : Illimar Tambek : https://github.com/ragulka
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  function processRelativeTime(number, withoutSuffix, key, isFuture) {
    var format = {
      s: ['mõne sekundi', 'mõni sekund', 'paar sekundit'],
      ss: [number + 'sekundi', number + 'sekundit'],
      m: ['ühe minuti', 'üks minut'],
      mm: [number + ' minuti', number + ' minutit'],
      h: ['ühe tunni', 'tund aega', 'üks tund'],
      hh: [number + ' tunni', number + ' tundi'],
      d: ['ühe päeva', 'üks päev'],
      M: ['kuu aja', 'kuu aega', 'üks kuu'],
      MM: [number + ' kuu', number + ' kuud'],
      y: ['ühe aasta', 'aasta', 'üks aasta'],
      yy: [number + ' aasta', number + ' aastat']
    };

    if (withoutSuffix) {
      return format[key][2] ? format[key][2] : format[key][1];
    }

    return isFuture ? format[key][0] : format[key][1];
  }

  var et = moment.defineLocale('et', {
    months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'),
    monthsShort: 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),
    weekdays: 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'),
    weekdaysShort: 'P_E_T_K_N_R_L'.split('_'),
    weekdaysMin: 'P_E_T_K_N_R_L'.split('_'),
    longDateFormat: {
      LT: 'H:mm',
      LTS: 'H:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'D. MMMM YYYY',
      LLL: 'D. MMMM YYYY H:mm',
      LLLL: 'dddd, D. MMMM YYYY H:mm'
    },
    calendar: {
      sameDay: '[Täna,] LT',
      nextDay: '[Homme,] LT',
      nextWeek: '[Järgmine] dddd LT',
      lastDay: '[Eile,] LT',
      lastWeek: '[Eelmine] dddd LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s pärast',
      past: '%s tagasi',
      s: processRelativeTime,
      ss: processRelativeTime,
      m: processRelativeTime,
      mm: processRelativeTime,
      h: processRelativeTime,
      hh: processRelativeTime,
      d: processRelativeTime,
      dd: '%d päeva',
      M: processRelativeTime,
      MM: processRelativeTime,
      y: processRelativeTime,
      yy: processRelativeTime
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return et;
});

/***/ }),

/***/ "./node_modules/moment/locale/eu.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/eu.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Basque [eu]
//! author : Eneko Illarramendi : https://github.com/eillarra
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var eu = moment.defineLocale('eu', {
    months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),
    monthsShort: 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),
    monthsParseExact: true,
    weekdays: 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),
    weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'),
    weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'YYYY-MM-DD',
      LL: 'YYYY[ko] MMMM[ren] D[a]',
      LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm',
      LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',
      l: 'YYYY-M-D',
      ll: 'YYYY[ko] MMM D[a]',
      lll: 'YYYY[ko] MMM D[a] HH:mm',
      llll: 'ddd, YYYY[ko] MMM D[a] HH:mm'
    },
    calendar: {
      sameDay: '[gaur] LT[etan]',
      nextDay: '[bihar] LT[etan]',
      nextWeek: 'dddd LT[etan]',
      lastDay: '[atzo] LT[etan]',
      lastWeek: '[aurreko] dddd LT[etan]',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s barru',
      past: 'duela %s',
      s: 'segundo batzuk',
      ss: '%d segundo',
      m: 'minutu bat',
      mm: '%d minutu',
      h: 'ordu bat',
      hh: '%d ordu',
      d: 'egun bat',
      dd: '%d egun',
      M: 'hilabete bat',
      MM: '%d hilabete',
      y: 'urte bat',
      yy: '%d urte'
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 7 // The week that contains Jan 7th is the first week of the year.

    }
  });
  return eu;
});

/***/ }),

/***/ "./node_modules/moment/locale/fa.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/fa.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Persian [fa]
//! author : Ebrahim Byagowi : https://github.com/ebraminio
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var symbolMap = {
    1: '۱',
    2: '۲',
    3: '۳',
    4: '۴',
    5: '۵',
    6: '۶',
    7: '۷',
    8: '۸',
    9: '۹',
    0: '۰'
  },
      numberMap = {
    '۱': '1',
    '۲': '2',
    '۳': '3',
    '۴': '4',
    '۵': '5',
    '۶': '6',
    '۷': '7',
    '۸': '8',
    '۹': '9',
    '۰': '0'
  };
  var fa = moment.defineLocale('fa', {
    months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
    monthsShort: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
    weekdays: "\u06CC\u06A9\u200C\u0634\u0646\u0628\u0647_\u062F\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200C\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067E\u0646\u062C\u200C\u0634\u0646\u0628\u0647_\u062C\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split('_'),
    weekdaysShort: "\u06CC\u06A9\u200C\u0634\u0646\u0628\u0647_\u062F\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200C\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067E\u0646\u062C\u200C\u0634\u0646\u0628\u0647_\u062C\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split('_'),
    weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd, D MMMM YYYY HH:mm'
    },
    meridiemParse: /قبل از ظهر|بعد از ظهر/,
    isPM: function isPM(input) {
      return /بعد از ظهر/.test(input);
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 12) {
        return 'قبل از ظهر';
      } else {
        return 'بعد از ظهر';
      }
    },
    calendar: {
      sameDay: '[امروز ساعت] LT',
      nextDay: '[فردا ساعت] LT',
      nextWeek: 'dddd [ساعت] LT',
      lastDay: '[دیروز ساعت] LT',
      lastWeek: 'dddd [پیش] [ساعت] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'در %s',
      past: '%s پیش',
      s: 'چند ثانیه',
      ss: '%d ثانیه',
      m: 'یک دقیقه',
      mm: '%d دقیقه',
      h: 'یک ساعت',
      hh: '%d ساعت',
      d: 'یک روز',
      dd: '%d روز',
      M: 'یک ماه',
      MM: '%d ماه',
      y: 'یک سال',
      yy: '%d سال'
    },
    preparse: function preparse(string) {
      return string.replace(/[۰-۹]/g, function (match) {
        return numberMap[match];
      }).replace(/،/g, ',');
    },
    postformat: function postformat(string) {
      return string.replace(/\d/g, function (match) {
        return symbolMap[match];
      }).replace(/,/g, '،');
    },
    dayOfMonthOrdinalParse: /\d{1,2}م/,
    ordinal: '%dم',
    week: {
      dow: 6,
      // Saturday is the first day of the week.
      doy: 12 // The week that contains Jan 12th is the first week of the year.

    }
  });
  return fa;
});

/***/ }),

/***/ "./node_modules/moment/locale/fi.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/fi.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Finnish [fi]
//! author : Tarmo Aidantausta : https://github.com/bleadof
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '),
      numbersFuture = ['nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden', numbersPast[7], numbersPast[8], numbersPast[9]];

  function translate(number, withoutSuffix, key, isFuture) {
    var result = '';

    switch (key) {
      case 's':
        return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';

      case 'ss':
        result = isFuture ? 'sekunnin' : 'sekuntia';
        break;

      case 'm':
        return isFuture ? 'minuutin' : 'minuutti';

      case 'mm':
        result = isFuture ? 'minuutin' : 'minuuttia';
        break;

      case 'h':
        return isFuture ? 'tunnin' : 'tunti';

      case 'hh':
        result = isFuture ? 'tunnin' : 'tuntia';
        break;

      case 'd':
        return isFuture ? 'päivän' : 'päivä';

      case 'dd':
        result = isFuture ? 'päivän' : 'päivää';
        break;

      case 'M':
        return isFuture ? 'kuukauden' : 'kuukausi';

      case 'MM':
        result = isFuture ? 'kuukauden' : 'kuukautta';
        break;

      case 'y':
        return isFuture ? 'vuoden' : 'vuosi';

      case 'yy':
        result = isFuture ? 'vuoden' : 'vuotta';
        break;
    }

    result = verbalNumber(number, isFuture) + ' ' + result;
    return result;
  }

  function verbalNumber(number, isFuture) {
    return number < 10 ? isFuture ? numbersFuture[number] : numbersPast[number] : number;
  }

  var fi = moment.defineLocale('fi', {
    months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),
    monthsShort: 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),
    weekdays: 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),
    weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'),
    weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'),
    longDateFormat: {
      LT: 'HH.mm',
      LTS: 'HH.mm.ss',
      L: 'DD.MM.YYYY',
      LL: 'Do MMMM[ta] YYYY',
      LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm',
      LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',
      l: 'D.M.YYYY',
      ll: 'Do MMM YYYY',
      lll: 'Do MMM YYYY, [klo] HH.mm',
      llll: 'ddd, Do MMM YYYY, [klo] HH.mm'
    },
    calendar: {
      sameDay: '[tänään] [klo] LT',
      nextDay: '[huomenna] [klo] LT',
      nextWeek: 'dddd [klo] LT',
      lastDay: '[eilen] [klo] LT',
      lastWeek: '[viime] dddd[na] [klo] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s päästä',
      past: '%s sitten',
      s: translate,
      ss: translate,
      m: translate,
      mm: translate,
      h: translate,
      hh: translate,
      d: translate,
      dd: translate,
      M: translate,
      MM: translate,
      y: translate,
      yy: translate
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return fi;
});

/***/ }),

/***/ "./node_modules/moment/locale/fil.js":
/*!*******************************************!*\
  !*** ./node_modules/moment/locale/fil.js ***!
  \*******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Filipino [fil]
//! author : Dan Hagman : https://github.com/hagmandan
//! author : Matthew Co : https://github.com/matthewdeeco
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var fil = moment.defineLocale('fil', {
    months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),
    monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
    weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),
    weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
    weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'MM/D/YYYY',
      LL: 'MMMM D, YYYY',
      LLL: 'MMMM D, YYYY HH:mm',
      LLLL: 'dddd, MMMM DD, YYYY HH:mm'
    },
    calendar: {
      sameDay: 'LT [ngayong araw]',
      nextDay: '[Bukas ng] LT',
      nextWeek: 'LT [sa susunod na] dddd',
      lastDay: 'LT [kahapon]',
      lastWeek: 'LT [noong nakaraang] dddd',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'sa loob ng %s',
      past: '%s ang nakalipas',
      s: 'ilang segundo',
      ss: '%d segundo',
      m: 'isang minuto',
      mm: '%d minuto',
      h: 'isang oras',
      hh: '%d oras',
      d: 'isang araw',
      dd: '%d araw',
      M: 'isang buwan',
      MM: '%d buwan',
      y: 'isang taon',
      yy: '%d taon'
    },
    dayOfMonthOrdinalParse: /\d{1,2}/,
    ordinal: function ordinal(number) {
      return number;
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return fil;
});

/***/ }),

/***/ "./node_modules/moment/locale/fo.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/fo.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Faroese [fo]
//! author : Ragnar Johannesen : https://github.com/ragnar123
//! author : Kristian Sakarisson : https://github.com/sakarisson
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var fo = moment.defineLocale('fo', {
    months: 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
    monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
    weekdays: 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),
    weekdaysShort: 'sun_mán_týs_mik_hós_frí_ley'.split('_'),
    weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd D. MMMM, YYYY HH:mm'
    },
    calendar: {
      sameDay: '[Í dag kl.] LT',
      nextDay: '[Í morgin kl.] LT',
      nextWeek: 'dddd [kl.] LT',
      lastDay: '[Í gjár kl.] LT',
      lastWeek: '[síðstu] dddd [kl] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'um %s',
      past: '%s síðani',
      s: 'fá sekund',
      ss: '%d sekundir',
      m: 'ein minuttur',
      mm: '%d minuttir',
      h: 'ein tími',
      hh: '%d tímar',
      d: 'ein dagur',
      dd: '%d dagar',
      M: 'ein mánaður',
      MM: '%d mánaðir',
      y: 'eitt ár',
      yy: '%d ár'
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return fo;
});

/***/ }),

/***/ "./node_modules/moment/locale/fr-ca.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/fr-ca.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : French (Canada) [fr-ca]
//! author : Jonathan Abourbih : https://github.com/jonbca
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var frCa = moment.defineLocale('fr-ca', {
    months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
    monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
    monthsParseExact: true,
    weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
    weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
    weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'YYYY-MM-DD',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[Aujourd’hui à] LT',
      nextDay: '[Demain à] LT',
      nextWeek: 'dddd [à] LT',
      lastDay: '[Hier à] LT',
      lastWeek: 'dddd [dernier à] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'dans %s',
      past: 'il y a %s',
      s: 'quelques secondes',
      ss: '%d secondes',
      m: 'une minute',
      mm: '%d minutes',
      h: 'une heure',
      hh: '%d heures',
      d: 'un jour',
      dd: '%d jours',
      M: 'un mois',
      MM: '%d mois',
      y: 'un an',
      yy: '%d ans'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(er|e)/,
    ordinal: function ordinal(number, period) {
      switch (period) {
        // Words with masculine grammatical gender: mois, trimestre, jour
        default:
        case 'M':
        case 'Q':
        case 'D':
        case 'DDD':
        case 'd':
          return number + (number === 1 ? 'er' : 'e');
        // Words with feminine grammatical gender: semaine

        case 'w':
        case 'W':
          return number + (number === 1 ? 're' : 'e');
      }
    }
  });
  return frCa;
});

/***/ }),

/***/ "./node_modules/moment/locale/fr-ch.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/fr-ch.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : French (Switzerland) [fr-ch]
//! author : Gaspard Bucher : https://github.com/gaspard
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var frCh = moment.defineLocale('fr-ch', {
    months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
    monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
    monthsParseExact: true,
    weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
    weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
    weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[Aujourd’hui à] LT',
      nextDay: '[Demain à] LT',
      nextWeek: 'dddd [à] LT',
      lastDay: '[Hier à] LT',
      lastWeek: 'dddd [dernier à] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'dans %s',
      past: 'il y a %s',
      s: 'quelques secondes',
      ss: '%d secondes',
      m: 'une minute',
      mm: '%d minutes',
      h: 'une heure',
      hh: '%d heures',
      d: 'un jour',
      dd: '%d jours',
      M: 'un mois',
      MM: '%d mois',
      y: 'un an',
      yy: '%d ans'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(er|e)/,
    ordinal: function ordinal(number, period) {
      switch (period) {
        // Words with masculine grammatical gender: mois, trimestre, jour
        default:
        case 'M':
        case 'Q':
        case 'D':
        case 'DDD':
        case 'd':
          return number + (number === 1 ? 'er' : 'e');
        // Words with feminine grammatical gender: semaine

        case 'w':
        case 'W':
          return number + (number === 1 ? 're' : 'e');
      }
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return frCh;
});

/***/ }),

/***/ "./node_modules/moment/locale/fr.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/fr.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : French [fr]
//! author : John Fischer : https://github.com/jfroffice
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var monthsStrictRegex = /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,
      monthsShortStrictRegex = /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?)/i,
      monthsRegex = /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,
      monthsParse = [/^janv/i, /^févr/i, /^mars/i, /^avr/i, /^mai/i, /^juin/i, /^juil/i, /^août/i, /^sept/i, /^oct/i, /^nov/i, /^déc/i];
  var fr = moment.defineLocale('fr', {
    months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
    monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
    monthsRegex: monthsRegex,
    monthsShortRegex: monthsRegex,
    monthsStrictRegex: monthsStrictRegex,
    monthsShortStrictRegex: monthsShortStrictRegex,
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,
    weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
    weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
    weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[Aujourd’hui à] LT',
      nextDay: '[Demain à] LT',
      nextWeek: 'dddd [à] LT',
      lastDay: '[Hier à] LT',
      lastWeek: 'dddd [dernier à] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'dans %s',
      past: 'il y a %s',
      s: 'quelques secondes',
      ss: '%d secondes',
      m: 'une minute',
      mm: '%d minutes',
      h: 'une heure',
      hh: '%d heures',
      d: 'un jour',
      dd: '%d jours',
      w: 'une semaine',
      ww: '%d semaines',
      M: 'un mois',
      MM: '%d mois',
      y: 'un an',
      yy: '%d ans'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(er|)/,
    ordinal: function ordinal(number, period) {
      switch (period) {
        // TODO: Return 'e' when day of month > 1. Move this case inside
        // block for masculine words below.
        // See https://github.com/moment/moment/issues/3375
        case 'D':
          return number + (number === 1 ? 'er' : '');
        // Words with masculine grammatical gender: mois, trimestre, jour

        default:
        case 'M':
        case 'Q':
        case 'DDD':
        case 'd':
          return number + (number === 1 ? 'er' : 'e');
        // Words with feminine grammatical gender: semaine

        case 'w':
        case 'W':
          return number + (number === 1 ? 're' : 'e');
      }
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return fr;
});

/***/ }),

/***/ "./node_modules/moment/locale/fy.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/fy.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Frisian [fy]
//! author : Robin van der Vliet : https://github.com/robin0van0der0v
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),
      monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');
  var fy = moment.defineLocale('fy', {
    months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'),
    monthsShort: function monthsShort(m, format) {
      if (!m) {
        return monthsShortWithDots;
      } else if (/-MMM-/.test(format)) {
        return monthsShortWithoutDots[m.month()];
      } else {
        return monthsShortWithDots[m.month()];
      }
    },
    monthsParseExact: true,
    weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),
    weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'),
    weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD-MM-YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[hjoed om] LT',
      nextDay: '[moarn om] LT',
      nextWeek: 'dddd [om] LT',
      lastDay: '[juster om] LT',
      lastWeek: '[ôfrûne] dddd [om] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'oer %s',
      past: '%s lyn',
      s: 'in pear sekonden',
      ss: '%d sekonden',
      m: 'ien minút',
      mm: '%d minuten',
      h: 'ien oere',
      hh: '%d oeren',
      d: 'ien dei',
      dd: '%d dagen',
      M: 'ien moanne',
      MM: '%d moannen',
      y: 'ien jier',
      yy: '%d jierren'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
    ordinal: function ordinal(number) {
      return number + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de');
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return fy;
});

/***/ }),

/***/ "./node_modules/moment/locale/ga.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ga.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Irish or Irish Gaelic [ga]
//! author : André Silva : https://github.com/askpt
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var months = ['Eanáir', 'Feabhra', 'Márta', 'Aibreán', 'Bealtaine', 'Meitheamh', 'Iúil', 'Lúnasa', 'Meán Fómhair', 'Deireadh Fómhair', 'Samhain', 'Nollaig'],
      monthsShort = ['Ean', 'Feabh', 'Márt', 'Aib', 'Beal', 'Meith', 'Iúil', 'Lún', 'M.F.', 'D.F.', 'Samh', 'Noll'],
      weekdays = ['Dé Domhnaigh', 'Dé Luain', 'Dé Máirt', 'Dé Céadaoin', 'Déardaoin', 'Dé hAoine', 'Dé Sathairn'],
      weekdaysShort = ['Domh', 'Luan', 'Máirt', 'Céad', 'Déar', 'Aoine', 'Sath'],
      weekdaysMin = ['Do', 'Lu', 'Má', 'Cé', 'Dé', 'A', 'Sa'];
  var ga = moment.defineLocale('ga', {
    months: months,
    monthsShort: monthsShort,
    monthsParseExact: true,
    weekdays: weekdays,
    weekdaysShort: weekdaysShort,
    weekdaysMin: weekdaysMin,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd, D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[Inniu ag] LT',
      nextDay: '[Amárach ag] LT',
      nextWeek: 'dddd [ag] LT',
      lastDay: '[Inné ag] LT',
      lastWeek: 'dddd [seo caite] [ag] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'i %s',
      past: '%s ó shin',
      s: 'cúpla soicind',
      ss: '%d soicind',
      m: 'nóiméad',
      mm: '%d nóiméad',
      h: 'uair an chloig',
      hh: '%d uair an chloig',
      d: 'lá',
      dd: '%d lá',
      M: 'mí',
      MM: '%d míonna',
      y: 'bliain',
      yy: '%d bliain'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/,
    ordinal: function ordinal(number) {
      var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
      return number + output;
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return ga;
});

/***/ }),

/***/ "./node_modules/moment/locale/gd.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/gd.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Scottish Gaelic [gd]
//! author : Jon Ashdown : https://github.com/jonashdown
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var months = ['Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd'],
      monthsShort = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'],
      weekdays = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne'],
      weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'],
      weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];
  var gd = moment.defineLocale('gd', {
    months: months,
    monthsShort: monthsShort,
    monthsParseExact: true,
    weekdays: weekdays,
    weekdaysShort: weekdaysShort,
    weekdaysMin: weekdaysMin,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd, D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[An-diugh aig] LT',
      nextDay: '[A-màireach aig] LT',
      nextWeek: 'dddd [aig] LT',
      lastDay: '[An-dè aig] LT',
      lastWeek: 'dddd [seo chaidh] [aig] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'ann an %s',
      past: 'bho chionn %s',
      s: 'beagan diogan',
      ss: '%d diogan',
      m: 'mionaid',
      mm: '%d mionaidean',
      h: 'uair',
      hh: '%d uairean',
      d: 'latha',
      dd: '%d latha',
      M: 'mìos',
      MM: '%d mìosan',
      y: 'bliadhna',
      yy: '%d bliadhna'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/,
    ordinal: function ordinal(number) {
      var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
      return number + output;
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return gd;
});

/***/ }),

/***/ "./node_modules/moment/locale/gl.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/gl.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Galician [gl]
//! author : Juan G. Hurtado : https://github.com/juanghurtado
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var gl = moment.defineLocale('gl', {
    months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'),
    monthsShort: 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'),
    monthsParseExact: true,
    weekdays: 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),
    weekdaysShort: 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),
    weekdaysMin: 'do_lu_ma_mé_xo_ve_sá'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'H:mm',
      LTS: 'H:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D [de] MMMM [de] YYYY',
      LLL: 'D [de] MMMM [de] YYYY H:mm',
      LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm'
    },
    calendar: {
      sameDay: function sameDay() {
        return '[hoxe ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';
      },
      nextDay: function nextDay() {
        return '[mañá ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';
      },
      nextWeek: function nextWeek() {
        return 'dddd [' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT';
      },
      lastDay: function lastDay() {
        return '[onte ' + (this.hours() !== 1 ? 'á' : 'a') + '] LT';
      },
      lastWeek: function lastWeek() {
        return '[o] dddd [pasado ' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT';
      },
      sameElse: 'L'
    },
    relativeTime: {
      future: function future(str) {
        if (str.indexOf('un') === 0) {
          return 'n' + str;
        }

        return 'en ' + str;
      },
      past: 'hai %s',
      s: 'uns segundos',
      ss: '%d segundos',
      m: 'un minuto',
      mm: '%d minutos',
      h: 'unha hora',
      hh: '%d horas',
      d: 'un día',
      dd: '%d días',
      M: 'un mes',
      MM: '%d meses',
      y: 'un ano',
      yy: '%d anos'
    },
    dayOfMonthOrdinalParse: /\d{1,2}º/,
    ordinal: '%dº',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return gl;
});

/***/ }),

/***/ "./node_modules/moment/locale/gom-deva.js":
/*!************************************************!*\
  !*** ./node_modules/moment/locale/gom-deva.js ***!
  \************************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Konkani Devanagari script [gom-deva]
//! author : The Discoverer : https://github.com/WikiDiscoverer
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  function processRelativeTime(number, withoutSuffix, key, isFuture) {
    var format = {
      s: ['थोडया सॅकंडांनी', 'थोडे सॅकंड'],
      ss: [number + ' सॅकंडांनी', number + ' सॅकंड'],
      m: ['एका मिणटान', 'एक मिनूट'],
      mm: [number + ' मिणटांनी', number + ' मिणटां'],
      h: ['एका वरान', 'एक वर'],
      hh: [number + ' वरांनी', number + ' वरां'],
      d: ['एका दिसान', 'एक दीस'],
      dd: [number + ' दिसांनी', number + ' दीस'],
      M: ['एका म्हयन्यान', 'एक म्हयनो'],
      MM: [number + ' म्हयन्यानी', number + ' म्हयने'],
      y: ['एका वर्सान', 'एक वर्स'],
      yy: [number + ' वर्सांनी', number + ' वर्सां']
    };
    return isFuture ? format[key][0] : format[key][1];
  }

  var gomDeva = moment.defineLocale('gom-deva', {
    months: {
      standalone: 'जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),
      format: 'जानेवारीच्या_फेब्रुवारीच्या_मार्चाच्या_एप्रीलाच्या_मेयाच्या_जूनाच्या_जुलयाच्या_ऑगस्टाच्या_सप्टेंबराच्या_ऑक्टोबराच्या_नोव्हेंबराच्या_डिसेंबराच्या'.split('_'),
      isFormat: /MMMM(\s)+D[oD]?/
    },
    monthsShort: 'जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),
    monthsParseExact: true,
    weekdays: 'आयतार_सोमार_मंगळार_बुधवार_बिरेस्तार_सुक्रार_शेनवार'.split('_'),
    weekdaysShort: 'आयत._सोम._मंगळ._बुध._ब्रेस्त._सुक्र._शेन.'.split('_'),
    weekdaysMin: 'आ_सो_मं_बु_ब्रे_सु_शे'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'A h:mm [वाजतां]',
      LTS: 'A h:mm:ss [वाजतां]',
      L: 'DD-MM-YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY A h:mm [वाजतां]',
      LLLL: 'dddd, MMMM Do, YYYY, A h:mm [वाजतां]',
      llll: 'ddd, D MMM YYYY, A h:mm [वाजतां]'
    },
    calendar: {
      sameDay: '[आयज] LT',
      nextDay: '[फाल्यां] LT',
      nextWeek: '[फुडलो] dddd[,] LT',
      lastDay: '[काल] LT',
      lastWeek: '[फाटलो] dddd[,] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s',
      past: '%s आदीं',
      s: processRelativeTime,
      ss: processRelativeTime,
      m: processRelativeTime,
      mm: processRelativeTime,
      h: processRelativeTime,
      hh: processRelativeTime,
      d: processRelativeTime,
      dd: processRelativeTime,
      M: processRelativeTime,
      MM: processRelativeTime,
      y: processRelativeTime,
      yy: processRelativeTime
    },
    dayOfMonthOrdinalParse: /\d{1,2}(वेर)/,
    ordinal: function ordinal(number, period) {
      switch (period) {
        // the ordinal 'वेर' only applies to day of the month
        case 'D':
          return number + 'वेर';

        default:
        case 'M':
        case 'Q':
        case 'DDD':
        case 'd':
        case 'w':
        case 'W':
          return number;
      }
    },
    week: {
      dow: 0,
      // Sunday is the first day of the week
      doy: 3 // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)

    },
    meridiemParse: /राती|सकाळीं|दनपारां|सांजे/,
    meridiemHour: function meridiemHour(hour, meridiem) {
      if (hour === 12) {
        hour = 0;
      }

      if (meridiem === 'राती') {
        return hour < 4 ? hour : hour + 12;
      } else if (meridiem === 'सकाळीं') {
        return hour;
      } else if (meridiem === 'दनपारां') {
        return hour > 12 ? hour : hour + 12;
      } else if (meridiem === 'सांजे') {
        return hour + 12;
      }
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 4) {
        return 'राती';
      } else if (hour < 12) {
        return 'सकाळीं';
      } else if (hour < 16) {
        return 'दनपारां';
      } else if (hour < 20) {
        return 'सांजे';
      } else {
        return 'राती';
      }
    }
  });
  return gomDeva;
});

/***/ }),

/***/ "./node_modules/moment/locale/gom-latn.js":
/*!************************************************!*\
  !*** ./node_modules/moment/locale/gom-latn.js ***!
  \************************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Konkani Latin script [gom-latn]
//! author : The Discoverer : https://github.com/WikiDiscoverer
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  function processRelativeTime(number, withoutSuffix, key, isFuture) {
    var format = {
      s: ['thoddea sekondamni', 'thodde sekond'],
      ss: [number + ' sekondamni', number + ' sekond'],
      m: ['eka mintan', 'ek minut'],
      mm: [number + ' mintamni', number + ' mintam'],
      h: ['eka voran', 'ek vor'],
      hh: [number + ' voramni', number + ' voram'],
      d: ['eka disan', 'ek dis'],
      dd: [number + ' disamni', number + ' dis'],
      M: ['eka mhoinean', 'ek mhoino'],
      MM: [number + ' mhoineamni', number + ' mhoine'],
      y: ['eka vorsan', 'ek voros'],
      yy: [number + ' vorsamni', number + ' vorsam']
    };
    return isFuture ? format[key][0] : format[key][1];
  }

  var gomLatn = moment.defineLocale('gom-latn', {
    months: {
      standalone: 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'),
      format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split('_'),
      isFormat: /MMMM(\s)+D[oD]?/
    },
    monthsShort: 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),
    monthsParseExact: true,
    weekdays: "Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split('_'),
    weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),
    weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'A h:mm [vazta]',
      LTS: 'A h:mm:ss [vazta]',
      L: 'DD-MM-YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY A h:mm [vazta]',
      LLLL: 'dddd, MMMM Do, YYYY, A h:mm [vazta]',
      llll: 'ddd, D MMM YYYY, A h:mm [vazta]'
    },
    calendar: {
      sameDay: '[Aiz] LT',
      nextDay: '[Faleam] LT',
      nextWeek: '[Fuddlo] dddd[,] LT',
      lastDay: '[Kal] LT',
      lastWeek: '[Fattlo] dddd[,] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s',
      past: '%s adim',
      s: processRelativeTime,
      ss: processRelativeTime,
      m: processRelativeTime,
      mm: processRelativeTime,
      h: processRelativeTime,
      hh: processRelativeTime,
      d: processRelativeTime,
      dd: processRelativeTime,
      M: processRelativeTime,
      MM: processRelativeTime,
      y: processRelativeTime,
      yy: processRelativeTime
    },
    dayOfMonthOrdinalParse: /\d{1,2}(er)/,
    ordinal: function ordinal(number, period) {
      switch (period) {
        // the ordinal 'er' only applies to day of the month
        case 'D':
          return number + 'er';

        default:
        case 'M':
        case 'Q':
        case 'DDD':
        case 'd':
        case 'w':
        case 'W':
          return number;
      }
    },
    week: {
      dow: 0,
      // Sunday is the first day of the week
      doy: 3 // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)

    },
    meridiemParse: /rati|sokallim|donparam|sanje/,
    meridiemHour: function meridiemHour(hour, meridiem) {
      if (hour === 12) {
        hour = 0;
      }

      if (meridiem === 'rati') {
        return hour < 4 ? hour : hour + 12;
      } else if (meridiem === 'sokallim') {
        return hour;
      } else if (meridiem === 'donparam') {
        return hour > 12 ? hour : hour + 12;
      } else if (meridiem === 'sanje') {
        return hour + 12;
      }
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 4) {
        return 'rati';
      } else if (hour < 12) {
        return 'sokallim';
      } else if (hour < 16) {
        return 'donparam';
      } else if (hour < 20) {
        return 'sanje';
      } else {
        return 'rati';
      }
    }
  });
  return gomLatn;
});

/***/ }),

/***/ "./node_modules/moment/locale/gu.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/gu.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Gujarati [gu]
//! author : Kaushik Thanki : https://github.com/Kaushik1987
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var symbolMap = {
    1: '૧',
    2: '૨',
    3: '૩',
    4: '૪',
    5: '૫',
    6: '૬',
    7: '૭',
    8: '૮',
    9: '૯',
    0: '૦'
  },
      numberMap = {
    '૧': '1',
    '૨': '2',
    '૩': '3',
    '૪': '4',
    '૫': '5',
    '૬': '6',
    '૭': '7',
    '૮': '8',
    '૯': '9',
    '૦': '0'
  };
  var gu = moment.defineLocale('gu', {
    months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split('_'),
    monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split('_'),
    monthsParseExact: true,
    weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split('_'),
    weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),
    weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),
    longDateFormat: {
      LT: 'A h:mm વાગ્યે',
      LTS: 'A h:mm:ss વાગ્યે',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY, A h:mm વાગ્યે',
      LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે'
    },
    calendar: {
      sameDay: '[આજ] LT',
      nextDay: '[કાલે] LT',
      nextWeek: 'dddd, LT',
      lastDay: '[ગઇકાલે] LT',
      lastWeek: '[પાછલા] dddd, LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s મા',
      past: '%s પહેલા',
      s: 'અમુક પળો',
      ss: '%d સેકંડ',
      m: 'એક મિનિટ',
      mm: '%d મિનિટ',
      h: 'એક કલાક',
      hh: '%d કલાક',
      d: 'એક દિવસ',
      dd: '%d દિવસ',
      M: 'એક મહિનો',
      MM: '%d મહિનો',
      y: 'એક વર્ષ',
      yy: '%d વર્ષ'
    },
    preparse: function preparse(string) {
      return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {
        return numberMap[match];
      });
    },
    postformat: function postformat(string) {
      return string.replace(/\d/g, function (match) {
        return symbolMap[match];
      });
    },
    // Gujarati notation for meridiems are quite fuzzy in practice. While there exists
    // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.
    meridiemParse: /રાત|બપોર|સવાર|સાંજ/,
    meridiemHour: function meridiemHour(hour, meridiem) {
      if (hour === 12) {
        hour = 0;
      }

      if (meridiem === 'રાત') {
        return hour < 4 ? hour : hour + 12;
      } else if (meridiem === 'સવાર') {
        return hour;
      } else if (meridiem === 'બપોર') {
        return hour >= 10 ? hour : hour + 12;
      } else if (meridiem === 'સાંજ') {
        return hour + 12;
      }
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 4) {
        return 'રાત';
      } else if (hour < 10) {
        return 'સવાર';
      } else if (hour < 17) {
        return 'બપોર';
      } else if (hour < 20) {
        return 'સાંજ';
      } else {
        return 'રાત';
      }
    },
    week: {
      dow: 0,
      // Sunday is the first day of the week.
      doy: 6 // The week that contains Jan 6th is the first week of the year.

    }
  });
  return gu;
});

/***/ }),

/***/ "./node_modules/moment/locale/he.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/he.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Hebrew [he]
//! author : Tomer Cohen : https://github.com/tomer
//! author : Moshe Simantov : https://github.com/DevelopmentIL
//! author : Tal Ater : https://github.com/TalAter
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var he = moment.defineLocale('he', {
    months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),
    monthsShort: 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),
    weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),
    weekdaysShort: 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),
    weekdaysMin: 'א_ב_ג_ד_ה_ו_ש'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D [ב]MMMM YYYY',
      LLL: 'D [ב]MMMM YYYY HH:mm',
      LLLL: 'dddd, D [ב]MMMM YYYY HH:mm',
      l: 'D/M/YYYY',
      ll: 'D MMM YYYY',
      lll: 'D MMM YYYY HH:mm',
      llll: 'ddd, D MMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[היום ב־]LT',
      nextDay: '[מחר ב־]LT',
      nextWeek: 'dddd [בשעה] LT',
      lastDay: '[אתמול ב־]LT',
      lastWeek: '[ביום] dddd [האחרון בשעה] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'בעוד %s',
      past: 'לפני %s',
      s: 'מספר שניות',
      ss: '%d שניות',
      m: 'דקה',
      mm: '%d דקות',
      h: 'שעה',
      hh: function hh(number) {
        if (number === 2) {
          return 'שעתיים';
        }

        return number + ' שעות';
      },
      d: 'יום',
      dd: function dd(number) {
        if (number === 2) {
          return 'יומיים';
        }

        return number + ' ימים';
      },
      M: 'חודש',
      MM: function MM(number) {
        if (number === 2) {
          return 'חודשיים';
        }

        return number + ' חודשים';
      },
      y: 'שנה',
      yy: function yy(number) {
        if (number === 2) {
          return 'שנתיים';
        } else if (number % 10 === 0 && number !== 10) {
          return number + ' שנה';
        }

        return number + ' שנים';
      }
    },
    meridiemParse: /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,
    isPM: function isPM(input) {
      return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input);
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 5) {
        return 'לפנות בוקר';
      } else if (hour < 10) {
        return 'בבוקר';
      } else if (hour < 12) {
        return isLower ? 'לפנה"צ' : 'לפני הצהריים';
      } else if (hour < 18) {
        return isLower ? 'אחה"צ' : 'אחרי הצהריים';
      } else {
        return 'בערב';
      }
    }
  });
  return he;
});

/***/ }),

/***/ "./node_modules/moment/locale/hi.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/hi.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Hindi [hi]
//! author : Mayank Singhal : https://github.com/mayanksinghal
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var symbolMap = {
    1: '१',
    2: '२',
    3: '३',
    4: '४',
    5: '५',
    6: '६',
    7: '७',
    8: '८',
    9: '९',
    0: '०'
  },
      numberMap = {
    '१': '1',
    '२': '2',
    '३': '3',
    '४': '4',
    '५': '5',
    '६': '6',
    '७': '7',
    '८': '8',
    '९': '9',
    '०': '0'
  },
      monthsParse = [/^जन/i, /^फ़र|फर/i, /^मार्च/i, /^अप्रै/i, /^मई/i, /^जून/i, /^जुल/i, /^अग/i, /^सितं|सित/i, /^अक्टू/i, /^नव|नवं/i, /^दिसं|दिस/i],
      shortMonthsParse = [/^जन/i, /^फ़र/i, /^मार्च/i, /^अप्रै/i, /^मई/i, /^जून/i, /^जुल/i, /^अग/i, /^सित/i, /^अक्टू/i, /^नव/i, /^दिस/i];
  var hi = moment.defineLocale('hi', {
    months: {
      format: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),
      standalone: 'जनवरी_फरवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितंबर_अक्टूबर_नवंबर_दिसंबर'.split('_')
    },
    monthsShort: 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),
    weekdays: 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
    weekdaysShort: 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),
    weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),
    longDateFormat: {
      LT: 'A h:mm बजे',
      LTS: 'A h:mm:ss बजे',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY, A h:mm बजे',
      LLLL: 'dddd, D MMMM YYYY, A h:mm बजे'
    },
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: shortMonthsParse,
    monthsRegex: /^(जनवरी|जन\.?|फ़रवरी|फरवरी|फ़र\.?|मार्च?|अप्रैल|अप्रै\.?|मई?|जून?|जुलाई|जुल\.?|अगस्त|अग\.?|सितम्बर|सितंबर|सित\.?|अक्टूबर|अक्टू\.?|नवम्बर|नवंबर|नव\.?|दिसम्बर|दिसंबर|दिस\.?)/i,
    monthsShortRegex: /^(जनवरी|जन\.?|फ़रवरी|फरवरी|फ़र\.?|मार्च?|अप्रैल|अप्रै\.?|मई?|जून?|जुलाई|जुल\.?|अगस्त|अग\.?|सितम्बर|सितंबर|सित\.?|अक्टूबर|अक्टू\.?|नवम्बर|नवंबर|नव\.?|दिसम्बर|दिसंबर|दिस\.?)/i,
    monthsStrictRegex: /^(जनवरी?|फ़रवरी|फरवरी?|मार्च?|अप्रैल?|मई?|जून?|जुलाई?|अगस्त?|सितम्बर|सितंबर|सित?\.?|अक्टूबर|अक्टू\.?|नवम्बर|नवंबर?|दिसम्बर|दिसंबर?)/i,
    monthsShortStrictRegex: /^(जन\.?|फ़र\.?|मार्च?|अप्रै\.?|मई?|जून?|जुल\.?|अग\.?|सित\.?|अक्टू\.?|नव\.?|दिस\.?)/i,
    calendar: {
      sameDay: '[आज] LT',
      nextDay: '[कल] LT',
      nextWeek: 'dddd, LT',
      lastDay: '[कल] LT',
      lastWeek: '[पिछले] dddd, LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s में',
      past: '%s पहले',
      s: 'कुछ ही क्षण',
      ss: '%d सेकंड',
      m: 'एक मिनट',
      mm: '%d मिनट',
      h: 'एक घंटा',
      hh: '%d घंटे',
      d: 'एक दिन',
      dd: '%d दिन',
      M: 'एक महीने',
      MM: '%d महीने',
      y: 'एक वर्ष',
      yy: '%d वर्ष'
    },
    preparse: function preparse(string) {
      return string.replace(/[१२३४५६७८९०]/g, function (match) {
        return numberMap[match];
      });
    },
    postformat: function postformat(string) {
      return string.replace(/\d/g, function (match) {
        return symbolMap[match];
      });
    },
    // Hindi notation for meridiems are quite fuzzy in practice. While there exists
    // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.
    meridiemParse: /रात|सुबह|दोपहर|शाम/,
    meridiemHour: function meridiemHour(hour, meridiem) {
      if (hour === 12) {
        hour = 0;
      }

      if (meridiem === 'रात') {
        return hour < 4 ? hour : hour + 12;
      } else if (meridiem === 'सुबह') {
        return hour;
      } else if (meridiem === 'दोपहर') {
        return hour >= 10 ? hour : hour + 12;
      } else if (meridiem === 'शाम') {
        return hour + 12;
      }
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 4) {
        return 'रात';
      } else if (hour < 10) {
        return 'सुबह';
      } else if (hour < 17) {
        return 'दोपहर';
      } else if (hour < 20) {
        return 'शाम';
      } else {
        return 'रात';
      }
    },
    week: {
      dow: 0,
      // Sunday is the first day of the week.
      doy: 6 // The week that contains Jan 6th is the first week of the year.

    }
  });
  return hi;
});

/***/ }),

/***/ "./node_modules/moment/locale/hr.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/hr.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Croatian [hr]
//! author : Bojan Marković : https://github.com/bmarkovic
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  function translate(number, withoutSuffix, key) {
    var result = number + ' ';

    switch (key) {
      case 'ss':
        if (number === 1) {
          result += 'sekunda';
        } else if (number === 2 || number === 3 || number === 4) {
          result += 'sekunde';
        } else {
          result += 'sekundi';
        }

        return result;

      case 'm':
        return withoutSuffix ? 'jedna minuta' : 'jedne minute';

      case 'mm':
        if (number === 1) {
          result += 'minuta';
        } else if (number === 2 || number === 3 || number === 4) {
          result += 'minute';
        } else {
          result += 'minuta';
        }

        return result;

      case 'h':
        return withoutSuffix ? 'jedan sat' : 'jednog sata';

      case 'hh':
        if (number === 1) {
          result += 'sat';
        } else if (number === 2 || number === 3 || number === 4) {
          result += 'sata';
        } else {
          result += 'sati';
        }

        return result;

      case 'dd':
        if (number === 1) {
          result += 'dan';
        } else {
          result += 'dana';
        }

        return result;

      case 'MM':
        if (number === 1) {
          result += 'mjesec';
        } else if (number === 2 || number === 3 || number === 4) {
          result += 'mjeseca';
        } else {
          result += 'mjeseci';
        }

        return result;

      case 'yy':
        if (number === 1) {
          result += 'godina';
        } else if (number === 2 || number === 3 || number === 4) {
          result += 'godine';
        } else {
          result += 'godina';
        }

        return result;
    }
  }

  var hr = moment.defineLocale('hr', {
    months: {
      format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'),
      standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_')
    },
    monthsShort: 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),
    monthsParseExact: true,
    weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
    weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
    weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'H:mm',
      LTS: 'H:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'Do MMMM YYYY',
      LLL: 'Do MMMM YYYY H:mm',
      LLLL: 'dddd, Do MMMM YYYY H:mm'
    },
    calendar: {
      sameDay: '[danas u] LT',
      nextDay: '[sutra u] LT',
      nextWeek: function nextWeek() {
        switch (this.day()) {
          case 0:
            return '[u] [nedjelju] [u] LT';

          case 3:
            return '[u] [srijedu] [u] LT';

          case 6:
            return '[u] [subotu] [u] LT';

          case 1:
          case 2:
          case 4:
          case 5:
            return '[u] dddd [u] LT';
        }
      },
      lastDay: '[jučer u] LT',
      lastWeek: function lastWeek() {
        switch (this.day()) {
          case 0:
            return '[prošlu] [nedjelju] [u] LT';

          case 3:
            return '[prošlu] [srijedu] [u] LT';

          case 6:
            return '[prošle] [subote] [u] LT';

          case 1:
          case 2:
          case 4:
          case 5:
            return '[prošli] dddd [u] LT';
        }
      },
      sameElse: 'L'
    },
    relativeTime: {
      future: 'za %s',
      past: 'prije %s',
      s: 'par sekundi',
      ss: translate,
      m: translate,
      mm: translate,
      h: translate,
      hh: translate,
      d: 'dan',
      dd: translate,
      M: 'mjesec',
      MM: translate,
      y: 'godinu',
      yy: translate
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 7 // The week that contains Jan 7th is the first week of the year.

    }
  });
  return hr;
});

/***/ }),

/***/ "./node_modules/moment/locale/hu.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/hu.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Hungarian [hu]
//! author : Adam Brunner : https://github.com/adambrunner
//! author : Peter Viszt  : https://github.com/passatgt
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');

  function translate(number, withoutSuffix, key, isFuture) {
    var num = number;

    switch (key) {
      case 's':
        return isFuture || withoutSuffix ? 'néhány másodperc' : 'néhány másodperce';

      case 'ss':
        return num + (isFuture || withoutSuffix) ? ' másodperc' : ' másodperce';

      case 'm':
        return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');

      case 'mm':
        return num + (isFuture || withoutSuffix ? ' perc' : ' perce');

      case 'h':
        return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');

      case 'hh':
        return num + (isFuture || withoutSuffix ? ' óra' : ' órája');

      case 'd':
        return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');

      case 'dd':
        return num + (isFuture || withoutSuffix ? ' nap' : ' napja');

      case 'M':
        return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');

      case 'MM':
        return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');

      case 'y':
        return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');

      case 'yy':
        return num + (isFuture || withoutSuffix ? ' év' : ' éve');
    }

    return '';
  }

  function week(isFuture) {
    return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';
  }

  var hu = moment.defineLocale('hu', {
    months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),
    monthsShort: 'jan._feb._márc._ápr._máj._jún._júl._aug._szept._okt._nov._dec.'.split('_'),
    monthsParseExact: true,
    weekdays: 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),
    weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),
    weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'),
    longDateFormat: {
      LT: 'H:mm',
      LTS: 'H:mm:ss',
      L: 'YYYY.MM.DD.',
      LL: 'YYYY. MMMM D.',
      LLL: 'YYYY. MMMM D. H:mm',
      LLLL: 'YYYY. MMMM D., dddd H:mm'
    },
    meridiemParse: /de|du/i,
    isPM: function isPM(input) {
      return input.charAt(1).toLowerCase() === 'u';
    },
    meridiem: function meridiem(hours, minutes, isLower) {
      if (hours < 12) {
        return isLower === true ? 'de' : 'DE';
      } else {
        return isLower === true ? 'du' : 'DU';
      }
    },
    calendar: {
      sameDay: '[ma] LT[-kor]',
      nextDay: '[holnap] LT[-kor]',
      nextWeek: function nextWeek() {
        return week.call(this, true);
      },
      lastDay: '[tegnap] LT[-kor]',
      lastWeek: function lastWeek() {
        return week.call(this, false);
      },
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s múlva',
      past: '%s',
      s: translate,
      ss: translate,
      m: translate,
      mm: translate,
      h: translate,
      hh: translate,
      d: translate,
      dd: translate,
      M: translate,
      MM: translate,
      y: translate,
      yy: translate
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return hu;
});

/***/ }),

/***/ "./node_modules/moment/locale/hy-am.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/hy-am.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Armenian [hy-am]
//! author : Armendarabyan : https://github.com/armendarabyan
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var hyAm = moment.defineLocale('hy-am', {
    months: {
      format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'),
      standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_')
    },
    monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),
    weekdays: 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'),
    weekdaysShort: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
    weekdaysMin: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'D MMMM YYYY թ.',
      LLL: 'D MMMM YYYY թ., HH:mm',
      LLLL: 'dddd, D MMMM YYYY թ., HH:mm'
    },
    calendar: {
      sameDay: '[այսօր] LT',
      nextDay: '[վաղը] LT',
      lastDay: '[երեկ] LT',
      nextWeek: function nextWeek() {
        return 'dddd [օրը ժամը] LT';
      },
      lastWeek: function lastWeek() {
        return '[անցած] dddd [օրը ժամը] LT';
      },
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s հետո',
      past: '%s առաջ',
      s: 'մի քանի վայրկյան',
      ss: '%d վայրկյան',
      m: 'րոպե',
      mm: '%d րոպե',
      h: 'ժամ',
      hh: '%d ժամ',
      d: 'օր',
      dd: '%d օր',
      M: 'ամիս',
      MM: '%d ամիս',
      y: 'տարի',
      yy: '%d տարի'
    },
    meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,
    isPM: function isPM(input) {
      return /^(ցերեկվա|երեկոյան)$/.test(input);
    },
    meridiem: function meridiem(hour) {
      if (hour < 4) {
        return 'գիշերվա';
      } else if (hour < 12) {
        return 'առավոտվա';
      } else if (hour < 17) {
        return 'ցերեկվա';
      } else {
        return 'երեկոյան';
      }
    },
    dayOfMonthOrdinalParse: /\d{1,2}|\d{1,2}-(ին|րդ)/,
    ordinal: function ordinal(number, period) {
      switch (period) {
        case 'DDD':
        case 'w':
        case 'W':
        case 'DDDo':
          if (number === 1) {
            return number + '-ին';
          }

          return number + '-րդ';

        default:
          return number;
      }
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 7 // The week that contains Jan 7th is the first week of the year.

    }
  });
  return hyAm;
});

/***/ }),

/***/ "./node_modules/moment/locale/id.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/id.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Indonesian [id]
//! author : Mohammad Satrio Utomo : https://github.com/tyok
//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var id = moment.defineLocale('id', {
    months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),
    monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),
    weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),
    weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),
    weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),
    longDateFormat: {
      LT: 'HH.mm',
      LTS: 'HH.mm.ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY [pukul] HH.mm',
      LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm'
    },
    meridiemParse: /pagi|siang|sore|malam/,
    meridiemHour: function meridiemHour(hour, meridiem) {
      if (hour === 12) {
        hour = 0;
      }

      if (meridiem === 'pagi') {
        return hour;
      } else if (meridiem === 'siang') {
        return hour >= 11 ? hour : hour + 12;
      } else if (meridiem === 'sore' || meridiem === 'malam') {
        return hour + 12;
      }
    },
    meridiem: function meridiem(hours, minutes, isLower) {
      if (hours < 11) {
        return 'pagi';
      } else if (hours < 15) {
        return 'siang';
      } else if (hours < 19) {
        return 'sore';
      } else {
        return 'malam';
      }
    },
    calendar: {
      sameDay: '[Hari ini pukul] LT',
      nextDay: '[Besok pukul] LT',
      nextWeek: 'dddd [pukul] LT',
      lastDay: '[Kemarin pukul] LT',
      lastWeek: 'dddd [lalu pukul] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'dalam %s',
      past: '%s yang lalu',
      s: 'beberapa detik',
      ss: '%d detik',
      m: 'semenit',
      mm: '%d menit',
      h: 'sejam',
      hh: '%d jam',
      d: 'sehari',
      dd: '%d hari',
      M: 'sebulan',
      MM: '%d bulan',
      y: 'setahun',
      yy: '%d tahun'
    },
    week: {
      dow: 0,
      // Sunday is the first day of the week.
      doy: 6 // The week that contains Jan 6th is the first week of the year.

    }
  });
  return id;
});

/***/ }),

/***/ "./node_modules/moment/locale/is.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/is.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Icelandic [is]
//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  function plural(n) {
    if (n % 100 === 11) {
      return true;
    } else if (n % 10 === 1) {
      return false;
    }

    return true;
  }

  function translate(number, withoutSuffix, key, isFuture) {
    var result = number + ' ';

    switch (key) {
      case 's':
        return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';

      case 'ss':
        if (plural(number)) {
          return result + (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum');
        }

        return result + 'sekúnda';

      case 'm':
        return withoutSuffix ? 'mínúta' : 'mínútu';

      case 'mm':
        if (plural(number)) {
          return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');
        } else if (withoutSuffix) {
          return result + 'mínúta';
        }

        return result + 'mínútu';

      case 'hh':
        if (plural(number)) {
          return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');
        }

        return result + 'klukkustund';

      case 'd':
        if (withoutSuffix) {
          return 'dagur';
        }

        return isFuture ? 'dag' : 'degi';

      case 'dd':
        if (plural(number)) {
          if (withoutSuffix) {
            return result + 'dagar';
          }

          return result + (isFuture ? 'daga' : 'dögum');
        } else if (withoutSuffix) {
          return result + 'dagur';
        }

        return result + (isFuture ? 'dag' : 'degi');

      case 'M':
        if (withoutSuffix) {
          return 'mánuður';
        }

        return isFuture ? 'mánuð' : 'mánuði';

      case 'MM':
        if (plural(number)) {
          if (withoutSuffix) {
            return result + 'mánuðir';
          }

          return result + (isFuture ? 'mánuði' : 'mánuðum');
        } else if (withoutSuffix) {
          return result + 'mánuður';
        }

        return result + (isFuture ? 'mánuð' : 'mánuði');

      case 'y':
        return withoutSuffix || isFuture ? 'ár' : 'ári';

      case 'yy':
        if (plural(number)) {
          return result + (withoutSuffix || isFuture ? 'ár' : 'árum');
        }

        return result + (withoutSuffix || isFuture ? 'ár' : 'ári');
    }
  }

  var is = moment.defineLocale('is', {
    months: 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),
    monthsShort: 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),
    weekdays: 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),
    weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'),
    weekdaysMin: 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),
    longDateFormat: {
      LT: 'H:mm',
      LTS: 'H:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'D. MMMM YYYY',
      LLL: 'D. MMMM YYYY [kl.] H:mm',
      LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm'
    },
    calendar: {
      sameDay: '[í dag kl.] LT',
      nextDay: '[á morgun kl.] LT',
      nextWeek: 'dddd [kl.] LT',
      lastDay: '[í gær kl.] LT',
      lastWeek: '[síðasta] dddd [kl.] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'eftir %s',
      past: 'fyrir %s síðan',
      s: translate,
      ss: translate,
      m: translate,
      mm: translate,
      h: 'klukkustund',
      hh: translate,
      d: translate,
      dd: translate,
      M: translate,
      MM: translate,
      y: translate,
      yy: translate
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return is;
});

/***/ }),

/***/ "./node_modules/moment/locale/it-ch.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/it-ch.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Italian (Switzerland) [it-ch]
//! author : xfh : https://github.com/xfh
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var itCh = moment.defineLocale('it-ch', {
    months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),
    monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
    weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),
    weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),
    weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[Oggi alle] LT',
      nextDay: '[Domani alle] LT',
      nextWeek: 'dddd [alle] LT',
      lastDay: '[Ieri alle] LT',
      lastWeek: function lastWeek() {
        switch (this.day()) {
          case 0:
            return '[la scorsa] dddd [alle] LT';

          default:
            return '[lo scorso] dddd [alle] LT';
        }
      },
      sameElse: 'L'
    },
    relativeTime: {
      future: function future(s) {
        return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s;
      },
      past: '%s fa',
      s: 'alcuni secondi',
      ss: '%d secondi',
      m: 'un minuto',
      mm: '%d minuti',
      h: "un'ora",
      hh: '%d ore',
      d: 'un giorno',
      dd: '%d giorni',
      M: 'un mese',
      MM: '%d mesi',
      y: 'un anno',
      yy: '%d anni'
    },
    dayOfMonthOrdinalParse: /\d{1,2}º/,
    ordinal: '%dº',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return itCh;
});

/***/ }),

/***/ "./node_modules/moment/locale/it.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/it.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Italian [it]
//! author : Lorenzo : https://github.com/aliem
//! author: Mattia Larentis: https://github.com/nostalgiaz
//! author: Marco : https://github.com/Manfre98
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var it = moment.defineLocale('it', {
    months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),
    monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
    weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),
    weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),
    weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: function sameDay() {
        return '[Oggi a' + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + ']LT';
      },
      nextDay: function nextDay() {
        return '[Domani a' + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + ']LT';
      },
      nextWeek: function nextWeek() {
        return 'dddd [a' + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + ']LT';
      },
      lastDay: function lastDay() {
        return '[Ieri a' + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + ']LT';
      },
      lastWeek: function lastWeek() {
        switch (this.day()) {
          case 0:
            return '[La scorsa] dddd [a' + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + ']LT';

          default:
            return '[Lo scorso] dddd [a' + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + ']LT';
        }
      },
      sameElse: 'L'
    },
    relativeTime: {
      future: 'tra %s',
      past: '%s fa',
      s: 'alcuni secondi',
      ss: '%d secondi',
      m: 'un minuto',
      mm: '%d minuti',
      h: "un'ora",
      hh: '%d ore',
      d: 'un giorno',
      dd: '%d giorni',
      w: 'una settimana',
      ww: '%d settimane',
      M: 'un mese',
      MM: '%d mesi',
      y: 'un anno',
      yy: '%d anni'
    },
    dayOfMonthOrdinalParse: /\d{1,2}º/,
    ordinal: '%dº',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return it;
});

/***/ }),

/***/ "./node_modules/moment/locale/ja.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ja.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Japanese [ja]
//! author : LI Long : https://github.com/baryon
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var ja = moment.defineLocale('ja', {
    eras: [{
      since: '2019-05-01',
      offset: 1,
      name: '令和',
      narrow: '㋿',
      abbr: 'R'
    }, {
      since: '1989-01-08',
      until: '2019-04-30',
      offset: 1,
      name: '平成',
      narrow: '㍻',
      abbr: 'H'
    }, {
      since: '1926-12-25',
      until: '1989-01-07',
      offset: 1,
      name: '昭和',
      narrow: '㍼',
      abbr: 'S'
    }, {
      since: '1912-07-30',
      until: '1926-12-24',
      offset: 1,
      name: '大正',
      narrow: '㍽',
      abbr: 'T'
    }, {
      since: '1873-01-01',
      until: '1912-07-29',
      offset: 6,
      name: '明治',
      narrow: '㍾',
      abbr: 'M'
    }, {
      since: '0001-01-01',
      until: '1873-12-31',
      offset: 1,
      name: '西暦',
      narrow: 'AD',
      abbr: 'AD'
    }, {
      since: '0000-12-31',
      until: -Infinity,
      offset: 1,
      name: '紀元前',
      narrow: 'BC',
      abbr: 'BC'
    }],
    eraYearOrdinalRegex: /(元|\d+)年/,
    eraYearOrdinalParse: function eraYearOrdinalParse(input, match) {
      return match[1] === '元' ? 1 : parseInt(match[1] || input, 10);
    },
    months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
    monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
    weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),
    weekdaysShort: '日_月_火_水_木_金_土'.split('_'),
    weekdaysMin: '日_月_火_水_木_金_土'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'YYYY/MM/DD',
      LL: 'YYYY年M月D日',
      LLL: 'YYYY年M月D日 HH:mm',
      LLLL: 'YYYY年M月D日 dddd HH:mm',
      l: 'YYYY/MM/DD',
      ll: 'YYYY年M月D日',
      lll: 'YYYY年M月D日 HH:mm',
      llll: 'YYYY年M月D日(ddd) HH:mm'
    },
    meridiemParse: /午前|午後/i,
    isPM: function isPM(input) {
      return input === '午後';
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 12) {
        return '午前';
      } else {
        return '午後';
      }
    },
    calendar: {
      sameDay: '[今日] LT',
      nextDay: '[明日] LT',
      nextWeek: function nextWeek(now) {
        if (now.week() !== this.week()) {
          return '[来週]dddd LT';
        } else {
          return 'dddd LT';
        }
      },
      lastDay: '[昨日] LT',
      lastWeek: function lastWeek(now) {
        if (this.week() !== now.week()) {
          return '[先週]dddd LT';
        } else {
          return 'dddd LT';
        }
      },
      sameElse: 'L'
    },
    dayOfMonthOrdinalParse: /\d{1,2}日/,
    ordinal: function ordinal(number, period) {
      switch (period) {
        case 'y':
          return number === 1 ? '元年' : number + '年';

        case 'd':
        case 'D':
        case 'DDD':
          return number + '日';

        default:
          return number;
      }
    },
    relativeTime: {
      future: '%s後',
      past: '%s前',
      s: '数秒',
      ss: '%d秒',
      m: '1分',
      mm: '%d分',
      h: '1時間',
      hh: '%d時間',
      d: '1日',
      dd: '%d日',
      M: '1ヶ月',
      MM: '%dヶ月',
      y: '1年',
      yy: '%d年'
    }
  });
  return ja;
});

/***/ }),

/***/ "./node_modules/moment/locale/jv.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/jv.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Javanese [jv]
//! author : Rony Lantip : https://github.com/lantip
//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var jv = moment.defineLocale('jv', {
    months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'),
    monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),
    weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),
    weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),
    weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),
    longDateFormat: {
      LT: 'HH.mm',
      LTS: 'HH.mm.ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY [pukul] HH.mm',
      LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm'
    },
    meridiemParse: /enjing|siyang|sonten|ndalu/,
    meridiemHour: function meridiemHour(hour, meridiem) {
      if (hour === 12) {
        hour = 0;
      }

      if (meridiem === 'enjing') {
        return hour;
      } else if (meridiem === 'siyang') {
        return hour >= 11 ? hour : hour + 12;
      } else if (meridiem === 'sonten' || meridiem === 'ndalu') {
        return hour + 12;
      }
    },
    meridiem: function meridiem(hours, minutes, isLower) {
      if (hours < 11) {
        return 'enjing';
      } else if (hours < 15) {
        return 'siyang';
      } else if (hours < 19) {
        return 'sonten';
      } else {
        return 'ndalu';
      }
    },
    calendar: {
      sameDay: '[Dinten puniko pukul] LT',
      nextDay: '[Mbenjang pukul] LT',
      nextWeek: 'dddd [pukul] LT',
      lastDay: '[Kala wingi pukul] LT',
      lastWeek: 'dddd [kepengker pukul] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'wonten ing %s',
      past: '%s ingkang kepengker',
      s: 'sawetawis detik',
      ss: '%d detik',
      m: 'setunggal menit',
      mm: '%d menit',
      h: 'setunggal jam',
      hh: '%d jam',
      d: 'sedinten',
      dd: '%d dinten',
      M: 'sewulan',
      MM: '%d wulan',
      y: 'setaun',
      yy: '%d taun'
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 7 // The week that contains Jan 7th is the first week of the year.

    }
  });
  return jv;
});

/***/ }),

/***/ "./node_modules/moment/locale/ka.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ka.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Georgian [ka]
//! author : Irakli Janiashvili : https://github.com/IrakliJani
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var ka = moment.defineLocale('ka', {
    months: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),
    monthsShort: 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),
    weekdays: {
      standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),
      format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'),
      isFormat: /(წინა|შემდეგ)/
    },
    weekdaysShort: 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),
    weekdaysMin: 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd, D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[დღეს] LT[-ზე]',
      nextDay: '[ხვალ] LT[-ზე]',
      lastDay: '[გუშინ] LT[-ზე]',
      nextWeek: '[შემდეგ] dddd LT[-ზე]',
      lastWeek: '[წინა] dddd LT-ზე',
      sameElse: 'L'
    },
    relativeTime: {
      future: function future(s) {
        return s.replace(/(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/, function ($0, $1, $2) {
          return $2 === 'ი' ? $1 + 'ში' : $1 + $2 + 'ში';
        });
      },
      past: function past(s) {
        if (/(წამი|წუთი|საათი|დღე|თვე)/.test(s)) {
          return s.replace(/(ი|ე)$/, 'ის წინ');
        }

        if (/წელი/.test(s)) {
          return s.replace(/წელი$/, 'წლის წინ');
        }

        return s;
      },
      s: 'რამდენიმე წამი',
      ss: '%d წამი',
      m: 'წუთი',
      mm: '%d წუთი',
      h: 'საათი',
      hh: '%d საათი',
      d: 'დღე',
      dd: '%d დღე',
      M: 'თვე',
      MM: '%d თვე',
      y: 'წელი',
      yy: '%d წელი'
    },
    dayOfMonthOrdinalParse: /0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,
    ordinal: function ordinal(number) {
      if (number === 0) {
        return number;
      }

      if (number === 1) {
        return number + '-ლი';
      }

      if (number < 20 || number <= 100 && number % 20 === 0 || number % 100 === 0) {
        return 'მე-' + number;
      }

      return number + '-ე';
    },
    week: {
      dow: 1,
      doy: 7
    }
  });
  return ka;
});

/***/ }),

/***/ "./node_modules/moment/locale/kk.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/kk.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Kazakh [kk]
//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var suffixes = {
    0: '-ші',
    1: '-ші',
    2: '-ші',
    3: '-ші',
    4: '-ші',
    5: '-ші',
    6: '-шы',
    7: '-ші',
    8: '-ші',
    9: '-шы',
    10: '-шы',
    20: '-шы',
    30: '-шы',
    40: '-шы',
    50: '-ші',
    60: '-шы',
    70: '-ші',
    80: '-ші',
    90: '-шы',
    100: '-ші'
  };
  var kk = moment.defineLocale('kk', {
    months: 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'),
    monthsShort: 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),
    weekdays: 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'),
    weekdaysShort: 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),
    weekdaysMin: 'жк_дй_сй_ср_бй_жм_сн'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd, D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[Бүгін сағат] LT',
      nextDay: '[Ертең сағат] LT',
      nextWeek: 'dddd [сағат] LT',
      lastDay: '[Кеше сағат] LT',
      lastWeek: '[Өткен аптаның] dddd [сағат] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s ішінде',
      past: '%s бұрын',
      s: 'бірнеше секунд',
      ss: '%d секунд',
      m: 'бір минут',
      mm: '%d минут',
      h: 'бір сағат',
      hh: '%d сағат',
      d: 'бір күн',
      dd: '%d күн',
      M: 'бір ай',
      MM: '%d ай',
      y: 'бір жыл',
      yy: '%d жыл'
    },
    dayOfMonthOrdinalParse: /\d{1,2}-(ші|шы)/,
    ordinal: function ordinal(number) {
      var a = number % 10,
          b = number >= 100 ? 100 : null;
      return number + (suffixes[number] || suffixes[a] || suffixes[b]);
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 7 // The week that contains Jan 7th is the first week of the year.

    }
  });
  return kk;
});

/***/ }),

/***/ "./node_modules/moment/locale/km.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/km.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Cambodian [km]
//! author : Kruy Vanna : https://github.com/kruyvanna
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var symbolMap = {
    1: '១',
    2: '២',
    3: '៣',
    4: '៤',
    5: '៥',
    6: '៦',
    7: '៧',
    8: '៨',
    9: '៩',
    0: '០'
  },
      numberMap = {
    '១': '1',
    '២': '2',
    '៣': '3',
    '៤': '4',
    '៥': '5',
    '៦': '6',
    '៧': '7',
    '៨': '8',
    '៩': '9',
    '០': '0'
  };
  var km = moment.defineLocale('km', {
    months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),
    monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),
    weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
    weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),
    weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd, D MMMM YYYY HH:mm'
    },
    meridiemParse: /ព្រឹក|ល្ងាច/,
    isPM: function isPM(input) {
      return input === 'ល្ងាច';
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 12) {
        return 'ព្រឹក';
      } else {
        return 'ល្ងាច';
      }
    },
    calendar: {
      sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',
      nextDay: '[ស្អែក ម៉ោង] LT',
      nextWeek: 'dddd [ម៉ោង] LT',
      lastDay: '[ម្សិលមិញ ម៉ោង] LT',
      lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%sទៀត',
      past: '%sមុន',
      s: 'ប៉ុន្មានវិនាទី',
      ss: '%d វិនាទី',
      m: 'មួយនាទី',
      mm: '%d នាទី',
      h: 'មួយម៉ោង',
      hh: '%d ម៉ោង',
      d: 'មួយថ្ងៃ',
      dd: '%d ថ្ងៃ',
      M: 'មួយខែ',
      MM: '%d ខែ',
      y: 'មួយឆ្នាំ',
      yy: '%d ឆ្នាំ'
    },
    dayOfMonthOrdinalParse: /ទី\d{1,2}/,
    ordinal: 'ទី%d',
    preparse: function preparse(string) {
      return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {
        return numberMap[match];
      });
    },
    postformat: function postformat(string) {
      return string.replace(/\d/g, function (match) {
        return symbolMap[match];
      });
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return km;
});

/***/ }),

/***/ "./node_modules/moment/locale/kn.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/kn.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Kannada [kn]
//! author : Rajeev Naik : https://github.com/rajeevnaikte
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var symbolMap = {
    1: '೧',
    2: '೨',
    3: '೩',
    4: '೪',
    5: '೫',
    6: '೬',
    7: '೭',
    8: '೮',
    9: '೯',
    0: '೦'
  },
      numberMap = {
    '೧': '1',
    '೨': '2',
    '೩': '3',
    '೪': '4',
    '೫': '5',
    '೬': '6',
    '೭': '7',
    '೮': '8',
    '೯': '9',
    '೦': '0'
  };
  var kn = moment.defineLocale('kn', {
    months: 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split('_'),
    monthsShort: 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split('_'),
    monthsParseExact: true,
    weekdays: 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split('_'),
    weekdaysShort: 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),
    weekdaysMin: 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),
    longDateFormat: {
      LT: 'A h:mm',
      LTS: 'A h:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY, A h:mm',
      LLLL: 'dddd, D MMMM YYYY, A h:mm'
    },
    calendar: {
      sameDay: '[ಇಂದು] LT',
      nextDay: '[ನಾಳೆ] LT',
      nextWeek: 'dddd, LT',
      lastDay: '[ನಿನ್ನೆ] LT',
      lastWeek: '[ಕೊನೆಯ] dddd, LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s ನಂತರ',
      past: '%s ಹಿಂದೆ',
      s: 'ಕೆಲವು ಕ್ಷಣಗಳು',
      ss: '%d ಸೆಕೆಂಡುಗಳು',
      m: 'ಒಂದು ನಿಮಿಷ',
      mm: '%d ನಿಮಿಷ',
      h: 'ಒಂದು ಗಂಟೆ',
      hh: '%d ಗಂಟೆ',
      d: 'ಒಂದು ದಿನ',
      dd: '%d ದಿನ',
      M: 'ಒಂದು ತಿಂಗಳು',
      MM: '%d ತಿಂಗಳು',
      y: 'ಒಂದು ವರ್ಷ',
      yy: '%d ವರ್ಷ'
    },
    preparse: function preparse(string) {
      return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {
        return numberMap[match];
      });
    },
    postformat: function postformat(string) {
      return string.replace(/\d/g, function (match) {
        return symbolMap[match];
      });
    },
    meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,
    meridiemHour: function meridiemHour(hour, meridiem) {
      if (hour === 12) {
        hour = 0;
      }

      if (meridiem === 'ರಾತ್ರಿ') {
        return hour < 4 ? hour : hour + 12;
      } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {
        return hour;
      } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {
        return hour >= 10 ? hour : hour + 12;
      } else if (meridiem === 'ಸಂಜೆ') {
        return hour + 12;
      }
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 4) {
        return 'ರಾತ್ರಿ';
      } else if (hour < 10) {
        return 'ಬೆಳಿಗ್ಗೆ';
      } else if (hour < 17) {
        return 'ಮಧ್ಯಾಹ್ನ';
      } else if (hour < 20) {
        return 'ಸಂಜೆ';
      } else {
        return 'ರಾತ್ರಿ';
      }
    },
    dayOfMonthOrdinalParse: /\d{1,2}(ನೇ)/,
    ordinal: function ordinal(number) {
      return number + 'ನೇ';
    },
    week: {
      dow: 0,
      // Sunday is the first day of the week.
      doy: 6 // The week that contains Jan 6th is the first week of the year.

    }
  });
  return kn;
});

/***/ }),

/***/ "./node_modules/moment/locale/ko.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ko.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Korean [ko]
//! author : Kyungwook, Park : https://github.com/kyungw00k
//! author : Jeeeyul Lee <jeeeyul@gmail.com>
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var ko = moment.defineLocale('ko', {
    months: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
    monthsShort: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
    weekdays: '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),
    weekdaysShort: '일_월_화_수_목_금_토'.split('_'),
    weekdaysMin: '일_월_화_수_목_금_토'.split('_'),
    longDateFormat: {
      LT: 'A h:mm',
      LTS: 'A h:mm:ss',
      L: 'YYYY.MM.DD.',
      LL: 'YYYY년 MMMM D일',
      LLL: 'YYYY년 MMMM D일 A h:mm',
      LLLL: 'YYYY년 MMMM D일 dddd A h:mm',
      l: 'YYYY.MM.DD.',
      ll: 'YYYY년 MMMM D일',
      lll: 'YYYY년 MMMM D일 A h:mm',
      llll: 'YYYY년 MMMM D일 dddd A h:mm'
    },
    calendar: {
      sameDay: '오늘 LT',
      nextDay: '내일 LT',
      nextWeek: 'dddd LT',
      lastDay: '어제 LT',
      lastWeek: '지난주 dddd LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s 후',
      past: '%s 전',
      s: '몇 초',
      ss: '%d초',
      m: '1분',
      mm: '%d분',
      h: '한 시간',
      hh: '%d시간',
      d: '하루',
      dd: '%d일',
      M: '한 달',
      MM: '%d달',
      y: '일 년',
      yy: '%d년'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(일|월|주)/,
    ordinal: function ordinal(number, period) {
      switch (period) {
        case 'd':
        case 'D':
        case 'DDD':
          return number + '일';

        case 'M':
          return number + '월';

        case 'w':
        case 'W':
          return number + '주';

        default:
          return number;
      }
    },
    meridiemParse: /오전|오후/,
    isPM: function isPM(token) {
      return token === '오후';
    },
    meridiem: function meridiem(hour, minute, isUpper) {
      return hour < 12 ? '오전' : '오후';
    }
  });
  return ko;
});

/***/ }),

/***/ "./node_modules/moment/locale/ku.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ku.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Kurdish [ku]
//! author : Shahram Mebashar : https://github.com/ShahramMebashar
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var symbolMap = {
    1: '١',
    2: '٢',
    3: '٣',
    4: '٤',
    5: '٥',
    6: '٦',
    7: '٧',
    8: '٨',
    9: '٩',
    0: '٠'
  },
      numberMap = {
    '١': '1',
    '٢': '2',
    '٣': '3',
    '٤': '4',
    '٥': '5',
    '٦': '6',
    '٧': '7',
    '٨': '8',
    '٩': '9',
    '٠': '0'
  },
      months = ['کانونی دووەم', 'شوبات', 'ئازار', 'نیسان', 'ئایار', 'حوزەیران', 'تەمموز', 'ئاب', 'ئەیلوول', 'تشرینی یەكەم', 'تشرینی دووەم', 'كانونی یەکەم'];
  var ku = moment.defineLocale('ku', {
    months: months,
    monthsShort: months,
    weekdays: 'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split('_'),
    weekdaysShort: 'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split('_'),
    weekdaysMin: 'ی_د_س_چ_پ_ه_ش'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd, D MMMM YYYY HH:mm'
    },
    meridiemParse: /ئێواره‌|به‌یانی/,
    isPM: function isPM(input) {
      return /ئێواره‌/.test(input);
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 12) {
        return 'به‌یانی';
      } else {
        return 'ئێواره‌';
      }
    },
    calendar: {
      sameDay: '[ئه‌مرۆ كاتژمێر] LT',
      nextDay: '[به‌یانی كاتژمێر] LT',
      nextWeek: 'dddd [كاتژمێر] LT',
      lastDay: '[دوێنێ كاتژمێر] LT',
      lastWeek: 'dddd [كاتژمێر] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'له‌ %s',
      past: '%s',
      s: 'چه‌ند چركه‌یه‌ك',
      ss: 'چركه‌ %d',
      m: 'یه‌ك خوله‌ك',
      mm: '%d خوله‌ك',
      h: 'یه‌ك كاتژمێر',
      hh: '%d كاتژمێر',
      d: 'یه‌ك ڕۆژ',
      dd: '%d ڕۆژ',
      M: 'یه‌ك مانگ',
      MM: '%d مانگ',
      y: 'یه‌ك ساڵ',
      yy: '%d ساڵ'
    },
    preparse: function preparse(string) {
      return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
        return numberMap[match];
      }).replace(/،/g, ',');
    },
    postformat: function postformat(string) {
      return string.replace(/\d/g, function (match) {
        return symbolMap[match];
      }).replace(/,/g, '،');
    },
    week: {
      dow: 6,
      // Saturday is the first day of the week.
      doy: 12 // The week that contains Jan 12th is the first week of the year.

    }
  });
  return ku;
});

/***/ }),

/***/ "./node_modules/moment/locale/ky.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ky.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Kyrgyz [ky]
//! author : Chyngyz Arystan uulu : https://github.com/chyngyz
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var suffixes = {
    0: '-чү',
    1: '-чи',
    2: '-чи',
    3: '-чү',
    4: '-чү',
    5: '-чи',
    6: '-чы',
    7: '-чи',
    8: '-чи',
    9: '-чу',
    10: '-чу',
    20: '-чы',
    30: '-чу',
    40: '-чы',
    50: '-чү',
    60: '-чы',
    70: '-чи',
    80: '-чи',
    90: '-чу',
    100: '-чү'
  };
  var ky = moment.defineLocale('ky', {
    months: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),
    monthsShort: 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),
    weekdays: 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'),
    weekdaysShort: 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),
    weekdaysMin: 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd, D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[Бүгүн саат] LT',
      nextDay: '[Эртең саат] LT',
      nextWeek: 'dddd [саат] LT',
      lastDay: '[Кечээ саат] LT',
      lastWeek: '[Өткөн аптанын] dddd [күнү] [саат] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s ичинде',
      past: '%s мурун',
      s: 'бирнече секунд',
      ss: '%d секунд',
      m: 'бир мүнөт',
      mm: '%d мүнөт',
      h: 'бир саат',
      hh: '%d саат',
      d: 'бир күн',
      dd: '%d күн',
      M: 'бир ай',
      MM: '%d ай',
      y: 'бир жыл',
      yy: '%d жыл'
    },
    dayOfMonthOrdinalParse: /\d{1,2}-(чи|чы|чү|чу)/,
    ordinal: function ordinal(number) {
      var a = number % 10,
          b = number >= 100 ? 100 : null;
      return number + (suffixes[number] || suffixes[a] || suffixes[b]);
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 7 // The week that contains Jan 7th is the first week of the year.

    }
  });
  return ky;
});

/***/ }),

/***/ "./node_modules/moment/locale/lb.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/lb.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Luxembourgish [lb]
//! author : mweimerskirch : https://github.com/mweimerskirch
//! author : David Raison : https://github.com/kwisatz
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  function processRelativeTime(number, withoutSuffix, key, isFuture) {
    var format = {
      m: ['eng Minutt', 'enger Minutt'],
      h: ['eng Stonn', 'enger Stonn'],
      d: ['een Dag', 'engem Dag'],
      M: ['ee Mount', 'engem Mount'],
      y: ['ee Joer', 'engem Joer']
    };
    return withoutSuffix ? format[key][0] : format[key][1];
  }

  function processFutureTime(string) {
    var number = string.substr(0, string.indexOf(' '));

    if (eifelerRegelAppliesToNumber(number)) {
      return 'a ' + string;
    }

    return 'an ' + string;
  }

  function processPastTime(string) {
    var number = string.substr(0, string.indexOf(' '));

    if (eifelerRegelAppliesToNumber(number)) {
      return 'viru ' + string;
    }

    return 'virun ' + string;
  }
  /**
   * Returns true if the word before the given number loses the '-n' ending.
   * e.g. 'an 10 Deeg' but 'a 5 Deeg'
   *
   * @param number {integer}
   * @returns {boolean}
   */


  function eifelerRegelAppliesToNumber(number) {
    number = parseInt(number, 10);

    if (isNaN(number)) {
      return false;
    }

    if (number < 0) {
      // Negative Number --> always true
      return true;
    } else if (number < 10) {
      // Only 1 digit
      if (4 <= number && number <= 7) {
        return true;
      }

      return false;
    } else if (number < 100) {
      // 2 digits
      var lastDigit = number % 10,
          firstDigit = number / 10;

      if (lastDigit === 0) {
        return eifelerRegelAppliesToNumber(firstDigit);
      }

      return eifelerRegelAppliesToNumber(lastDigit);
    } else if (number < 10000) {
      // 3 or 4 digits --> recursively check first digit
      while (number >= 10) {
        number = number / 10;
      }

      return eifelerRegelAppliesToNumber(number);
    } else {
      // Anything larger than 4 digits: recursively check first n-3 digits
      number = number / 1000;
      return eifelerRegelAppliesToNumber(number);
    }
  }

  var lb = moment.defineLocale('lb', {
    months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
    monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
    monthsParseExact: true,
    weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),
    weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),
    weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'H:mm [Auer]',
      LTS: 'H:mm:ss [Auer]',
      L: 'DD.MM.YYYY',
      LL: 'D. MMMM YYYY',
      LLL: 'D. MMMM YYYY H:mm [Auer]',
      LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'
    },
    calendar: {
      sameDay: '[Haut um] LT',
      sameElse: 'L',
      nextDay: '[Muer um] LT',
      nextWeek: 'dddd [um] LT',
      lastDay: '[Gëschter um] LT',
      lastWeek: function lastWeek() {
        // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule
        switch (this.day()) {
          case 2:
          case 4:
            return '[Leschten] dddd [um] LT';

          default:
            return '[Leschte] dddd [um] LT';
        }
      }
    },
    relativeTime: {
      future: processFutureTime,
      past: processPastTime,
      s: 'e puer Sekonnen',
      ss: '%d Sekonnen',
      m: processRelativeTime,
      mm: '%d Minutten',
      h: processRelativeTime,
      hh: '%d Stonnen',
      d: processRelativeTime,
      dd: '%d Deeg',
      M: processRelativeTime,
      MM: '%d Méint',
      y: processRelativeTime,
      yy: '%d Joer'
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return lb;
});

/***/ }),

/***/ "./node_modules/moment/locale/lo.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/lo.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Lao [lo]
//! author : Ryan Hart : https://github.com/ryanhart2
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var lo = moment.defineLocale('lo', {
    months: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),
    monthsShort: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),
    weekdays: 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
    weekdaysShort: 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
    weekdaysMin: 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'ວັນdddd D MMMM YYYY HH:mm'
    },
    meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,
    isPM: function isPM(input) {
      return input === 'ຕອນແລງ';
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 12) {
        return 'ຕອນເຊົ້າ';
      } else {
        return 'ຕອນແລງ';
      }
    },
    calendar: {
      sameDay: '[ມື້ນີ້ເວລາ] LT',
      nextDay: '[ມື້ອື່ນເວລາ] LT',
      nextWeek: '[ວັນ]dddd[ໜ້າເວລາ] LT',
      lastDay: '[ມື້ວານນີ້ເວລາ] LT',
      lastWeek: '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'ອີກ %s',
      past: '%sຜ່ານມາ',
      s: 'ບໍ່ເທົ່າໃດວິນາທີ',
      ss: '%d ວິນາທີ',
      m: '1 ນາທີ',
      mm: '%d ນາທີ',
      h: '1 ຊົ່ວໂມງ',
      hh: '%d ຊົ່ວໂມງ',
      d: '1 ມື້',
      dd: '%d ມື້',
      M: '1 ເດືອນ',
      MM: '%d ເດືອນ',
      y: '1 ປີ',
      yy: '%d ປີ'
    },
    dayOfMonthOrdinalParse: /(ທີ່)\d{1,2}/,
    ordinal: function ordinal(number) {
      return 'ທີ່' + number;
    }
  });
  return lo;
});

/***/ }),

/***/ "./node_modules/moment/locale/lt.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/lt.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Lithuanian [lt]
//! author : Mindaugas Mozūras : https://github.com/mmozuras
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var units = {
    ss: 'sekundė_sekundžių_sekundes',
    m: 'minutė_minutės_minutę',
    mm: 'minutės_minučių_minutes',
    h: 'valanda_valandos_valandą',
    hh: 'valandos_valandų_valandas',
    d: 'diena_dienos_dieną',
    dd: 'dienos_dienų_dienas',
    M: 'mėnuo_mėnesio_mėnesį',
    MM: 'mėnesiai_mėnesių_mėnesius',
    y: 'metai_metų_metus',
    yy: 'metai_metų_metus'
  };

  function translateSeconds(number, withoutSuffix, key, isFuture) {
    if (withoutSuffix) {
      return 'kelios sekundės';
    } else {
      return isFuture ? 'kelių sekundžių' : 'kelias sekundes';
    }
  }

  function translateSingular(number, withoutSuffix, key, isFuture) {
    return withoutSuffix ? forms(key)[0] : isFuture ? forms(key)[1] : forms(key)[2];
  }

  function special(number) {
    return number % 10 === 0 || number > 10 && number < 20;
  }

  function forms(key) {
    return units[key].split('_');
  }

  function translate(number, withoutSuffix, key, isFuture) {
    var result = number + ' ';

    if (number === 1) {
      return result + translateSingular(number, withoutSuffix, key[0], isFuture);
    } else if (withoutSuffix) {
      return result + (special(number) ? forms(key)[1] : forms(key)[0]);
    } else {
      if (isFuture) {
        return result + forms(key)[1];
      } else {
        return result + (special(number) ? forms(key)[1] : forms(key)[2]);
      }
    }
  }

  var lt = moment.defineLocale('lt', {
    months: {
      format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),
      standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),
      isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/
    },
    monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),
    weekdays: {
      format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'),
      standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),
      isFormat: /dddd HH:mm/
    },
    weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),
    weekdaysMin: 'S_P_A_T_K_Pn_Š'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'YYYY-MM-DD',
      LL: 'YYYY [m.] MMMM D [d.]',
      LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
      LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',
      l: 'YYYY-MM-DD',
      ll: 'YYYY [m.] MMMM D [d.]',
      lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
      llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'
    },
    calendar: {
      sameDay: '[Šiandien] LT',
      nextDay: '[Rytoj] LT',
      nextWeek: 'dddd LT',
      lastDay: '[Vakar] LT',
      lastWeek: '[Praėjusį] dddd LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'po %s',
      past: 'prieš %s',
      s: translateSeconds,
      ss: translate,
      m: translateSingular,
      mm: translate,
      h: translateSingular,
      hh: translate,
      d: translateSingular,
      dd: translate,
      M: translateSingular,
      MM: translate,
      y: translateSingular,
      yy: translate
    },
    dayOfMonthOrdinalParse: /\d{1,2}-oji/,
    ordinal: function ordinal(number) {
      return number + '-oji';
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return lt;
});

/***/ }),

/***/ "./node_modules/moment/locale/lv.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/lv.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Latvian [lv]
//! author : Kristaps Karlsons : https://github.com/skakri
//! author : Jānis Elmeris : https://github.com/JanisE
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var units = {
    ss: 'sekundes_sekundēm_sekunde_sekundes'.split('_'),
    m: 'minūtes_minūtēm_minūte_minūtes'.split('_'),
    mm: 'minūtes_minūtēm_minūte_minūtes'.split('_'),
    h: 'stundas_stundām_stunda_stundas'.split('_'),
    hh: 'stundas_stundām_stunda_stundas'.split('_'),
    d: 'dienas_dienām_diena_dienas'.split('_'),
    dd: 'dienas_dienām_diena_dienas'.split('_'),
    M: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),
    MM: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),
    y: 'gada_gadiem_gads_gadi'.split('_'),
    yy: 'gada_gadiem_gads_gadi'.split('_')
  };
  /**
   * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.
   */

  function format(forms, number, withoutSuffix) {
    if (withoutSuffix) {
      // E.g. "21 minūte", "3 minūtes".
      return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];
    } else {
      // E.g. "21 minūtes" as in "pēc 21 minūtes".
      // E.g. "3 minūtēm" as in "pēc 3 minūtēm".
      return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];
    }
  }

  function relativeTimeWithPlural(number, withoutSuffix, key) {
    return number + ' ' + format(units[key], number, withoutSuffix);
  }

  function relativeTimeWithSingular(number, withoutSuffix, key) {
    return format(units[key], number, withoutSuffix);
  }

  function relativeSeconds(number, withoutSuffix) {
    return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';
  }

  var lv = moment.defineLocale('lv', {
    months: 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),
    monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),
    weekdays: 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),
    weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'),
    weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD.MM.YYYY.',
      LL: 'YYYY. [gada] D. MMMM',
      LLL: 'YYYY. [gada] D. MMMM, HH:mm',
      LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm'
    },
    calendar: {
      sameDay: '[Šodien pulksten] LT',
      nextDay: '[Rīt pulksten] LT',
      nextWeek: 'dddd [pulksten] LT',
      lastDay: '[Vakar pulksten] LT',
      lastWeek: '[Pagājušā] dddd [pulksten] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'pēc %s',
      past: 'pirms %s',
      s: relativeSeconds,
      ss: relativeTimeWithPlural,
      m: relativeTimeWithSingular,
      mm: relativeTimeWithPlural,
      h: relativeTimeWithSingular,
      hh: relativeTimeWithPlural,
      d: relativeTimeWithSingular,
      dd: relativeTimeWithPlural,
      M: relativeTimeWithSingular,
      MM: relativeTimeWithPlural,
      y: relativeTimeWithSingular,
      yy: relativeTimeWithPlural
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return lv;
});

/***/ }),

/***/ "./node_modules/moment/locale/me.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/me.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Montenegrin [me]
//! author : Miodrag Nikač <miodrag@restartit.me> : https://github.com/miodragnikac
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var translator = {
    words: {
      //Different grammatical cases
      ss: ['sekund', 'sekunda', 'sekundi'],
      m: ['jedan minut', 'jednog minuta'],
      mm: ['minut', 'minuta', 'minuta'],
      h: ['jedan sat', 'jednog sata'],
      hh: ['sat', 'sata', 'sati'],
      dd: ['dan', 'dana', 'dana'],
      MM: ['mjesec', 'mjeseca', 'mjeseci'],
      yy: ['godina', 'godine', 'godina']
    },
    correctGrammaticalCase: function correctGrammaticalCase(number, wordKey) {
      return number === 1 ? wordKey[0] : number >= 2 && number <= 4 ? wordKey[1] : wordKey[2];
    },
    translate: function translate(number, withoutSuffix, key) {
      var wordKey = translator.words[key];

      if (key.length === 1) {
        return withoutSuffix ? wordKey[0] : wordKey[1];
      } else {
        return number + ' ' + translator.correctGrammaticalCase(number, wordKey);
      }
    }
  };
  var me = moment.defineLocale('me', {
    months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),
    monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),
    monthsParseExact: true,
    weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
    weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
    weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'H:mm',
      LTS: 'H:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'D. MMMM YYYY',
      LLL: 'D. MMMM YYYY H:mm',
      LLLL: 'dddd, D. MMMM YYYY H:mm'
    },
    calendar: {
      sameDay: '[danas u] LT',
      nextDay: '[sjutra u] LT',
      nextWeek: function nextWeek() {
        switch (this.day()) {
          case 0:
            return '[u] [nedjelju] [u] LT';

          case 3:
            return '[u] [srijedu] [u] LT';

          case 6:
            return '[u] [subotu] [u] LT';

          case 1:
          case 2:
          case 4:
          case 5:
            return '[u] dddd [u] LT';
        }
      },
      lastDay: '[juče u] LT',
      lastWeek: function lastWeek() {
        var lastWeekDays = ['[prošle] [nedjelje] [u] LT', '[prošlog] [ponedjeljka] [u] LT', '[prošlog] [utorka] [u] LT', '[prošle] [srijede] [u] LT', '[prošlog] [četvrtka] [u] LT', '[prošlog] [petka] [u] LT', '[prošle] [subote] [u] LT'];
        return lastWeekDays[this.day()];
      },
      sameElse: 'L'
    },
    relativeTime: {
      future: 'za %s',
      past: 'prije %s',
      s: 'nekoliko sekundi',
      ss: translator.translate,
      m: translator.translate,
      mm: translator.translate,
      h: translator.translate,
      hh: translator.translate,
      d: 'dan',
      dd: translator.translate,
      M: 'mjesec',
      MM: translator.translate,
      y: 'godinu',
      yy: translator.translate
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 7 // The week that contains Jan 7th is the first week of the year.

    }
  });
  return me;
});

/***/ }),

/***/ "./node_modules/moment/locale/mi.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/mi.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Maori [mi]
//! author : John Corrigan <robbiecloset@gmail.com> : https://github.com/johnideal
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var mi = moment.defineLocale('mi', {
    months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'),
    monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'),
    monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
    monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
    monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
    monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,
    weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),
    weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
    weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY [i] HH:mm',
      LLLL: 'dddd, D MMMM YYYY [i] HH:mm'
    },
    calendar: {
      sameDay: '[i teie mahana, i] LT',
      nextDay: '[apopo i] LT',
      nextWeek: 'dddd [i] LT',
      lastDay: '[inanahi i] LT',
      lastWeek: 'dddd [whakamutunga i] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'i roto i %s',
      past: '%s i mua',
      s: 'te hēkona ruarua',
      ss: '%d hēkona',
      m: 'he meneti',
      mm: '%d meneti',
      h: 'te haora',
      hh: '%d haora',
      d: 'he ra',
      dd: '%d ra',
      M: 'he marama',
      MM: '%d marama',
      y: 'he tau',
      yy: '%d tau'
    },
    dayOfMonthOrdinalParse: /\d{1,2}º/,
    ordinal: '%dº',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return mi;
});

/***/ }),

/***/ "./node_modules/moment/locale/mk.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/mk.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Macedonian [mk]
//! author : Borislav Mickov : https://github.com/B0k0
//! author : Sashko Todorov : https://github.com/bkyceh
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var mk = moment.defineLocale('mk', {
    months: 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),
    monthsShort: 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),
    weekdays: 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),
    weekdaysShort: 'нед_пон_вто_сре_чет_пет_саб'.split('_'),
    weekdaysMin: 'нe_пo_вт_ср_че_пе_сa'.split('_'),
    longDateFormat: {
      LT: 'H:mm',
      LTS: 'H:mm:ss',
      L: 'D.MM.YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY H:mm',
      LLLL: 'dddd, D MMMM YYYY H:mm'
    },
    calendar: {
      sameDay: '[Денес во] LT',
      nextDay: '[Утре во] LT',
      nextWeek: '[Во] dddd [во] LT',
      lastDay: '[Вчера во] LT',
      lastWeek: function lastWeek() {
        switch (this.day()) {
          case 0:
          case 3:
          case 6:
            return '[Изминатата] dddd [во] LT';

          case 1:
          case 2:
          case 4:
          case 5:
            return '[Изминатиот] dddd [во] LT';
        }
      },
      sameElse: 'L'
    },
    relativeTime: {
      future: 'за %s',
      past: 'пред %s',
      s: 'неколку секунди',
      ss: '%d секунди',
      m: 'една минута',
      mm: '%d минути',
      h: 'еден час',
      hh: '%d часа',
      d: 'еден ден',
      dd: '%d дена',
      M: 'еден месец',
      MM: '%d месеци',
      y: 'една година',
      yy: '%d години'
    },
    dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
    ordinal: function ordinal(number) {
      var lastDigit = number % 10,
          last2Digits = number % 100;

      if (number === 0) {
        return number + '-ев';
      } else if (last2Digits === 0) {
        return number + '-ен';
      } else if (last2Digits > 10 && last2Digits < 20) {
        return number + '-ти';
      } else if (lastDigit === 1) {
        return number + '-ви';
      } else if (lastDigit === 2) {
        return number + '-ри';
      } else if (lastDigit === 7 || lastDigit === 8) {
        return number + '-ми';
      } else {
        return number + '-ти';
      }
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 7 // The week that contains Jan 7th is the first week of the year.

    }
  });
  return mk;
});

/***/ }),

/***/ "./node_modules/moment/locale/ml.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ml.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Malayalam [ml]
//! author : Floyd Pink : https://github.com/floydpink
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var ml = moment.defineLocale('ml', {
    months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),
    monthsShort: 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),
    monthsParseExact: true,
    weekdays: 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),
    weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),
    weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),
    longDateFormat: {
      LT: 'A h:mm -നു',
      LTS: 'A h:mm:ss -നു',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY, A h:mm -നു',
      LLLL: 'dddd, D MMMM YYYY, A h:mm -നു'
    },
    calendar: {
      sameDay: '[ഇന്ന്] LT',
      nextDay: '[നാളെ] LT',
      nextWeek: 'dddd, LT',
      lastDay: '[ഇന്നലെ] LT',
      lastWeek: '[കഴിഞ്ഞ] dddd, LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s കഴിഞ്ഞ്',
      past: '%s മുൻപ്',
      s: 'അൽപ നിമിഷങ്ങൾ',
      ss: '%d സെക്കൻഡ്',
      m: 'ഒരു മിനിറ്റ്',
      mm: '%d മിനിറ്റ്',
      h: 'ഒരു മണിക്കൂർ',
      hh: '%d മണിക്കൂർ',
      d: 'ഒരു ദിവസം',
      dd: '%d ദിവസം',
      M: 'ഒരു മാസം',
      MM: '%d മാസം',
      y: 'ഒരു വർഷം',
      yy: '%d വർഷം'
    },
    meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,
    meridiemHour: function meridiemHour(hour, meridiem) {
      if (hour === 12) {
        hour = 0;
      }

      if (meridiem === 'രാത്രി' && hour >= 4 || meridiem === 'ഉച്ച കഴിഞ്ഞ്' || meridiem === 'വൈകുന്നേരം') {
        return hour + 12;
      } else {
        return hour;
      }
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 4) {
        return 'രാത്രി';
      } else if (hour < 12) {
        return 'രാവിലെ';
      } else if (hour < 17) {
        return 'ഉച്ച കഴിഞ്ഞ്';
      } else if (hour < 20) {
        return 'വൈകുന്നേരം';
      } else {
        return 'രാത്രി';
      }
    }
  });
  return ml;
});

/***/ }),

/***/ "./node_modules/moment/locale/mn.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/mn.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Mongolian [mn]
//! author : Javkhlantugs Nyamdorj : https://github.com/javkhaanj7
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  function translate(number, withoutSuffix, key, isFuture) {
    switch (key) {
      case 's':
        return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';

      case 'ss':
        return number + (withoutSuffix ? ' секунд' : ' секундын');

      case 'm':
      case 'mm':
        return number + (withoutSuffix ? ' минут' : ' минутын');

      case 'h':
      case 'hh':
        return number + (withoutSuffix ? ' цаг' : ' цагийн');

      case 'd':
      case 'dd':
        return number + (withoutSuffix ? ' өдөр' : ' өдрийн');

      case 'M':
      case 'MM':
        return number + (withoutSuffix ? ' сар' : ' сарын');

      case 'y':
      case 'yy':
        return number + (withoutSuffix ? ' жил' : ' жилийн');

      default:
        return number;
    }
  }

  var mn = moment.defineLocale('mn', {
    months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split('_'),
    monthsShort: '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split('_'),
    monthsParseExact: true,
    weekdays: 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),
    weekdaysShort: 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),
    weekdaysMin: 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'YYYY-MM-DD',
      LL: 'YYYY оны MMMMын D',
      LLL: 'YYYY оны MMMMын D HH:mm',
      LLLL: 'dddd, YYYY оны MMMMын D HH:mm'
    },
    meridiemParse: /ҮӨ|ҮХ/i,
    isPM: function isPM(input) {
      return input === 'ҮХ';
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 12) {
        return 'ҮӨ';
      } else {
        return 'ҮХ';
      }
    },
    calendar: {
      sameDay: '[Өнөөдөр] LT',
      nextDay: '[Маргааш] LT',
      nextWeek: '[Ирэх] dddd LT',
      lastDay: '[Өчигдөр] LT',
      lastWeek: '[Өнгөрсөн] dddd LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s дараа',
      past: '%s өмнө',
      s: translate,
      ss: translate,
      m: translate,
      mm: translate,
      h: translate,
      hh: translate,
      d: translate,
      dd: translate,
      M: translate,
      MM: translate,
      y: translate,
      yy: translate
    },
    dayOfMonthOrdinalParse: /\d{1,2} өдөр/,
    ordinal: function ordinal(number, period) {
      switch (period) {
        case 'd':
        case 'D':
        case 'DDD':
          return number + ' өдөр';

        default:
          return number;
      }
    }
  });
  return mn;
});

/***/ }),

/***/ "./node_modules/moment/locale/mr.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/mr.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Marathi [mr]
//! author : Harshad Kale : https://github.com/kalehv
//! author : Vivek Athalye : https://github.com/vnathalye
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var symbolMap = {
    1: '१',
    2: '२',
    3: '३',
    4: '४',
    5: '५',
    6: '६',
    7: '७',
    8: '८',
    9: '९',
    0: '०'
  },
      numberMap = {
    '१': '1',
    '२': '2',
    '३': '3',
    '४': '4',
    '५': '5',
    '६': '6',
    '७': '7',
    '८': '8',
    '९': '9',
    '०': '0'
  };

  function relativeTimeMr(number, withoutSuffix, string, isFuture) {
    var output = '';

    if (withoutSuffix) {
      switch (string) {
        case 's':
          output = 'काही सेकंद';
          break;

        case 'ss':
          output = '%d सेकंद';
          break;

        case 'm':
          output = 'एक मिनिट';
          break;

        case 'mm':
          output = '%d मिनिटे';
          break;

        case 'h':
          output = 'एक तास';
          break;

        case 'hh':
          output = '%d तास';
          break;

        case 'd':
          output = 'एक दिवस';
          break;

        case 'dd':
          output = '%d दिवस';
          break;

        case 'M':
          output = 'एक महिना';
          break;

        case 'MM':
          output = '%d महिने';
          break;

        case 'y':
          output = 'एक वर्ष';
          break;

        case 'yy':
          output = '%d वर्षे';
          break;
      }
    } else {
      switch (string) {
        case 's':
          output = 'काही सेकंदां';
          break;

        case 'ss':
          output = '%d सेकंदां';
          break;

        case 'm':
          output = 'एका मिनिटा';
          break;

        case 'mm':
          output = '%d मिनिटां';
          break;

        case 'h':
          output = 'एका तासा';
          break;

        case 'hh':
          output = '%d तासां';
          break;

        case 'd':
          output = 'एका दिवसा';
          break;

        case 'dd':
          output = '%d दिवसां';
          break;

        case 'M':
          output = 'एका महिन्या';
          break;

        case 'MM':
          output = '%d महिन्यां';
          break;

        case 'y':
          output = 'एका वर्षा';
          break;

        case 'yy':
          output = '%d वर्षां';
          break;
      }
    }

    return output.replace(/%d/i, number);
  }

  var mr = moment.defineLocale('mr', {
    months: 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),
    monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),
    monthsParseExact: true,
    weekdays: 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
    weekdaysShort: 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),
    weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),
    longDateFormat: {
      LT: 'A h:mm वाजता',
      LTS: 'A h:mm:ss वाजता',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY, A h:mm वाजता',
      LLLL: 'dddd, D MMMM YYYY, A h:mm वाजता'
    },
    calendar: {
      sameDay: '[आज] LT',
      nextDay: '[उद्या] LT',
      nextWeek: 'dddd, LT',
      lastDay: '[काल] LT',
      lastWeek: '[मागील] dddd, LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%sमध्ये',
      past: '%sपूर्वी',
      s: relativeTimeMr,
      ss: relativeTimeMr,
      m: relativeTimeMr,
      mm: relativeTimeMr,
      h: relativeTimeMr,
      hh: relativeTimeMr,
      d: relativeTimeMr,
      dd: relativeTimeMr,
      M: relativeTimeMr,
      MM: relativeTimeMr,
      y: relativeTimeMr,
      yy: relativeTimeMr
    },
    preparse: function preparse(string) {
      return string.replace(/[१२३४५६७८९०]/g, function (match) {
        return numberMap[match];
      });
    },
    postformat: function postformat(string) {
      return string.replace(/\d/g, function (match) {
        return symbolMap[match];
      });
    },
    meridiemParse: /पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/,
    meridiemHour: function meridiemHour(hour, meridiem) {
      if (hour === 12) {
        hour = 0;
      }

      if (meridiem === 'पहाटे' || meridiem === 'सकाळी') {
        return hour;
      } else if (meridiem === 'दुपारी' || meridiem === 'सायंकाळी' || meridiem === 'रात्री') {
        return hour >= 12 ? hour : hour + 12;
      }
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour >= 0 && hour < 6) {
        return 'पहाटे';
      } else if (hour < 12) {
        return 'सकाळी';
      } else if (hour < 17) {
        return 'दुपारी';
      } else if (hour < 20) {
        return 'सायंकाळी';
      } else {
        return 'रात्री';
      }
    },
    week: {
      dow: 0,
      // Sunday is the first day of the week.
      doy: 6 // The week that contains Jan 6th is the first week of the year.

    }
  });
  return mr;
});

/***/ }),

/***/ "./node_modules/moment/locale/ms-my.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/ms-my.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Malay [ms-my]
//! note : DEPRECATED, the correct one is [ms]
//! author : Weldan Jamili : https://github.com/weldan
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var msMy = moment.defineLocale('ms-my', {
    months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),
    monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
    weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
    weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
    weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
    longDateFormat: {
      LT: 'HH.mm',
      LTS: 'HH.mm.ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY [pukul] HH.mm',
      LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm'
    },
    meridiemParse: /pagi|tengahari|petang|malam/,
    meridiemHour: function meridiemHour(hour, meridiem) {
      if (hour === 12) {
        hour = 0;
      }

      if (meridiem === 'pagi') {
        return hour;
      } else if (meridiem === 'tengahari') {
        return hour >= 11 ? hour : hour + 12;
      } else if (meridiem === 'petang' || meridiem === 'malam') {
        return hour + 12;
      }
    },
    meridiem: function meridiem(hours, minutes, isLower) {
      if (hours < 11) {
        return 'pagi';
      } else if (hours < 15) {
        return 'tengahari';
      } else if (hours < 19) {
        return 'petang';
      } else {
        return 'malam';
      }
    },
    calendar: {
      sameDay: '[Hari ini pukul] LT',
      nextDay: '[Esok pukul] LT',
      nextWeek: 'dddd [pukul] LT',
      lastDay: '[Kelmarin pukul] LT',
      lastWeek: 'dddd [lepas pukul] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'dalam %s',
      past: '%s yang lepas',
      s: 'beberapa saat',
      ss: '%d saat',
      m: 'seminit',
      mm: '%d minit',
      h: 'sejam',
      hh: '%d jam',
      d: 'sehari',
      dd: '%d hari',
      M: 'sebulan',
      MM: '%d bulan',
      y: 'setahun',
      yy: '%d tahun'
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 7 // The week that contains Jan 7th is the first week of the year.

    }
  });
  return msMy;
});

/***/ }),

/***/ "./node_modules/moment/locale/ms.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ms.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Malay [ms]
//! author : Weldan Jamili : https://github.com/weldan
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var ms = moment.defineLocale('ms', {
    months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),
    monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
    weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
    weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
    weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
    longDateFormat: {
      LT: 'HH.mm',
      LTS: 'HH.mm.ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY [pukul] HH.mm',
      LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm'
    },
    meridiemParse: /pagi|tengahari|petang|malam/,
    meridiemHour: function meridiemHour(hour, meridiem) {
      if (hour === 12) {
        hour = 0;
      }

      if (meridiem === 'pagi') {
        return hour;
      } else if (meridiem === 'tengahari') {
        return hour >= 11 ? hour : hour + 12;
      } else if (meridiem === 'petang' || meridiem === 'malam') {
        return hour + 12;
      }
    },
    meridiem: function meridiem(hours, minutes, isLower) {
      if (hours < 11) {
        return 'pagi';
      } else if (hours < 15) {
        return 'tengahari';
      } else if (hours < 19) {
        return 'petang';
      } else {
        return 'malam';
      }
    },
    calendar: {
      sameDay: '[Hari ini pukul] LT',
      nextDay: '[Esok pukul] LT',
      nextWeek: 'dddd [pukul] LT',
      lastDay: '[Kelmarin pukul] LT',
      lastWeek: 'dddd [lepas pukul] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'dalam %s',
      past: '%s yang lepas',
      s: 'beberapa saat',
      ss: '%d saat',
      m: 'seminit',
      mm: '%d minit',
      h: 'sejam',
      hh: '%d jam',
      d: 'sehari',
      dd: '%d hari',
      M: 'sebulan',
      MM: '%d bulan',
      y: 'setahun',
      yy: '%d tahun'
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 7 // The week that contains Jan 7th is the first week of the year.

    }
  });
  return ms;
});

/***/ }),

/***/ "./node_modules/moment/locale/mt.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/mt.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Maltese (Malta) [mt]
//! author : Alessandro Maruccia : https://github.com/alesma
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var mt = moment.defineLocale('mt', {
    months: 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split('_'),
    monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),
    weekdays: 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split('_'),
    weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),
    weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd, D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[Illum fil-]LT',
      nextDay: '[Għada fil-]LT',
      nextWeek: 'dddd [fil-]LT',
      lastDay: '[Il-bieraħ fil-]LT',
      lastWeek: 'dddd [li għadda] [fil-]LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'f’ %s',
      past: '%s ilu',
      s: 'ftit sekondi',
      ss: '%d sekondi',
      m: 'minuta',
      mm: '%d minuti',
      h: 'siegħa',
      hh: '%d siegħat',
      d: 'ġurnata',
      dd: '%d ġranet',
      M: 'xahar',
      MM: '%d xhur',
      y: 'sena',
      yy: '%d sni'
    },
    dayOfMonthOrdinalParse: /\d{1,2}º/,
    ordinal: '%dº',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return mt;
});

/***/ }),

/***/ "./node_modules/moment/locale/my.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/my.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Burmese [my]
//! author : Squar team, mysquar.com
//! author : David Rossellat : https://github.com/gholadr
//! author : Tin Aung Lin : https://github.com/thanyawzinmin
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var symbolMap = {
    1: '၁',
    2: '၂',
    3: '၃',
    4: '၄',
    5: '၅',
    6: '၆',
    7: '၇',
    8: '၈',
    9: '၉',
    0: '၀'
  },
      numberMap = {
    '၁': '1',
    '၂': '2',
    '၃': '3',
    '၄': '4',
    '၅': '5',
    '၆': '6',
    '၇': '7',
    '၈': '8',
    '၉': '9',
    '၀': '0'
  };
  var my = moment.defineLocale('my', {
    months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),
    monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),
    weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),
    weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
    weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[ယနေ.] LT [မှာ]',
      nextDay: '[မနက်ဖြန်] LT [မှာ]',
      nextWeek: 'dddd LT [မှာ]',
      lastDay: '[မနေ.က] LT [မှာ]',
      lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'လာမည့် %s မှာ',
      past: 'လွန်ခဲ့သော %s က',
      s: 'စက္ကန်.အနည်းငယ်',
      ss: '%d စက္ကန့်',
      m: 'တစ်မိနစ်',
      mm: '%d မိနစ်',
      h: 'တစ်နာရီ',
      hh: '%d နာရီ',
      d: 'တစ်ရက်',
      dd: '%d ရက်',
      M: 'တစ်လ',
      MM: '%d လ',
      y: 'တစ်နှစ်',
      yy: '%d နှစ်'
    },
    preparse: function preparse(string) {
      return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {
        return numberMap[match];
      });
    },
    postformat: function postformat(string) {
      return string.replace(/\d/g, function (match) {
        return symbolMap[match];
      });
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return my;
});

/***/ }),

/***/ "./node_modules/moment/locale/nb.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/nb.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Norwegian Bokmål [nb]
//! authors : Espen Hovlandsdal : https://github.com/rexxars
//!           Sigurd Gartmann : https://github.com/sigurdga
//!           Stephen Ramthun : https://github.com/stephenramthun
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var nb = moment.defineLocale('nb', {
    months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
    monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),
    monthsParseExact: true,
    weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
    weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'),
    weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'D. MMMM YYYY',
      LLL: 'D. MMMM YYYY [kl.] HH:mm',
      LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm'
    },
    calendar: {
      sameDay: '[i dag kl.] LT',
      nextDay: '[i morgen kl.] LT',
      nextWeek: 'dddd [kl.] LT',
      lastDay: '[i går kl.] LT',
      lastWeek: '[forrige] dddd [kl.] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'om %s',
      past: '%s siden',
      s: 'noen sekunder',
      ss: '%d sekunder',
      m: 'ett minutt',
      mm: '%d minutter',
      h: 'en time',
      hh: '%d timer',
      d: 'en dag',
      dd: '%d dager',
      w: 'en uke',
      ww: '%d uker',
      M: 'en måned',
      MM: '%d måneder',
      y: 'ett år',
      yy: '%d år'
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return nb;
});

/***/ }),

/***/ "./node_modules/moment/locale/ne.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ne.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Nepalese [ne]
//! author : suvash : https://github.com/suvash
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var symbolMap = {
    1: '१',
    2: '२',
    3: '३',
    4: '४',
    5: '५',
    6: '६',
    7: '७',
    8: '८',
    9: '९',
    0: '०'
  },
      numberMap = {
    '१': '1',
    '२': '2',
    '३': '3',
    '४': '4',
    '५': '5',
    '६': '6',
    '७': '7',
    '८': '8',
    '९': '9',
    '०': '0'
  };
  var ne = moment.defineLocale('ne', {
    months: 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),
    monthsShort: 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),
    monthsParseExact: true,
    weekdays: 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),
    weekdaysShort: 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),
    weekdaysMin: 'आ._सो._मं._बु._बि._शु._श.'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'Aको h:mm बजे',
      LTS: 'Aको h:mm:ss बजे',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY, Aको h:mm बजे',
      LLLL: 'dddd, D MMMM YYYY, Aको h:mm बजे'
    },
    preparse: function preparse(string) {
      return string.replace(/[१२३४५६७८९०]/g, function (match) {
        return numberMap[match];
      });
    },
    postformat: function postformat(string) {
      return string.replace(/\d/g, function (match) {
        return symbolMap[match];
      });
    },
    meridiemParse: /राति|बिहान|दिउँसो|साँझ/,
    meridiemHour: function meridiemHour(hour, meridiem) {
      if (hour === 12) {
        hour = 0;
      }

      if (meridiem === 'राति') {
        return hour < 4 ? hour : hour + 12;
      } else if (meridiem === 'बिहान') {
        return hour;
      } else if (meridiem === 'दिउँसो') {
        return hour >= 10 ? hour : hour + 12;
      } else if (meridiem === 'साँझ') {
        return hour + 12;
      }
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 3) {
        return 'राति';
      } else if (hour < 12) {
        return 'बिहान';
      } else if (hour < 16) {
        return 'दिउँसो';
      } else if (hour < 20) {
        return 'साँझ';
      } else {
        return 'राति';
      }
    },
    calendar: {
      sameDay: '[आज] LT',
      nextDay: '[भोलि] LT',
      nextWeek: '[आउँदो] dddd[,] LT',
      lastDay: '[हिजो] LT',
      lastWeek: '[गएको] dddd[,] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%sमा',
      past: '%s अगाडि',
      s: 'केही क्षण',
      ss: '%d सेकेण्ड',
      m: 'एक मिनेट',
      mm: '%d मिनेट',
      h: 'एक घण्टा',
      hh: '%d घण्टा',
      d: 'एक दिन',
      dd: '%d दिन',
      M: 'एक महिना',
      MM: '%d महिना',
      y: 'एक बर्ष',
      yy: '%d बर्ष'
    },
    week: {
      dow: 0,
      // Sunday is the first day of the week.
      doy: 6 // The week that contains Jan 6th is the first week of the year.

    }
  });
  return ne;
});

/***/ }),

/***/ "./node_modules/moment/locale/nl-be.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/nl-be.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Dutch (Belgium) [nl-be]
//! author : Joris Röling : https://github.com/jorisroling
//! author : Jacob Middag : https://github.com/middagj
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),
      monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),
      monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i],
      monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
  var nlBe = moment.defineLocale('nl-be', {
    months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),
    monthsShort: function monthsShort(m, format) {
      if (!m) {
        return monthsShortWithDots;
      } else if (/-MMM-/.test(format)) {
        return monthsShortWithoutDots[m.month()];
      } else {
        return monthsShortWithDots[m.month()];
      }
    },
    monthsRegex: monthsRegex,
    monthsShortRegex: monthsRegex,
    monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,
    monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,
    weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),
    weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),
    weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[vandaag om] LT',
      nextDay: '[morgen om] LT',
      nextWeek: 'dddd [om] LT',
      lastDay: '[gisteren om] LT',
      lastWeek: '[afgelopen] dddd [om] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'over %s',
      past: '%s geleden',
      s: 'een paar seconden',
      ss: '%d seconden',
      m: 'één minuut',
      mm: '%d minuten',
      h: 'één uur',
      hh: '%d uur',
      d: 'één dag',
      dd: '%d dagen',
      M: 'één maand',
      MM: '%d maanden',
      y: 'één jaar',
      yy: '%d jaar'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
    ordinal: function ordinal(number) {
      return number + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de');
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return nlBe;
});

/***/ }),

/***/ "./node_modules/moment/locale/nl.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/nl.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Dutch [nl]
//! author : Joris Röling : https://github.com/jorisroling
//! author : Jacob Middag : https://github.com/middagj
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),
      monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),
      monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i],
      monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
  var nl = moment.defineLocale('nl', {
    months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),
    monthsShort: function monthsShort(m, format) {
      if (!m) {
        return monthsShortWithDots;
      } else if (/-MMM-/.test(format)) {
        return monthsShortWithoutDots[m.month()];
      } else {
        return monthsShortWithDots[m.month()];
      }
    },
    monthsRegex: monthsRegex,
    monthsShortRegex: monthsRegex,
    monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,
    monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,
    weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),
    weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),
    weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD-MM-YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[vandaag om] LT',
      nextDay: '[morgen om] LT',
      nextWeek: 'dddd [om] LT',
      lastDay: '[gisteren om] LT',
      lastWeek: '[afgelopen] dddd [om] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'over %s',
      past: '%s geleden',
      s: 'een paar seconden',
      ss: '%d seconden',
      m: 'één minuut',
      mm: '%d minuten',
      h: 'één uur',
      hh: '%d uur',
      d: 'één dag',
      dd: '%d dagen',
      w: 'één week',
      ww: '%d weken',
      M: 'één maand',
      MM: '%d maanden',
      y: 'één jaar',
      yy: '%d jaar'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
    ordinal: function ordinal(number) {
      return number + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de');
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return nl;
});

/***/ }),

/***/ "./node_modules/moment/locale/nn.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/nn.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Nynorsk [nn]
//! authors : https://github.com/mechuwind
//!           Stephen Ramthun : https://github.com/stephenramthun
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var nn = moment.defineLocale('nn', {
    months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
    monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),
    monthsParseExact: true,
    weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),
    weekdaysShort: 'su._må._ty._on._to._fr._lau.'.split('_'),
    weekdaysMin: 'su_må_ty_on_to_fr_la'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'D. MMMM YYYY',
      LLL: 'D. MMMM YYYY [kl.] H:mm',
      LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm'
    },
    calendar: {
      sameDay: '[I dag klokka] LT',
      nextDay: '[I morgon klokka] LT',
      nextWeek: 'dddd [klokka] LT',
      lastDay: '[I går klokka] LT',
      lastWeek: '[Føregåande] dddd [klokka] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'om %s',
      past: '%s sidan',
      s: 'nokre sekund',
      ss: '%d sekund',
      m: 'eit minutt',
      mm: '%d minutt',
      h: 'ein time',
      hh: '%d timar',
      d: 'ein dag',
      dd: '%d dagar',
      w: 'ei veke',
      ww: '%d veker',
      M: 'ein månad',
      MM: '%d månader',
      y: 'eit år',
      yy: '%d år'
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return nn;
});

/***/ }),

/***/ "./node_modules/moment/locale/oc-lnc.js":
/*!**********************************************!*\
  !*** ./node_modules/moment/locale/oc-lnc.js ***!
  \**********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Occitan, lengadocian dialecte [oc-lnc]
//! author : Quentin PAGÈS : https://github.com/Quenty31
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var ocLnc = moment.defineLocale('oc-lnc', {
    months: {
      standalone: 'genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split('_'),
      format: "de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre".split('_'),
      isFormat: /D[oD]?(\s)+MMMM/
    },
    monthsShort: 'gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split('_'),
    monthsParseExact: true,
    weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split('_'),
    weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'),
    weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'H:mm',
      LTS: 'H:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM [de] YYYY',
      ll: 'D MMM YYYY',
      LLL: 'D MMMM [de] YYYY [a] H:mm',
      lll: 'D MMM YYYY, H:mm',
      LLLL: 'dddd D MMMM [de] YYYY [a] H:mm',
      llll: 'ddd D MMM YYYY, H:mm'
    },
    calendar: {
      sameDay: '[uèi a] LT',
      nextDay: '[deman a] LT',
      nextWeek: 'dddd [a] LT',
      lastDay: '[ièr a] LT',
      lastWeek: 'dddd [passat a] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: "d'aquí %s",
      past: 'fa %s',
      s: 'unas segondas',
      ss: '%d segondas',
      m: 'una minuta',
      mm: '%d minutas',
      h: 'una ora',
      hh: '%d oras',
      d: 'un jorn',
      dd: '%d jorns',
      M: 'un mes',
      MM: '%d meses',
      y: 'un an',
      yy: '%d ans'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/,
    ordinal: function ordinal(number, period) {
      var output = number === 1 ? 'r' : number === 2 ? 'n' : number === 3 ? 'r' : number === 4 ? 't' : 'è';

      if (period === 'w' || period === 'W') {
        output = 'a';
      }

      return number + output;
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4
    }
  });
  return ocLnc;
});

/***/ }),

/***/ "./node_modules/moment/locale/pa-in.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/pa-in.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Punjabi (India) [pa-in]
//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var symbolMap = {
    1: '੧',
    2: '੨',
    3: '੩',
    4: '੪',
    5: '੫',
    6: '੬',
    7: '੭',
    8: '੮',
    9: '੯',
    0: '੦'
  },
      numberMap = {
    '੧': '1',
    '੨': '2',
    '੩': '3',
    '੪': '4',
    '੫': '5',
    '੬': '6',
    '੭': '7',
    '੮': '8',
    '੯': '9',
    '੦': '0'
  };
  var paIn = moment.defineLocale('pa-in', {
    // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.
    months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),
    monthsShort: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),
    weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'),
    weekdaysShort: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
    weekdaysMin: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
    longDateFormat: {
      LT: 'A h:mm ਵਜੇ',
      LTS: 'A h:mm:ss ਵਜੇ',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY, A h:mm ਵਜੇ',
      LLLL: 'dddd, D MMMM YYYY, A h:mm ਵਜੇ'
    },
    calendar: {
      sameDay: '[ਅਜ] LT',
      nextDay: '[ਕਲ] LT',
      nextWeek: '[ਅਗਲਾ] dddd, LT',
      lastDay: '[ਕਲ] LT',
      lastWeek: '[ਪਿਛਲੇ] dddd, LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s ਵਿੱਚ',
      past: '%s ਪਿਛਲੇ',
      s: 'ਕੁਝ ਸਕਿੰਟ',
      ss: '%d ਸਕਿੰਟ',
      m: 'ਇਕ ਮਿੰਟ',
      mm: '%d ਮਿੰਟ',
      h: 'ਇੱਕ ਘੰਟਾ',
      hh: '%d ਘੰਟੇ',
      d: 'ਇੱਕ ਦਿਨ',
      dd: '%d ਦਿਨ',
      M: 'ਇੱਕ ਮਹੀਨਾ',
      MM: '%d ਮਹੀਨੇ',
      y: 'ਇੱਕ ਸਾਲ',
      yy: '%d ਸਾਲ'
    },
    preparse: function preparse(string) {
      return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {
        return numberMap[match];
      });
    },
    postformat: function postformat(string) {
      return string.replace(/\d/g, function (match) {
        return symbolMap[match];
      });
    },
    // Punjabi notation for meridiems are quite fuzzy in practice. While there exists
    // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.
    meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,
    meridiemHour: function meridiemHour(hour, meridiem) {
      if (hour === 12) {
        hour = 0;
      }

      if (meridiem === 'ਰਾਤ') {
        return hour < 4 ? hour : hour + 12;
      } else if (meridiem === 'ਸਵੇਰ') {
        return hour;
      } else if (meridiem === 'ਦੁਪਹਿਰ') {
        return hour >= 10 ? hour : hour + 12;
      } else if (meridiem === 'ਸ਼ਾਮ') {
        return hour + 12;
      }
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 4) {
        return 'ਰਾਤ';
      } else if (hour < 10) {
        return 'ਸਵੇਰ';
      } else if (hour < 17) {
        return 'ਦੁਪਹਿਰ';
      } else if (hour < 20) {
        return 'ਸ਼ਾਮ';
      } else {
        return 'ਰਾਤ';
      }
    },
    week: {
      dow: 0,
      // Sunday is the first day of the week.
      doy: 6 // The week that contains Jan 6th is the first week of the year.

    }
  });
  return paIn;
});

/***/ }),

/***/ "./node_modules/moment/locale/pl.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/pl.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Polish [pl]
//! author : Rafal Hirsz : https://github.com/evoL
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'),
      monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_'),
      monthsParse = [/^sty/i, /^lut/i, /^mar/i, /^kwi/i, /^maj/i, /^cze/i, /^lip/i, /^sie/i, /^wrz/i, /^paź/i, /^lis/i, /^gru/i];

  function plural(n) {
    return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1;
  }

  function translate(number, withoutSuffix, key) {
    var result = number + ' ';

    switch (key) {
      case 'ss':
        return result + (plural(number) ? 'sekundy' : 'sekund');

      case 'm':
        return withoutSuffix ? 'minuta' : 'minutę';

      case 'mm':
        return result + (plural(number) ? 'minuty' : 'minut');

      case 'h':
        return withoutSuffix ? 'godzina' : 'godzinę';

      case 'hh':
        return result + (plural(number) ? 'godziny' : 'godzin');

      case 'ww':
        return result + (plural(number) ? 'tygodnie' : 'tygodni');

      case 'MM':
        return result + (plural(number) ? 'miesiące' : 'miesięcy');

      case 'yy':
        return result + (plural(number) ? 'lata' : 'lat');
    }
  }

  var pl = moment.defineLocale('pl', {
    months: function months(momentToFormat, format) {
      if (!momentToFormat) {
        return monthsNominative;
      } else if (/D MMMM/.test(format)) {
        return monthsSubjective[momentToFormat.month()];
      } else {
        return monthsNominative[momentToFormat.month()];
      }
    },
    monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,
    weekdays: 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),
    weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),
    weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd, D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[Dziś o] LT',
      nextDay: '[Jutro o] LT',
      nextWeek: function nextWeek() {
        switch (this.day()) {
          case 0:
            return '[W niedzielę o] LT';

          case 2:
            return '[We wtorek o] LT';

          case 3:
            return '[W środę o] LT';

          case 6:
            return '[W sobotę o] LT';

          default:
            return '[W] dddd [o] LT';
        }
      },
      lastDay: '[Wczoraj o] LT',
      lastWeek: function lastWeek() {
        switch (this.day()) {
          case 0:
            return '[W zeszłą niedzielę o] LT';

          case 3:
            return '[W zeszłą środę o] LT';

          case 6:
            return '[W zeszłą sobotę o] LT';

          default:
            return '[W zeszły] dddd [o] LT';
        }
      },
      sameElse: 'L'
    },
    relativeTime: {
      future: 'za %s',
      past: '%s temu',
      s: 'kilka sekund',
      ss: translate,
      m: translate,
      mm: translate,
      h: translate,
      hh: translate,
      d: '1 dzień',
      dd: '%d dni',
      w: 'tydzień',
      ww: translate,
      M: 'miesiąc',
      MM: translate,
      y: 'rok',
      yy: translate
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return pl;
});

/***/ }),

/***/ "./node_modules/moment/locale/pt-br.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/pt-br.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Portuguese (Brazil) [pt-br]
//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var ptBr = moment.defineLocale('pt-br', {
    months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split('_'),
    monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),
    weekdays: 'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split('_'),
    weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'),
    weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D [de] MMMM [de] YYYY',
      LLL: 'D [de] MMMM [de] YYYY [às] HH:mm',
      LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'
    },
    calendar: {
      sameDay: '[Hoje às] LT',
      nextDay: '[Amanhã às] LT',
      nextWeek: 'dddd [às] LT',
      lastDay: '[Ontem às] LT',
      lastWeek: function lastWeek() {
        return this.day() === 0 || this.day() === 6 ? '[Último] dddd [às] LT' // Saturday + Sunday
        : '[Última] dddd [às] LT'; // Monday - Friday
      },
      sameElse: 'L'
    },
    relativeTime: {
      future: 'em %s',
      past: 'há %s',
      s: 'poucos segundos',
      ss: '%d segundos',
      m: 'um minuto',
      mm: '%d minutos',
      h: 'uma hora',
      hh: '%d horas',
      d: 'um dia',
      dd: '%d dias',
      M: 'um mês',
      MM: '%d meses',
      y: 'um ano',
      yy: '%d anos'
    },
    dayOfMonthOrdinalParse: /\d{1,2}º/,
    ordinal: '%dº',
    invalidDate: 'Data inválida'
  });
  return ptBr;
});

/***/ }),

/***/ "./node_modules/moment/locale/pt.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/pt.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Portuguese [pt]
//! author : Jefferson : https://github.com/jalex79
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var pt = moment.defineLocale('pt', {
    months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split('_'),
    monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),
    weekdays: 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),
    weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
    weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D [de] MMMM [de] YYYY',
      LLL: 'D [de] MMMM [de] YYYY HH:mm',
      LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm'
    },
    calendar: {
      sameDay: '[Hoje às] LT',
      nextDay: '[Amanhã às] LT',
      nextWeek: 'dddd [às] LT',
      lastDay: '[Ontem às] LT',
      lastWeek: function lastWeek() {
        return this.day() === 0 || this.day() === 6 ? '[Último] dddd [às] LT' // Saturday + Sunday
        : '[Última] dddd [às] LT'; // Monday - Friday
      },
      sameElse: 'L'
    },
    relativeTime: {
      future: 'em %s',
      past: 'há %s',
      s: 'segundos',
      ss: '%d segundos',
      m: 'um minuto',
      mm: '%d minutos',
      h: 'uma hora',
      hh: '%d horas',
      d: 'um dia',
      dd: '%d dias',
      w: 'uma semana',
      ww: '%d semanas',
      M: 'um mês',
      MM: '%d meses',
      y: 'um ano',
      yy: '%d anos'
    },
    dayOfMonthOrdinalParse: /\d{1,2}º/,
    ordinal: '%dº',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return pt;
});

/***/ }),

/***/ "./node_modules/moment/locale/ro.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ro.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Romanian [ro]
//! author : Vlad Gurdiga : https://github.com/gurdiga
//! author : Valentin Agachi : https://github.com/avaly
//! author : Emanuel Cepoi : https://github.com/cepem
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  function relativeTimeWithPlural(number, withoutSuffix, key) {
    var format = {
      ss: 'secunde',
      mm: 'minute',
      hh: 'ore',
      dd: 'zile',
      ww: 'săptămâni',
      MM: 'luni',
      yy: 'ani'
    },
        separator = ' ';

    if (number % 100 >= 20 || number >= 100 && number % 100 === 0) {
      separator = ' de ';
    }

    return number + separator + format[key];
  }

  var ro = moment.defineLocale('ro', {
    months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),
    monthsShort: 'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),
    monthsParseExact: true,
    weekdays: 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),
    weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),
    weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),
    longDateFormat: {
      LT: 'H:mm',
      LTS: 'H:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY H:mm',
      LLLL: 'dddd, D MMMM YYYY H:mm'
    },
    calendar: {
      sameDay: '[azi la] LT',
      nextDay: '[mâine la] LT',
      nextWeek: 'dddd [la] LT',
      lastDay: '[ieri la] LT',
      lastWeek: '[fosta] dddd [la] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'peste %s',
      past: '%s în urmă',
      s: 'câteva secunde',
      ss: relativeTimeWithPlural,
      m: 'un minut',
      mm: relativeTimeWithPlural,
      h: 'o oră',
      hh: relativeTimeWithPlural,
      d: 'o zi',
      dd: relativeTimeWithPlural,
      w: 'o săptămână',
      ww: relativeTimeWithPlural,
      M: 'o lună',
      MM: relativeTimeWithPlural,
      y: 'un an',
      yy: relativeTimeWithPlural
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 7 // The week that contains Jan 7th is the first week of the year.

    }
  });
  return ro;
});

/***/ }),

/***/ "./node_modules/moment/locale/ru.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ru.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Russian [ru]
//! author : Viktorminator : https://github.com/Viktorminator
//! author : Menelion Elensúle : https://github.com/Oire
//! author : Коренберг Марк : https://github.com/socketpair
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  function plural(word, num) {
    var forms = word.split('_');
    return num % 10 === 1 && num % 100 !== 11 ? forms[0] : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2];
  }

  function relativeTimeWithPlural(number, withoutSuffix, key) {
    var format = {
      ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',
      mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',
      hh: 'час_часа_часов',
      dd: 'день_дня_дней',
      ww: 'неделя_недели_недель',
      MM: 'месяц_месяца_месяцев',
      yy: 'год_года_лет'
    };

    if (key === 'm') {
      return withoutSuffix ? 'минута' : 'минуту';
    } else {
      return number + ' ' + plural(format[key], +number);
    }
  }

  var monthsParse = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i]; // http://new.gramota.ru/spravka/rules/139-prop : § 103
  // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637
  // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753

  var ru = moment.defineLocale('ru', {
    months: {
      format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'),
      standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_')
    },
    monthsShort: {
      // по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку?
      format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'),
      standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_')
    },
    weekdays: {
      standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),
      format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'),
      isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/
    },
    weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
    weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,
    // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки
    monthsRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
    // копия предыдущего
    monthsShortRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
    // полные названия с падежами
    monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,
    // Выражение, которое соответствует только сокращённым формам
    monthsShortStrictRegex: /^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,
    longDateFormat: {
      LT: 'H:mm',
      LTS: 'H:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'D MMMM YYYY г.',
      LLL: 'D MMMM YYYY г., H:mm',
      LLLL: 'dddd, D MMMM YYYY г., H:mm'
    },
    calendar: {
      sameDay: '[Сегодня, в] LT',
      nextDay: '[Завтра, в] LT',
      lastDay: '[Вчера, в] LT',
      nextWeek: function nextWeek(now) {
        if (now.week() !== this.week()) {
          switch (this.day()) {
            case 0:
              return '[В следующее] dddd, [в] LT';

            case 1:
            case 2:
            case 4:
              return '[В следующий] dddd, [в] LT';

            case 3:
            case 5:
            case 6:
              return '[В следующую] dddd, [в] LT';
          }
        } else {
          if (this.day() === 2) {
            return '[Во] dddd, [в] LT';
          } else {
            return '[В] dddd, [в] LT';
          }
        }
      },
      lastWeek: function lastWeek(now) {
        if (now.week() !== this.week()) {
          switch (this.day()) {
            case 0:
              return '[В прошлое] dddd, [в] LT';

            case 1:
            case 2:
            case 4:
              return '[В прошлый] dddd, [в] LT';

            case 3:
            case 5:
            case 6:
              return '[В прошлую] dddd, [в] LT';
          }
        } else {
          if (this.day() === 2) {
            return '[Во] dddd, [в] LT';
          } else {
            return '[В] dddd, [в] LT';
          }
        }
      },
      sameElse: 'L'
    },
    relativeTime: {
      future: 'через %s',
      past: '%s назад',
      s: 'несколько секунд',
      ss: relativeTimeWithPlural,
      m: relativeTimeWithPlural,
      mm: relativeTimeWithPlural,
      h: 'час',
      hh: relativeTimeWithPlural,
      d: 'день',
      dd: relativeTimeWithPlural,
      w: 'неделя',
      ww: relativeTimeWithPlural,
      M: 'месяц',
      MM: relativeTimeWithPlural,
      y: 'год',
      yy: relativeTimeWithPlural
    },
    meridiemParse: /ночи|утра|дня|вечера/i,
    isPM: function isPM(input) {
      return /^(дня|вечера)$/.test(input);
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 4) {
        return 'ночи';
      } else if (hour < 12) {
        return 'утра';
      } else if (hour < 17) {
        return 'дня';
      } else {
        return 'вечера';
      }
    },
    dayOfMonthOrdinalParse: /\d{1,2}-(й|го|я)/,
    ordinal: function ordinal(number, period) {
      switch (period) {
        case 'M':
        case 'd':
        case 'DDD':
          return number + '-й';

        case 'D':
          return number + '-го';

        case 'w':
        case 'W':
          return number + '-я';

        default:
          return number;
      }
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return ru;
});

/***/ }),

/***/ "./node_modules/moment/locale/sd.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/sd.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Sindhi [sd]
//! author : Narain Sagar : https://github.com/narainsagar
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var months = ['جنوري', 'فيبروري', 'مارچ', 'اپريل', 'مئي', 'جون', 'جولاءِ', 'آگسٽ', 'سيپٽمبر', 'آڪٽوبر', 'نومبر', 'ڊسمبر'],
      days = ['آچر', 'سومر', 'اڱارو', 'اربع', 'خميس', 'جمع', 'ڇنڇر'];
  var sd = moment.defineLocale('sd', {
    months: months,
    monthsShort: months,
    weekdays: days,
    weekdaysShort: days,
    weekdaysMin: days,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd، D MMMM YYYY HH:mm'
    },
    meridiemParse: /صبح|شام/,
    isPM: function isPM(input) {
      return 'شام' === input;
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 12) {
        return 'صبح';
      }

      return 'شام';
    },
    calendar: {
      sameDay: '[اڄ] LT',
      nextDay: '[سڀاڻي] LT',
      nextWeek: 'dddd [اڳين هفتي تي] LT',
      lastDay: '[ڪالهه] LT',
      lastWeek: '[گزريل هفتي] dddd [تي] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s پوء',
      past: '%s اڳ',
      s: 'چند سيڪنڊ',
      ss: '%d سيڪنڊ',
      m: 'هڪ منٽ',
      mm: '%d منٽ',
      h: 'هڪ ڪلاڪ',
      hh: '%d ڪلاڪ',
      d: 'هڪ ڏينهن',
      dd: '%d ڏينهن',
      M: 'هڪ مهينو',
      MM: '%d مهينا',
      y: 'هڪ سال',
      yy: '%d سال'
    },
    preparse: function preparse(string) {
      return string.replace(/،/g, ',');
    },
    postformat: function postformat(string) {
      return string.replace(/,/g, '،');
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return sd;
});

/***/ }),

/***/ "./node_modules/moment/locale/se.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/se.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Northern Sami [se]
//! authors : Bård Rolstad Henriksen : https://github.com/karamell
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var se = moment.defineLocale('se', {
    months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'),
    monthsShort: 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),
    weekdays: 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'),
    weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),
    weekdaysMin: 's_v_m_g_d_b_L'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'MMMM D. [b.] YYYY',
      LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm',
      LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm'
    },
    calendar: {
      sameDay: '[otne ti] LT',
      nextDay: '[ihttin ti] LT',
      nextWeek: 'dddd [ti] LT',
      lastDay: '[ikte ti] LT',
      lastWeek: '[ovddit] dddd [ti] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s geažes',
      past: 'maŋit %s',
      s: 'moadde sekunddat',
      ss: '%d sekunddat',
      m: 'okta minuhta',
      mm: '%d minuhtat',
      h: 'okta diimmu',
      hh: '%d diimmut',
      d: 'okta beaivi',
      dd: '%d beaivvit',
      M: 'okta mánnu',
      MM: '%d mánut',
      y: 'okta jahki',
      yy: '%d jagit'
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return se;
});

/***/ }),

/***/ "./node_modules/moment/locale/si.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/si.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Sinhalese [si]
//! author : Sampath Sitinamaluwa : https://github.com/sampathsris
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  /*jshint -W100*/

  var si = moment.defineLocale('si', {
    months: 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'),
    monthsShort: 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'),
    weekdays: 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),
    weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),
    weekdaysMin: 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'a h:mm',
      LTS: 'a h:mm:ss',
      L: 'YYYY/MM/DD',
      LL: 'YYYY MMMM D',
      LLL: 'YYYY MMMM D, a h:mm',
      LLLL: 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'
    },
    calendar: {
      sameDay: '[අද] LT[ට]',
      nextDay: '[හෙට] LT[ට]',
      nextWeek: 'dddd LT[ට]',
      lastDay: '[ඊයේ] LT[ට]',
      lastWeek: '[පසුගිය] dddd LT[ට]',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%sකින්',
      past: '%sකට පෙර',
      s: 'තත්පර කිහිපය',
      ss: 'තත්පර %d',
      m: 'මිනිත්තුව',
      mm: 'මිනිත්තු %d',
      h: 'පැය',
      hh: 'පැය %d',
      d: 'දිනය',
      dd: 'දින %d',
      M: 'මාසය',
      MM: 'මාස %d',
      y: 'වසර',
      yy: 'වසර %d'
    },
    dayOfMonthOrdinalParse: /\d{1,2} වැනි/,
    ordinal: function ordinal(number) {
      return number + ' වැනි';
    },
    meridiemParse: /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,
    isPM: function isPM(input) {
      return input === 'ප.ව.' || input === 'පස් වරු';
    },
    meridiem: function meridiem(hours, minutes, isLower) {
      if (hours > 11) {
        return isLower ? 'ප.ව.' : 'පස් වරු';
      } else {
        return isLower ? 'පෙ.ව.' : 'පෙර වරු';
      }
    }
  });
  return si;
});

/***/ }),

/***/ "./node_modules/moment/locale/sk.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/sk.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Slovak [sk]
//! author : Martin Minka : https://github.com/k2s
//! based on work of petrbela : https://github.com/petrbela
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'),
      monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');

  function plural(n) {
    return n > 1 && n < 5;
  }

  function translate(number, withoutSuffix, key, isFuture) {
    var result = number + ' ';

    switch (key) {
      case 's':
        // a few seconds / in a few seconds / a few seconds ago
        return withoutSuffix || isFuture ? 'pár sekúnd' : 'pár sekundami';

      case 'ss':
        // 9 seconds / in 9 seconds / 9 seconds ago
        if (withoutSuffix || isFuture) {
          return result + (plural(number) ? 'sekundy' : 'sekúnd');
        } else {
          return result + 'sekundami';
        }

      case 'm':
        // a minute / in a minute / a minute ago
        return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou';

      case 'mm':
        // 9 minutes / in 9 minutes / 9 minutes ago
        if (withoutSuffix || isFuture) {
          return result + (plural(number) ? 'minúty' : 'minút');
        } else {
          return result + 'minútami';
        }

      case 'h':
        // an hour / in an hour / an hour ago
        return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';

      case 'hh':
        // 9 hours / in 9 hours / 9 hours ago
        if (withoutSuffix || isFuture) {
          return result + (plural(number) ? 'hodiny' : 'hodín');
        } else {
          return result + 'hodinami';
        }

      case 'd':
        // a day / in a day / a day ago
        return withoutSuffix || isFuture ? 'deň' : 'dňom';

      case 'dd':
        // 9 days / in 9 days / 9 days ago
        if (withoutSuffix || isFuture) {
          return result + (plural(number) ? 'dni' : 'dní');
        } else {
          return result + 'dňami';
        }

      case 'M':
        // a month / in a month / a month ago
        return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom';

      case 'MM':
        // 9 months / in 9 months / 9 months ago
        if (withoutSuffix || isFuture) {
          return result + (plural(number) ? 'mesiace' : 'mesiacov');
        } else {
          return result + 'mesiacmi';
        }

      case 'y':
        // a year / in a year / a year ago
        return withoutSuffix || isFuture ? 'rok' : 'rokom';

      case 'yy':
        // 9 years / in 9 years / 9 years ago
        if (withoutSuffix || isFuture) {
          return result + (plural(number) ? 'roky' : 'rokov');
        } else {
          return result + 'rokmi';
        }

    }
  }

  var sk = moment.defineLocale('sk', {
    months: months,
    monthsShort: monthsShort,
    weekdays: 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),
    weekdaysShort: 'ne_po_ut_st_št_pi_so'.split('_'),
    weekdaysMin: 'ne_po_ut_st_št_pi_so'.split('_'),
    longDateFormat: {
      LT: 'H:mm',
      LTS: 'H:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'D. MMMM YYYY',
      LLL: 'D. MMMM YYYY H:mm',
      LLLL: 'dddd D. MMMM YYYY H:mm'
    },
    calendar: {
      sameDay: '[dnes o] LT',
      nextDay: '[zajtra o] LT',
      nextWeek: function nextWeek() {
        switch (this.day()) {
          case 0:
            return '[v nedeľu o] LT';

          case 1:
          case 2:
            return '[v] dddd [o] LT';

          case 3:
            return '[v stredu o] LT';

          case 4:
            return '[vo štvrtok o] LT';

          case 5:
            return '[v piatok o] LT';

          case 6:
            return '[v sobotu o] LT';
        }
      },
      lastDay: '[včera o] LT',
      lastWeek: function lastWeek() {
        switch (this.day()) {
          case 0:
            return '[minulú nedeľu o] LT';

          case 1:
          case 2:
            return '[minulý] dddd [o] LT';

          case 3:
            return '[minulú stredu o] LT';

          case 4:
          case 5:
            return '[minulý] dddd [o] LT';

          case 6:
            return '[minulú sobotu o] LT';
        }
      },
      sameElse: 'L'
    },
    relativeTime: {
      future: 'za %s',
      past: 'pred %s',
      s: translate,
      ss: translate,
      m: translate,
      mm: translate,
      h: translate,
      hh: translate,
      d: translate,
      dd: translate,
      M: translate,
      MM: translate,
      y: translate,
      yy: translate
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return sk;
});

/***/ }),

/***/ "./node_modules/moment/locale/sl.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/sl.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Slovenian [sl]
//! author : Robert Sedovšek : https://github.com/sedovsek
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  function processRelativeTime(number, withoutSuffix, key, isFuture) {
    var result = number + ' ';

    switch (key) {
      case 's':
        return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';

      case 'ss':
        if (number === 1) {
          result += withoutSuffix ? 'sekundo' : 'sekundi';
        } else if (number === 2) {
          result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';
        } else if (number < 5) {
          result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';
        } else {
          result += 'sekund';
        }

        return result;

      case 'm':
        return withoutSuffix ? 'ena minuta' : 'eno minuto';

      case 'mm':
        if (number === 1) {
          result += withoutSuffix ? 'minuta' : 'minuto';
        } else if (number === 2) {
          result += withoutSuffix || isFuture ? 'minuti' : 'minutama';
        } else if (number < 5) {
          result += withoutSuffix || isFuture ? 'minute' : 'minutami';
        } else {
          result += withoutSuffix || isFuture ? 'minut' : 'minutami';
        }

        return result;

      case 'h':
        return withoutSuffix ? 'ena ura' : 'eno uro';

      case 'hh':
        if (number === 1) {
          result += withoutSuffix ? 'ura' : 'uro';
        } else if (number === 2) {
          result += withoutSuffix || isFuture ? 'uri' : 'urama';
        } else if (number < 5) {
          result += withoutSuffix || isFuture ? 'ure' : 'urami';
        } else {
          result += withoutSuffix || isFuture ? 'ur' : 'urami';
        }

        return result;

      case 'd':
        return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';

      case 'dd':
        if (number === 1) {
          result += withoutSuffix || isFuture ? 'dan' : 'dnem';
        } else if (number === 2) {
          result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';
        } else {
          result += withoutSuffix || isFuture ? 'dni' : 'dnevi';
        }

        return result;

      case 'M':
        return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';

      case 'MM':
        if (number === 1) {
          result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';
        } else if (number === 2) {
          result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';
        } else if (number < 5) {
          result += withoutSuffix || isFuture ? 'mesece' : 'meseci';
        } else {
          result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';
        }

        return result;

      case 'y':
        return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';

      case 'yy':
        if (number === 1) {
          result += withoutSuffix || isFuture ? 'leto' : 'letom';
        } else if (number === 2) {
          result += withoutSuffix || isFuture ? 'leti' : 'letoma';
        } else if (number < 5) {
          result += withoutSuffix || isFuture ? 'leta' : 'leti';
        } else {
          result += withoutSuffix || isFuture ? 'let' : 'leti';
        }

        return result;
    }
  }

  var sl = moment.defineLocale('sl', {
    months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),
    monthsShort: 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),
    monthsParseExact: true,
    weekdays: 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),
    weekdaysShort: 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),
    weekdaysMin: 'ne_po_to_sr_če_pe_so'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'H:mm',
      LTS: 'H:mm:ss',
      L: 'DD. MM. YYYY',
      LL: 'D. MMMM YYYY',
      LLL: 'D. MMMM YYYY H:mm',
      LLLL: 'dddd, D. MMMM YYYY H:mm'
    },
    calendar: {
      sameDay: '[danes ob] LT',
      nextDay: '[jutri ob] LT',
      nextWeek: function nextWeek() {
        switch (this.day()) {
          case 0:
            return '[v] [nedeljo] [ob] LT';

          case 3:
            return '[v] [sredo] [ob] LT';

          case 6:
            return '[v] [soboto] [ob] LT';

          case 1:
          case 2:
          case 4:
          case 5:
            return '[v] dddd [ob] LT';
        }
      },
      lastDay: '[včeraj ob] LT',
      lastWeek: function lastWeek() {
        switch (this.day()) {
          case 0:
            return '[prejšnjo] [nedeljo] [ob] LT';

          case 3:
            return '[prejšnjo] [sredo] [ob] LT';

          case 6:
            return '[prejšnjo] [soboto] [ob] LT';

          case 1:
          case 2:
          case 4:
          case 5:
            return '[prejšnji] dddd [ob] LT';
        }
      },
      sameElse: 'L'
    },
    relativeTime: {
      future: 'čez %s',
      past: 'pred %s',
      s: processRelativeTime,
      ss: processRelativeTime,
      m: processRelativeTime,
      mm: processRelativeTime,
      h: processRelativeTime,
      hh: processRelativeTime,
      d: processRelativeTime,
      dd: processRelativeTime,
      M: processRelativeTime,
      MM: processRelativeTime,
      y: processRelativeTime,
      yy: processRelativeTime
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 7 // The week that contains Jan 7th is the first week of the year.

    }
  });
  return sl;
});

/***/ }),

/***/ "./node_modules/moment/locale/sq.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/sq.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Albanian [sq]
//! author : Flakërim Ismani : https://github.com/flakerimi
//! author : Menelion Elensúle : https://github.com/Oire
//! author : Oerd Cukalla : https://github.com/oerd
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var sq = moment.defineLocale('sq', {
    months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),
    monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),
    weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),
    weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),
    weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'),
    weekdaysParseExact: true,
    meridiemParse: /PD|MD/,
    isPM: function isPM(input) {
      return input.charAt(0) === 'M';
    },
    meridiem: function meridiem(hours, minutes, isLower) {
      return hours < 12 ? 'PD' : 'MD';
    },
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd, D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[Sot në] LT',
      nextDay: '[Nesër në] LT',
      nextWeek: 'dddd [në] LT',
      lastDay: '[Dje në] LT',
      lastWeek: 'dddd [e kaluar në] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'në %s',
      past: '%s më parë',
      s: 'disa sekonda',
      ss: '%d sekonda',
      m: 'një minutë',
      mm: '%d minuta',
      h: 'një orë',
      hh: '%d orë',
      d: 'një ditë',
      dd: '%d ditë',
      M: 'një muaj',
      MM: '%d muaj',
      y: 'një vit',
      yy: '%d vite'
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return sq;
});

/***/ }),

/***/ "./node_modules/moment/locale/sr-cyrl.js":
/*!***********************************************!*\
  !*** ./node_modules/moment/locale/sr-cyrl.js ***!
  \***********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Serbian Cyrillic [sr-cyrl]
//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
//! author : Stefan Crnjaković <stefan@hotmail.rs> : https://github.com/crnjakovic
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var translator = {
    words: {
      //Different grammatical cases
      ss: ['секунда', 'секунде', 'секунди'],
      m: ['један минут', 'једне минуте'],
      mm: ['минут', 'минуте', 'минута'],
      h: ['један сат', 'једног сата'],
      hh: ['сат', 'сата', 'сати'],
      dd: ['дан', 'дана', 'дана'],
      MM: ['месец', 'месеца', 'месеци'],
      yy: ['година', 'године', 'година']
    },
    correctGrammaticalCase: function correctGrammaticalCase(number, wordKey) {
      return number === 1 ? wordKey[0] : number >= 2 && number <= 4 ? wordKey[1] : wordKey[2];
    },
    translate: function translate(number, withoutSuffix, key) {
      var wordKey = translator.words[key];

      if (key.length === 1) {
        return withoutSuffix ? wordKey[0] : wordKey[1];
      } else {
        return number + ' ' + translator.correctGrammaticalCase(number, wordKey);
      }
    }
  };
  var srCyrl = moment.defineLocale('sr-cyrl', {
    months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'),
    monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),
    monthsParseExact: true,
    weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),
    weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),
    weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'H:mm',
      LTS: 'H:mm:ss',
      L: 'D. M. YYYY.',
      LL: 'D. MMMM YYYY.',
      LLL: 'D. MMMM YYYY. H:mm',
      LLLL: 'dddd, D. MMMM YYYY. H:mm'
    },
    calendar: {
      sameDay: '[данас у] LT',
      nextDay: '[сутра у] LT',
      nextWeek: function nextWeek() {
        switch (this.day()) {
          case 0:
            return '[у] [недељу] [у] LT';

          case 3:
            return '[у] [среду] [у] LT';

          case 6:
            return '[у] [суботу] [у] LT';

          case 1:
          case 2:
          case 4:
          case 5:
            return '[у] dddd [у] LT';
        }
      },
      lastDay: '[јуче у] LT',
      lastWeek: function lastWeek() {
        var lastWeekDays = ['[прошле] [недеље] [у] LT', '[прошлог] [понедељка] [у] LT', '[прошлог] [уторка] [у] LT', '[прошле] [среде] [у] LT', '[прошлог] [четвртка] [у] LT', '[прошлог] [петка] [у] LT', '[прошле] [суботе] [у] LT'];
        return lastWeekDays[this.day()];
      },
      sameElse: 'L'
    },
    relativeTime: {
      future: 'за %s',
      past: 'пре %s',
      s: 'неколико секунди',
      ss: translator.translate,
      m: translator.translate,
      mm: translator.translate,
      h: translator.translate,
      hh: translator.translate,
      d: 'дан',
      dd: translator.translate,
      M: 'месец',
      MM: translator.translate,
      y: 'годину',
      yy: translator.translate
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 7 // The week that contains Jan 1st is the first week of the year.

    }
  });
  return srCyrl;
});

/***/ }),

/***/ "./node_modules/moment/locale/sr.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/sr.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Serbian [sr]
//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
//! author : Stefan Crnjaković <stefan@hotmail.rs> : https://github.com/crnjakovic
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var translator = {
    words: {
      //Different grammatical cases
      ss: ['sekunda', 'sekunde', 'sekundi'],
      m: ['jedan minut', 'jedne minute'],
      mm: ['minut', 'minute', 'minuta'],
      h: ['jedan sat', 'jednog sata'],
      hh: ['sat', 'sata', 'sati'],
      dd: ['dan', 'dana', 'dana'],
      MM: ['mesec', 'meseca', 'meseci'],
      yy: ['godina', 'godine', 'godina']
    },
    correctGrammaticalCase: function correctGrammaticalCase(number, wordKey) {
      return number === 1 ? wordKey[0] : number >= 2 && number <= 4 ? wordKey[1] : wordKey[2];
    },
    translate: function translate(number, withoutSuffix, key) {
      var wordKey = translator.words[key];

      if (key.length === 1) {
        return withoutSuffix ? wordKey[0] : wordKey[1];
      } else {
        return number + ' ' + translator.correctGrammaticalCase(number, wordKey);
      }
    }
  };
  var sr = moment.defineLocale('sr', {
    months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),
    monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),
    monthsParseExact: true,
    weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'),
    weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),
    weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'H:mm',
      LTS: 'H:mm:ss',
      L: 'D. M. YYYY.',
      LL: 'D. MMMM YYYY.',
      LLL: 'D. MMMM YYYY. H:mm',
      LLLL: 'dddd, D. MMMM YYYY. H:mm'
    },
    calendar: {
      sameDay: '[danas u] LT',
      nextDay: '[sutra u] LT',
      nextWeek: function nextWeek() {
        switch (this.day()) {
          case 0:
            return '[u] [nedelju] [u] LT';

          case 3:
            return '[u] [sredu] [u] LT';

          case 6:
            return '[u] [subotu] [u] LT';

          case 1:
          case 2:
          case 4:
          case 5:
            return '[u] dddd [u] LT';
        }
      },
      lastDay: '[juče u] LT',
      lastWeek: function lastWeek() {
        var lastWeekDays = ['[prošle] [nedelje] [u] LT', '[prošlog] [ponedeljka] [u] LT', '[prošlog] [utorka] [u] LT', '[prošle] [srede] [u] LT', '[prošlog] [četvrtka] [u] LT', '[prošlog] [petka] [u] LT', '[prošle] [subote] [u] LT'];
        return lastWeekDays[this.day()];
      },
      sameElse: 'L'
    },
    relativeTime: {
      future: 'za %s',
      past: 'pre %s',
      s: 'nekoliko sekundi',
      ss: translator.translate,
      m: translator.translate,
      mm: translator.translate,
      h: translator.translate,
      hh: translator.translate,
      d: 'dan',
      dd: translator.translate,
      M: 'mesec',
      MM: translator.translate,
      y: 'godinu',
      yy: translator.translate
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 7 // The week that contains Jan 7th is the first week of the year.

    }
  });
  return sr;
});

/***/ }),

/***/ "./node_modules/moment/locale/ss.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ss.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : siSwati [ss]
//! author : Nicolai Davies<mail@nicolai.io> : https://github.com/nicolaidavies
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var ss = moment.defineLocale('ss', {
    months: "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split('_'),
    monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),
    weekdays: 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'),
    weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),
    weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'h:mm A',
      LTS: 'h:mm:ss A',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY h:mm A',
      LLLL: 'dddd, D MMMM YYYY h:mm A'
    },
    calendar: {
      sameDay: '[Namuhla nga] LT',
      nextDay: '[Kusasa nga] LT',
      nextWeek: 'dddd [nga] LT',
      lastDay: '[Itolo nga] LT',
      lastWeek: 'dddd [leliphelile] [nga] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'nga %s',
      past: 'wenteka nga %s',
      s: 'emizuzwana lomcane',
      ss: '%d mzuzwana',
      m: 'umzuzu',
      mm: '%d emizuzu',
      h: 'lihora',
      hh: '%d emahora',
      d: 'lilanga',
      dd: '%d emalanga',
      M: 'inyanga',
      MM: '%d tinyanga',
      y: 'umnyaka',
      yy: '%d iminyaka'
    },
    meridiemParse: /ekuseni|emini|entsambama|ebusuku/,
    meridiem: function meridiem(hours, minutes, isLower) {
      if (hours < 11) {
        return 'ekuseni';
      } else if (hours < 15) {
        return 'emini';
      } else if (hours < 19) {
        return 'entsambama';
      } else {
        return 'ebusuku';
      }
    },
    meridiemHour: function meridiemHour(hour, meridiem) {
      if (hour === 12) {
        hour = 0;
      }

      if (meridiem === 'ekuseni') {
        return hour;
      } else if (meridiem === 'emini') {
        return hour >= 11 ? hour : hour + 12;
      } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {
        if (hour === 0) {
          return 0;
        }

        return hour + 12;
      }
    },
    dayOfMonthOrdinalParse: /\d{1,2}/,
    ordinal: '%d',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return ss;
});

/***/ }),

/***/ "./node_modules/moment/locale/sv.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/sv.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Swedish [sv]
//! author : Jens Alm : https://github.com/ulmus
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var sv = moment.defineLocale('sv', {
    months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),
    monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
    weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),
    weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'),
    weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'YYYY-MM-DD',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY [kl.] HH:mm',
      LLLL: 'dddd D MMMM YYYY [kl.] HH:mm',
      lll: 'D MMM YYYY HH:mm',
      llll: 'ddd D MMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[Idag] LT',
      nextDay: '[Imorgon] LT',
      lastDay: '[Igår] LT',
      nextWeek: '[På] dddd LT',
      lastWeek: '[I] dddd[s] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'om %s',
      past: 'för %s sedan',
      s: 'några sekunder',
      ss: '%d sekunder',
      m: 'en minut',
      mm: '%d minuter',
      h: 'en timme',
      hh: '%d timmar',
      d: 'en dag',
      dd: '%d dagar',
      M: 'en månad',
      MM: '%d månader',
      y: 'ett år',
      yy: '%d år'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(\:e|\:a)/,
    ordinal: function ordinal(number) {
      var b = number % 10,
          output = ~~(number % 100 / 10) === 1 ? ':e' : b === 1 ? ':a' : b === 2 ? ':a' : b === 3 ? ':e' : ':e';
      return number + output;
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return sv;
});

/***/ }),

/***/ "./node_modules/moment/locale/sw.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/sw.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Swahili [sw]
//! author : Fahad Kassim : https://github.com/fadsel
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var sw = moment.defineLocale('sw', {
    months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'),
    monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),
    weekdays: 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),
    weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),
    weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'hh:mm A',
      LTS: 'HH:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd, D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[leo saa] LT',
      nextDay: '[kesho saa] LT',
      nextWeek: '[wiki ijayo] dddd [saat] LT',
      lastDay: '[jana] LT',
      lastWeek: '[wiki iliyopita] dddd [saat] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s baadaye',
      past: 'tokea %s',
      s: 'hivi punde',
      ss: 'sekunde %d',
      m: 'dakika moja',
      mm: 'dakika %d',
      h: 'saa limoja',
      hh: 'masaa %d',
      d: 'siku moja',
      dd: 'siku %d',
      M: 'mwezi mmoja',
      MM: 'miezi %d',
      y: 'mwaka mmoja',
      yy: 'miaka %d'
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 7 // The week that contains Jan 7th is the first week of the year.

    }
  });
  return sw;
});

/***/ }),

/***/ "./node_modules/moment/locale/ta.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ta.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Tamil [ta]
//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var symbolMap = {
    1: '௧',
    2: '௨',
    3: '௩',
    4: '௪',
    5: '௫',
    6: '௬',
    7: '௭',
    8: '௮',
    9: '௯',
    0: '௦'
  },
      numberMap = {
    '௧': '1',
    '௨': '2',
    '௩': '3',
    '௪': '4',
    '௫': '5',
    '௬': '6',
    '௭': '7',
    '௮': '8',
    '௯': '9',
    '௦': '0'
  };
  var ta = moment.defineLocale('ta', {
    months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),
    monthsShort: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),
    weekdays: 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),
    weekdaysShort: 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'),
    weekdaysMin: 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY, HH:mm',
      LLLL: 'dddd, D MMMM YYYY, HH:mm'
    },
    calendar: {
      sameDay: '[இன்று] LT',
      nextDay: '[நாளை] LT',
      nextWeek: 'dddd, LT',
      lastDay: '[நேற்று] LT',
      lastWeek: '[கடந்த வாரம்] dddd, LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s இல்',
      past: '%s முன்',
      s: 'ஒரு சில விநாடிகள்',
      ss: '%d விநாடிகள்',
      m: 'ஒரு நிமிடம்',
      mm: '%d நிமிடங்கள்',
      h: 'ஒரு மணி நேரம்',
      hh: '%d மணி நேரம்',
      d: 'ஒரு நாள்',
      dd: '%d நாட்கள்',
      M: 'ஒரு மாதம்',
      MM: '%d மாதங்கள்',
      y: 'ஒரு வருடம்',
      yy: '%d ஆண்டுகள்'
    },
    dayOfMonthOrdinalParse: /\d{1,2}வது/,
    ordinal: function ordinal(number) {
      return number + 'வது';
    },
    preparse: function preparse(string) {
      return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {
        return numberMap[match];
      });
    },
    postformat: function postformat(string) {
      return string.replace(/\d/g, function (match) {
        return symbolMap[match];
      });
    },
    // refer http://ta.wikipedia.org/s/1er1
    meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 2) {
        return ' யாமம்';
      } else if (hour < 6) {
        return ' வைகறை'; // வைகறை
      } else if (hour < 10) {
        return ' காலை'; // காலை
      } else if (hour < 14) {
        return ' நண்பகல்'; // நண்பகல்
      } else if (hour < 18) {
        return ' எற்பாடு'; // எற்பாடு
      } else if (hour < 22) {
        return ' மாலை'; // மாலை
      } else {
        return ' யாமம்';
      }
    },
    meridiemHour: function meridiemHour(hour, meridiem) {
      if (hour === 12) {
        hour = 0;
      }

      if (meridiem === 'யாமம்') {
        return hour < 2 ? hour : hour + 12;
      } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {
        return hour;
      } else if (meridiem === 'நண்பகல்') {
        return hour >= 10 ? hour : hour + 12;
      } else {
        return hour + 12;
      }
    },
    week: {
      dow: 0,
      // Sunday is the first day of the week.
      doy: 6 // The week that contains Jan 6th is the first week of the year.

    }
  });
  return ta;
});

/***/ }),

/***/ "./node_modules/moment/locale/te.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/te.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Telugu [te]
//! author : Krishna Chaitanya Thota : https://github.com/kcthota
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var te = moment.defineLocale('te', {
    months: 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'),
    monthsShort: 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'),
    monthsParseExact: true,
    weekdays: 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'),
    weekdaysShort: 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),
    weekdaysMin: 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),
    longDateFormat: {
      LT: 'A h:mm',
      LTS: 'A h:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY, A h:mm',
      LLLL: 'dddd, D MMMM YYYY, A h:mm'
    },
    calendar: {
      sameDay: '[నేడు] LT',
      nextDay: '[రేపు] LT',
      nextWeek: 'dddd, LT',
      lastDay: '[నిన్న] LT',
      lastWeek: '[గత] dddd, LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s లో',
      past: '%s క్రితం',
      s: 'కొన్ని క్షణాలు',
      ss: '%d సెకన్లు',
      m: 'ఒక నిమిషం',
      mm: '%d నిమిషాలు',
      h: 'ఒక గంట',
      hh: '%d గంటలు',
      d: 'ఒక రోజు',
      dd: '%d రోజులు',
      M: 'ఒక నెల',
      MM: '%d నెలలు',
      y: 'ఒక సంవత్సరం',
      yy: '%d సంవత్సరాలు'
    },
    dayOfMonthOrdinalParse: /\d{1,2}వ/,
    ordinal: '%dవ',
    meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,
    meridiemHour: function meridiemHour(hour, meridiem) {
      if (hour === 12) {
        hour = 0;
      }

      if (meridiem === 'రాత్రి') {
        return hour < 4 ? hour : hour + 12;
      } else if (meridiem === 'ఉదయం') {
        return hour;
      } else if (meridiem === 'మధ్యాహ్నం') {
        return hour >= 10 ? hour : hour + 12;
      } else if (meridiem === 'సాయంత్రం') {
        return hour + 12;
      }
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 4) {
        return 'రాత్రి';
      } else if (hour < 10) {
        return 'ఉదయం';
      } else if (hour < 17) {
        return 'మధ్యాహ్నం';
      } else if (hour < 20) {
        return 'సాయంత్రం';
      } else {
        return 'రాత్రి';
      }
    },
    week: {
      dow: 0,
      // Sunday is the first day of the week.
      doy: 6 // The week that contains Jan 6th is the first week of the year.

    }
  });
  return te;
});

/***/ }),

/***/ "./node_modules/moment/locale/tet.js":
/*!*******************************************!*\
  !*** ./node_modules/moment/locale/tet.js ***!
  \*******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Tetun Dili (East Timor) [tet]
//! author : Joshua Brooks : https://github.com/joshbrooks
//! author : Onorio De J. Afonso : https://github.com/marobo
//! author : Sonia Simoes : https://github.com/soniasimoes
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var tet = moment.defineLocale('tet', {
    months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split('_'),
    monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
    weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),
    weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),
    weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd, D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[Ohin iha] LT',
      nextDay: '[Aban iha] LT',
      nextWeek: 'dddd [iha] LT',
      lastDay: '[Horiseik iha] LT',
      lastWeek: 'dddd [semana kotuk] [iha] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'iha %s',
      past: '%s liuba',
      s: 'segundu balun',
      ss: 'segundu %d',
      m: 'minutu ida',
      mm: 'minutu %d',
      h: 'oras ida',
      hh: 'oras %d',
      d: 'loron ida',
      dd: 'loron %d',
      M: 'fulan ida',
      MM: 'fulan %d',
      y: 'tinan ida',
      yy: 'tinan %d'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
    ordinal: function ordinal(number) {
      var b = number % 10,
          output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';
      return number + output;
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return tet;
});

/***/ }),

/***/ "./node_modules/moment/locale/tg.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/tg.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Tajik [tg]
//! author : Orif N. Jr. : https://github.com/orif-jr
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var suffixes = {
    0: '-ум',
    1: '-ум',
    2: '-юм',
    3: '-юм',
    4: '-ум',
    5: '-ум',
    6: '-ум',
    7: '-ум',
    8: '-ум',
    9: '-ум',
    10: '-ум',
    12: '-ум',
    13: '-ум',
    20: '-ум',
    30: '-юм',
    40: '-ум',
    50: '-ум',
    60: '-ум',
    70: '-ум',
    80: '-ум',
    90: '-ум',
    100: '-ум'
  };
  var tg = moment.defineLocale('tg', {
    months: {
      format: 'январи_феврали_марти_апрели_майи_июни_июли_августи_сентябри_октябри_ноябри_декабри'.split('_'),
      standalone: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_')
    },
    monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),
    weekdays: 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split('_'),
    weekdaysShort: 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),
    weekdaysMin: 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd, D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[Имрӯз соати] LT',
      nextDay: '[Фардо соати] LT',
      lastDay: '[Дирӯз соати] LT',
      nextWeek: 'dddd[и] [ҳафтаи оянда соати] LT',
      lastWeek: 'dddd[и] [ҳафтаи гузашта соати] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'баъди %s',
      past: '%s пеш',
      s: 'якчанд сония',
      m: 'як дақиқа',
      mm: '%d дақиқа',
      h: 'як соат',
      hh: '%d соат',
      d: 'як рӯз',
      dd: '%d рӯз',
      M: 'як моҳ',
      MM: '%d моҳ',
      y: 'як сол',
      yy: '%d сол'
    },
    meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,
    meridiemHour: function meridiemHour(hour, meridiem) {
      if (hour === 12) {
        hour = 0;
      }

      if (meridiem === 'шаб') {
        return hour < 4 ? hour : hour + 12;
      } else if (meridiem === 'субҳ') {
        return hour;
      } else if (meridiem === 'рӯз') {
        return hour >= 11 ? hour : hour + 12;
      } else if (meridiem === 'бегоҳ') {
        return hour + 12;
      }
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 4) {
        return 'шаб';
      } else if (hour < 11) {
        return 'субҳ';
      } else if (hour < 16) {
        return 'рӯз';
      } else if (hour < 19) {
        return 'бегоҳ';
      } else {
        return 'шаб';
      }
    },
    dayOfMonthOrdinalParse: /\d{1,2}-(ум|юм)/,
    ordinal: function ordinal(number) {
      var a = number % 10,
          b = number >= 100 ? 100 : null;
      return number + (suffixes[number] || suffixes[a] || suffixes[b]);
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 7 // The week that contains Jan 1th is the first week of the year.

    }
  });
  return tg;
});

/***/ }),

/***/ "./node_modules/moment/locale/th.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/th.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Thai [th]
//! author : Kridsada Thanabulpong : https://github.com/sirn
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var th = moment.defineLocale('th', {
    months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),
    monthsShort: 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),
    monthsParseExact: true,
    weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),
    weekdaysShort: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'),
    // yes, three characters difference
    weekdaysMin: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'H:mm',
      LTS: 'H:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY เวลา H:mm',
      LLLL: 'วันddddที่ D MMMM YYYY เวลา H:mm'
    },
    meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,
    isPM: function isPM(input) {
      return input === 'หลังเที่ยง';
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 12) {
        return 'ก่อนเที่ยง';
      } else {
        return 'หลังเที่ยง';
      }
    },
    calendar: {
      sameDay: '[วันนี้ เวลา] LT',
      nextDay: '[พรุ่งนี้ เวลา] LT',
      nextWeek: 'dddd[หน้า เวลา] LT',
      lastDay: '[เมื่อวานนี้ เวลา] LT',
      lastWeek: '[วัน]dddd[ที่แล้ว เวลา] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'อีก %s',
      past: '%sที่แล้ว',
      s: 'ไม่กี่วินาที',
      ss: '%d วินาที',
      m: '1 นาที',
      mm: '%d นาที',
      h: '1 ชั่วโมง',
      hh: '%d ชั่วโมง',
      d: '1 วัน',
      dd: '%d วัน',
      w: '1 สัปดาห์',
      ww: '%d สัปดาห์',
      M: '1 เดือน',
      MM: '%d เดือน',
      y: '1 ปี',
      yy: '%d ปี'
    }
  });
  return th;
});

/***/ }),

/***/ "./node_modules/moment/locale/tk.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/tk.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Turkmen [tk]
//! author : Atamyrat Abdyrahmanov : https://github.com/atamyratabdy
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var suffixes = {
    1: "'inji",
    5: "'inji",
    8: "'inji",
    70: "'inji",
    80: "'inji",
    2: "'nji",
    7: "'nji",
    20: "'nji",
    50: "'nji",
    3: "'ünji",
    4: "'ünji",
    100: "'ünji",
    6: "'njy",
    9: "'unjy",
    10: "'unjy",
    30: "'unjy",
    60: "'ynjy",
    90: "'ynjy"
  };
  var tk = moment.defineLocale('tk', {
    months: 'Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr'.split('_'),
    monthsShort: 'Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek'.split('_'),
    weekdays: 'Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe'.split('_'),
    weekdaysShort: 'Ýek_Duş_Siş_Çar_Pen_Ann_Şen'.split('_'),
    weekdaysMin: 'Ýk_Dş_Sş_Çr_Pn_An_Şn'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd, D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[bugün sagat] LT',
      nextDay: '[ertir sagat] LT',
      nextWeek: '[indiki] dddd [sagat] LT',
      lastDay: '[düýn] LT',
      lastWeek: '[geçen] dddd [sagat] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s soň',
      past: '%s öň',
      s: 'birnäçe sekunt',
      m: 'bir minut',
      mm: '%d minut',
      h: 'bir sagat',
      hh: '%d sagat',
      d: 'bir gün',
      dd: '%d gün',
      M: 'bir aý',
      MM: '%d aý',
      y: 'bir ýyl',
      yy: '%d ýyl'
    },
    ordinal: function ordinal(number, period) {
      switch (period) {
        case 'd':
        case 'D':
        case 'Do':
        case 'DD':
          return number;

        default:
          if (number === 0) {
            // special case for zero
            return number + "'unjy";
          }

          var a = number % 10,
              b = number % 100 - a,
              c = number >= 100 ? 100 : null;
          return number + (suffixes[a] || suffixes[b] || suffixes[c]);
      }
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 7 // The week that contains Jan 7th is the first week of the year.

    }
  });
  return tk;
});

/***/ }),

/***/ "./node_modules/moment/locale/tl-ph.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/tl-ph.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Tagalog (Philippines) [tl-ph]
//! author : Dan Hagman : https://github.com/hagmandan
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var tlPh = moment.defineLocale('tl-ph', {
    months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),
    monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
    weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),
    weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
    weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'MM/D/YYYY',
      LL: 'MMMM D, YYYY',
      LLL: 'MMMM D, YYYY HH:mm',
      LLLL: 'dddd, MMMM DD, YYYY HH:mm'
    },
    calendar: {
      sameDay: 'LT [ngayong araw]',
      nextDay: '[Bukas ng] LT',
      nextWeek: 'LT [sa susunod na] dddd',
      lastDay: 'LT [kahapon]',
      lastWeek: 'LT [noong nakaraang] dddd',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'sa loob ng %s',
      past: '%s ang nakalipas',
      s: 'ilang segundo',
      ss: '%d segundo',
      m: 'isang minuto',
      mm: '%d minuto',
      h: 'isang oras',
      hh: '%d oras',
      d: 'isang araw',
      dd: '%d araw',
      M: 'isang buwan',
      MM: '%d buwan',
      y: 'isang taon',
      yy: '%d taon'
    },
    dayOfMonthOrdinalParse: /\d{1,2}/,
    ordinal: function ordinal(number) {
      return number;
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return tlPh;
});

/***/ }),

/***/ "./node_modules/moment/locale/tlh.js":
/*!*******************************************!*\
  !*** ./node_modules/moment/locale/tlh.js ***!
  \*******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Klingon [tlh]
//! author : Dominika Kruk : https://github.com/amaranthrose
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');

  function translateFuture(output) {
    var time = output;
    time = output.indexOf('jaj') !== -1 ? time.slice(0, -3) + 'leS' : output.indexOf('jar') !== -1 ? time.slice(0, -3) + 'waQ' : output.indexOf('DIS') !== -1 ? time.slice(0, -3) + 'nem' : time + ' pIq';
    return time;
  }

  function translatePast(output) {
    var time = output;
    time = output.indexOf('jaj') !== -1 ? time.slice(0, -3) + 'Hu’' : output.indexOf('jar') !== -1 ? time.slice(0, -3) + 'wen' : output.indexOf('DIS') !== -1 ? time.slice(0, -3) + 'ben' : time + ' ret';
    return time;
  }

  function translate(number, withoutSuffix, string, isFuture) {
    var numberNoun = numberAsNoun(number);

    switch (string) {
      case 'ss':
        return numberNoun + ' lup';

      case 'mm':
        return numberNoun + ' tup';

      case 'hh':
        return numberNoun + ' rep';

      case 'dd':
        return numberNoun + ' jaj';

      case 'MM':
        return numberNoun + ' jar';

      case 'yy':
        return numberNoun + ' DIS';
    }
  }

  function numberAsNoun(number) {
    var hundred = Math.floor(number % 1000 / 100),
        ten = Math.floor(number % 100 / 10),
        one = number % 10,
        word = '';

    if (hundred > 0) {
      word += numbersNouns[hundred] + 'vatlh';
    }

    if (ten > 0) {
      word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH';
    }

    if (one > 0) {
      word += (word !== '' ? ' ' : '') + numbersNouns[one];
    }

    return word === '' ? 'pagh' : word;
  }

  var tlh = moment.defineLocale('tlh', {
    months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'),
    monthsShort: 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'),
    monthsParseExact: true,
    weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
    weekdaysShort: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
    weekdaysMin: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd, D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[DaHjaj] LT',
      nextDay: '[wa’leS] LT',
      nextWeek: 'LLL',
      lastDay: '[wa’Hu’] LT',
      lastWeek: 'LLL',
      sameElse: 'L'
    },
    relativeTime: {
      future: translateFuture,
      past: translatePast,
      s: 'puS lup',
      ss: translate,
      m: 'wa’ tup',
      mm: translate,
      h: 'wa’ rep',
      hh: translate,
      d: 'wa’ jaj',
      dd: translate,
      M: 'wa’ jar',
      MM: translate,
      y: 'wa’ DIS',
      yy: translate
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return tlh;
});

/***/ }),

/***/ "./node_modules/moment/locale/tr.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/tr.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Turkish [tr]
//! authors : Erhan Gundogan : https://github.com/erhangundogan,
//!           Burak Yiğit Kaya: https://github.com/BYK
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var suffixes = {
    1: "'inci",
    5: "'inci",
    8: "'inci",
    70: "'inci",
    80: "'inci",
    2: "'nci",
    7: "'nci",
    20: "'nci",
    50: "'nci",
    3: "'üncü",
    4: "'üncü",
    100: "'üncü",
    6: "'ncı",
    9: "'uncu",
    10: "'uncu",
    30: "'uncu",
    60: "'ıncı",
    90: "'ıncı"
  };
  var tr = moment.defineLocale('tr', {
    months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),
    monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),
    weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),
    weekdaysShort: 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),
    weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),
    meridiem: function meridiem(hours, minutes, isLower) {
      if (hours < 12) {
        return isLower ? 'öö' : 'ÖÖ';
      } else {
        return isLower ? 'ös' : 'ÖS';
      }
    },
    meridiemParse: /öö|ÖÖ|ös|ÖS/,
    isPM: function isPM(input) {
      return input === 'ös' || input === 'ÖS';
    },
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd, D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[bugün saat] LT',
      nextDay: '[yarın saat] LT',
      nextWeek: '[gelecek] dddd [saat] LT',
      lastDay: '[dün] LT',
      lastWeek: '[geçen] dddd [saat] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s sonra',
      past: '%s önce',
      s: 'birkaç saniye',
      ss: '%d saniye',
      m: 'bir dakika',
      mm: '%d dakika',
      h: 'bir saat',
      hh: '%d saat',
      d: 'bir gün',
      dd: '%d gün',
      w: 'bir hafta',
      ww: '%d hafta',
      M: 'bir ay',
      MM: '%d ay',
      y: 'bir yıl',
      yy: '%d yıl'
    },
    ordinal: function ordinal(number, period) {
      switch (period) {
        case 'd':
        case 'D':
        case 'Do':
        case 'DD':
          return number;

        default:
          if (number === 0) {
            // special case for zero
            return number + "'ıncı";
          }

          var a = number % 10,
              b = number % 100 - a,
              c = number >= 100 ? 100 : null;
          return number + (suffixes[a] || suffixes[b] || suffixes[c]);
      }
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 7 // The week that contains Jan 7th is the first week of the year.

    }
  });
  return tr;
});

/***/ }),

/***/ "./node_modules/moment/locale/tzl.js":
/*!*******************************************!*\
  !*** ./node_modules/moment/locale/tzl.js ***!
  \*******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Talossan [tzl]
//! author : Robin van der Vliet : https://github.com/robin0van0der0v
//! author : Iustì Canun
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration
  // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.
  // This is currently too difficult (maybe even impossible) to add.

  var tzl = moment.defineLocale('tzl', {
    months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),
    monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),
    weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),
    weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),
    weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),
    longDateFormat: {
      LT: 'HH.mm',
      LTS: 'HH.mm.ss',
      L: 'DD.MM.YYYY',
      LL: 'D. MMMM [dallas] YYYY',
      LLL: 'D. MMMM [dallas] YYYY HH.mm',
      LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm'
    },
    meridiemParse: /d\'o|d\'a/i,
    isPM: function isPM(input) {
      return "d'o" === input.toLowerCase();
    },
    meridiem: function meridiem(hours, minutes, isLower) {
      if (hours > 11) {
        return isLower ? "d'o" : "D'O";
      } else {
        return isLower ? "d'a" : "D'A";
      }
    },
    calendar: {
      sameDay: '[oxhi à] LT',
      nextDay: '[demà à] LT',
      nextWeek: 'dddd [à] LT',
      lastDay: '[ieiri à] LT',
      lastWeek: '[sür el] dddd [lasteu à] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'osprei %s',
      past: 'ja%s',
      s: processRelativeTime,
      ss: processRelativeTime,
      m: processRelativeTime,
      mm: processRelativeTime,
      h: processRelativeTime,
      hh: processRelativeTime,
      d: processRelativeTime,
      dd: processRelativeTime,
      M: processRelativeTime,
      MM: processRelativeTime,
      y: processRelativeTime,
      yy: processRelativeTime
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });

  function processRelativeTime(number, withoutSuffix, key, isFuture) {
    var format = {
      s: ['viensas secunds', "'iensas secunds"],
      ss: [number + ' secunds', '' + number + ' secunds'],
      m: ["'n míut", "'iens míut"],
      mm: [number + ' míuts', '' + number + ' míuts'],
      h: ["'n þora", "'iensa þora"],
      hh: [number + ' þoras', '' + number + ' þoras'],
      d: ["'n ziua", "'iensa ziua"],
      dd: [number + ' ziuas', '' + number + ' ziuas'],
      M: ["'n mes", "'iens mes"],
      MM: [number + ' mesen', '' + number + ' mesen'],
      y: ["'n ar", "'iens ar"],
      yy: [number + ' ars', '' + number + ' ars']
    };
    return isFuture ? format[key][0] : withoutSuffix ? format[key][0] : format[key][1];
  }

  return tzl;
});

/***/ }),

/***/ "./node_modules/moment/locale/tzm-latn.js":
/*!************************************************!*\
  !*** ./node_modules/moment/locale/tzm-latn.js ***!
  \************************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Central Atlas Tamazight Latin [tzm-latn]
//! author : Abdel Said : https://github.com/abdelsaid
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var tzmLatn = moment.defineLocale('tzm-latn', {
    months: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),
    monthsShort: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),
    weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
    weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
    weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[asdkh g] LT',
      nextDay: '[aska g] LT',
      nextWeek: 'dddd [g] LT',
      lastDay: '[assant g] LT',
      lastWeek: 'dddd [g] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'dadkh s yan %s',
      past: 'yan %s',
      s: 'imik',
      ss: '%d imik',
      m: 'minuḍ',
      mm: '%d minuḍ',
      h: 'saɛa',
      hh: '%d tassaɛin',
      d: 'ass',
      dd: '%d ossan',
      M: 'ayowr',
      MM: '%d iyyirn',
      y: 'asgas',
      yy: '%d isgasn'
    },
    week: {
      dow: 6,
      // Saturday is the first day of the week.
      doy: 12 // The week that contains Jan 12th is the first week of the year.

    }
  });
  return tzmLatn;
});

/***/ }),

/***/ "./node_modules/moment/locale/tzm.js":
/*!*******************************************!*\
  !*** ./node_modules/moment/locale/tzm.js ***!
  \*******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Central Atlas Tamazight [tzm]
//! author : Abdel Said : https://github.com/abdelsaid
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var tzm = moment.defineLocale('tzm', {
    months: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),
    monthsShort: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),
    weekdays: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
    weekdaysShort: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
    weekdaysMin: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',
      nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',
      nextWeek: 'dddd [ⴴ] LT',
      lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',
      lastWeek: 'dddd [ⴴ] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',
      past: 'ⵢⴰⵏ %s',
      s: 'ⵉⵎⵉⴽ',
      ss: '%d ⵉⵎⵉⴽ',
      m: 'ⵎⵉⵏⵓⴺ',
      mm: '%d ⵎⵉⵏⵓⴺ',
      h: 'ⵙⴰⵄⴰ',
      hh: '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',
      d: 'ⴰⵙⵙ',
      dd: '%d oⵙⵙⴰⵏ',
      M: 'ⴰⵢoⵓⵔ',
      MM: '%d ⵉⵢⵢⵉⵔⵏ',
      y: 'ⴰⵙⴳⴰⵙ',
      yy: '%d ⵉⵙⴳⴰⵙⵏ'
    },
    week: {
      dow: 6,
      // Saturday is the first day of the week.
      doy: 12 // The week that contains Jan 12th is the first week of the year.

    }
  });
  return tzm;
});

/***/ }),

/***/ "./node_modules/moment/locale/ug-cn.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/ug-cn.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Uyghur (China) [ug-cn]
//! author: boyaq : https://github.com/boyaq
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var ugCn = moment.defineLocale('ug-cn', {
    months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split('_'),
    monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split('_'),
    weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split('_'),
    weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),
    weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'YYYY-MM-DD',
      LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',
      LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',
      LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm'
    },
    meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,
    meridiemHour: function meridiemHour(hour, meridiem) {
      if (hour === 12) {
        hour = 0;
      }

      if (meridiem === 'يېرىم كېچە' || meridiem === 'سەھەر' || meridiem === 'چۈشتىن بۇرۇن') {
        return hour;
      } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {
        return hour + 12;
      } else {
        return hour >= 11 ? hour : hour + 12;
      }
    },
    meridiem: function meridiem(hour, minute, isLower) {
      var hm = hour * 100 + minute;

      if (hm < 600) {
        return 'يېرىم كېچە';
      } else if (hm < 900) {
        return 'سەھەر';
      } else if (hm < 1130) {
        return 'چۈشتىن بۇرۇن';
      } else if (hm < 1230) {
        return 'چۈش';
      } else if (hm < 1800) {
        return 'چۈشتىن كېيىن';
      } else {
        return 'كەچ';
      }
    },
    calendar: {
      sameDay: '[بۈگۈن سائەت] LT',
      nextDay: '[ئەتە سائەت] LT',
      nextWeek: '[كېلەركى] dddd [سائەت] LT',
      lastDay: '[تۆنۈگۈن] LT',
      lastWeek: '[ئالدىنقى] dddd [سائەت] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s كېيىن',
      past: '%s بۇرۇن',
      s: 'نەچچە سېكونت',
      ss: '%d سېكونت',
      m: 'بىر مىنۇت',
      mm: '%d مىنۇت',
      h: 'بىر سائەت',
      hh: '%d سائەت',
      d: 'بىر كۈن',
      dd: '%d كۈن',
      M: 'بىر ئاي',
      MM: '%d ئاي',
      y: 'بىر يىل',
      yy: '%d يىل'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,
    ordinal: function ordinal(number, period) {
      switch (period) {
        case 'd':
        case 'D':
        case 'DDD':
          return number + '-كۈنى';

        case 'w':
        case 'W':
          return number + '-ھەپتە';

        default:
          return number;
      }
    },
    preparse: function preparse(string) {
      return string.replace(/،/g, ',');
    },
    postformat: function postformat(string) {
      return string.replace(/,/g, '،');
    },
    week: {
      // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
      dow: 1,
      // Monday is the first day of the week.
      doy: 7 // The week that contains Jan 1st is the first week of the year.

    }
  });
  return ugCn;
});

/***/ }),

/***/ "./node_modules/moment/locale/uk.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/uk.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Ukrainian [uk]
//! author : zemlanin : https://github.com/zemlanin
//! Author : Menelion Elensúle : https://github.com/Oire
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  function plural(word, num) {
    var forms = word.split('_');
    return num % 10 === 1 && num % 100 !== 11 ? forms[0] : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2];
  }

  function relativeTimeWithPlural(number, withoutSuffix, key) {
    var format = {
      ss: withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',
      mm: withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',
      hh: withoutSuffix ? 'година_години_годин' : 'годину_години_годин',
      dd: 'день_дні_днів',
      MM: 'місяць_місяці_місяців',
      yy: 'рік_роки_років'
    };

    if (key === 'm') {
      return withoutSuffix ? 'хвилина' : 'хвилину';
    } else if (key === 'h') {
      return withoutSuffix ? 'година' : 'годину';
    } else {
      return number + ' ' + plural(format[key], +number);
    }
  }

  function weekdaysCaseReplace(m, format) {
    var weekdays = {
      nominative: 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),
      accusative: 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),
      genitive: 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')
    },
        nounCase;

    if (m === true) {
      return weekdays['nominative'].slice(1, 7).concat(weekdays['nominative'].slice(0, 1));
    }

    if (!m) {
      return weekdays['nominative'];
    }

    nounCase = /(\[[ВвУу]\]) ?dddd/.test(format) ? 'accusative' : /\[?(?:минулої|наступної)? ?\] ?dddd/.test(format) ? 'genitive' : 'nominative';
    return weekdays[nounCase][m.day()];
  }

  function processHoursFunction(str) {
    return function () {
      return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';
    };
  }

  var uk = moment.defineLocale('uk', {
    months: {
      format: 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'),
      standalone: 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')
    },
    monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),
    weekdays: weekdaysCaseReplace,
    weekdaysShort: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
    weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD.MM.YYYY',
      LL: 'D MMMM YYYY р.',
      LLL: 'D MMMM YYYY р., HH:mm',
      LLLL: 'dddd, D MMMM YYYY р., HH:mm'
    },
    calendar: {
      sameDay: processHoursFunction('[Сьогодні '),
      nextDay: processHoursFunction('[Завтра '),
      lastDay: processHoursFunction('[Вчора '),
      nextWeek: processHoursFunction('[У] dddd ['),
      lastWeek: function lastWeek() {
        switch (this.day()) {
          case 0:
          case 3:
          case 5:
          case 6:
            return processHoursFunction('[Минулої] dddd [').call(this);

          case 1:
          case 2:
          case 4:
            return processHoursFunction('[Минулого] dddd [').call(this);
        }
      },
      sameElse: 'L'
    },
    relativeTime: {
      future: 'за %s',
      past: '%s тому',
      s: 'декілька секунд',
      ss: relativeTimeWithPlural,
      m: relativeTimeWithPlural,
      mm: relativeTimeWithPlural,
      h: 'годину',
      hh: relativeTimeWithPlural,
      d: 'день',
      dd: relativeTimeWithPlural,
      M: 'місяць',
      MM: relativeTimeWithPlural,
      y: 'рік',
      yy: relativeTimeWithPlural
    },
    // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason
    meridiemParse: /ночі|ранку|дня|вечора/,
    isPM: function isPM(input) {
      return /^(дня|вечора)$/.test(input);
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 4) {
        return 'ночі';
      } else if (hour < 12) {
        return 'ранку';
      } else if (hour < 17) {
        return 'дня';
      } else {
        return 'вечора';
      }
    },
    dayOfMonthOrdinalParse: /\d{1,2}-(й|го)/,
    ordinal: function ordinal(number, period) {
      switch (period) {
        case 'M':
        case 'd':
        case 'DDD':
        case 'w':
        case 'W':
          return number + '-й';

        case 'D':
          return number + '-го';

        default:
          return number;
      }
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 7 // The week that contains Jan 7th is the first week of the year.

    }
  });
  return uk;
});

/***/ }),

/***/ "./node_modules/moment/locale/ur.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ur.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Urdu [ur]
//! author : Sawood Alam : https://github.com/ibnesayeed
//! author : Zack : https://github.com/ZackVision
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var months = ['جنوری', 'فروری', 'مارچ', 'اپریل', 'مئی', 'جون', 'جولائی', 'اگست', 'ستمبر', 'اکتوبر', 'نومبر', 'دسمبر'],
      days = ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'ہفتہ'];
  var ur = moment.defineLocale('ur', {
    months: months,
    monthsShort: months,
    weekdays: days,
    weekdaysShort: days,
    weekdaysMin: days,
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd، D MMMM YYYY HH:mm'
    },
    meridiemParse: /صبح|شام/,
    isPM: function isPM(input) {
      return 'شام' === input;
    },
    meridiem: function meridiem(hour, minute, isLower) {
      if (hour < 12) {
        return 'صبح';
      }

      return 'شام';
    },
    calendar: {
      sameDay: '[آج بوقت] LT',
      nextDay: '[کل بوقت] LT',
      nextWeek: 'dddd [بوقت] LT',
      lastDay: '[گذشتہ روز بوقت] LT',
      lastWeek: '[گذشتہ] dddd [بوقت] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s بعد',
      past: '%s قبل',
      s: 'چند سیکنڈ',
      ss: '%d سیکنڈ',
      m: 'ایک منٹ',
      mm: '%d منٹ',
      h: 'ایک گھنٹہ',
      hh: '%d گھنٹے',
      d: 'ایک دن',
      dd: '%d دن',
      M: 'ایک ماہ',
      MM: '%d ماہ',
      y: 'ایک سال',
      yy: '%d سال'
    },
    preparse: function preparse(string) {
      return string.replace(/،/g, ',');
    },
    postformat: function postformat(string) {
      return string.replace(/,/g, '،');
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return ur;
});

/***/ }),

/***/ "./node_modules/moment/locale/uz-latn.js":
/*!***********************************************!*\
  !*** ./node_modules/moment/locale/uz-latn.js ***!
  \***********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Uzbek Latin [uz-latn]
//! author : Rasulbek Mirzayev : github.com/Rasulbeeek
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var uzLatn = moment.defineLocale('uz-latn', {
    months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'),
    monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),
    weekdays: 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'),
    weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),
    weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'D MMMM YYYY, dddd HH:mm'
    },
    calendar: {
      sameDay: '[Bugun soat] LT [da]',
      nextDay: '[Ertaga] LT [da]',
      nextWeek: 'dddd [kuni soat] LT [da]',
      lastDay: '[Kecha soat] LT [da]',
      lastWeek: "[O'tgan] dddd [kuni soat] LT [da]",
      sameElse: 'L'
    },
    relativeTime: {
      future: 'Yaqin %s ichida',
      past: 'Bir necha %s oldin',
      s: 'soniya',
      ss: '%d soniya',
      m: 'bir daqiqa',
      mm: '%d daqiqa',
      h: 'bir soat',
      hh: '%d soat',
      d: 'bir kun',
      dd: '%d kun',
      M: 'bir oy',
      MM: '%d oy',
      y: 'bir yil',
      yy: '%d yil'
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 7 // The week that contains Jan 7th is the first week of the year.

    }
  });
  return uzLatn;
});

/***/ }),

/***/ "./node_modules/moment/locale/uz.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/uz.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Uzbek [uz]
//! author : Sardor Muminov : https://github.com/muminoff
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var uz = moment.defineLocale('uz', {
    months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),
    monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),
    weekdays: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),
    weekdaysShort: 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),
    weekdaysMin: 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'D MMMM YYYY, dddd HH:mm'
    },
    calendar: {
      sameDay: '[Бугун соат] LT [да]',
      nextDay: '[Эртага] LT [да]',
      nextWeek: 'dddd [куни соат] LT [да]',
      lastDay: '[Кеча соат] LT [да]',
      lastWeek: '[Утган] dddd [куни соат] LT [да]',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'Якин %s ичида',
      past: 'Бир неча %s олдин',
      s: 'фурсат',
      ss: '%d фурсат',
      m: 'бир дакика',
      mm: '%d дакика',
      h: 'бир соат',
      hh: '%d соат',
      d: 'бир кун',
      dd: '%d кун',
      M: 'бир ой',
      MM: '%d ой',
      y: 'бир йил',
      yy: '%d йил'
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 7 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return uz;
});

/***/ }),

/***/ "./node_modules/moment/locale/vi.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/vi.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Vietnamese [vi]
//! author : Bang Nguyen : https://github.com/bangnk
//! author : Chien Kira : https://github.com/chienkira
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var vi = moment.defineLocale('vi', {
    months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),
    monthsShort: 'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split('_'),
    monthsParseExact: true,
    weekdays: 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),
    weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
    weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
    weekdaysParseExact: true,
    meridiemParse: /sa|ch/i,
    isPM: function isPM(input) {
      return /^ch$/i.test(input);
    },
    meridiem: function meridiem(hours, minutes, isLower) {
      if (hours < 12) {
        return isLower ? 'sa' : 'SA';
      } else {
        return isLower ? 'ch' : 'CH';
      }
    },
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM [năm] YYYY',
      LLL: 'D MMMM [năm] YYYY HH:mm',
      LLLL: 'dddd, D MMMM [năm] YYYY HH:mm',
      l: 'DD/M/YYYY',
      ll: 'D MMM YYYY',
      lll: 'D MMM YYYY HH:mm',
      llll: 'ddd, D MMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[Hôm nay lúc] LT',
      nextDay: '[Ngày mai lúc] LT',
      nextWeek: 'dddd [tuần tới lúc] LT',
      lastDay: '[Hôm qua lúc] LT',
      lastWeek: 'dddd [tuần trước lúc] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: '%s tới',
      past: '%s trước',
      s: 'vài giây',
      ss: '%d giây',
      m: 'một phút',
      mm: '%d phút',
      h: 'một giờ',
      hh: '%d giờ',
      d: 'một ngày',
      dd: '%d ngày',
      w: 'một tuần',
      ww: '%d tuần',
      M: 'một tháng',
      MM: '%d tháng',
      y: 'một năm',
      yy: '%d năm'
    },
    dayOfMonthOrdinalParse: /\d{1,2}/,
    ordinal: function ordinal(number) {
      return number;
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return vi;
});

/***/ }),

/***/ "./node_modules/moment/locale/x-pseudo.js":
/*!************************************************!*\
  !*** ./node_modules/moment/locale/x-pseudo.js ***!
  \************************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Pseudo [x-pseudo]
//! author : Andrew Hood : https://github.com/andrewhood125
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var xPseudo = moment.defineLocale('x-pseudo', {
    months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'),
    monthsShort: 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'),
    monthsParseExact: true,
    weekdays: 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'),
    weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),
    weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
      LT: 'HH:mm',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY HH:mm',
      LLLL: 'dddd, D MMMM YYYY HH:mm'
    },
    calendar: {
      sameDay: '[T~ódá~ý át] LT',
      nextDay: '[T~ómó~rró~w át] LT',
      nextWeek: 'dddd [át] LT',
      lastDay: '[Ý~ést~érdá~ý át] LT',
      lastWeek: '[L~ást] dddd [át] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'í~ñ %s',
      past: '%s á~gó',
      s: 'á ~féw ~sécó~ñds',
      ss: '%d s~écóñ~ds',
      m: 'á ~míñ~úté',
      mm: '%d m~íñú~tés',
      h: 'á~ñ hó~úr',
      hh: '%d h~óúrs',
      d: 'á ~dáý',
      dd: '%d d~áýs',
      M: 'á ~móñ~th',
      MM: '%d m~óñt~hs',
      y: 'á ~ýéár',
      yy: '%d ý~éárs'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
    ordinal: function ordinal(number) {
      var b = number % 10,
          output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';
      return number + output;
    },
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return xPseudo;
});

/***/ }),

/***/ "./node_modules/moment/locale/yo.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/yo.js ***!
  \******************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Yoruba Nigeria [yo]
//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var yo = moment.defineLocale('yo', {
    months: 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'),
    monthsShort: 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),
    weekdays: 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),
    weekdaysShort: 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),
    weekdaysMin: 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),
    longDateFormat: {
      LT: 'h:mm A',
      LTS: 'h:mm:ss A',
      L: 'DD/MM/YYYY',
      LL: 'D MMMM YYYY',
      LLL: 'D MMMM YYYY h:mm A',
      LLLL: 'dddd, D MMMM YYYY h:mm A'
    },
    calendar: {
      sameDay: '[Ònì ni] LT',
      nextDay: '[Ọ̀la ni] LT',
      nextWeek: "dddd [Ọsẹ̀ tón'bọ] [ni] LT",
      lastDay: '[Àna ni] LT',
      lastWeek: 'dddd [Ọsẹ̀ tólọ́] [ni] LT',
      sameElse: 'L'
    },
    relativeTime: {
      future: 'ní %s',
      past: '%s kọjá',
      s: 'ìsẹjú aayá die',
      ss: 'aayá %d',
      m: 'ìsẹjú kan',
      mm: 'ìsẹjú %d',
      h: 'wákati kan',
      hh: 'wákati %d',
      d: 'ọjọ́ kan',
      dd: 'ọjọ́ %d',
      M: 'osù kan',
      MM: 'osù %d',
      y: 'ọdún kan',
      yy: 'ọdún %d'
    },
    dayOfMonthOrdinalParse: /ọjọ́\s\d{1,2}/,
    ordinal: 'ọjọ́ %d',
    week: {
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return yo;
});

/***/ }),

/***/ "./node_modules/moment/locale/zh-cn.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/zh-cn.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Chinese (China) [zh-cn]
//! author : suupic : https://github.com/suupic
//! author : Zeno Zeng : https://github.com/zenozeng
//! author : uu109 : https://github.com/uu109
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var zhCn = moment.defineLocale('zh-cn', {
    months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
    monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
    weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
    weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),
    weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'YYYY/MM/DD',
      LL: 'YYYY年M月D日',
      LLL: 'YYYY年M月D日Ah点mm分',
      LLLL: 'YYYY年M月D日ddddAh点mm分',
      l: 'YYYY/M/D',
      ll: 'YYYY年M月D日',
      lll: 'YYYY年M月D日 HH:mm',
      llll: 'YYYY年M月D日dddd HH:mm'
    },
    meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
    meridiemHour: function meridiemHour(hour, meridiem) {
      if (hour === 12) {
        hour = 0;
      }

      if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
        return hour;
      } else if (meridiem === '下午' || meridiem === '晚上') {
        return hour + 12;
      } else {
        // '中午'
        return hour >= 11 ? hour : hour + 12;
      }
    },
    meridiem: function meridiem(hour, minute, isLower) {
      var hm = hour * 100 + minute;

      if (hm < 600) {
        return '凌晨';
      } else if (hm < 900) {
        return '早上';
      } else if (hm < 1130) {
        return '上午';
      } else if (hm < 1230) {
        return '中午';
      } else if (hm < 1800) {
        return '下午';
      } else {
        return '晚上';
      }
    },
    calendar: {
      sameDay: '[今天]LT',
      nextDay: '[明天]LT',
      nextWeek: function nextWeek(now) {
        if (now.week() !== this.week()) {
          return '[下]dddLT';
        } else {
          return '[本]dddLT';
        }
      },
      lastDay: '[昨天]LT',
      lastWeek: function lastWeek(now) {
        if (this.week() !== now.week()) {
          return '[上]dddLT';
        } else {
          return '[本]dddLT';
        }
      },
      sameElse: 'L'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/,
    ordinal: function ordinal(number, period) {
      switch (period) {
        case 'd':
        case 'D':
        case 'DDD':
          return number + '日';

        case 'M':
          return number + '月';

        case 'w':
        case 'W':
          return number + '周';

        default:
          return number;
      }
    },
    relativeTime: {
      future: '%s后',
      past: '%s前',
      s: '几秒',
      ss: '%d 秒',
      m: '1 分钟',
      mm: '%d 分钟',
      h: '1 小时',
      hh: '%d 小时',
      d: '1 天',
      dd: '%d 天',
      w: '1 周',
      ww: '%d 周',
      M: '1 个月',
      MM: '%d 个月',
      y: '1 年',
      yy: '%d 年'
    },
    week: {
      // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
      dow: 1,
      // Monday is the first day of the week.
      doy: 4 // The week that contains Jan 4th is the first week of the year.

    }
  });
  return zhCn;
});

/***/ }),

/***/ "./node_modules/moment/locale/zh-hk.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/zh-hk.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Chinese (Hong Kong) [zh-hk]
//! author : Ben : https://github.com/ben-lin
//! author : Chris Lam : https://github.com/hehachris
//! author : Konstantin : https://github.com/skfd
//! author : Anthony : https://github.com/anthonylau
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var zhHk = moment.defineLocale('zh-hk', {
    months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
    monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
    weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
    weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),
    weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'YYYY/MM/DD',
      LL: 'YYYY年M月D日',
      LLL: 'YYYY年M月D日 HH:mm',
      LLLL: 'YYYY年M月D日dddd HH:mm',
      l: 'YYYY/M/D',
      ll: 'YYYY年M月D日',
      lll: 'YYYY年M月D日 HH:mm',
      llll: 'YYYY年M月D日dddd HH:mm'
    },
    meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
    meridiemHour: function meridiemHour(hour, meridiem) {
      if (hour === 12) {
        hour = 0;
      }

      if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
        return hour;
      } else if (meridiem === '中午') {
        return hour >= 11 ? hour : hour + 12;
      } else if (meridiem === '下午' || meridiem === '晚上') {
        return hour + 12;
      }
    },
    meridiem: function meridiem(hour, minute, isLower) {
      var hm = hour * 100 + minute;

      if (hm < 600) {
        return '凌晨';
      } else if (hm < 900) {
        return '早上';
      } else if (hm < 1200) {
        return '上午';
      } else if (hm === 1200) {
        return '中午';
      } else if (hm < 1800) {
        return '下午';
      } else {
        return '晚上';
      }
    },
    calendar: {
      sameDay: '[今天]LT',
      nextDay: '[明天]LT',
      nextWeek: '[下]ddddLT',
      lastDay: '[昨天]LT',
      lastWeek: '[上]ddddLT',
      sameElse: 'L'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/,
    ordinal: function ordinal(number, period) {
      switch (period) {
        case 'd':
        case 'D':
        case 'DDD':
          return number + '日';

        case 'M':
          return number + '月';

        case 'w':
        case 'W':
          return number + '週';

        default:
          return number;
      }
    },
    relativeTime: {
      future: '%s後',
      past: '%s前',
      s: '幾秒',
      ss: '%d 秒',
      m: '1 分鐘',
      mm: '%d 分鐘',
      h: '1 小時',
      hh: '%d 小時',
      d: '1 天',
      dd: '%d 天',
      M: '1 個月',
      MM: '%d 個月',
      y: '1 年',
      yy: '%d 年'
    }
  });
  return zhHk;
});

/***/ }),

/***/ "./node_modules/moment/locale/zh-mo.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/zh-mo.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Chinese (Macau) [zh-mo]
//! author : Ben : https://github.com/ben-lin
//! author : Chris Lam : https://github.com/hehachris
//! author : Tan Yuanhong : https://github.com/le0tan
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var zhMo = moment.defineLocale('zh-mo', {
    months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
    monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
    weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
    weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),
    weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'DD/MM/YYYY',
      LL: 'YYYY年M月D日',
      LLL: 'YYYY年M月D日 HH:mm',
      LLLL: 'YYYY年M月D日dddd HH:mm',
      l: 'D/M/YYYY',
      ll: 'YYYY年M月D日',
      lll: 'YYYY年M月D日 HH:mm',
      llll: 'YYYY年M月D日dddd HH:mm'
    },
    meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
    meridiemHour: function meridiemHour(hour, meridiem) {
      if (hour === 12) {
        hour = 0;
      }

      if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
        return hour;
      } else if (meridiem === '中午') {
        return hour >= 11 ? hour : hour + 12;
      } else if (meridiem === '下午' || meridiem === '晚上') {
        return hour + 12;
      }
    },
    meridiem: function meridiem(hour, minute, isLower) {
      var hm = hour * 100 + minute;

      if (hm < 600) {
        return '凌晨';
      } else if (hm < 900) {
        return '早上';
      } else if (hm < 1130) {
        return '上午';
      } else if (hm < 1230) {
        return '中午';
      } else if (hm < 1800) {
        return '下午';
      } else {
        return '晚上';
      }
    },
    calendar: {
      sameDay: '[今天] LT',
      nextDay: '[明天] LT',
      nextWeek: '[下]dddd LT',
      lastDay: '[昨天] LT',
      lastWeek: '[上]dddd LT',
      sameElse: 'L'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/,
    ordinal: function ordinal(number, period) {
      switch (period) {
        case 'd':
        case 'D':
        case 'DDD':
          return number + '日';

        case 'M':
          return number + '月';

        case 'w':
        case 'W':
          return number + '週';

        default:
          return number;
      }
    },
    relativeTime: {
      future: '%s內',
      past: '%s前',
      s: '幾秒',
      ss: '%d 秒',
      m: '1 分鐘',
      mm: '%d 分鐘',
      h: '1 小時',
      hh: '%d 小時',
      d: '1 天',
      dd: '%d 天',
      M: '1 個月',
      MM: '%d 個月',
      y: '1 年',
      yy: '%d 年'
    }
  });
  return zhMo;
});

/***/ }),

/***/ "./node_modules/moment/locale/zh-tw.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/zh-tw.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js locale configuration
//! locale : Chinese (Taiwan) [zh-tw]
//! author : Ben : https://github.com/ben-lin
//! author : Chris Lam : https://github.com/hehachris
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' && "function" === 'function' ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :  true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function (moment) {
  'use strict'; //! moment.js locale configuration

  var zhTw = moment.defineLocale('zh-tw', {
    months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
    monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
    weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
    weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),
    weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
    longDateFormat: {
      LT: 'HH:mm',
      LTS: 'HH:mm:ss',
      L: 'YYYY/MM/DD',
      LL: 'YYYY年M月D日',
      LLL: 'YYYY年M月D日 HH:mm',
      LLLL: 'YYYY年M月D日dddd HH:mm',
      l: 'YYYY/M/D',
      ll: 'YYYY年M月D日',
      lll: 'YYYY年M月D日 HH:mm',
      llll: 'YYYY年M月D日dddd HH:mm'
    },
    meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
    meridiemHour: function meridiemHour(hour, meridiem) {
      if (hour === 12) {
        hour = 0;
      }

      if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
        return hour;
      } else if (meridiem === '中午') {
        return hour >= 11 ? hour : hour + 12;
      } else if (meridiem === '下午' || meridiem === '晚上') {
        return hour + 12;
      }
    },
    meridiem: function meridiem(hour, minute, isLower) {
      var hm = hour * 100 + minute;

      if (hm < 600) {
        return '凌晨';
      } else if (hm < 900) {
        return '早上';
      } else if (hm < 1130) {
        return '上午';
      } else if (hm < 1230) {
        return '中午';
      } else if (hm < 1800) {
        return '下午';
      } else {
        return '晚上';
      }
    },
    calendar: {
      sameDay: '[今天] LT',
      nextDay: '[明天] LT',
      nextWeek: '[下]dddd LT',
      lastDay: '[昨天] LT',
      lastWeek: '[上]dddd LT',
      sameElse: 'L'
    },
    dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/,
    ordinal: function ordinal(number, period) {
      switch (period) {
        case 'd':
        case 'D':
        case 'DDD':
          return number + '日';

        case 'M':
          return number + '月';

        case 'w':
        case 'W':
          return number + '週';

        default:
          return number;
      }
    },
    relativeTime: {
      future: '%s後',
      past: '%s前',
      s: '幾秒',
      ss: '%d 秒',
      m: '1 分鐘',
      mm: '%d 分鐘',
      h: '1 小時',
      hh: '%d 小時',
      d: '1 天',
      dd: '%d 天',
      M: '1 個月',
      MM: '%d 個月',
      y: '1 年',
      yy: '%d 年'
    }
  });
  return zhTw;
});

/***/ }),

/***/ "./node_modules/moment/moment.js":
/*!***************************************!*\
  !*** ./node_modules/moment/moment.js ***!
  \***************************************/
/***/ (function(module, exports, __webpack_require__) {

/* module decorator */ module = __webpack_require__.nmd(module);
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

//! moment.js
//! version : 2.29.1
//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
//! license : MIT
//! momentjs.com
;

(function (global, factory) {
  ( false ? 0 : _typeof(exports)) === 'object' && "object" !== 'undefined' ? module.exports = factory() :  true ? !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :
		__WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
})(this, function () {
  'use strict';

  var hookCallback;

  function hooks() {
    return hookCallback.apply(null, arguments);
  } // This is done to register the method called with moment()
  // without creating circular dependencies.


  function setHookCallback(callback) {
    hookCallback = callback;
  }

  function isArray(input) {
    return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';
  }

  function isObject(input) {
    // IE8 will treat undefined and null as object if it wasn't for
    // input != null
    return input != null && Object.prototype.toString.call(input) === '[object Object]';
  }

  function hasOwnProp(a, b) {
    return Object.prototype.hasOwnProperty.call(a, b);
  }

  function isObjectEmpty(obj) {
    if (Object.getOwnPropertyNames) {
      return Object.getOwnPropertyNames(obj).length === 0;
    } else {
      var k;

      for (k in obj) {
        if (hasOwnProp(obj, k)) {
          return false;
        }
      }

      return true;
    }
  }

  function isUndefined(input) {
    return input === void 0;
  }

  function isNumber(input) {
    return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';
  }

  function isDate(input) {
    return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';
  }

  function map(arr, fn) {
    var res = [],
        i;

    for (i = 0; i < arr.length; ++i) {
      res.push(fn(arr[i], i));
    }

    return res;
  }

  function extend(a, b) {
    for (var i in b) {
      if (hasOwnProp(b, i)) {
        a[i] = b[i];
      }
    }

    if (hasOwnProp(b, 'toString')) {
      a.toString = b.toString;
    }

    if (hasOwnProp(b, 'valueOf')) {
      a.valueOf = b.valueOf;
    }

    return a;
  }

  function createUTC(input, format, locale, strict) {
    return createLocalOrUTC(input, format, locale, strict, true).utc();
  }

  function defaultParsingFlags() {
    // We need to deep clone this object.
    return {
      empty: false,
      unusedTokens: [],
      unusedInput: [],
      overflow: -2,
      charsLeftOver: 0,
      nullInput: false,
      invalidEra: null,
      invalidMonth: null,
      invalidFormat: false,
      userInvalidated: false,
      iso: false,
      parsedDateParts: [],
      era: null,
      meridiem: null,
      rfc2822: false,
      weekdayMismatch: false
    };
  }

  function getParsingFlags(m) {
    if (m._pf == null) {
      m._pf = defaultParsingFlags();
    }

    return m._pf;
  }

  var some;

  if (Array.prototype.some) {
    some = Array.prototype.some;
  } else {
    some = function some(fun) {
      var t = Object(this),
          len = t.length >>> 0,
          i;

      for (i = 0; i < len; i++) {
        if (i in t && fun.call(this, t[i], i, t)) {
          return true;
        }
      }

      return false;
    };
  }

  function isValid(m) {
    if (m._isValid == null) {
      var flags = getParsingFlags(m),
          parsedParts = some.call(flags.parsedDateParts, function (i) {
        return i != null;
      }),
          isNowValid = !isNaN(m._d.getTime()) && flags.overflow < 0 && !flags.empty && !flags.invalidEra && !flags.invalidMonth && !flags.invalidWeekday && !flags.weekdayMismatch && !flags.nullInput && !flags.invalidFormat && !flags.userInvalidated && (!flags.meridiem || flags.meridiem && parsedParts);

      if (m._strict) {
        isNowValid = isNowValid && flags.charsLeftOver === 0 && flags.unusedTokens.length === 0 && flags.bigHour === undefined;
      }

      if (Object.isFrozen == null || !Object.isFrozen(m)) {
        m._isValid = isNowValid;
      } else {
        return isNowValid;
      }
    }

    return m._isValid;
  }

  function createInvalid(flags) {
    var m = createUTC(NaN);

    if (flags != null) {
      extend(getParsingFlags(m), flags);
    } else {
      getParsingFlags(m).userInvalidated = true;
    }

    return m;
  } // Plugins that add properties should also add the key here (null value),
  // so we can properly clone ourselves.


  var momentProperties = hooks.momentProperties = [],
      updateInProgress = false;

  function copyConfig(to, from) {
    var i, prop, val;

    if (!isUndefined(from._isAMomentObject)) {
      to._isAMomentObject = from._isAMomentObject;
    }

    if (!isUndefined(from._i)) {
      to._i = from._i;
    }

    if (!isUndefined(from._f)) {
      to._f = from._f;
    }

    if (!isUndefined(from._l)) {
      to._l = from._l;
    }

    if (!isUndefined(from._strict)) {
      to._strict = from._strict;
    }

    if (!isUndefined(from._tzm)) {
      to._tzm = from._tzm;
    }

    if (!isUndefined(from._isUTC)) {
      to._isUTC = from._isUTC;
    }

    if (!isUndefined(from._offset)) {
      to._offset = from._offset;
    }

    if (!isUndefined(from._pf)) {
      to._pf = getParsingFlags(from);
    }

    if (!isUndefined(from._locale)) {
      to._locale = from._locale;
    }

    if (momentProperties.length > 0) {
      for (i = 0; i < momentProperties.length; i++) {
        prop = momentProperties[i];
        val = from[prop];

        if (!isUndefined(val)) {
          to[prop] = val;
        }
      }
    }

    return to;
  } // Moment prototype object


  function Moment(config) {
    copyConfig(this, config);
    this._d = new Date(config._d != null ? config._d.getTime() : NaN);

    if (!this.isValid()) {
      this._d = new Date(NaN);
    } // Prevent infinite loop in case updateOffset creates new moment
    // objects.


    if (updateInProgress === false) {
      updateInProgress = true;
      hooks.updateOffset(this);
      updateInProgress = false;
    }
  }

  function isMoment(obj) {
    return obj instanceof Moment || obj != null && obj._isAMomentObject != null;
  }

  function warn(msg) {
    if (hooks.suppressDeprecationWarnings === false && typeof console !== 'undefined' && console.warn) {
      console.warn('Deprecation warning: ' + msg);
    }
  }

  function deprecate(msg, fn) {
    var firstTime = true;
    return extend(function () {
      if (hooks.deprecationHandler != null) {
        hooks.deprecationHandler(null, msg);
      }

      if (firstTime) {
        var args = [],
            arg,
            i,
            key;

        for (i = 0; i < arguments.length; i++) {
          arg = '';

          if (_typeof(arguments[i]) === 'object') {
            arg += '\n[' + i + '] ';

            for (key in arguments[0]) {
              if (hasOwnProp(arguments[0], key)) {
                arg += key + ': ' + arguments[0][key] + ', ';
              }
            }

            arg = arg.slice(0, -2); // Remove trailing comma and space
          } else {
            arg = arguments[i];
          }

          args.push(arg);
        }

        warn(msg + '\nArguments: ' + Array.prototype.slice.call(args).join('') + '\n' + new Error().stack);
        firstTime = false;
      }

      return fn.apply(this, arguments);
    }, fn);
  }

  var deprecations = {};

  function deprecateSimple(name, msg) {
    if (hooks.deprecationHandler != null) {
      hooks.deprecationHandler(name, msg);
    }

    if (!deprecations[name]) {
      warn(msg);
      deprecations[name] = true;
    }
  }

  hooks.suppressDeprecationWarnings = false;
  hooks.deprecationHandler = null;

  function isFunction(input) {
    return typeof Function !== 'undefined' && input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';
  }

  function set(config) {
    var prop, i;

    for (i in config) {
      if (hasOwnProp(config, i)) {
        prop = config[i];

        if (isFunction(prop)) {
          this[i] = prop;
        } else {
          this['_' + i] = prop;
        }
      }
    }

    this._config = config; // Lenient ordinal parsing accepts just a number in addition to
    // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.
    // TODO: Remove "ordinalParse" fallback in next major release.

    this._dayOfMonthOrdinalParseLenient = new RegExp((this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + '|' + /\d{1,2}/.source);
  }

  function mergeConfigs(parentConfig, childConfig) {
    var res = extend({}, parentConfig),
        prop;

    for (prop in childConfig) {
      if (hasOwnProp(childConfig, prop)) {
        if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
          res[prop] = {};
          extend(res[prop], parentConfig[prop]);
          extend(res[prop], childConfig[prop]);
        } else if (childConfig[prop] != null) {
          res[prop] = childConfig[prop];
        } else {
          delete res[prop];
        }
      }
    }

    for (prop in parentConfig) {
      if (hasOwnProp(parentConfig, prop) && !hasOwnProp(childConfig, prop) && isObject(parentConfig[prop])) {
        // make sure changes to properties don't modify parent config
        res[prop] = extend({}, res[prop]);
      }
    }

    return res;
  }

  function Locale(config) {
    if (config != null) {
      this.set(config);
    }
  }

  var keys;

  if (Object.keys) {
    keys = Object.keys;
  } else {
    keys = function keys(obj) {
      var i,
          res = [];

      for (i in obj) {
        if (hasOwnProp(obj, i)) {
          res.push(i);
        }
      }

      return res;
    };
  }

  var defaultCalendar = {
    sameDay: '[Today at] LT',
    nextDay: '[Tomorrow at] LT',
    nextWeek: 'dddd [at] LT',
    lastDay: '[Yesterday at] LT',
    lastWeek: '[Last] dddd [at] LT',
    sameElse: 'L'
  };

  function calendar(key, mom, now) {
    var output = this._calendar[key] || this._calendar['sameElse'];
    return isFunction(output) ? output.call(mom, now) : output;
  }

  function zeroFill(number, targetLength, forceSign) {
    var absNumber = '' + Math.abs(number),
        zerosToFill = targetLength - absNumber.length,
        sign = number >= 0;
    return (sign ? forceSign ? '+' : '' : '-') + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;
  }

  var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,
      localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,
      formatFunctions = {},
      formatTokenFunctions = {}; // token:    'M'
  // padded:   ['MM', 2]
  // ordinal:  'Mo'
  // callback: function () { this.month() + 1 }

  function addFormatToken(token, padded, ordinal, callback) {
    var func = callback;

    if (typeof callback === 'string') {
      func = function func() {
        return this[callback]();
      };
    }

    if (token) {
      formatTokenFunctions[token] = func;
    }

    if (padded) {
      formatTokenFunctions[padded[0]] = function () {
        return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
      };
    }

    if (ordinal) {
      formatTokenFunctions[ordinal] = function () {
        return this.localeData().ordinal(func.apply(this, arguments), token);
      };
    }
  }

  function removeFormattingTokens(input) {
    if (input.match(/\[[\s\S]/)) {
      return input.replace(/^\[|\]$/g, '');
    }

    return input.replace(/\\/g, '');
  }

  function makeFormatFunction(format) {
    var array = format.match(formattingTokens),
        i,
        length;

    for (i = 0, length = array.length; i < length; i++) {
      if (formatTokenFunctions[array[i]]) {
        array[i] = formatTokenFunctions[array[i]];
      } else {
        array[i] = removeFormattingTokens(array[i]);
      }
    }

    return function (mom) {
      var output = '',
          i;

      for (i = 0; i < length; i++) {
        output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];
      }

      return output;
    };
  } // format date using native date object


  function formatMoment(m, format) {
    if (!m.isValid()) {
      return m.localeData().invalidDate();
    }

    format = expandFormat(format, m.localeData());
    formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);
    return formatFunctions[format](m);
  }

  function expandFormat(format, locale) {
    var i = 5;

    function replaceLongDateFormatTokens(input) {
      return locale.longDateFormat(input) || input;
    }

    localFormattingTokens.lastIndex = 0;

    while (i >= 0 && localFormattingTokens.test(format)) {
      format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);
      localFormattingTokens.lastIndex = 0;
      i -= 1;
    }

    return format;
  }

  var defaultLongDateFormat = {
    LTS: 'h:mm:ss A',
    LT: 'h:mm A',
    L: 'MM/DD/YYYY',
    LL: 'MMMM D, YYYY',
    LLL: 'MMMM D, YYYY h:mm A',
    LLLL: 'dddd, MMMM D, YYYY h:mm A'
  };

  function longDateFormat(key) {
    var format = this._longDateFormat[key],
        formatUpper = this._longDateFormat[key.toUpperCase()];

    if (format || !formatUpper) {
      return format;
    }

    this._longDateFormat[key] = formatUpper.match(formattingTokens).map(function (tok) {
      if (tok === 'MMMM' || tok === 'MM' || tok === 'DD' || tok === 'dddd') {
        return tok.slice(1);
      }

      return tok;
    }).join('');
    return this._longDateFormat[key];
  }

  var defaultInvalidDate = 'Invalid date';

  function invalidDate() {
    return this._invalidDate;
  }

  var defaultOrdinal = '%d',
      defaultDayOfMonthOrdinalParse = /\d{1,2}/;

  function ordinal(number) {
    return this._ordinal.replace('%d', number);
  }

  var defaultRelativeTime = {
    future: 'in %s',
    past: '%s ago',
    s: 'a few seconds',
    ss: '%d seconds',
    m: 'a minute',
    mm: '%d minutes',
    h: 'an hour',
    hh: '%d hours',
    d: 'a day',
    dd: '%d days',
    w: 'a week',
    ww: '%d weeks',
    M: 'a month',
    MM: '%d months',
    y: 'a year',
    yy: '%d years'
  };

  function relativeTime(number, withoutSuffix, string, isFuture) {
    var output = this._relativeTime[string];
    return isFunction(output) ? output(number, withoutSuffix, string, isFuture) : output.replace(/%d/i, number);
  }

  function pastFuture(diff, output) {
    var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
    return isFunction(format) ? format(output) : format.replace(/%s/i, output);
  }

  var aliases = {};

  function addUnitAlias(unit, shorthand) {
    var lowerCase = unit.toLowerCase();
    aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
  }

  function normalizeUnits(units) {
    return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;
  }

  function normalizeObjectUnits(inputObject) {
    var normalizedInput = {},
        normalizedProp,
        prop;

    for (prop in inputObject) {
      if (hasOwnProp(inputObject, prop)) {
        normalizedProp = normalizeUnits(prop);

        if (normalizedProp) {
          normalizedInput[normalizedProp] = inputObject[prop];
        }
      }
    }

    return normalizedInput;
  }

  var priorities = {};

  function addUnitPriority(unit, priority) {
    priorities[unit] = priority;
  }

  function getPrioritizedUnits(unitsObj) {
    var units = [],
        u;

    for (u in unitsObj) {
      if (hasOwnProp(unitsObj, u)) {
        units.push({
          unit: u,
          priority: priorities[u]
        });
      }
    }

    units.sort(function (a, b) {
      return a.priority - b.priority;
    });
    return units;
  }

  function isLeapYear(year) {
    return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
  }

  function absFloor(number) {
    if (number < 0) {
      // -0 -> 0
      return Math.ceil(number) || 0;
    } else {
      return Math.floor(number);
    }
  }

  function toInt(argumentForCoercion) {
    var coercedNumber = +argumentForCoercion,
        value = 0;

    if (coercedNumber !== 0 && isFinite(coercedNumber)) {
      value = absFloor(coercedNumber);
    }

    return value;
  }

  function makeGetSet(unit, keepTime) {
    return function (value) {
      if (value != null) {
        set$1(this, unit, value);
        hooks.updateOffset(this, keepTime);
        return this;
      } else {
        return get(this, unit);
      }
    };
  }

  function get(mom, unit) {
    return mom.isValid() ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;
  }

  function set$1(mom, unit, value) {
    if (mom.isValid() && !isNaN(value)) {
      if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {
        value = toInt(value);

        mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));
      } else {
        mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
      }
    }
  } // MOMENTS


  function stringGet(units) {
    units = normalizeUnits(units);

    if (isFunction(this[units])) {
      return this[units]();
    }

    return this;
  }

  function stringSet(units, value) {
    if (_typeof(units) === 'object') {
      units = normalizeObjectUnits(units);
      var prioritized = getPrioritizedUnits(units),
          i;

      for (i = 0; i < prioritized.length; i++) {
        this[prioritized[i].unit](units[prioritized[i].unit]);
      }
    } else {
      units = normalizeUnits(units);

      if (isFunction(this[units])) {
        return this[units](value);
      }
    }

    return this;
  }

  var match1 = /\d/,
      //       0 - 9
  match2 = /\d\d/,
      //      00 - 99
  match3 = /\d{3}/,
      //     000 - 999
  match4 = /\d{4}/,
      //    0000 - 9999
  match6 = /[+-]?\d{6}/,
      // -999999 - 999999
  match1to2 = /\d\d?/,
      //       0 - 99
  match3to4 = /\d\d\d\d?/,
      //     999 - 9999
  match5to6 = /\d\d\d\d\d\d?/,
      //   99999 - 999999
  match1to3 = /\d{1,3}/,
      //       0 - 999
  match1to4 = /\d{1,4}/,
      //       0 - 9999
  match1to6 = /[+-]?\d{1,6}/,
      // -999999 - 999999
  matchUnsigned = /\d+/,
      //       0 - inf
  matchSigned = /[+-]?\d+/,
      //    -inf - inf
  matchOffset = /Z|[+-]\d\d:?\d\d/gi,
      // +00:00 -00:00 +0000 -0000 or Z
  matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi,
      // +00 -00 +00:00 -00:00 +0000 -0000 or Z
  matchTimestamp = /[+-]?\d+(\.\d{1,3})?/,
      // 123456789 123456789.123
  // any word (or two) characters or numbers including two/three word month in arabic.
  // includes scottish gaelic two word and hyphenated months
  matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,
      regexes;
  regexes = {};

  function addRegexToken(token, regex, strictRegex) {
    regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {
      return isStrict && strictRegex ? strictRegex : regex;
    };
  }

  function getParseRegexForToken(token, config) {
    if (!hasOwnProp(regexes, token)) {
      return new RegExp(unescapeFormat(token));
    }

    return regexes[token](config._strict, config._locale);
  } // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript


  function unescapeFormat(s) {
    return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) {
      return p1 || p2 || p3 || p4;
    }));
  }

  function regexEscape(s) {
    return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
  }

  var tokens = {};

  function addParseToken(token, callback) {
    var i,
        func = callback;

    if (typeof token === 'string') {
      token = [token];
    }

    if (isNumber(callback)) {
      func = function func(input, array) {
        array[callback] = toInt(input);
      };
    }

    for (i = 0; i < token.length; i++) {
      tokens[token[i]] = func;
    }
  }

  function addWeekParseToken(token, callback) {
    addParseToken(token, function (input, array, config, token) {
      config._w = config._w || {};
      callback(input, config._w, config, token);
    });
  }

  function addTimeToArrayFromToken(token, input, config) {
    if (input != null && hasOwnProp(tokens, token)) {
      tokens[token](input, config._a, config, token);
    }
  }

  var YEAR = 0,
      MONTH = 1,
      DATE = 2,
      HOUR = 3,
      MINUTE = 4,
      SECOND = 5,
      MILLISECOND = 6,
      WEEK = 7,
      WEEKDAY = 8;

  function mod(n, x) {
    return (n % x + x) % x;
  }

  var indexOf;

  if (Array.prototype.indexOf) {
    indexOf = Array.prototype.indexOf;
  } else {
    indexOf = function indexOf(o) {
      // I know
      var i;

      for (i = 0; i < this.length; ++i) {
        if (this[i] === o) {
          return i;
        }
      }

      return -1;
    };
  }

  function daysInMonth(year, month) {
    if (isNaN(year) || isNaN(month)) {
      return NaN;
    }

    var modMonth = mod(month, 12);
    year += (month - modMonth) / 12;
    return modMonth === 1 ? isLeapYear(year) ? 29 : 28 : 31 - modMonth % 7 % 2;
  } // FORMATTING


  addFormatToken('M', ['MM', 2], 'Mo', function () {
    return this.month() + 1;
  });
  addFormatToken('MMM', 0, 0, function (format) {
    return this.localeData().monthsShort(this, format);
  });
  addFormatToken('MMMM', 0, 0, function (format) {
    return this.localeData().months(this, format);
  }); // ALIASES

  addUnitAlias('month', 'M'); // PRIORITY

  addUnitPriority('month', 8); // PARSING

  addRegexToken('M', match1to2);
  addRegexToken('MM', match1to2, match2);
  addRegexToken('MMM', function (isStrict, locale) {
    return locale.monthsShortRegex(isStrict);
  });
  addRegexToken('MMMM', function (isStrict, locale) {
    return locale.monthsRegex(isStrict);
  });
  addParseToken(['M', 'MM'], function (input, array) {
    array[MONTH] = toInt(input) - 1;
  });
  addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
    var month = config._locale.monthsParse(input, token, config._strict); // if we didn't find a month name, mark the date as invalid.


    if (month != null) {
      array[MONTH] = month;
    } else {
      getParsingFlags(config).invalidMonth = input;
    }
  }); // LOCALES

  var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
      defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
      MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,
      defaultMonthsShortRegex = matchWord,
      defaultMonthsRegex = matchWord;

  function localeMonths(m, format) {
    if (!m) {
      return isArray(this._months) ? this._months : this._months['standalone'];
    }

    return isArray(this._months) ? this._months[m.month()] : this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];
  }

  function localeMonthsShort(m, format) {
    if (!m) {
      return isArray(this._monthsShort) ? this._monthsShort : this._monthsShort['standalone'];
    }

    return isArray(this._monthsShort) ? this._monthsShort[m.month()] : this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];
  }

  function handleStrictParse(monthName, format, strict) {
    var i,
        ii,
        mom,
        llc = monthName.toLocaleLowerCase();

    if (!this._monthsParse) {
      // this is not used
      this._monthsParse = [];
      this._longMonthsParse = [];
      this._shortMonthsParse = [];

      for (i = 0; i < 12; ++i) {
        mom = createUTC([2000, i]);
        this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();
        this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
      }
    }

    if (strict) {
      if (format === 'MMM') {
        ii = indexOf.call(this._shortMonthsParse, llc);
        return ii !== -1 ? ii : null;
      } else {
        ii = indexOf.call(this._longMonthsParse, llc);
        return ii !== -1 ? ii : null;
      }
    } else {
      if (format === 'MMM') {
        ii = indexOf.call(this._shortMonthsParse, llc);

        if (ii !== -1) {
          return ii;
        }

        ii = indexOf.call(this._longMonthsParse, llc);
        return ii !== -1 ? ii : null;
      } else {
        ii = indexOf.call(this._longMonthsParse, llc);

        if (ii !== -1) {
          return ii;
        }

        ii = indexOf.call(this._shortMonthsParse, llc);
        return ii !== -1 ? ii : null;
      }
    }
  }

  function localeMonthsParse(monthName, format, strict) {
    var i, mom, regex;

    if (this._monthsParseExact) {
      return handleStrictParse.call(this, monthName, format, strict);
    }

    if (!this._monthsParse) {
      this._monthsParse = [];
      this._longMonthsParse = [];
      this._shortMonthsParse = [];
    } // TODO: add sorting
    // Sorting makes sure if one month (or abbr) is a prefix of another
    // see sorting in computeMonthsParse


    for (i = 0; i < 12; i++) {
      // make the regex if we don't have it already
      mom = createUTC([2000, i]);

      if (strict && !this._longMonthsParse[i]) {
        this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');
        this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');
      }

      if (!strict && !this._monthsParse[i]) {
        regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
        this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
      } // test the regex


      if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {
        return i;
      } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {
        return i;
      } else if (!strict && this._monthsParse[i].test(monthName)) {
        return i;
      }
    }
  } // MOMENTS


  function setMonth(mom, value) {
    var dayOfMonth;

    if (!mom.isValid()) {
      // No op
      return mom;
    }

    if (typeof value === 'string') {
      if (/^\d+$/.test(value)) {
        value = toInt(value);
      } else {
        value = mom.localeData().monthsParse(value); // TODO: Another silent failure?

        if (!isNumber(value)) {
          return mom;
        }
      }
    }

    dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));

    mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);

    return mom;
  }

  function getSetMonth(value) {
    if (value != null) {
      setMonth(this, value);
      hooks.updateOffset(this, true);
      return this;
    } else {
      return get(this, 'Month');
    }
  }

  function getDaysInMonth() {
    return daysInMonth(this.year(), this.month());
  }

  function monthsShortRegex(isStrict) {
    if (this._monthsParseExact) {
      if (!hasOwnProp(this, '_monthsRegex')) {
        computeMonthsParse.call(this);
      }

      if (isStrict) {
        return this._monthsShortStrictRegex;
      } else {
        return this._monthsShortRegex;
      }
    } else {
      if (!hasOwnProp(this, '_monthsShortRegex')) {
        this._monthsShortRegex = defaultMonthsShortRegex;
      }

      return this._monthsShortStrictRegex && isStrict ? this._monthsShortStrictRegex : this._monthsShortRegex;
    }
  }

  function monthsRegex(isStrict) {
    if (this._monthsParseExact) {
      if (!hasOwnProp(this, '_monthsRegex')) {
        computeMonthsParse.call(this);
      }

      if (isStrict) {
        return this._monthsStrictRegex;
      } else {
        return this._monthsRegex;
      }
    } else {
      if (!hasOwnProp(this, '_monthsRegex')) {
        this._monthsRegex = defaultMonthsRegex;
      }

      return this._monthsStrictRegex && isStrict ? this._monthsStrictRegex : this._monthsRegex;
    }
  }

  function computeMonthsParse() {
    function cmpLenRev(a, b) {
      return b.length - a.length;
    }

    var shortPieces = [],
        longPieces = [],
        mixedPieces = [],
        i,
        mom;

    for (i = 0; i < 12; i++) {
      // make the regex if we don't have it already
      mom = createUTC([2000, i]);
      shortPieces.push(this.monthsShort(mom, ''));
      longPieces.push(this.months(mom, ''));
      mixedPieces.push(this.months(mom, ''));
      mixedPieces.push(this.monthsShort(mom, ''));
    } // Sorting makes sure if one month (or abbr) is a prefix of another it
    // will match the longer piece.


    shortPieces.sort(cmpLenRev);
    longPieces.sort(cmpLenRev);
    mixedPieces.sort(cmpLenRev);

    for (i = 0; i < 12; i++) {
      shortPieces[i] = regexEscape(shortPieces[i]);
      longPieces[i] = regexEscape(longPieces[i]);
    }

    for (i = 0; i < 24; i++) {
      mixedPieces[i] = regexEscape(mixedPieces[i]);
    }

    this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
    this._monthsShortRegex = this._monthsRegex;
    this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
    this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
  } // FORMATTING


  addFormatToken('Y', 0, 0, function () {
    var y = this.year();
    return y <= 9999 ? zeroFill(y, 4) : '+' + y;
  });
  addFormatToken(0, ['YY', 2], 0, function () {
    return this.year() % 100;
  });
  addFormatToken(0, ['YYYY', 4], 0, 'year');
  addFormatToken(0, ['YYYYY', 5], 0, 'year');
  addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); // ALIASES

  addUnitAlias('year', 'y'); // PRIORITIES

  addUnitPriority('year', 1); // PARSING

  addRegexToken('Y', matchSigned);
  addRegexToken('YY', match1to2, match2);
  addRegexToken('YYYY', match1to4, match4);
  addRegexToken('YYYYY', match1to6, match6);
  addRegexToken('YYYYYY', match1to6, match6);
  addParseToken(['YYYYY', 'YYYYYY'], YEAR);
  addParseToken('YYYY', function (input, array) {
    array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
  });
  addParseToken('YY', function (input, array) {
    array[YEAR] = hooks.parseTwoDigitYear(input);
  });
  addParseToken('Y', function (input, array) {
    array[YEAR] = parseInt(input, 10);
  }); // HELPERS

  function daysInYear(year) {
    return isLeapYear(year) ? 366 : 365;
  } // HOOKS


  hooks.parseTwoDigitYear = function (input) {
    return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
  }; // MOMENTS


  var getSetYear = makeGetSet('FullYear', true);

  function getIsLeapYear() {
    return isLeapYear(this.year());
  }

  function createDate(y, m, d, h, M, s, ms) {
    // can't just apply() to create a date:
    // https://stackoverflow.com/q/181348
    var date; // the date constructor remaps years 0-99 to 1900-1999

    if (y < 100 && y >= 0) {
      // preserve leap years using a full 400 year cycle, then reset
      date = new Date(y + 400, m, d, h, M, s, ms);

      if (isFinite(date.getFullYear())) {
        date.setFullYear(y);
      }
    } else {
      date = new Date(y, m, d, h, M, s, ms);
    }

    return date;
  }

  function createUTCDate(y) {
    var date, args; // the Date.UTC function remaps years 0-99 to 1900-1999

    if (y < 100 && y >= 0) {
      args = Array.prototype.slice.call(arguments); // preserve leap years using a full 400 year cycle, then reset

      args[0] = y + 400;
      date = new Date(Date.UTC.apply(null, args));

      if (isFinite(date.getUTCFullYear())) {
        date.setUTCFullYear(y);
      }
    } else {
      date = new Date(Date.UTC.apply(null, arguments));
    }

    return date;
  } // start-of-first-week - start-of-year


  function firstWeekOffset(year, dow, doy) {
    var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
    fwd = 7 + dow - doy,
        // first-week day local weekday -- which local weekday is fwd
    fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
    return -fwdlw + fwd - 1;
  } // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday


  function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
    var localWeekday = (7 + weekday - dow) % 7,
        weekOffset = firstWeekOffset(year, dow, doy),
        dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
        resYear,
        resDayOfYear;

    if (dayOfYear <= 0) {
      resYear = year - 1;
      resDayOfYear = daysInYear(resYear) + dayOfYear;
    } else if (dayOfYear > daysInYear(year)) {
      resYear = year + 1;
      resDayOfYear = dayOfYear - daysInYear(year);
    } else {
      resYear = year;
      resDayOfYear = dayOfYear;
    }

    return {
      year: resYear,
      dayOfYear: resDayOfYear
    };
  }

  function weekOfYear(mom, dow, doy) {
    var weekOffset = firstWeekOffset(mom.year(), dow, doy),
        week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
        resWeek,
        resYear;

    if (week < 1) {
      resYear = mom.year() - 1;
      resWeek = week + weeksInYear(resYear, dow, doy);
    } else if (week > weeksInYear(mom.year(), dow, doy)) {
      resWeek = week - weeksInYear(mom.year(), dow, doy);
      resYear = mom.year() + 1;
    } else {
      resYear = mom.year();
      resWeek = week;
    }

    return {
      week: resWeek,
      year: resYear
    };
  }

  function weeksInYear(year, dow, doy) {
    var weekOffset = firstWeekOffset(year, dow, doy),
        weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
    return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
  } // FORMATTING


  addFormatToken('w', ['ww', 2], 'wo', 'week');
  addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); // ALIASES

  addUnitAlias('week', 'w');
  addUnitAlias('isoWeek', 'W'); // PRIORITIES

  addUnitPriority('week', 5);
  addUnitPriority('isoWeek', 5); // PARSING

  addRegexToken('w', match1to2);
  addRegexToken('ww', match1to2, match2);
  addRegexToken('W', match1to2);
  addRegexToken('WW', match1to2, match2);
  addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {
    week[token.substr(0, 1)] = toInt(input);
  }); // HELPERS
  // LOCALES

  function localeWeek(mom) {
    return weekOfYear(mom, this._week.dow, this._week.doy).week;
  }

  var defaultLocaleWeek = {
    dow: 0,
    // Sunday is the first day of the week.
    doy: 6 // The week that contains Jan 6th is the first week of the year.

  };

  function localeFirstDayOfWeek() {
    return this._week.dow;
  }

  function localeFirstDayOfYear() {
    return this._week.doy;
  } // MOMENTS


  function getSetWeek(input) {
    var week = this.localeData().week(this);
    return input == null ? week : this.add((input - week) * 7, 'd');
  }

  function getSetISOWeek(input) {
    var week = weekOfYear(this, 1, 4).week;
    return input == null ? week : this.add((input - week) * 7, 'd');
  } // FORMATTING


  addFormatToken('d', 0, 'do', 'day');
  addFormatToken('dd', 0, 0, function (format) {
    return this.localeData().weekdaysMin(this, format);
  });
  addFormatToken('ddd', 0, 0, function (format) {
    return this.localeData().weekdaysShort(this, format);
  });
  addFormatToken('dddd', 0, 0, function (format) {
    return this.localeData().weekdays(this, format);
  });
  addFormatToken('e', 0, 0, 'weekday');
  addFormatToken('E', 0, 0, 'isoWeekday'); // ALIASES

  addUnitAlias('day', 'd');
  addUnitAlias('weekday', 'e');
  addUnitAlias('isoWeekday', 'E'); // PRIORITY

  addUnitPriority('day', 11);
  addUnitPriority('weekday', 11);
  addUnitPriority('isoWeekday', 11); // PARSING

  addRegexToken('d', match1to2);
  addRegexToken('e', match1to2);
  addRegexToken('E', match1to2);
  addRegexToken('dd', function (isStrict, locale) {
    return locale.weekdaysMinRegex(isStrict);
  });
  addRegexToken('ddd', function (isStrict, locale) {
    return locale.weekdaysShortRegex(isStrict);
  });
  addRegexToken('dddd', function (isStrict, locale) {
    return locale.weekdaysRegex(isStrict);
  });
  addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
    var weekday = config._locale.weekdaysParse(input, token, config._strict); // if we didn't get a weekday name, mark the date as invalid


    if (weekday != null) {
      week.d = weekday;
    } else {
      getParsingFlags(config).invalidWeekday = input;
    }
  });
  addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
    week[token] = toInt(input);
  }); // HELPERS

  function parseWeekday(input, locale) {
    if (typeof input !== 'string') {
      return input;
    }

    if (!isNaN(input)) {
      return parseInt(input, 10);
    }

    input = locale.weekdaysParse(input);

    if (typeof input === 'number') {
      return input;
    }

    return null;
  }

  function parseIsoWeekday(input, locale) {
    if (typeof input === 'string') {
      return locale.weekdaysParse(input) % 7 || 7;
    }

    return isNaN(input) ? null : input;
  } // LOCALES


  function shiftWeekdays(ws, n) {
    return ws.slice(n, 7).concat(ws.slice(0, n));
  }

  var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
      defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
      defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
      defaultWeekdaysRegex = matchWord,
      defaultWeekdaysShortRegex = matchWord,
      defaultWeekdaysMinRegex = matchWord;

  function localeWeekdays(m, format) {
    var weekdays = isArray(this._weekdays) ? this._weekdays : this._weekdays[m && m !== true && this._weekdays.isFormat.test(format) ? 'format' : 'standalone'];
    return m === true ? shiftWeekdays(weekdays, this._week.dow) : m ? weekdays[m.day()] : weekdays;
  }

  function localeWeekdaysShort(m) {
    return m === true ? shiftWeekdays(this._weekdaysShort, this._week.dow) : m ? this._weekdaysShort[m.day()] : this._weekdaysShort;
  }

  function localeWeekdaysMin(m) {
    return m === true ? shiftWeekdays(this._weekdaysMin, this._week.dow) : m ? this._weekdaysMin[m.day()] : this._weekdaysMin;
  }

  function handleStrictParse$1(weekdayName, format, strict) {
    var i,
        ii,
        mom,
        llc = weekdayName.toLocaleLowerCase();

    if (!this._weekdaysParse) {
      this._weekdaysParse = [];
      this._shortWeekdaysParse = [];
      this._minWeekdaysParse = [];

      for (i = 0; i < 7; ++i) {
        mom = createUTC([2000, 1]).day(i);
        this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();
        this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();
        this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
      }
    }

    if (strict) {
      if (format === 'dddd') {
        ii = indexOf.call(this._weekdaysParse, llc);
        return ii !== -1 ? ii : null;
      } else if (format === 'ddd') {
        ii = indexOf.call(this._shortWeekdaysParse, llc);
        return ii !== -1 ? ii : null;
      } else {
        ii = indexOf.call(this._minWeekdaysParse, llc);
        return ii !== -1 ? ii : null;
      }
    } else {
      if (format === 'dddd') {
        ii = indexOf.call(this._weekdaysParse, llc);

        if (ii !== -1) {
          return ii;
        }

        ii = indexOf.call(this._shortWeekdaysParse, llc);

        if (ii !== -1) {
          return ii;
        }

        ii = indexOf.call(this._minWeekdaysParse, llc);
        return ii !== -1 ? ii : null;
      } else if (format === 'ddd') {
        ii = indexOf.call(this._shortWeekdaysParse, llc);

        if (ii !== -1) {
          return ii;
        }

        ii = indexOf.call(this._weekdaysParse, llc);

        if (ii !== -1) {
          return ii;
        }

        ii = indexOf.call(this._minWeekdaysParse, llc);
        return ii !== -1 ? ii : null;
      } else {
        ii = indexOf.call(this._minWeekdaysParse, llc);

        if (ii !== -1) {
          return ii;
        }

        ii = indexOf.call(this._weekdaysParse, llc);

        if (ii !== -1) {
          return ii;
        }

        ii = indexOf.call(this._shortWeekdaysParse, llc);
        return ii !== -1 ? ii : null;
      }
    }
  }

  function localeWeekdaysParse(weekdayName, format, strict) {
    var i, mom, regex;

    if (this._weekdaysParseExact) {
      return handleStrictParse$1.call(this, weekdayName, format, strict);
    }

    if (!this._weekdaysParse) {
      this._weekdaysParse = [];
      this._minWeekdaysParse = [];
      this._shortWeekdaysParse = [];
      this._fullWeekdaysParse = [];
    }

    for (i = 0; i < 7; i++) {
      // make the regex if we don't have it already
      mom = createUTC([2000, 1]).day(i);

      if (strict && !this._fullWeekdaysParse[i]) {
        this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\.?') + '$', 'i');
        this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$', 'i');
        this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$', 'i');
      }

      if (!this._weekdaysParse[i]) {
        regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');
        this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
      } // test the regex


      if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {
        return i;
      } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {
        return i;
      } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {
        return i;
      } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
        return i;
      }
    }
  } // MOMENTS


  function getSetDayOfWeek(input) {
    if (!this.isValid()) {
      return input != null ? this : NaN;
    }

    var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();

    if (input != null) {
      input = parseWeekday(input, this.localeData());
      return this.add(input - day, 'd');
    } else {
      return day;
    }
  }

  function getSetLocaleDayOfWeek(input) {
    if (!this.isValid()) {
      return input != null ? this : NaN;
    }

    var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
    return input == null ? weekday : this.add(input - weekday, 'd');
  }

  function getSetISODayOfWeek(input) {
    if (!this.isValid()) {
      return input != null ? this : NaN;
    } // behaves the same as moment#day except
    // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
    // as a setter, sunday should belong to the previous week.


    if (input != null) {
      var weekday = parseIsoWeekday(input, this.localeData());
      return this.day(this.day() % 7 ? weekday : weekday - 7);
    } else {
      return this.day() || 7;
    }
  }

  function weekdaysRegex(isStrict) {
    if (this._weekdaysParseExact) {
      if (!hasOwnProp(this, '_weekdaysRegex')) {
        computeWeekdaysParse.call(this);
      }

      if (isStrict) {
        return this._weekdaysStrictRegex;
      } else {
        return this._weekdaysRegex;
      }
    } else {
      if (!hasOwnProp(this, '_weekdaysRegex')) {
        this._weekdaysRegex = defaultWeekdaysRegex;
      }

      return this._weekdaysStrictRegex && isStrict ? this._weekdaysStrictRegex : this._weekdaysRegex;
    }
  }

  function weekdaysShortRegex(isStrict) {
    if (this._weekdaysParseExact) {
      if (!hasOwnProp(this, '_weekdaysRegex')) {
        computeWeekdaysParse.call(this);
      }

      if (isStrict) {
        return this._weekdaysShortStrictRegex;
      } else {
        return this._weekdaysShortRegex;
      }
    } else {
      if (!hasOwnProp(this, '_weekdaysShortRegex')) {
        this._weekdaysShortRegex = defaultWeekdaysShortRegex;
      }

      return this._weekdaysShortStrictRegex && isStrict ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex;
    }
  }

  function weekdaysMinRegex(isStrict) {
    if (this._weekdaysParseExact) {
      if (!hasOwnProp(this, '_weekdaysRegex')) {
        computeWeekdaysParse.call(this);
      }

      if (isStrict) {
        return this._weekdaysMinStrictRegex;
      } else {
        return this._weekdaysMinRegex;
      }
    } else {
      if (!hasOwnProp(this, '_weekdaysMinRegex')) {
        this._weekdaysMinRegex = defaultWeekdaysMinRegex;
      }

      return this._weekdaysMinStrictRegex && isStrict ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex;
    }
  }

  function computeWeekdaysParse() {
    function cmpLenRev(a, b) {
      return b.length - a.length;
    }

    var minPieces = [],
        shortPieces = [],
        longPieces = [],
        mixedPieces = [],
        i,
        mom,
        minp,
        shortp,
        longp;

    for (i = 0; i < 7; i++) {
      // make the regex if we don't have it already
      mom = createUTC([2000, 1]).day(i);
      minp = regexEscape(this.weekdaysMin(mom, ''));
      shortp = regexEscape(this.weekdaysShort(mom, ''));
      longp = regexEscape(this.weekdays(mom, ''));
      minPieces.push(minp);
      shortPieces.push(shortp);
      longPieces.push(longp);
      mixedPieces.push(minp);
      mixedPieces.push(shortp);
      mixedPieces.push(longp);
    } // Sorting makes sure if one weekday (or abbr) is a prefix of another it
    // will match the longer piece.


    minPieces.sort(cmpLenRev);
    shortPieces.sort(cmpLenRev);
    longPieces.sort(cmpLenRev);
    mixedPieces.sort(cmpLenRev);
    this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
    this._weekdaysShortRegex = this._weekdaysRegex;
    this._weekdaysMinRegex = this._weekdaysRegex;
    this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
    this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
    this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');
  } // FORMATTING


  function hFormat() {
    return this.hours() % 12 || 12;
  }

  function kFormat() {
    return this.hours() || 24;
  }

  addFormatToken('H', ['HH', 2], 0, 'hour');
  addFormatToken('h', ['hh', 2], 0, hFormat);
  addFormatToken('k', ['kk', 2], 0, kFormat);
  addFormatToken('hmm', 0, 0, function () {
    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
  });
  addFormatToken('hmmss', 0, 0, function () {
    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);
  });
  addFormatToken('Hmm', 0, 0, function () {
    return '' + this.hours() + zeroFill(this.minutes(), 2);
  });
  addFormatToken('Hmmss', 0, 0, function () {
    return '' + this.hours() + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);
  });

  function meridiem(token, lowercase) {
    addFormatToken(token, 0, 0, function () {
      return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);
    });
  }

  meridiem('a', true);
  meridiem('A', false); // ALIASES

  addUnitAlias('hour', 'h'); // PRIORITY

  addUnitPriority('hour', 13); // PARSING

  function matchMeridiem(isStrict, locale) {
    return locale._meridiemParse;
  }

  addRegexToken('a', matchMeridiem);
  addRegexToken('A', matchMeridiem);
  addRegexToken('H', match1to2);
  addRegexToken('h', match1to2);
  addRegexToken('k', match1to2);
  addRegexToken('HH', match1to2, match2);
  addRegexToken('hh', match1to2, match2);
  addRegexToken('kk', match1to2, match2);
  addRegexToken('hmm', match3to4);
  addRegexToken('hmmss', match5to6);
  addRegexToken('Hmm', match3to4);
  addRegexToken('Hmmss', match5to6);
  addParseToken(['H', 'HH'], HOUR);
  addParseToken(['k', 'kk'], function (input, array, config) {
    var kInput = toInt(input);
    array[HOUR] = kInput === 24 ? 0 : kInput;
  });
  addParseToken(['a', 'A'], function (input, array, config) {
    config._isPm = config._locale.isPM(input);
    config._meridiem = input;
  });
  addParseToken(['h', 'hh'], function (input, array, config) {
    array[HOUR] = toInt(input);
    getParsingFlags(config).bigHour = true;
  });
  addParseToken('hmm', function (input, array, config) {
    var pos = input.length - 2;
    array[HOUR] = toInt(input.substr(0, pos));
    array[MINUTE] = toInt(input.substr(pos));
    getParsingFlags(config).bigHour = true;
  });
  addParseToken('hmmss', function (input, array, config) {
    var pos1 = input.length - 4,
        pos2 = input.length - 2;
    array[HOUR] = toInt(input.substr(0, pos1));
    array[MINUTE] = toInt(input.substr(pos1, 2));
    array[SECOND] = toInt(input.substr(pos2));
    getParsingFlags(config).bigHour = true;
  });
  addParseToken('Hmm', function (input, array, config) {
    var pos = input.length - 2;
    array[HOUR] = toInt(input.substr(0, pos));
    array[MINUTE] = toInt(input.substr(pos));
  });
  addParseToken('Hmmss', function (input, array, config) {
    var pos1 = input.length - 4,
        pos2 = input.length - 2;
    array[HOUR] = toInt(input.substr(0, pos1));
    array[MINUTE] = toInt(input.substr(pos1, 2));
    array[SECOND] = toInt(input.substr(pos2));
  }); // LOCALES

  function localeIsPM(input) {
    // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
    // Using charAt should be more compatible.
    return (input + '').toLowerCase().charAt(0) === 'p';
  }

  var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i,
      // Setting the hour should keep the time, because the user explicitly
  // specified which hour they want. So trying to maintain the same hour (in
  // a new timezone) makes sense. Adding/subtracting hours does not follow
  // this rule.
  getSetHour = makeGetSet('Hours', true);

  function localeMeridiem(hours, minutes, isLower) {
    if (hours > 11) {
      return isLower ? 'pm' : 'PM';
    } else {
      return isLower ? 'am' : 'AM';
    }
  }

  var baseConfig = {
    calendar: defaultCalendar,
    longDateFormat: defaultLongDateFormat,
    invalidDate: defaultInvalidDate,
    ordinal: defaultOrdinal,
    dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
    relativeTime: defaultRelativeTime,
    months: defaultLocaleMonths,
    monthsShort: defaultLocaleMonthsShort,
    week: defaultLocaleWeek,
    weekdays: defaultLocaleWeekdays,
    weekdaysMin: defaultLocaleWeekdaysMin,
    weekdaysShort: defaultLocaleWeekdaysShort,
    meridiemParse: defaultLocaleMeridiemParse
  }; // internal storage for locale config files

  var locales = {},
      localeFamilies = {},
      globalLocale;

  function commonPrefix(arr1, arr2) {
    var i,
        minl = Math.min(arr1.length, arr2.length);

    for (i = 0; i < minl; i += 1) {
      if (arr1[i] !== arr2[i]) {
        return i;
      }
    }

    return minl;
  }

  function normalizeLocale(key) {
    return key ? key.toLowerCase().replace('_', '-') : key;
  } // pick the locale from the array
  // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
  // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root


  function chooseLocale(names) {
    var i = 0,
        j,
        next,
        locale,
        split;

    while (i < names.length) {
      split = normalizeLocale(names[i]).split('-');
      j = split.length;
      next = normalizeLocale(names[i + 1]);
      next = next ? next.split('-') : null;

      while (j > 0) {
        locale = loadLocale(split.slice(0, j).join('-'));

        if (locale) {
          return locale;
        }

        if (next && next.length >= j && commonPrefix(split, next) >= j - 1) {
          //the next array item is better than a shallower substring of this one
          break;
        }

        j--;
      }

      i++;
    }

    return globalLocale;
  }

  function loadLocale(name) {
    var oldLocale = null,
        aliasedRequire; // TODO: Find a better way to register and load all the locales in Node

    if (locales[name] === undefined && "object" !== 'undefined' && module && module.exports) {
      try {
        oldLocale = globalLocale._abbr;
        aliasedRequire = undefined;
        __webpack_require__("./node_modules/moment/locale sync recursive ^\\.\\/.*$")("./" + name);
        getSetGlobalLocale(oldLocale);
      } catch (e) {
        // mark as not found to avoid repeating expensive file require call causing high CPU
        // when trying to find en-US, en_US, en-us for every format call
        locales[name] = null; // null means not found
      }
    }

    return locales[name];
  } // This function will load locale and then set the global locale.  If
  // no arguments are passed in, it will simply return the current global
  // locale key.


  function getSetGlobalLocale(key, values) {
    var data;

    if (key) {
      if (isUndefined(values)) {
        data = getLocale(key);
      } else {
        data = defineLocale(key, values);
      }

      if (data) {
        // moment.duration._locale = moment._locale = data;
        globalLocale = data;
      } else {
        if (typeof console !== 'undefined' && console.warn) {
          //warn user if arguments are passed but the locale could not be set
          console.warn('Locale ' + key + ' not found. Did you forget to load it?');
        }
      }
    }

    return globalLocale._abbr;
  }

  function defineLocale(name, config) {
    if (config !== null) {
      var locale,
          parentConfig = baseConfig;
      config.abbr = name;

      if (locales[name] != null) {
        deprecateSimple('defineLocaleOverride', 'use moment.updateLocale(localeName, config) to change ' + 'an existing locale. moment.defineLocale(localeName, ' + 'config) should only be used for creating a new locale ' + 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');
        parentConfig = locales[name]._config;
      } else if (config.parentLocale != null) {
        if (locales[config.parentLocale] != null) {
          parentConfig = locales[config.parentLocale]._config;
        } else {
          locale = loadLocale(config.parentLocale);

          if (locale != null) {
            parentConfig = locale._config;
          } else {
            if (!localeFamilies[config.parentLocale]) {
              localeFamilies[config.parentLocale] = [];
            }

            localeFamilies[config.parentLocale].push({
              name: name,
              config: config
            });
            return null;
          }
        }
      }

      locales[name] = new Locale(mergeConfigs(parentConfig, config));

      if (localeFamilies[name]) {
        localeFamilies[name].forEach(function (x) {
          defineLocale(x.name, x.config);
        });
      } // backwards compat for now: also set the locale
      // make sure we set the locale AFTER all child locales have been
      // created, so we won't end up with the child locale set.


      getSetGlobalLocale(name);
      return locales[name];
    } else {
      // useful for testing
      delete locales[name];
      return null;
    }
  }

  function updateLocale(name, config) {
    if (config != null) {
      var locale,
          tmpLocale,
          parentConfig = baseConfig;

      if (locales[name] != null && locales[name].parentLocale != null) {
        // Update existing child locale in-place to avoid memory-leaks
        locales[name].set(mergeConfigs(locales[name]._config, config));
      } else {
        // MERGE
        tmpLocale = loadLocale(name);

        if (tmpLocale != null) {
          parentConfig = tmpLocale._config;
        }

        config = mergeConfigs(parentConfig, config);

        if (tmpLocale == null) {
          // updateLocale is called for creating a new locale
          // Set abbr so it will have a name (getters return
          // undefined otherwise).
          config.abbr = name;
        }

        locale = new Locale(config);
        locale.parentLocale = locales[name];
        locales[name] = locale;
      } // backwards compat for now: also set the locale


      getSetGlobalLocale(name);
    } else {
      // pass null for config to unupdate, useful for tests
      if (locales[name] != null) {
        if (locales[name].parentLocale != null) {
          locales[name] = locales[name].parentLocale;

          if (name === getSetGlobalLocale()) {
            getSetGlobalLocale(name);
          }
        } else if (locales[name] != null) {
          delete locales[name];
        }
      }
    }

    return locales[name];
  } // returns locale data


  function getLocale(key) {
    var locale;

    if (key && key._locale && key._locale._abbr) {
      key = key._locale._abbr;
    }

    if (!key) {
      return globalLocale;
    }

    if (!isArray(key)) {
      //short-circuit everything else
      locale = loadLocale(key);

      if (locale) {
        return locale;
      }

      key = [key];
    }

    return chooseLocale(key);
  }

  function listLocales() {
    return keys(locales);
  }

  function checkOverflow(m) {
    var overflow,
        a = m._a;

    if (a && getParsingFlags(m).overflow === -2) {
      overflow = a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : a[HOUR] < 0 || a[HOUR] > 24 || a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0) ? HOUR : a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : -1;

      if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
        overflow = DATE;
      }

      if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
        overflow = WEEK;
      }

      if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
        overflow = WEEKDAY;
      }

      getParsingFlags(m).overflow = overflow;
    }

    return m;
  } // iso 8601 regex
  // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)


  var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
      basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
      tzRegex = /Z|[+-]\d\d(?::?\d\d)?/,
      isoDates = [['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/], ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/], ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/], ['GGGG-[W]WW', /\d{4}-W\d\d/, false], ['YYYY-DDD', /\d{4}-\d{3}/], ['YYYY-MM', /\d{4}-\d\d/, false], ['YYYYYYMMDD', /[+-]\d{10}/], ['YYYYMMDD', /\d{8}/], ['GGGG[W]WWE', /\d{4}W\d{3}/], ['GGGG[W]WW', /\d{4}W\d{2}/, false], ['YYYYDDD', /\d{7}/], ['YYYYMM', /\d{6}/, false], ['YYYY', /\d{4}/, false]],
      // iso time formats and regexes
  isoTimes = [['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/], ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/], ['HH:mm:ss', /\d\d:\d\d:\d\d/], ['HH:mm', /\d\d:\d\d/], ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/], ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/], ['HHmmss', /\d\d\d\d\d\d/], ['HHmm', /\d\d\d\d/], ['HH', /\d\d/]],
      aspNetJsonRegex = /^\/?Date\((-?\d+)/i,
      // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3
  rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,
      obsOffsets = {
    UT: 0,
    GMT: 0,
    EDT: -4 * 60,
    EST: -5 * 60,
    CDT: -5 * 60,
    CST: -6 * 60,
    MDT: -6 * 60,
    MST: -7 * 60,
    PDT: -7 * 60,
    PST: -8 * 60
  }; // date from iso format

  function configFromISO(config) {
    var i,
        l,
        string = config._i,
        match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
        allowTime,
        dateFormat,
        timeFormat,
        tzFormat;

    if (match) {
      getParsingFlags(config).iso = true;

      for (i = 0, l = isoDates.length; i < l; i++) {
        if (isoDates[i][1].exec(match[1])) {
          dateFormat = isoDates[i][0];
          allowTime = isoDates[i][2] !== false;
          break;
        }
      }

      if (dateFormat == null) {
        config._isValid = false;
        return;
      }

      if (match[3]) {
        for (i = 0, l = isoTimes.length; i < l; i++) {
          if (isoTimes[i][1].exec(match[3])) {
            // match[2] should be 'T' or space
            timeFormat = (match[2] || ' ') + isoTimes[i][0];
            break;
          }
        }

        if (timeFormat == null) {
          config._isValid = false;
          return;
        }
      }

      if (!allowTime && timeFormat != null) {
        config._isValid = false;
        return;
      }

      if (match[4]) {
        if (tzRegex.exec(match[4])) {
          tzFormat = 'Z';
        } else {
          config._isValid = false;
          return;
        }
      }

      config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
      configFromStringAndFormat(config);
    } else {
      config._isValid = false;
    }
  }

  function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {
    var result = [untruncateYear(yearStr), defaultLocaleMonthsShort.indexOf(monthStr), parseInt(dayStr, 10), parseInt(hourStr, 10), parseInt(minuteStr, 10)];

    if (secondStr) {
      result.push(parseInt(secondStr, 10));
    }

    return result;
  }

  function untruncateYear(yearStr) {
    var year = parseInt(yearStr, 10);

    if (year <= 49) {
      return 2000 + year;
    } else if (year <= 999) {
      return 1900 + year;
    }

    return year;
  }

  function preprocessRFC2822(s) {
    // Remove comments and folding whitespace and replace multiple-spaces with a single space
    return s.replace(/\([^)]*\)|[\n\t]/g, ' ').replace(/(\s\s+)/g, ' ').replace(/^\s\s*/, '').replace(/\s\s*$/, '');
  }

  function checkWeekday(weekdayStr, parsedInput, config) {
    if (weekdayStr) {
      // TODO: Replace the vanilla JS Date object with an independent day-of-week check.
      var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),
          weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();

      if (weekdayProvided !== weekdayActual) {
        getParsingFlags(config).weekdayMismatch = true;
        config._isValid = false;
        return false;
      }
    }

    return true;
  }

  function calculateOffset(obsOffset, militaryOffset, numOffset) {
    if (obsOffset) {
      return obsOffsets[obsOffset];
    } else if (militaryOffset) {
      // the only allowed military tz is Z
      return 0;
    } else {
      var hm = parseInt(numOffset, 10),
          m = hm % 100,
          h = (hm - m) / 100;
      return h * 60 + m;
    }
  } // date and time from ref 2822 format


  function configFromRFC2822(config) {
    var match = rfc2822.exec(preprocessRFC2822(config._i)),
        parsedArray;

    if (match) {
      parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);

      if (!checkWeekday(match[1], parsedArray, config)) {
        return;
      }

      config._a = parsedArray;
      config._tzm = calculateOffset(match[8], match[9], match[10]);
      config._d = createUTCDate.apply(null, config._a);

      config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);

      getParsingFlags(config).rfc2822 = true;
    } else {
      config._isValid = false;
    }
  } // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict


  function configFromString(config) {
    var matched = aspNetJsonRegex.exec(config._i);

    if (matched !== null) {
      config._d = new Date(+matched[1]);
      return;
    }

    configFromISO(config);

    if (config._isValid === false) {
      delete config._isValid;
    } else {
      return;
    }

    configFromRFC2822(config);

    if (config._isValid === false) {
      delete config._isValid;
    } else {
      return;
    }

    if (config._strict) {
      config._isValid = false;
    } else {
      // Final attempt, use Input Fallback
      hooks.createFromInputFallback(config);
    }
  }

  hooks.createFromInputFallback = deprecate('value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' + 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' + 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.', function (config) {
    config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
  }); // Pick the first defined of two or three arguments.

  function defaults(a, b, c) {
    if (a != null) {
      return a;
    }

    if (b != null) {
      return b;
    }

    return c;
  }

  function currentDateArray(config) {
    // hooks is actually the exported moment object
    var nowValue = new Date(hooks.now());

    if (config._useUTC) {
      return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];
    }

    return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
  } // convert an array to a date.
  // the array should mirror the parameters below
  // note: all values past the year are optional and will default to the lowest possible value.
  // [year, month, day , hour, minute, second, millisecond]


  function configFromArray(config) {
    var i,
        date,
        input = [],
        currentDate,
        expectedWeekday,
        yearToUse;

    if (config._d) {
      return;
    }

    currentDate = currentDateArray(config); //compute day of the year from weeks and weekdays

    if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
      dayOfYearFromWeekInfo(config);
    } //if the day of the year is set, figure out what it is


    if (config._dayOfYear != null) {
      yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);

      if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {
        getParsingFlags(config)._overflowDayOfYear = true;
      }

      date = createUTCDate(yearToUse, 0, config._dayOfYear);
      config._a[MONTH] = date.getUTCMonth();
      config._a[DATE] = date.getUTCDate();
    } // Default to current date.
    // * if no year, month, day of month are given, default to today
    // * if day of month is given, default month and year
    // * if month is given, default only year
    // * if year is given, don't default anything


    for (i = 0; i < 3 && config._a[i] == null; ++i) {
      config._a[i] = input[i] = currentDate[i];
    } // Zero out whatever was not defaulted, including time


    for (; i < 7; i++) {
      config._a[i] = input[i] = config._a[i] == null ? i === 2 ? 1 : 0 : config._a[i];
    } // Check for 24:00:00.000


    if (config._a[HOUR] === 24 && config._a[MINUTE] === 0 && config._a[SECOND] === 0 && config._a[MILLISECOND] === 0) {
      config._nextDay = true;
      config._a[HOUR] = 0;
    }

    config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);
    expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay(); // Apply timezone offset from input. The actual utcOffset can be changed
    // with parseZone.

    if (config._tzm != null) {
      config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
    }

    if (config._nextDay) {
      config._a[HOUR] = 24;
    } // check for mismatching day of week


    if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {
      getParsingFlags(config).weekdayMismatch = true;
    }
  }

  function dayOfYearFromWeekInfo(config) {
    var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;
    w = config._w;

    if (w.GG != null || w.W != null || w.E != null) {
      dow = 1;
      doy = 4; // TODO: We need to take the current isoWeekYear, but that depends on
      // how we interpret now (local, utc, fixed offset). So create
      // a now version of current config (take local/utc/offset flags, and
      // create now).

      weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);
      week = defaults(w.W, 1);
      weekday = defaults(w.E, 1);

      if (weekday < 1 || weekday > 7) {
        weekdayOverflow = true;
      }
    } else {
      dow = config._locale._week.dow;
      doy = config._locale._week.doy;
      curWeek = weekOfYear(createLocal(), dow, doy);
      weekYear = defaults(w.gg, config._a[YEAR], curWeek.year); // Default to current week.

      week = defaults(w.w, curWeek.week);

      if (w.d != null) {
        // weekday -- low day numbers are considered next week
        weekday = w.d;

        if (weekday < 0 || weekday > 6) {
          weekdayOverflow = true;
        }
      } else if (w.e != null) {
        // local weekday -- counting starts from beginning of week
        weekday = w.e + dow;

        if (w.e < 0 || w.e > 6) {
          weekdayOverflow = true;
        }
      } else {
        // default to beginning of week
        weekday = dow;
      }
    }

    if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
      getParsingFlags(config)._overflowWeeks = true;
    } else if (weekdayOverflow != null) {
      getParsingFlags(config)._overflowWeekday = true;
    } else {
      temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
      config._a[YEAR] = temp.year;
      config._dayOfYear = temp.dayOfYear;
    }
  } // constant that refers to the ISO standard


  hooks.ISO_8601 = function () {}; // constant that refers to the RFC 2822 form


  hooks.RFC_2822 = function () {}; // date from string and format string


  function configFromStringAndFormat(config) {
    // TODO: Move this to another part of the creation flow to prevent circular deps
    if (config._f === hooks.ISO_8601) {
      configFromISO(config);
      return;
    }

    if (config._f === hooks.RFC_2822) {
      configFromRFC2822(config);
      return;
    }

    config._a = [];
    getParsingFlags(config).empty = true; // This array is used to make a Date, either with `new Date` or `Date.UTC`

    var string = '' + config._i,
        i,
        parsedInput,
        tokens,
        token,
        skipped,
        stringLength = string.length,
        totalParsedInputLength = 0,
        era;
    tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];

    for (i = 0; i < tokens.length; i++) {
      token = tokens[i];
      parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];

      if (parsedInput) {
        skipped = string.substr(0, string.indexOf(parsedInput));

        if (skipped.length > 0) {
          getParsingFlags(config).unusedInput.push(skipped);
        }

        string = string.slice(string.indexOf(parsedInput) + parsedInput.length);
        totalParsedInputLength += parsedInput.length;
      } // don't parse if it's not a known token


      if (formatTokenFunctions[token]) {
        if (parsedInput) {
          getParsingFlags(config).empty = false;
        } else {
          getParsingFlags(config).unusedTokens.push(token);
        }

        addTimeToArrayFromToken(token, parsedInput, config);
      } else if (config._strict && !parsedInput) {
        getParsingFlags(config).unusedTokens.push(token);
      }
    } // add remaining unparsed input length to the string


    getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;

    if (string.length > 0) {
      getParsingFlags(config).unusedInput.push(string);
    } // clear _12h flag if hour is <= 12


    if (config._a[HOUR] <= 12 && getParsingFlags(config).bigHour === true && config._a[HOUR] > 0) {
      getParsingFlags(config).bigHour = undefined;
    }

    getParsingFlags(config).parsedDateParts = config._a.slice(0);
    getParsingFlags(config).meridiem = config._meridiem; // handle meridiem

    config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem); // handle era

    era = getParsingFlags(config).era;

    if (era !== null) {
      config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);
    }

    configFromArray(config);
    checkOverflow(config);
  }

  function meridiemFixWrap(locale, hour, meridiem) {
    var isPm;

    if (meridiem == null) {
      // nothing to do
      return hour;
    }

    if (locale.meridiemHour != null) {
      return locale.meridiemHour(hour, meridiem);
    } else if (locale.isPM != null) {
      // Fallback
      isPm = locale.isPM(meridiem);

      if (isPm && hour < 12) {
        hour += 12;
      }

      if (!isPm && hour === 12) {
        hour = 0;
      }

      return hour;
    } else {
      // this is not supposed to happen
      return hour;
    }
  } // date from string and array of format strings


  function configFromStringAndArray(config) {
    var tempConfig,
        bestMoment,
        scoreToBeat,
        i,
        currentScore,
        validFormatFound,
        bestFormatIsValid = false;

    if (config._f.length === 0) {
      getParsingFlags(config).invalidFormat = true;
      config._d = new Date(NaN);
      return;
    }

    for (i = 0; i < config._f.length; i++) {
      currentScore = 0;
      validFormatFound = false;
      tempConfig = copyConfig({}, config);

      if (config._useUTC != null) {
        tempConfig._useUTC = config._useUTC;
      }

      tempConfig._f = config._f[i];
      configFromStringAndFormat(tempConfig);

      if (isValid(tempConfig)) {
        validFormatFound = true;
      } // if there is any input that was not parsed add a penalty for that format


      currentScore += getParsingFlags(tempConfig).charsLeftOver; //or tokens

      currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
      getParsingFlags(tempConfig).score = currentScore;

      if (!bestFormatIsValid) {
        if (scoreToBeat == null || currentScore < scoreToBeat || validFormatFound) {
          scoreToBeat = currentScore;
          bestMoment = tempConfig;

          if (validFormatFound) {
            bestFormatIsValid = true;
          }
        }
      } else {
        if (currentScore < scoreToBeat) {
          scoreToBeat = currentScore;
          bestMoment = tempConfig;
        }
      }
    }

    extend(config, bestMoment || tempConfig);
  }

  function configFromObject(config) {
    if (config._d) {
      return;
    }

    var i = normalizeObjectUnits(config._i),
        dayOrDate = i.day === undefined ? i.date : i.day;
    config._a = map([i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond], function (obj) {
      return obj && parseInt(obj, 10);
    });
    configFromArray(config);
  }

  function createFromConfig(config) {
    var res = new Moment(checkOverflow(prepareConfig(config)));

    if (res._nextDay) {
      // Adding is smart enough around DST
      res.add(1, 'd');
      res._nextDay = undefined;
    }

    return res;
  }

  function prepareConfig(config) {
    var input = config._i,
        format = config._f;
    config._locale = config._locale || getLocale(config._l);

    if (input === null || format === undefined && input === '') {
      return createInvalid({
        nullInput: true
      });
    }

    if (typeof input === 'string') {
      config._i = input = config._locale.preparse(input);
    }

    if (isMoment(input)) {
      return new Moment(checkOverflow(input));
    } else if (isDate(input)) {
      config._d = input;
    } else if (isArray(format)) {
      configFromStringAndArray(config);
    } else if (format) {
      configFromStringAndFormat(config);
    } else {
      configFromInput(config);
    }

    if (!isValid(config)) {
      config._d = null;
    }

    return config;
  }

  function configFromInput(config) {
    var input = config._i;

    if (isUndefined(input)) {
      config._d = new Date(hooks.now());
    } else if (isDate(input)) {
      config._d = new Date(input.valueOf());
    } else if (typeof input === 'string') {
      configFromString(config);
    } else if (isArray(input)) {
      config._a = map(input.slice(0), function (obj) {
        return parseInt(obj, 10);
      });
      configFromArray(config);
    } else if (isObject(input)) {
      configFromObject(config);
    } else if (isNumber(input)) {
      // from milliseconds
      config._d = new Date(input);
    } else {
      hooks.createFromInputFallback(config);
    }
  }

  function createLocalOrUTC(input, format, locale, strict, isUTC) {
    var c = {};

    if (format === true || format === false) {
      strict = format;
      format = undefined;
    }

    if (locale === true || locale === false) {
      strict = locale;
      locale = undefined;
    }

    if (isObject(input) && isObjectEmpty(input) || isArray(input) && input.length === 0) {
      input = undefined;
    } // object construction must be done this way.
    // https://github.com/moment/moment/issues/1423


    c._isAMomentObject = true;
    c._useUTC = c._isUTC = isUTC;
    c._l = locale;
    c._i = input;
    c._f = format;
    c._strict = strict;
    return createFromConfig(c);
  }

  function createLocal(input, format, locale, strict) {
    return createLocalOrUTC(input, format, locale, strict, false);
  }

  var prototypeMin = deprecate('moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', function () {
    var other = createLocal.apply(null, arguments);

    if (this.isValid() && other.isValid()) {
      return other < this ? this : other;
    } else {
      return createInvalid();
    }
  }),
      prototypeMax = deprecate('moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', function () {
    var other = createLocal.apply(null, arguments);

    if (this.isValid() && other.isValid()) {
      return other > this ? this : other;
    } else {
      return createInvalid();
    }
  }); // Pick a moment m from moments so that m[fn](other) is true for all
  // other. This relies on the function fn to be transitive.
  //
  // moments should either be an array of moment objects or an array, whose
  // first element is an array of moment objects.

  function pickBy(fn, moments) {
    var res, i;

    if (moments.length === 1 && isArray(moments[0])) {
      moments = moments[0];
    }

    if (!moments.length) {
      return createLocal();
    }

    res = moments[0];

    for (i = 1; i < moments.length; ++i) {
      if (!moments[i].isValid() || moments[i][fn](res)) {
        res = moments[i];
      }
    }

    return res;
  } // TODO: Use [].sort instead?


  function min() {
    var args = [].slice.call(arguments, 0);
    return pickBy('isBefore', args);
  }

  function max() {
    var args = [].slice.call(arguments, 0);
    return pickBy('isAfter', args);
  }

  var now = function now() {
    return Date.now ? Date.now() : +new Date();
  };

  var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];

  function isDurationValid(m) {
    var key,
        unitHasDecimal = false,
        i;

    for (key in m) {
      if (hasOwnProp(m, key) && !(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {
        return false;
      }
    }

    for (i = 0; i < ordering.length; ++i) {
      if (m[ordering[i]]) {
        if (unitHasDecimal) {
          return false; // only allow non-integers for smallest unit
        }

        if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
          unitHasDecimal = true;
        }
      }
    }

    return true;
  }

  function isValid$1() {
    return this._isValid;
  }

  function createInvalid$1() {
    return createDuration(NaN);
  }

  function Duration(duration) {
    var normalizedInput = normalizeObjectUnits(duration),
        years = normalizedInput.year || 0,
        quarters = normalizedInput.quarter || 0,
        months = normalizedInput.month || 0,
        weeks = normalizedInput.week || normalizedInput.isoWeek || 0,
        days = normalizedInput.day || 0,
        hours = normalizedInput.hour || 0,
        minutes = normalizedInput.minute || 0,
        seconds = normalizedInput.second || 0,
        milliseconds = normalizedInput.millisecond || 0;
    this._isValid = isDurationValid(normalizedInput); // representation for dateAddRemove

    this._milliseconds = +milliseconds + seconds * 1e3 + // 1000
    minutes * 6e4 + // 1000 * 60
    hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
    // Because of dateAddRemove treats 24 hours as different from a
    // day when working around DST, we need to store them separately

    this._days = +days + weeks * 7; // It is impossible to translate months into days without knowing
    // which months you are are talking about, so we have to store
    // it separately.

    this._months = +months + quarters * 3 + years * 12;
    this._data = {};
    this._locale = getLocale();

    this._bubble();
  }

  function isDuration(obj) {
    return obj instanceof Duration;
  }

  function absRound(number) {
    if (number < 0) {
      return Math.round(-1 * number) * -1;
    } else {
      return Math.round(number);
    }
  } // compare two arrays, return the number of differences


  function compareArrays(array1, array2, dontConvert) {
    var len = Math.min(array1.length, array2.length),
        lengthDiff = Math.abs(array1.length - array2.length),
        diffs = 0,
        i;

    for (i = 0; i < len; i++) {
      if (dontConvert && array1[i] !== array2[i] || !dontConvert && toInt(array1[i]) !== toInt(array2[i])) {
        diffs++;
      }
    }

    return diffs + lengthDiff;
  } // FORMATTING


  function offset(token, separator) {
    addFormatToken(token, 0, 0, function () {
      var offset = this.utcOffset(),
          sign = '+';

      if (offset < 0) {
        offset = -offset;
        sign = '-';
      }

      return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~offset % 60, 2);
    });
  }

  offset('Z', ':');
  offset('ZZ', ''); // PARSING

  addRegexToken('Z', matchShortOffset);
  addRegexToken('ZZ', matchShortOffset);
  addParseToken(['Z', 'ZZ'], function (input, array, config) {
    config._useUTC = true;
    config._tzm = offsetFromString(matchShortOffset, input);
  }); // HELPERS
  // timezone chunker
  // '+10:00' > ['10',  '00']
  // '-1530'  > ['-15', '30']

  var chunkOffset = /([\+\-]|\d\d)/gi;

  function offsetFromString(matcher, string) {
    var matches = (string || '').match(matcher),
        chunk,
        parts,
        minutes;

    if (matches === null) {
      return null;
    }

    chunk = matches[matches.length - 1] || [];
    parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];
    minutes = +(parts[1] * 60) + toInt(parts[2]);
    return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;
  } // Return a moment from input, that is local/utc/zone equivalent to model.


  function cloneWithOffset(input, model) {
    var res, diff;

    if (model._isUTC) {
      res = model.clone();
      diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf(); // Use low-level api, because this fn is low-level api.

      res._d.setTime(res._d.valueOf() + diff);

      hooks.updateOffset(res, false);
      return res;
    } else {
      return createLocal(input).local();
    }
  }

  function getDateOffset(m) {
    // On Firefox.24 Date#getTimezoneOffset returns a floating point.
    // https://github.com/moment/moment/pull/1871
    return -Math.round(m._d.getTimezoneOffset());
  } // HOOKS
  // This function will be called whenever a moment is mutated.
  // It is intended to keep the offset in sync with the timezone.


  hooks.updateOffset = function () {}; // MOMENTS
  // keepLocalTime = true means only change the timezone, without
  // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
  // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
  // +0200, so we adjust the time as needed, to be valid.
  //
  // Keeping the time actually adds/subtracts (one hour)
  // from the actual represented time. That is why we call updateOffset
  // a second time. In case it wants us to change the offset again
  // _changeInProgress == true case, then we have to adjust, because
  // there is no such time in the given timezone.


  function getSetOffset(input, keepLocalTime, keepMinutes) {
    var offset = this._offset || 0,
        localAdjust;

    if (!this.isValid()) {
      return input != null ? this : NaN;
    }

    if (input != null) {
      if (typeof input === 'string') {
        input = offsetFromString(matchShortOffset, input);

        if (input === null) {
          return this;
        }
      } else if (Math.abs(input) < 16 && !keepMinutes) {
        input = input * 60;
      }

      if (!this._isUTC && keepLocalTime) {
        localAdjust = getDateOffset(this);
      }

      this._offset = input;
      this._isUTC = true;

      if (localAdjust != null) {
        this.add(localAdjust, 'm');
      }

      if (offset !== input) {
        if (!keepLocalTime || this._changeInProgress) {
          addSubtract(this, createDuration(input - offset, 'm'), 1, false);
        } else if (!this._changeInProgress) {
          this._changeInProgress = true;
          hooks.updateOffset(this, true);
          this._changeInProgress = null;
        }
      }

      return this;
    } else {
      return this._isUTC ? offset : getDateOffset(this);
    }
  }

  function getSetZone(input, keepLocalTime) {
    if (input != null) {
      if (typeof input !== 'string') {
        input = -input;
      }

      this.utcOffset(input, keepLocalTime);
      return this;
    } else {
      return -this.utcOffset();
    }
  }

  function setOffsetToUTC(keepLocalTime) {
    return this.utcOffset(0, keepLocalTime);
  }

  function setOffsetToLocal(keepLocalTime) {
    if (this._isUTC) {
      this.utcOffset(0, keepLocalTime);
      this._isUTC = false;

      if (keepLocalTime) {
        this.subtract(getDateOffset(this), 'm');
      }
    }

    return this;
  }

  function setOffsetToParsedOffset() {
    if (this._tzm != null) {
      this.utcOffset(this._tzm, false, true);
    } else if (typeof this._i === 'string') {
      var tZone = offsetFromString(matchOffset, this._i);

      if (tZone != null) {
        this.utcOffset(tZone);
      } else {
        this.utcOffset(0, true);
      }
    }

    return this;
  }

  function hasAlignedHourOffset(input) {
    if (!this.isValid()) {
      return false;
    }

    input = input ? createLocal(input).utcOffset() : 0;
    return (this.utcOffset() - input) % 60 === 0;
  }

  function isDaylightSavingTime() {
    return this.utcOffset() > this.clone().month(0).utcOffset() || this.utcOffset() > this.clone().month(5).utcOffset();
  }

  function isDaylightSavingTimeShifted() {
    if (!isUndefined(this._isDSTShifted)) {
      return this._isDSTShifted;
    }

    var c = {},
        other;
    copyConfig(c, this);
    c = prepareConfig(c);

    if (c._a) {
      other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
      this._isDSTShifted = this.isValid() && compareArrays(c._a, other.toArray()) > 0;
    } else {
      this._isDSTShifted = false;
    }

    return this._isDSTShifted;
  }

  function isLocal() {
    return this.isValid() ? !this._isUTC : false;
  }

  function isUtcOffset() {
    return this.isValid() ? this._isUTC : false;
  }

  function isUtc() {
    return this.isValid() ? this._isUTC && this._offset === 0 : false;
  } // ASP.NET json date format regex


  var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,
      // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
  // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
  // and further modified to allow for strings containing both week and day
  isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;

  function createDuration(input, key) {
    var duration = input,
        // matching against regexp is expensive, do it on demand
    match = null,
        sign,
        ret,
        diffRes;

    if (isDuration(input)) {
      duration = {
        ms: input._milliseconds,
        d: input._days,
        M: input._months
      };
    } else if (isNumber(input) || !isNaN(+input)) {
      duration = {};

      if (key) {
        duration[key] = +input;
      } else {
        duration.milliseconds = +input;
      }
    } else if (match = aspNetRegex.exec(input)) {
      sign = match[1] === '-' ? -1 : 1;
      duration = {
        y: 0,
        d: toInt(match[DATE]) * sign,
        h: toInt(match[HOUR]) * sign,
        m: toInt(match[MINUTE]) * sign,
        s: toInt(match[SECOND]) * sign,
        ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match

      };
    } else if (match = isoRegex.exec(input)) {
      sign = match[1] === '-' ? -1 : 1;
      duration = {
        y: parseIso(match[2], sign),
        M: parseIso(match[3], sign),
        w: parseIso(match[4], sign),
        d: parseIso(match[5], sign),
        h: parseIso(match[6], sign),
        m: parseIso(match[7], sign),
        s: parseIso(match[8], sign)
      };
    } else if (duration == null) {
      // checks for null or undefined
      duration = {};
    } else if (_typeof(duration) === 'object' && ('from' in duration || 'to' in duration)) {
      diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));
      duration = {};
      duration.ms = diffRes.milliseconds;
      duration.M = diffRes.months;
    }

    ret = new Duration(duration);

    if (isDuration(input) && hasOwnProp(input, '_locale')) {
      ret._locale = input._locale;
    }

    if (isDuration(input) && hasOwnProp(input, '_isValid')) {
      ret._isValid = input._isValid;
    }

    return ret;
  }

  createDuration.fn = Duration.prototype;
  createDuration.invalid = createInvalid$1;

  function parseIso(inp, sign) {
    // We'd normally use ~~inp for this, but unfortunately it also
    // converts floats to ints.
    // inp may be undefined, so careful calling replace on it.
    var res = inp && parseFloat(inp.replace(',', '.')); // apply sign while we're at it

    return (isNaN(res) ? 0 : res) * sign;
  }

  function positiveMomentsDifference(base, other) {
    var res = {};
    res.months = other.month() - base.month() + (other.year() - base.year()) * 12;

    if (base.clone().add(res.months, 'M').isAfter(other)) {
      --res.months;
    }

    res.milliseconds = +other - +base.clone().add(res.months, 'M');
    return res;
  }

  function momentsDifference(base, other) {
    var res;

    if (!(base.isValid() && other.isValid())) {
      return {
        milliseconds: 0,
        months: 0
      };
    }

    other = cloneWithOffset(other, base);

    if (base.isBefore(other)) {
      res = positiveMomentsDifference(base, other);
    } else {
      res = positiveMomentsDifference(other, base);
      res.milliseconds = -res.milliseconds;
      res.months = -res.months;
    }

    return res;
  } // TODO: remove 'name' arg after deprecation is removed


  function createAdder(direction, name) {
    return function (val, period) {
      var dur, tmp; //invert the arguments, but complain about it

      if (period !== null && !isNaN(+period)) {
        deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' + 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');
        tmp = val;
        val = period;
        period = tmp;
      }

      dur = createDuration(val, period);
      addSubtract(this, dur, direction);
      return this;
    };
  }

  function addSubtract(mom, duration, isAdding, updateOffset) {
    var milliseconds = duration._milliseconds,
        days = absRound(duration._days),
        months = absRound(duration._months);

    if (!mom.isValid()) {
      // No op
      return;
    }

    updateOffset = updateOffset == null ? true : updateOffset;

    if (months) {
      setMonth(mom, get(mom, 'Month') + months * isAdding);
    }

    if (days) {
      set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);
    }

    if (milliseconds) {
      mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
    }

    if (updateOffset) {
      hooks.updateOffset(mom, days || months);
    }
  }

  var add = createAdder(1, 'add'),
      subtract = createAdder(-1, 'subtract');

  function isString(input) {
    return typeof input === 'string' || input instanceof String;
  } // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined


  function isMomentInput(input) {
    return isMoment(input) || isDate(input) || isString(input) || isNumber(input) || isNumberOrStringArray(input) || isMomentInputObject(input) || input === null || input === undefined;
  }

  function isMomentInputObject(input) {
    var objectTest = isObject(input) && !isObjectEmpty(input),
        propertyTest = false,
        properties = ['years', 'year', 'y', 'months', 'month', 'M', 'days', 'day', 'd', 'dates', 'date', 'D', 'hours', 'hour', 'h', 'minutes', 'minute', 'm', 'seconds', 'second', 's', 'milliseconds', 'millisecond', 'ms'],
        i,
        property;

    for (i = 0; i < properties.length; i += 1) {
      property = properties[i];
      propertyTest = propertyTest || hasOwnProp(input, property);
    }

    return objectTest && propertyTest;
  }

  function isNumberOrStringArray(input) {
    var arrayTest = isArray(input),
        dataTypeTest = false;

    if (arrayTest) {
      dataTypeTest = input.filter(function (item) {
        return !isNumber(item) && isString(input);
      }).length === 0;
    }

    return arrayTest && dataTypeTest;
  }

  function isCalendarSpec(input) {
    var objectTest = isObject(input) && !isObjectEmpty(input),
        propertyTest = false,
        properties = ['sameDay', 'nextDay', 'lastDay', 'nextWeek', 'lastWeek', 'sameElse'],
        i,
        property;

    for (i = 0; i < properties.length; i += 1) {
      property = properties[i];
      propertyTest = propertyTest || hasOwnProp(input, property);
    }

    return objectTest && propertyTest;
  }

  function getCalendarFormat(myMoment, now) {
    var diff = myMoment.diff(now, 'days', true);
    return diff < -6 ? 'sameElse' : diff < -1 ? 'lastWeek' : diff < 0 ? 'lastDay' : diff < 1 ? 'sameDay' : diff < 2 ? 'nextDay' : diff < 7 ? 'nextWeek' : 'sameElse';
  }

  function calendar$1(time, formats) {
    // Support for single parameter, formats only overload to the calendar function
    if (arguments.length === 1) {
      if (!arguments[0]) {
        time = undefined;
        formats = undefined;
      } else if (isMomentInput(arguments[0])) {
        time = arguments[0];
        formats = undefined;
      } else if (isCalendarSpec(arguments[0])) {
        formats = arguments[0];
        time = undefined;
      }
    } // We want to compare the start of today, vs this.
    // Getting start-of-today depends on whether we're local/utc/offset or not.


    var now = time || createLocal(),
        sod = cloneWithOffset(now, this).startOf('day'),
        format = hooks.calendarFormat(this, sod) || 'sameElse',
        output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);
    return this.format(output || this.localeData().calendar(format, this, createLocal(now)));
  }

  function clone() {
    return new Moment(this);
  }

  function isAfter(input, units) {
    var localInput = isMoment(input) ? input : createLocal(input);

    if (!(this.isValid() && localInput.isValid())) {
      return false;
    }

    units = normalizeUnits(units) || 'millisecond';

    if (units === 'millisecond') {
      return this.valueOf() > localInput.valueOf();
    } else {
      return localInput.valueOf() < this.clone().startOf(units).valueOf();
    }
  }

  function isBefore(input, units) {
    var localInput = isMoment(input) ? input : createLocal(input);

    if (!(this.isValid() && localInput.isValid())) {
      return false;
    }

    units = normalizeUnits(units) || 'millisecond';

    if (units === 'millisecond') {
      return this.valueOf() < localInput.valueOf();
    } else {
      return this.clone().endOf(units).valueOf() < localInput.valueOf();
    }
  }

  function isBetween(from, to, units, inclusivity) {
    var localFrom = isMoment(from) ? from : createLocal(from),
        localTo = isMoment(to) ? to : createLocal(to);

    if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {
      return false;
    }

    inclusivity = inclusivity || '()';
    return (inclusivity[0] === '(' ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) && (inclusivity[1] === ')' ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));
  }

  function isSame(input, units) {
    var localInput = isMoment(input) ? input : createLocal(input),
        inputMs;

    if (!(this.isValid() && localInput.isValid())) {
      return false;
    }

    units = normalizeUnits(units) || 'millisecond';

    if (units === 'millisecond') {
      return this.valueOf() === localInput.valueOf();
    } else {
      inputMs = localInput.valueOf();
      return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();
    }
  }

  function isSameOrAfter(input, units) {
    return this.isSame(input, units) || this.isAfter(input, units);
  }

  function isSameOrBefore(input, units) {
    return this.isSame(input, units) || this.isBefore(input, units);
  }

  function diff(input, units, asFloat) {
    var that, zoneDelta, output;

    if (!this.isValid()) {
      return NaN;
    }

    that = cloneWithOffset(input, this);

    if (!that.isValid()) {
      return NaN;
    }

    zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
    units = normalizeUnits(units);

    switch (units) {
      case 'year':
        output = monthDiff(this, that) / 12;
        break;

      case 'month':
        output = monthDiff(this, that);
        break;

      case 'quarter':
        output = monthDiff(this, that) / 3;
        break;

      case 'second':
        output = (this - that) / 1e3;
        break;
      // 1000

      case 'minute':
        output = (this - that) / 6e4;
        break;
      // 1000 * 60

      case 'hour':
        output = (this - that) / 36e5;
        break;
      // 1000 * 60 * 60

      case 'day':
        output = (this - that - zoneDelta) / 864e5;
        break;
      // 1000 * 60 * 60 * 24, negate dst

      case 'week':
        output = (this - that - zoneDelta) / 6048e5;
        break;
      // 1000 * 60 * 60 * 24 * 7, negate dst

      default:
        output = this - that;
    }

    return asFloat ? output : absFloor(output);
  }

  function monthDiff(a, b) {
    if (a.date() < b.date()) {
      // end-of-month calculations work correct when the start month has more
      // days than the end month.
      return -monthDiff(b, a);
    } // difference in months


    var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),
        // b is in (anchor - 1 month, anchor + 1 month)
    anchor = a.clone().add(wholeMonthDiff, 'months'),
        anchor2,
        adjust;

    if (b - anchor < 0) {
      anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); // linear across the month

      adjust = (b - anchor) / (anchor - anchor2);
    } else {
      anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); // linear across the month

      adjust = (b - anchor) / (anchor2 - anchor);
    } //check for negative zero, return zero if negative zero


    return -(wholeMonthDiff + adjust) || 0;
  }

  hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
  hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';

  function toString() {
    return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
  }

  function toISOString(keepOffset) {
    if (!this.isValid()) {
      return null;
    }

    var utc = keepOffset !== true,
        m = utc ? this.clone().utc() : this;

    if (m.year() < 0 || m.year() > 9999) {
      return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');
    }

    if (isFunction(Date.prototype.toISOString)) {
      // native implementation is ~50x faster, use it when we can
      if (utc) {
        return this.toDate().toISOString();
      } else {
        return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));
      }
    }

    return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');
  }
  /**
   * Return a human readable representation of a moment that can
   * also be evaluated to get a new moment which is the same
   *
   * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
   */


  function inspect() {
    if (!this.isValid()) {
      return 'moment.invalid(/* ' + this._i + ' */)';
    }

    var func = 'moment',
        zone = '',
        prefix,
        year,
        datetime,
        suffix;

    if (!this.isLocal()) {
      func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
      zone = 'Z';
    }

    prefix = '[' + func + '("]';
    year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';
    datetime = '-MM-DD[T]HH:mm:ss.SSS';
    suffix = zone + '[")]';
    return this.format(prefix + year + datetime + suffix);
  }

  function format(inputString) {
    if (!inputString) {
      inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;
    }

    var output = formatMoment(this, inputString);
    return this.localeData().postformat(output);
  }

  function from(time, withoutSuffix) {
    if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {
      return createDuration({
        to: this,
        from: time
      }).locale(this.locale()).humanize(!withoutSuffix);
    } else {
      return this.localeData().invalidDate();
    }
  }

  function fromNow(withoutSuffix) {
    return this.from(createLocal(), withoutSuffix);
  }

  function to(time, withoutSuffix) {
    if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {
      return createDuration({
        from: this,
        to: time
      }).locale(this.locale()).humanize(!withoutSuffix);
    } else {
      return this.localeData().invalidDate();
    }
  }

  function toNow(withoutSuffix) {
    return this.to(createLocal(), withoutSuffix);
  } // If passed a locale key, it will set the locale for this
  // instance.  Otherwise, it will return the locale configuration
  // variables for this instance.


  function locale(key) {
    var newLocaleData;

    if (key === undefined) {
      return this._locale._abbr;
    } else {
      newLocaleData = getLocale(key);

      if (newLocaleData != null) {
        this._locale = newLocaleData;
      }

      return this;
    }
  }

  var lang = deprecate('moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', function (key) {
    if (key === undefined) {
      return this.localeData();
    } else {
      return this.locale(key);
    }
  });

  function localeData() {
    return this._locale;
  }

  var MS_PER_SECOND = 1000,
      MS_PER_MINUTE = 60 * MS_PER_SECOND,
      MS_PER_HOUR = 60 * MS_PER_MINUTE,
      MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR; // actual modulo - handles negative numbers (for dates before 1970):

  function mod$1(dividend, divisor) {
    return (dividend % divisor + divisor) % divisor;
  }

  function localStartOfDate(y, m, d) {
    // the date constructor remaps years 0-99 to 1900-1999
    if (y < 100 && y >= 0) {
      // preserve leap years using a full 400 year cycle, then reset
      return new Date(y + 400, m, d) - MS_PER_400_YEARS;
    } else {
      return new Date(y, m, d).valueOf();
    }
  }

  function utcStartOfDate(y, m, d) {
    // Date.UTC remaps years 0-99 to 1900-1999
    if (y < 100 && y >= 0) {
      // preserve leap years using a full 400 year cycle, then reset
      return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;
    } else {
      return Date.UTC(y, m, d);
    }
  }

  function startOf(units) {
    var time, startOfDate;
    units = normalizeUnits(units);

    if (units === undefined || units === 'millisecond' || !this.isValid()) {
      return this;
    }

    startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;

    switch (units) {
      case 'year':
        time = startOfDate(this.year(), 0, 1);
        break;

      case 'quarter':
        time = startOfDate(this.year(), this.month() - this.month() % 3, 1);
        break;

      case 'month':
        time = startOfDate(this.year(), this.month(), 1);
        break;

      case 'week':
        time = startOfDate(this.year(), this.month(), this.date() - this.weekday());
        break;

      case 'isoWeek':
        time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1));
        break;

      case 'day':
      case 'date':
        time = startOfDate(this.year(), this.month(), this.date());
        break;

      case 'hour':
        time = this._d.valueOf();
        time -= mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR);
        break;

      case 'minute':
        time = this._d.valueOf();
        time -= mod$1(time, MS_PER_MINUTE);
        break;

      case 'second':
        time = this._d.valueOf();
        time -= mod$1(time, MS_PER_SECOND);
        break;
    }

    this._d.setTime(time);

    hooks.updateOffset(this, true);
    return this;
  }

  function endOf(units) {
    var time, startOfDate;
    units = normalizeUnits(units);

    if (units === undefined || units === 'millisecond' || !this.isValid()) {
      return this;
    }

    startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;

    switch (units) {
      case 'year':
        time = startOfDate(this.year() + 1, 0, 1) - 1;
        break;

      case 'quarter':
        time = startOfDate(this.year(), this.month() - this.month() % 3 + 3, 1) - 1;
        break;

      case 'month':
        time = startOfDate(this.year(), this.month() + 1, 1) - 1;
        break;

      case 'week':
        time = startOfDate(this.year(), this.month(), this.date() - this.weekday() + 7) - 1;
        break;

      case 'isoWeek':
        time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7) - 1;
        break;

      case 'day':
      case 'date':
        time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;
        break;

      case 'hour':
        time = this._d.valueOf();
        time += MS_PER_HOUR - mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR) - 1;
        break;

      case 'minute':
        time = this._d.valueOf();
        time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;
        break;

      case 'second':
        time = this._d.valueOf();
        time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;
        break;
    }

    this._d.setTime(time);

    hooks.updateOffset(this, true);
    return this;
  }

  function valueOf() {
    return this._d.valueOf() - (this._offset || 0) * 60000;
  }

  function unix() {
    return Math.floor(this.valueOf() / 1000);
  }

  function toDate() {
    return new Date(this.valueOf());
  }

  function toArray() {
    var m = this;
    return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];
  }

  function toObject() {
    var m = this;
    return {
      years: m.year(),
      months: m.month(),
      date: m.date(),
      hours: m.hours(),
      minutes: m.minutes(),
      seconds: m.seconds(),
      milliseconds: m.milliseconds()
    };
  }

  function toJSON() {
    // new Date(NaN).toJSON() === null
    return this.isValid() ? this.toISOString() : null;
  }

  function isValid$2() {
    return isValid(this);
  }

  function parsingFlags() {
    return extend({}, getParsingFlags(this));
  }

  function invalidAt() {
    return getParsingFlags(this).overflow;
  }

  function creationData() {
    return {
      input: this._i,
      format: this._f,
      locale: this._locale,
      isUTC: this._isUTC,
      strict: this._strict
    };
  }

  addFormatToken('N', 0, 0, 'eraAbbr');
  addFormatToken('NN', 0, 0, 'eraAbbr');
  addFormatToken('NNN', 0, 0, 'eraAbbr');
  addFormatToken('NNNN', 0, 0, 'eraName');
  addFormatToken('NNNNN', 0, 0, 'eraNarrow');
  addFormatToken('y', ['y', 1], 'yo', 'eraYear');
  addFormatToken('y', ['yy', 2], 0, 'eraYear');
  addFormatToken('y', ['yyy', 3], 0, 'eraYear');
  addFormatToken('y', ['yyyy', 4], 0, 'eraYear');
  addRegexToken('N', matchEraAbbr);
  addRegexToken('NN', matchEraAbbr);
  addRegexToken('NNN', matchEraAbbr);
  addRegexToken('NNNN', matchEraName);
  addRegexToken('NNNNN', matchEraNarrow);
  addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function (input, array, config, token) {
    var era = config._locale.erasParse(input, token, config._strict);

    if (era) {
      getParsingFlags(config).era = era;
    } else {
      getParsingFlags(config).invalidEra = input;
    }
  });
  addRegexToken('y', matchUnsigned);
  addRegexToken('yy', matchUnsigned);
  addRegexToken('yyy', matchUnsigned);
  addRegexToken('yyyy', matchUnsigned);
  addRegexToken('yo', matchEraYearOrdinal);
  addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);
  addParseToken(['yo'], function (input, array, config, token) {
    var match;

    if (config._locale._eraYearOrdinalRegex) {
      match = input.match(config._locale._eraYearOrdinalRegex);
    }

    if (config._locale.eraYearOrdinalParse) {
      array[YEAR] = config._locale.eraYearOrdinalParse(input, match);
    } else {
      array[YEAR] = parseInt(input, 10);
    }
  });

  function localeEras(m, format) {
    var i,
        l,
        date,
        eras = this._eras || getLocale('en')._eras;

    for (i = 0, l = eras.length; i < l; ++i) {
      switch (_typeof(eras[i].since)) {
        case 'string':
          // truncate time
          date = hooks(eras[i].since).startOf('day');
          eras[i].since = date.valueOf();
          break;
      }

      switch (_typeof(eras[i].until)) {
        case 'undefined':
          eras[i].until = +Infinity;
          break;

        case 'string':
          // truncate time
          date = hooks(eras[i].until).startOf('day').valueOf();
          eras[i].until = date.valueOf();
          break;
      }
    }

    return eras;
  }

  function localeErasParse(eraName, format, strict) {
    var i,
        l,
        eras = this.eras(),
        name,
        abbr,
        narrow;
    eraName = eraName.toUpperCase();

    for (i = 0, l = eras.length; i < l; ++i) {
      name = eras[i].name.toUpperCase();
      abbr = eras[i].abbr.toUpperCase();
      narrow = eras[i].narrow.toUpperCase();

      if (strict) {
        switch (format) {
          case 'N':
          case 'NN':
          case 'NNN':
            if (abbr === eraName) {
              return eras[i];
            }

            break;

          case 'NNNN':
            if (name === eraName) {
              return eras[i];
            }

            break;

          case 'NNNNN':
            if (narrow === eraName) {
              return eras[i];
            }

            break;
        }
      } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {
        return eras[i];
      }
    }
  }

  function localeErasConvertYear(era, year) {
    var dir = era.since <= era.until ? +1 : -1;

    if (year === undefined) {
      return hooks(era.since).year();
    } else {
      return hooks(era.since).year() + (year - era.offset) * dir;
    }
  }

  function getEraName() {
    var i,
        l,
        val,
        eras = this.localeData().eras();

    for (i = 0, l = eras.length; i < l; ++i) {
      // truncate time
      val = this.clone().startOf('day').valueOf();

      if (eras[i].since <= val && val <= eras[i].until) {
        return eras[i].name;
      }

      if (eras[i].until <= val && val <= eras[i].since) {
        return eras[i].name;
      }
    }

    return '';
  }

  function getEraNarrow() {
    var i,
        l,
        val,
        eras = this.localeData().eras();

    for (i = 0, l = eras.length; i < l; ++i) {
      // truncate time
      val = this.clone().startOf('day').valueOf();

      if (eras[i].since <= val && val <= eras[i].until) {
        return eras[i].narrow;
      }

      if (eras[i].until <= val && val <= eras[i].since) {
        return eras[i].narrow;
      }
    }

    return '';
  }

  function getEraAbbr() {
    var i,
        l,
        val,
        eras = this.localeData().eras();

    for (i = 0, l = eras.length; i < l; ++i) {
      // truncate time
      val = this.clone().startOf('day').valueOf();

      if (eras[i].since <= val && val <= eras[i].until) {
        return eras[i].abbr;
      }

      if (eras[i].until <= val && val <= eras[i].since) {
        return eras[i].abbr;
      }
    }

    return '';
  }

  function getEraYear() {
    var i,
        l,
        dir,
        val,
        eras = this.localeData().eras();

    for (i = 0, l = eras.length; i < l; ++i) {
      dir = eras[i].since <= eras[i].until ? +1 : -1; // truncate time

      val = this.clone().startOf('day').valueOf();

      if (eras[i].since <= val && val <= eras[i].until || eras[i].until <= val && val <= eras[i].since) {
        return (this.year() - hooks(eras[i].since).year()) * dir + eras[i].offset;
      }
    }

    return this.year();
  }

  function erasNameRegex(isStrict) {
    if (!hasOwnProp(this, '_erasNameRegex')) {
      computeErasParse.call(this);
    }

    return isStrict ? this._erasNameRegex : this._erasRegex;
  }

  function erasAbbrRegex(isStrict) {
    if (!hasOwnProp(this, '_erasAbbrRegex')) {
      computeErasParse.call(this);
    }

    return isStrict ? this._erasAbbrRegex : this._erasRegex;
  }

  function erasNarrowRegex(isStrict) {
    if (!hasOwnProp(this, '_erasNarrowRegex')) {
      computeErasParse.call(this);
    }

    return isStrict ? this._erasNarrowRegex : this._erasRegex;
  }

  function matchEraAbbr(isStrict, locale) {
    return locale.erasAbbrRegex(isStrict);
  }

  function matchEraName(isStrict, locale) {
    return locale.erasNameRegex(isStrict);
  }

  function matchEraNarrow(isStrict, locale) {
    return locale.erasNarrowRegex(isStrict);
  }

  function matchEraYearOrdinal(isStrict, locale) {
    return locale._eraYearOrdinalRegex || matchUnsigned;
  }

  function computeErasParse() {
    var abbrPieces = [],
        namePieces = [],
        narrowPieces = [],
        mixedPieces = [],
        i,
        l,
        eras = this.eras();

    for (i = 0, l = eras.length; i < l; ++i) {
      namePieces.push(regexEscape(eras[i].name));
      abbrPieces.push(regexEscape(eras[i].abbr));
      narrowPieces.push(regexEscape(eras[i].narrow));
      mixedPieces.push(regexEscape(eras[i].name));
      mixedPieces.push(regexEscape(eras[i].abbr));
      mixedPieces.push(regexEscape(eras[i].narrow));
    }

    this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
    this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');
    this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');
    this._erasNarrowRegex = new RegExp('^(' + narrowPieces.join('|') + ')', 'i');
  } // FORMATTING


  addFormatToken(0, ['gg', 2], 0, function () {
    return this.weekYear() % 100;
  });
  addFormatToken(0, ['GG', 2], 0, function () {
    return this.isoWeekYear() % 100;
  });

  function addWeekYearFormatToken(token, getter) {
    addFormatToken(0, [token, token.length], 0, getter);
  }

  addWeekYearFormatToken('gggg', 'weekYear');
  addWeekYearFormatToken('ggggg', 'weekYear');
  addWeekYearFormatToken('GGGG', 'isoWeekYear');
  addWeekYearFormatToken('GGGGG', 'isoWeekYear'); // ALIASES

  addUnitAlias('weekYear', 'gg');
  addUnitAlias('isoWeekYear', 'GG'); // PRIORITY

  addUnitPriority('weekYear', 1);
  addUnitPriority('isoWeekYear', 1); // PARSING

  addRegexToken('G', matchSigned);
  addRegexToken('g', matchSigned);
  addRegexToken('GG', match1to2, match2);
  addRegexToken('gg', match1to2, match2);
  addRegexToken('GGGG', match1to4, match4);
  addRegexToken('gggg', match1to4, match4);
  addRegexToken('GGGGG', match1to6, match6);
  addRegexToken('ggggg', match1to6, match6);
  addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {
    week[token.substr(0, 2)] = toInt(input);
  });
  addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
    week[token] = hooks.parseTwoDigitYear(input);
  }); // MOMENTS

  function getSetWeekYear(input) {
    return getSetWeekYearHelper.call(this, input, this.week(), this.weekday(), this.localeData()._week.dow, this.localeData()._week.doy);
  }

  function getSetISOWeekYear(input) {
    return getSetWeekYearHelper.call(this, input, this.isoWeek(), this.isoWeekday(), 1, 4);
  }

  function getISOWeeksInYear() {
    return weeksInYear(this.year(), 1, 4);
  }

  function getISOWeeksInISOWeekYear() {
    return weeksInYear(this.isoWeekYear(), 1, 4);
  }

  function getWeeksInYear() {
    var weekInfo = this.localeData()._week;

    return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
  }

  function getWeeksInWeekYear() {
    var weekInfo = this.localeData()._week;

    return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);
  }

  function getSetWeekYearHelper(input, week, weekday, dow, doy) {
    var weeksTarget;

    if (input == null) {
      return weekOfYear(this, dow, doy).year;
    } else {
      weeksTarget = weeksInYear(input, dow, doy);

      if (week > weeksTarget) {
        week = weeksTarget;
      }

      return setWeekAll.call(this, input, week, weekday, dow, doy);
    }
  }

  function setWeekAll(weekYear, week, weekday, dow, doy) {
    var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
        date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
    this.year(date.getUTCFullYear());
    this.month(date.getUTCMonth());
    this.date(date.getUTCDate());
    return this;
  } // FORMATTING


  addFormatToken('Q', 0, 'Qo', 'quarter'); // ALIASES

  addUnitAlias('quarter', 'Q'); // PRIORITY

  addUnitPriority('quarter', 7); // PARSING

  addRegexToken('Q', match1);
  addParseToken('Q', function (input, array) {
    array[MONTH] = (toInt(input) - 1) * 3;
  }); // MOMENTS

  function getSetQuarter(input) {
    return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);
  } // FORMATTING


  addFormatToken('D', ['DD', 2], 'Do', 'date'); // ALIASES

  addUnitAlias('date', 'D'); // PRIORITY

  addUnitPriority('date', 9); // PARSING

  addRegexToken('D', match1to2);
  addRegexToken('DD', match1to2, match2);
  addRegexToken('Do', function (isStrict, locale) {
    // TODO: Remove "ordinalParse" fallback in next major release.
    return isStrict ? locale._dayOfMonthOrdinalParse || locale._ordinalParse : locale._dayOfMonthOrdinalParseLenient;
  });
  addParseToken(['D', 'DD'], DATE);
  addParseToken('Do', function (input, array) {
    array[DATE] = toInt(input.match(match1to2)[0]);
  }); // MOMENTS

  var getSetDayOfMonth = makeGetSet('Date', true); // FORMATTING

  addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); // ALIASES

  addUnitAlias('dayOfYear', 'DDD'); // PRIORITY

  addUnitPriority('dayOfYear', 4); // PARSING

  addRegexToken('DDD', match1to3);
  addRegexToken('DDDD', match3);
  addParseToken(['DDD', 'DDDD'], function (input, array, config) {
    config._dayOfYear = toInt(input);
  }); // HELPERS
  // MOMENTS

  function getSetDayOfYear(input) {
    var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;
    return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');
  } // FORMATTING


  addFormatToken('m', ['mm', 2], 0, 'minute'); // ALIASES

  addUnitAlias('minute', 'm'); // PRIORITY

  addUnitPriority('minute', 14); // PARSING

  addRegexToken('m', match1to2);
  addRegexToken('mm', match1to2, match2);
  addParseToken(['m', 'mm'], MINUTE); // MOMENTS

  var getSetMinute = makeGetSet('Minutes', false); // FORMATTING

  addFormatToken('s', ['ss', 2], 0, 'second'); // ALIASES

  addUnitAlias('second', 's'); // PRIORITY

  addUnitPriority('second', 15); // PARSING

  addRegexToken('s', match1to2);
  addRegexToken('ss', match1to2, match2);
  addParseToken(['s', 'ss'], SECOND); // MOMENTS

  var getSetSecond = makeGetSet('Seconds', false); // FORMATTING

  addFormatToken('S', 0, 0, function () {
    return ~~(this.millisecond() / 100);
  });
  addFormatToken(0, ['SS', 2], 0, function () {
    return ~~(this.millisecond() / 10);
  });
  addFormatToken(0, ['SSS', 3], 0, 'millisecond');
  addFormatToken(0, ['SSSS', 4], 0, function () {
    return this.millisecond() * 10;
  });
  addFormatToken(0, ['SSSSS', 5], 0, function () {
    return this.millisecond() * 100;
  });
  addFormatToken(0, ['SSSSSS', 6], 0, function () {
    return this.millisecond() * 1000;
  });
  addFormatToken(0, ['SSSSSSS', 7], 0, function () {
    return this.millisecond() * 10000;
  });
  addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
    return this.millisecond() * 100000;
  });
  addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
    return this.millisecond() * 1000000;
  }); // ALIASES

  addUnitAlias('millisecond', 'ms'); // PRIORITY

  addUnitPriority('millisecond', 16); // PARSING

  addRegexToken('S', match1to3, match1);
  addRegexToken('SS', match1to3, match2);
  addRegexToken('SSS', match1to3, match3);
  var token, getSetMillisecond;

  for (token = 'SSSS'; token.length <= 9; token += 'S') {
    addRegexToken(token, matchUnsigned);
  }

  function parseMs(input, array) {
    array[MILLISECOND] = toInt(('0.' + input) * 1000);
  }

  for (token = 'S'; token.length <= 9; token += 'S') {
    addParseToken(token, parseMs);
  }

  getSetMillisecond = makeGetSet('Milliseconds', false); // FORMATTING

  addFormatToken('z', 0, 0, 'zoneAbbr');
  addFormatToken('zz', 0, 0, 'zoneName'); // MOMENTS

  function getZoneAbbr() {
    return this._isUTC ? 'UTC' : '';
  }

  function getZoneName() {
    return this._isUTC ? 'Coordinated Universal Time' : '';
  }

  var proto = Moment.prototype;
  proto.add = add;
  proto.calendar = calendar$1;
  proto.clone = clone;
  proto.diff = diff;
  proto.endOf = endOf;
  proto.format = format;
  proto.from = from;
  proto.fromNow = fromNow;
  proto.to = to;
  proto.toNow = toNow;
  proto.get = stringGet;
  proto.invalidAt = invalidAt;
  proto.isAfter = isAfter;
  proto.isBefore = isBefore;
  proto.isBetween = isBetween;
  proto.isSame = isSame;
  proto.isSameOrAfter = isSameOrAfter;
  proto.isSameOrBefore = isSameOrBefore;
  proto.isValid = isValid$2;
  proto.lang = lang;
  proto.locale = locale;
  proto.localeData = localeData;
  proto.max = prototypeMax;
  proto.min = prototypeMin;
  proto.parsingFlags = parsingFlags;
  proto.set = stringSet;
  proto.startOf = startOf;
  proto.subtract = subtract;
  proto.toArray = toArray;
  proto.toObject = toObject;
  proto.toDate = toDate;
  proto.toISOString = toISOString;
  proto.inspect = inspect;

  if (typeof Symbol !== 'undefined' && Symbol.for != null) {
    proto[Symbol.for('nodejs.util.inspect.custom')] = function () {
      return 'Moment<' + this.format() + '>';
    };
  }

  proto.toJSON = toJSON;
  proto.toString = toString;
  proto.unix = unix;
  proto.valueOf = valueOf;
  proto.creationData = creationData;
  proto.eraName = getEraName;
  proto.eraNarrow = getEraNarrow;
  proto.eraAbbr = getEraAbbr;
  proto.eraYear = getEraYear;
  proto.year = getSetYear;
  proto.isLeapYear = getIsLeapYear;
  proto.weekYear = getSetWeekYear;
  proto.isoWeekYear = getSetISOWeekYear;
  proto.quarter = proto.quarters = getSetQuarter;
  proto.month = getSetMonth;
  proto.daysInMonth = getDaysInMonth;
  proto.week = proto.weeks = getSetWeek;
  proto.isoWeek = proto.isoWeeks = getSetISOWeek;
  proto.weeksInYear = getWeeksInYear;
  proto.weeksInWeekYear = getWeeksInWeekYear;
  proto.isoWeeksInYear = getISOWeeksInYear;
  proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;
  proto.date = getSetDayOfMonth;
  proto.day = proto.days = getSetDayOfWeek;
  proto.weekday = getSetLocaleDayOfWeek;
  proto.isoWeekday = getSetISODayOfWeek;
  proto.dayOfYear = getSetDayOfYear;
  proto.hour = proto.hours = getSetHour;
  proto.minute = proto.minutes = getSetMinute;
  proto.second = proto.seconds = getSetSecond;
  proto.millisecond = proto.milliseconds = getSetMillisecond;
  proto.utcOffset = getSetOffset;
  proto.utc = setOffsetToUTC;
  proto.local = setOffsetToLocal;
  proto.parseZone = setOffsetToParsedOffset;
  proto.hasAlignedHourOffset = hasAlignedHourOffset;
  proto.isDST = isDaylightSavingTime;
  proto.isLocal = isLocal;
  proto.isUtcOffset = isUtcOffset;
  proto.isUtc = isUtc;
  proto.isUTC = isUtc;
  proto.zoneAbbr = getZoneAbbr;
  proto.zoneName = getZoneName;
  proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);
  proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);
  proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);
  proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);
  proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);

  function createUnix(input) {
    return createLocal(input * 1000);
  }

  function createInZone() {
    return createLocal.apply(null, arguments).parseZone();
  }

  function preParsePostFormat(string) {
    return string;
  }

  var proto$1 = Locale.prototype;
  proto$1.calendar = calendar;
  proto$1.longDateFormat = longDateFormat;
  proto$1.invalidDate = invalidDate;
  proto$1.ordinal = ordinal;
  proto$1.preparse = preParsePostFormat;
  proto$1.postformat = preParsePostFormat;
  proto$1.relativeTime = relativeTime;
  proto$1.pastFuture = pastFuture;
  proto$1.set = set;
  proto$1.eras = localeEras;
  proto$1.erasParse = localeErasParse;
  proto$1.erasConvertYear = localeErasConvertYear;
  proto$1.erasAbbrRegex = erasAbbrRegex;
  proto$1.erasNameRegex = erasNameRegex;
  proto$1.erasNarrowRegex = erasNarrowRegex;
  proto$1.months = localeMonths;
  proto$1.monthsShort = localeMonthsShort;
  proto$1.monthsParse = localeMonthsParse;
  proto$1.monthsRegex = monthsRegex;
  proto$1.monthsShortRegex = monthsShortRegex;
  proto$1.week = localeWeek;
  proto$1.firstDayOfYear = localeFirstDayOfYear;
  proto$1.firstDayOfWeek = localeFirstDayOfWeek;
  proto$1.weekdays = localeWeekdays;
  proto$1.weekdaysMin = localeWeekdaysMin;
  proto$1.weekdaysShort = localeWeekdaysShort;
  proto$1.weekdaysParse = localeWeekdaysParse;
  proto$1.weekdaysRegex = weekdaysRegex;
  proto$1.weekdaysShortRegex = weekdaysShortRegex;
  proto$1.weekdaysMinRegex = weekdaysMinRegex;
  proto$1.isPM = localeIsPM;
  proto$1.meridiem = localeMeridiem;

  function get$1(format, index, field, setter) {
    var locale = getLocale(),
        utc = createUTC().set(setter, index);
    return locale[field](utc, format);
  }

  function listMonthsImpl(format, index, field) {
    if (isNumber(format)) {
      index = format;
      format = undefined;
    }

    format = format || '';

    if (index != null) {
      return get$1(format, index, field, 'month');
    }

    var i,
        out = [];

    for (i = 0; i < 12; i++) {
      out[i] = get$1(format, i, field, 'month');
    }

    return out;
  } // ()
  // (5)
  // (fmt, 5)
  // (fmt)
  // (true)
  // (true, 5)
  // (true, fmt, 5)
  // (true, fmt)


  function listWeekdaysImpl(localeSorted, format, index, field) {
    if (typeof localeSorted === 'boolean') {
      if (isNumber(format)) {
        index = format;
        format = undefined;
      }

      format = format || '';
    } else {
      format = localeSorted;
      index = format;
      localeSorted = false;

      if (isNumber(format)) {
        index = format;
        format = undefined;
      }

      format = format || '';
    }

    var locale = getLocale(),
        shift = localeSorted ? locale._week.dow : 0,
        i,
        out = [];

    if (index != null) {
      return get$1(format, (index + shift) % 7, field, 'day');
    }

    for (i = 0; i < 7; i++) {
      out[i] = get$1(format, (i + shift) % 7, field, 'day');
    }

    return out;
  }

  function listMonths(format, index) {
    return listMonthsImpl(format, index, 'months');
  }

  function listMonthsShort(format, index) {
    return listMonthsImpl(format, index, 'monthsShort');
  }

  function listWeekdays(localeSorted, format, index) {
    return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
  }

  function listWeekdaysShort(localeSorted, format, index) {
    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
  }

  function listWeekdaysMin(localeSorted, format, index) {
    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
  }

  getSetGlobalLocale('en', {
    eras: [{
      since: '0001-01-01',
      until: +Infinity,
      offset: 1,
      name: 'Anno Domini',
      narrow: 'AD',
      abbr: 'AD'
    }, {
      since: '0000-12-31',
      until: -Infinity,
      offset: 1,
      name: 'Before Christ',
      narrow: 'BC',
      abbr: 'BC'
    }],
    dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
    ordinal: function ordinal(number) {
      var b = number % 10,
          output = toInt(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';
      return number + output;
    }
  }); // Side effect imports

  hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);
  hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);
  var mathAbs = Math.abs;

  function abs() {
    var data = this._data;
    this._milliseconds = mathAbs(this._milliseconds);
    this._days = mathAbs(this._days);
    this._months = mathAbs(this._months);
    data.milliseconds = mathAbs(data.milliseconds);
    data.seconds = mathAbs(data.seconds);
    data.minutes = mathAbs(data.minutes);
    data.hours = mathAbs(data.hours);
    data.months = mathAbs(data.months);
    data.years = mathAbs(data.years);
    return this;
  }

  function addSubtract$1(duration, input, value, direction) {
    var other = createDuration(input, value);
    duration._milliseconds += direction * other._milliseconds;
    duration._days += direction * other._days;
    duration._months += direction * other._months;
    return duration._bubble();
  } // supports only 2.0-style add(1, 's') or add(duration)


  function add$1(input, value) {
    return addSubtract$1(this, input, value, 1);
  } // supports only 2.0-style subtract(1, 's') or subtract(duration)


  function subtract$1(input, value) {
    return addSubtract$1(this, input, value, -1);
  }

  function absCeil(number) {
    if (number < 0) {
      return Math.floor(number);
    } else {
      return Math.ceil(number);
    }
  }

  function bubble() {
    var milliseconds = this._milliseconds,
        days = this._days,
        months = this._months,
        data = this._data,
        seconds,
        minutes,
        hours,
        years,
        monthsFromDays; // if we have a mix of positive and negative values, bubble down first
    // check: https://github.com/moment/moment/issues/2166

    if (!(milliseconds >= 0 && days >= 0 && months >= 0 || milliseconds <= 0 && days <= 0 && months <= 0)) {
      milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
      days = 0;
      months = 0;
    } // The following code bubbles up values, see the tests for
    // examples of what that means.


    data.milliseconds = milliseconds % 1000;
    seconds = absFloor(milliseconds / 1000);
    data.seconds = seconds % 60;
    minutes = absFloor(seconds / 60);
    data.minutes = minutes % 60;
    hours = absFloor(minutes / 60);
    data.hours = hours % 24;
    days += absFloor(hours / 24); // convert days to months

    monthsFromDays = absFloor(daysToMonths(days));
    months += monthsFromDays;
    days -= absCeil(monthsToDays(monthsFromDays)); // 12 months -> 1 year

    years = absFloor(months / 12);
    months %= 12;
    data.days = days;
    data.months = months;
    data.years = years;
    return this;
  }

  function daysToMonths(days) {
    // 400 years have 146097 days (taking into account leap year rules)
    // 400 years have 12 months === 4800
    return days * 4800 / 146097;
  }

  function monthsToDays(months) {
    // the reverse of daysToMonths
    return months * 146097 / 4800;
  }

  function as(units) {
    if (!this.isValid()) {
      return NaN;
    }

    var days,
        months,
        milliseconds = this._milliseconds;
    units = normalizeUnits(units);

    if (units === 'month' || units === 'quarter' || units === 'year') {
      days = this._days + milliseconds / 864e5;
      months = this._months + daysToMonths(days);

      switch (units) {
        case 'month':
          return months;

        case 'quarter':
          return months / 3;

        case 'year':
          return months / 12;
      }
    } else {
      // handle milliseconds separately because of floating point math errors (issue #1867)
      days = this._days + Math.round(monthsToDays(this._months));

      switch (units) {
        case 'week':
          return days / 7 + milliseconds / 6048e5;

        case 'day':
          return days + milliseconds / 864e5;

        case 'hour':
          return days * 24 + milliseconds / 36e5;

        case 'minute':
          return days * 1440 + milliseconds / 6e4;

        case 'second':
          return days * 86400 + milliseconds / 1000;
        // Math.floor prevents floating point math errors here

        case 'millisecond':
          return Math.floor(days * 864e5) + milliseconds;

        default:
          throw new Error('Unknown unit ' + units);
      }
    }
  } // TODO: Use this.as('ms')?


  function valueOf$1() {
    if (!this.isValid()) {
      return NaN;
    }

    return this._milliseconds + this._days * 864e5 + this._months % 12 * 2592e6 + toInt(this._months / 12) * 31536e6;
  }

  function makeAs(alias) {
    return function () {
      return this.as(alias);
    };
  }

  var asMilliseconds = makeAs('ms'),
      asSeconds = makeAs('s'),
      asMinutes = makeAs('m'),
      asHours = makeAs('h'),
      asDays = makeAs('d'),
      asWeeks = makeAs('w'),
      asMonths = makeAs('M'),
      asQuarters = makeAs('Q'),
      asYears = makeAs('y');

  function clone$1() {
    return createDuration(this);
  }

  function get$2(units) {
    units = normalizeUnits(units);
    return this.isValid() ? this[units + 's']() : NaN;
  }

  function makeGetter(name) {
    return function () {
      return this.isValid() ? this._data[name] : NaN;
    };
  }

  var milliseconds = makeGetter('milliseconds'),
      seconds = makeGetter('seconds'),
      minutes = makeGetter('minutes'),
      hours = makeGetter('hours'),
      days = makeGetter('days'),
      months = makeGetter('months'),
      years = makeGetter('years');

  function weeks() {
    return absFloor(this.days() / 7);
  }

  var round = Math.round,
      thresholds = {
    ss: 44,
    // a few seconds to seconds
    s: 45,
    // seconds to minute
    m: 45,
    // minutes to hour
    h: 22,
    // hours to day
    d: 26,
    // days to month/week
    w: null,
    // weeks to month
    M: 11 // months to year

  }; // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize

  function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
    return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
  }

  function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {
    var duration = createDuration(posNegDuration).abs(),
        seconds = round(duration.as('s')),
        minutes = round(duration.as('m')),
        hours = round(duration.as('h')),
        days = round(duration.as('d')),
        months = round(duration.as('M')),
        weeks = round(duration.as('w')),
        years = round(duration.as('y')),
        a = seconds <= thresholds.ss && ['s', seconds] || seconds < thresholds.s && ['ss', seconds] || minutes <= 1 && ['m'] || minutes < thresholds.m && ['mm', minutes] || hours <= 1 && ['h'] || hours < thresholds.h && ['hh', hours] || days <= 1 && ['d'] || days < thresholds.d && ['dd', days];

    if (thresholds.w != null) {
      a = a || weeks <= 1 && ['w'] || weeks < thresholds.w && ['ww', weeks];
    }

    a = a || months <= 1 && ['M'] || months < thresholds.M && ['MM', months] || years <= 1 && ['y'] || ['yy', years];
    a[2] = withoutSuffix;
    a[3] = +posNegDuration > 0;
    a[4] = locale;
    return substituteTimeAgo.apply(null, a);
  } // This function allows you to set the rounding function for relative time strings


  function getSetRelativeTimeRounding(roundingFunction) {
    if (roundingFunction === undefined) {
      return round;
    }

    if (typeof roundingFunction === 'function') {
      round = roundingFunction;
      return true;
    }

    return false;
  } // This function allows you to set a threshold for relative time strings


  function getSetRelativeTimeThreshold(threshold, limit) {
    if (thresholds[threshold] === undefined) {
      return false;
    }

    if (limit === undefined) {
      return thresholds[threshold];
    }

    thresholds[threshold] = limit;

    if (threshold === 's') {
      thresholds.ss = limit - 1;
    }

    return true;
  }

  function humanize(argWithSuffix, argThresholds) {
    if (!this.isValid()) {
      return this.localeData().invalidDate();
    }

    var withSuffix = false,
        th = thresholds,
        locale,
        output;

    if (_typeof(argWithSuffix) === 'object') {
      argThresholds = argWithSuffix;
      argWithSuffix = false;
    }

    if (typeof argWithSuffix === 'boolean') {
      withSuffix = argWithSuffix;
    }

    if (_typeof(argThresholds) === 'object') {
      th = Object.assign({}, thresholds, argThresholds);

      if (argThresholds.s != null && argThresholds.ss == null) {
        th.ss = argThresholds.s - 1;
      }
    }

    locale = this.localeData();
    output = relativeTime$1(this, !withSuffix, th, locale);

    if (withSuffix) {
      output = locale.pastFuture(+this, output);
    }

    return locale.postformat(output);
  }

  var abs$1 = Math.abs;

  function sign(x) {
    return (x > 0) - (x < 0) || +x;
  }

  function toISOString$1() {
    // for ISO strings we do not use the normal bubbling rules:
    //  * milliseconds bubble up until they become hours
    //  * days do not bubble at all
    //  * months bubble up until they become years
    // This is because there is no context-free conversion between hours and days
    // (think of clock changes)
    // and also not between days and months (28-31 days per month)
    if (!this.isValid()) {
      return this.localeData().invalidDate();
    }

    var seconds = abs$1(this._milliseconds) / 1000,
        days = abs$1(this._days),
        months = abs$1(this._months),
        minutes,
        hours,
        years,
        s,
        total = this.asSeconds(),
        totalSign,
        ymSign,
        daysSign,
        hmsSign;

    if (!total) {
      // this is the same as C#'s (Noda) and python (isodate)...
      // but not other JS (goog.date)
      return 'P0D';
    } // 3600 seconds -> 60 minutes -> 1 hour


    minutes = absFloor(seconds / 60);
    hours = absFloor(minutes / 60);
    seconds %= 60;
    minutes %= 60; // 12 months -> 1 year

    years = absFloor(months / 12);
    months %= 12; // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js

    s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : '';
    totalSign = total < 0 ? '-' : '';
    ymSign = sign(this._months) !== sign(total) ? '-' : '';
    daysSign = sign(this._days) !== sign(total) ? '-' : '';
    hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';
    return totalSign + 'P' + (years ? ymSign + years + 'Y' : '') + (months ? ymSign + months + 'M' : '') + (days ? daysSign + days + 'D' : '') + (hours || minutes || seconds ? 'T' : '') + (hours ? hmsSign + hours + 'H' : '') + (minutes ? hmsSign + minutes + 'M' : '') + (seconds ? hmsSign + s + 'S' : '');
  }

  var proto$2 = Duration.prototype;
  proto$2.isValid = isValid$1;
  proto$2.abs = abs;
  proto$2.add = add$1;
  proto$2.subtract = subtract$1;
  proto$2.as = as;
  proto$2.asMilliseconds = asMilliseconds;
  proto$2.asSeconds = asSeconds;
  proto$2.asMinutes = asMinutes;
  proto$2.asHours = asHours;
  proto$2.asDays = asDays;
  proto$2.asWeeks = asWeeks;
  proto$2.asMonths = asMonths;
  proto$2.asQuarters = asQuarters;
  proto$2.asYears = asYears;
  proto$2.valueOf = valueOf$1;
  proto$2._bubble = bubble;
  proto$2.clone = clone$1;
  proto$2.get = get$2;
  proto$2.milliseconds = milliseconds;
  proto$2.seconds = seconds;
  proto$2.minutes = minutes;
  proto$2.hours = hours;
  proto$2.days = days;
  proto$2.weeks = weeks;
  proto$2.months = months;
  proto$2.years = years;
  proto$2.humanize = humanize;
  proto$2.toISOString = toISOString$1;
  proto$2.toString = toISOString$1;
  proto$2.toJSON = toISOString$1;
  proto$2.locale = locale;
  proto$2.localeData = localeData;
  proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);
  proto$2.lang = lang; // FORMATTING

  addFormatToken('X', 0, 0, 'unix');
  addFormatToken('x', 0, 0, 'valueOf'); // PARSING

  addRegexToken('x', matchSigned);
  addRegexToken('X', matchTimestamp);
  addParseToken('X', function (input, array, config) {
    config._d = new Date(parseFloat(input) * 1000);
  });
  addParseToken('x', function (input, array, config) {
    config._d = new Date(toInt(input));
  }); //! moment.js

  hooks.version = '2.29.1';
  setHookCallback(createLocal);
  hooks.fn = proto;
  hooks.min = min;
  hooks.max = max;
  hooks.now = now;
  hooks.utc = createUTC;
  hooks.unix = createUnix;
  hooks.months = listMonths;
  hooks.isDate = isDate;
  hooks.locale = getSetGlobalLocale;
  hooks.invalid = createInvalid;
  hooks.duration = createDuration;
  hooks.isMoment = isMoment;
  hooks.weekdays = listWeekdays;
  hooks.parseZone = createInZone;
  hooks.localeData = getLocale;
  hooks.isDuration = isDuration;
  hooks.monthsShort = listMonthsShort;
  hooks.weekdaysMin = listWeekdaysMin;
  hooks.defineLocale = defineLocale;
  hooks.updateLocale = updateLocale;
  hooks.locales = listLocales;
  hooks.weekdaysShort = listWeekdaysShort;
  hooks.normalizeUnits = normalizeUnits;
  hooks.relativeTimeRounding = getSetRelativeTimeRounding;
  hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
  hooks.calendarFormat = getCalendarFormat;
  hooks.prototype = proto; // currently HTML5 input type only supports 24-hour formats

  hooks.HTML5_FMT = {
    DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm',
    // <input type="datetime-local" />
    DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss',
    // <input type="datetime-local" step="1" />
    DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS',
    // <input type="datetime-local" step="0.001" />
    DATE: 'YYYY-MM-DD',
    // <input type="date" />
    TIME: 'HH:mm',
    // <input type="time" />
    TIME_SECONDS: 'HH:mm:ss',
    // <input type="time" step="1" />
    TIME_MS: 'HH:mm:ss.SSS',
    // <input type="time" step="0.001" />
    WEEK: 'GGGG-[W]WW',
    // <input type="week" />
    MONTH: 'YYYY-MM' // <input type="month" />

  };
  return hooks;
});

/***/ }),

/***/ "./node_modules/ssr-window/dist/ssr-window.esm.js":
/*!********************************************************!*\
  !*** ./node_modules/ssr-window/dist/ssr-window.esm.js ***!
  \********************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "document": function() { return /* binding */ doc; },
/* harmony export */   "extend": function() { return /* binding */ extend; },
/* harmony export */   "window": function() { return /* binding */ win; }
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/esm/typeof.js");


/**
 * SSR Window 2.0.0
 * Better handling for window object in SSR environment
 * https://github.com/nolimits4web/ssr-window
 *
 * Copyright 2020, Vladimir Kharlampidi
 *
 * Licensed under MIT
 *
 * Released on: May 12, 2020
 */

/* eslint-disable no-param-reassign */
function isObject(obj) {
  return obj !== null && (0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__["default"])(obj) === 'object' && 'constructor' in obj && obj.constructor === Object;
}

function extend(target, src) {
  if (target === void 0) {
    target = {};
  }

  if (src === void 0) {
    src = {};
  }

  Object.keys(src).forEach(function (key) {
    if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {
      extend(target[key], src[key]);
    }
  });
}

var doc = typeof document !== 'undefined' ? document : {};
var ssrDocument = {
  body: {},
  addEventListener: function addEventListener() {},
  removeEventListener: function removeEventListener() {},
  activeElement: {
    blur: function blur() {},
    nodeName: ''
  },
  querySelector: function querySelector() {
    return null;
  },
  querySelectorAll: function querySelectorAll() {
    return [];
  },
  getElementById: function getElementById() {
    return null;
  },
  createEvent: function createEvent() {
    return {
      initEvent: function initEvent() {}
    };
  },
  createElement: function createElement() {
    return {
      children: [],
      childNodes: [],
      style: {},
      setAttribute: function setAttribute() {},
      getElementsByTagName: function getElementsByTagName() {
        return [];
      }
    };
  },
  createElementNS: function createElementNS() {
    return {};
  },
  importNode: function importNode() {
    return null;
  },
  location: {
    hash: '',
    host: '',
    hostname: '',
    href: '',
    origin: '',
    pathname: '',
    protocol: '',
    search: ''
  }
};
extend(doc, ssrDocument);
var win = typeof window !== 'undefined' ? window : {};
var ssrWindow = {
  document: ssrDocument,
  navigator: {
    userAgent: ''
  },
  location: {
    hash: '',
    host: '',
    hostname: '',
    href: '',
    origin: '',
    pathname: '',
    protocol: '',
    search: ''
  },
  history: {
    replaceState: function replaceState() {},
    pushState: function pushState() {},
    go: function go() {},
    back: function back() {}
  },
  CustomEvent: function CustomEvent() {
    return this;
  },
  addEventListener: function addEventListener() {},
  removeEventListener: function removeEventListener() {},
  getComputedStyle: function getComputedStyle() {
    return {
      getPropertyValue: function getPropertyValue() {
        return '';
      }
    };
  },
  Image: function Image() {},
  Date: function Date() {},
  screen: {},
  setTimeout: function setTimeout() {},
  clearTimeout: function clearTimeout() {},
  matchMedia: function matchMedia() {
    return {};
  }
};
extend(win, ssrWindow);


/***/ }),

/***/ "./node_modules/swiper/js/swiper.esm.bundle.js":
/*!*****************************************************!*\
  !*** ./node_modules/swiper/js/swiper.esm.bundle.js ***!
  \*****************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ "./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js");
/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "./node_modules/@babel/runtime/helpers/esm/inherits.js");
/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js");
/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js");
/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js");
/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js");
/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js");
/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/esm/typeof.js");
/* harmony import */ var dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! dom7/dist/dom7.modular */ "./node_modules/dom7/dist/dom7.modular.js");
/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/dist/ssr-window.esm.js");









function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0,_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__["default"])(this, result); }; }

function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }

/**
 * Swiper 5.4.5
 * Most modern mobile touch slider and framework with hardware accelerated transitions
 * http://swiperjs.com
 *
 * Copyright 2014-2020 Vladimir Kharlampidi
 *
 * Released under the MIT License
 *
 * Released on: June 16, 2020
 */


var Methods = {
  addClass: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.addClass,
  removeClass: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.removeClass,
  hasClass: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.hasClass,
  toggleClass: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.toggleClass,
  attr: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.attr,
  removeAttr: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.removeAttr,
  data: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.data,
  transform: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.transform,
  transition: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.transition,
  on: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.on,
  off: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.off,
  trigger: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.trigger,
  transitionEnd: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.transitionEnd,
  outerWidth: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.outerWidth,
  outerHeight: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.outerHeight,
  offset: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.offset,
  css: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.css,
  each: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.each,
  html: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.html,
  text: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.text,
  is: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.is,
  index: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.index,
  eq: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.eq,
  append: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.append,
  prepend: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.prepend,
  next: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.next,
  nextAll: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.nextAll,
  prev: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.prev,
  prevAll: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.prevAll,
  parent: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.parent,
  parents: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.parents,
  closest: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.closest,
  find: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.find,
  children: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.children,
  filter: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.filter,
  remove: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.remove,
  add: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.add,
  styles: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.styles
};
Object.keys(Methods).forEach(function (methodName) {
  dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$.fn[methodName] = dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$.fn[methodName] || Methods[methodName];
});
var Utils = {
  deleteProps: function deleteProps(obj) {
    var object = obj;
    Object.keys(object).forEach(function (key) {
      try {
        object[key] = null;
      } catch (e) {// no getter for object
      }

      try {
        delete object[key];
      } catch (e) {// something got wrong
      }
    });
  },
  nextTick: function nextTick(callback) {
    var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
    return setTimeout(callback, delay);
  },
  now: function now() {
    return Date.now();
  },
  getTranslate: function getTranslate(el) {
    var axis = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'x';
    var matrix;
    var curTransform;
    var transformMatrix;
    var curStyle = ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.getComputedStyle(el, null);

    if (ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.WebKitCSSMatrix) {
      curTransform = curStyle.transform || curStyle.webkitTransform;

      if (curTransform.split(',').length > 6) {
        curTransform = curTransform.split(', ').map(function (a) {
          return a.replace(',', '.');
        }).join(', ');
      } // Some old versions of Webkit choke when 'none' is passed; pass
      // empty string instead in this case


      transformMatrix = new ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);
    } else {
      transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');
      matrix = transformMatrix.toString().split(',');
    }

    if (axis === 'x') {
      // Latest Chrome and webkits Fix
      if (ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix
      else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers
      else curTransform = parseFloat(matrix[4]);
    }

    if (axis === 'y') {
      // Latest Chrome and webkits Fix
      if (ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix
      else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers
      else curTransform = parseFloat(matrix[5]);
    }

    return curTransform || 0;
  },
  parseUrlQuery: function parseUrlQuery(url) {
    var query = {};
    var urlToParse = url || ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.location.href;
    var i;
    var params;
    var param;
    var length;

    if (typeof urlToParse === 'string' && urlToParse.length) {
      urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\S*\?/, '') : '';
      params = urlToParse.split('&').filter(function (paramsPart) {
        return paramsPart !== '';
      });
      length = params.length;

      for (i = 0; i < length; i += 1) {
        param = params[i].replace(/#\S+/g, '').split('=');
        query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';
      }
    }

    return query;
  },
  isObject: function isObject(o) {
    return (0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_7__["default"])(o) === 'object' && o !== null && o.constructor && o.constructor === Object;
  },
  extend: function extend() {
    var to = Object(arguments.length <= 0 ? undefined : arguments[0]);

    for (var i = 1; i < arguments.length; i += 1) {
      var nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];

      if (nextSource !== undefined && nextSource !== null) {
        var keysArray = Object.keys(Object(nextSource));

        for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {
          var nextKey = keysArray[nextIndex];
          var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);

          if (desc !== undefined && desc.enumerable) {
            if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {
              Utils.extend(to[nextKey], nextSource[nextKey]);
            } else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {
              to[nextKey] = {};
              Utils.extend(to[nextKey], nextSource[nextKey]);
            } else {
              to[nextKey] = nextSource[nextKey];
            }
          }
        }
      }
    }

    return to;
  }
};

var Support = function Support() {
  return {
    touch: !!('ontouchstart' in ssr_window__WEBPACK_IMPORTED_MODULE_9__.window || ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.DocumentTouch && ssr_window__WEBPACK_IMPORTED_MODULE_9__.document instanceof ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.DocumentTouch),
    pointerEvents: !!ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.PointerEvent && 'maxTouchPoints' in ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.navigator && ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.navigator.maxTouchPoints >= 0,
    observer: function checkObserver() {
      return 'MutationObserver' in ssr_window__WEBPACK_IMPORTED_MODULE_9__.window || 'WebkitMutationObserver' in ssr_window__WEBPACK_IMPORTED_MODULE_9__.window;
    }(),
    passiveListener: function checkPassiveListener() {
      var supportsPassive = false;

      try {
        var opts = Object.defineProperty({}, 'passive', {
          // eslint-disable-next-line
          get: function get() {
            supportsPassive = true;
          }
        });
        ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.addEventListener('testPassiveListener', null, opts);
      } catch (e) {// No support
      }

      return supportsPassive;
    }(),
    gestures: function checkGestures() {
      return 'ongesturestart' in ssr_window__WEBPACK_IMPORTED_MODULE_9__.window;
    }()
  };
}();

var SwiperClass = /*#__PURE__*/function () {
  function SwiperClass() {
    var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_5__["default"])(this, SwiperClass);

    var self = this;
    self.params = params; // Events

    self.eventsListeners = {};

    if (self.params && self.params.on) {
      Object.keys(self.params.on).forEach(function (eventName) {
        self.on(eventName, self.params.on[eventName]);
      });
    }
  }

  (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_6__["default"])(SwiperClass, [{
    key: "on",
    value: function on(events, handler, priority) {
      var self = this;
      if (typeof handler !== 'function') return self;
      var method = priority ? 'unshift' : 'push';
      events.split(' ').forEach(function (event) {
        if (!self.eventsListeners[event]) self.eventsListeners[event] = [];
        self.eventsListeners[event][method](handler);
      });
      return self;
    }
  }, {
    key: "once",
    value: function once(events, handler, priority) {
      var self = this;
      if (typeof handler !== 'function') return self;

      function onceHandler() {
        self.off(events, onceHandler);

        if (onceHandler.f7proxy) {
          delete onceHandler.f7proxy;
        }

        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
          args[_key] = arguments[_key];
        }

        handler.apply(self, args);
      }

      onceHandler.f7proxy = handler;
      return self.on(events, onceHandler, priority);
    }
  }, {
    key: "off",
    value: function off(events, handler) {
      var self = this;
      if (!self.eventsListeners) return self;
      events.split(' ').forEach(function (event) {
        if (typeof handler === 'undefined') {
          self.eventsListeners[event] = [];
        } else if (self.eventsListeners[event] && self.eventsListeners[event].length) {
          self.eventsListeners[event].forEach(function (eventHandler, index) {
            if (eventHandler === handler || eventHandler.f7proxy && eventHandler.f7proxy === handler) {
              self.eventsListeners[event].splice(index, 1);
            }
          });
        }
      });
      return self;
    }
  }, {
    key: "emit",
    value: function emit() {
      var self = this;
      if (!self.eventsListeners) return self;
      var events;
      var data;
      var context;

      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
        args[_key2] = arguments[_key2];
      }

      if (typeof args[0] === 'string' || Array.isArray(args[0])) {
        events = args[0];
        data = args.slice(1, args.length);
        context = self;
      } else {
        events = args[0].events;
        data = args[0].data;
        context = args[0].context || self;
      }

      var eventsArray = Array.isArray(events) ? events : events.split(' ');
      eventsArray.forEach(function (event) {
        if (self.eventsListeners && self.eventsListeners[event]) {
          var handlers = [];
          self.eventsListeners[event].forEach(function (eventHandler) {
            handlers.push(eventHandler);
          });
          handlers.forEach(function (eventHandler) {
            eventHandler.apply(context, data);
          });
        }
      });
      return self;
    }
  }, {
    key: "useModulesParams",
    value: function useModulesParams(instanceParams) {
      var instance = this;
      if (!instance.modules) return;
      Object.keys(instance.modules).forEach(function (moduleName) {
        var module = instance.modules[moduleName]; // Extend params

        if (module.params) {
          Utils.extend(instanceParams, module.params);
        }
      });
    }
  }, {
    key: "useModules",
    value: function useModules() {
      var modulesParams = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
      var instance = this;
      if (!instance.modules) return;
      Object.keys(instance.modules).forEach(function (moduleName) {
        var module = instance.modules[moduleName];
        var moduleParams = modulesParams[moduleName] || {}; // Extend instance methods and props

        if (module.instance) {
          Object.keys(module.instance).forEach(function (modulePropName) {
            var moduleProp = module.instance[modulePropName];

            if (typeof moduleProp === 'function') {
              instance[modulePropName] = moduleProp.bind(instance);
            } else {
              instance[modulePropName] = moduleProp;
            }
          });
        } // Add event listeners


        if (module.on && instance.on) {
          Object.keys(module.on).forEach(function (moduleEventName) {
            instance.on(moduleEventName, module.on[moduleEventName]);
          });
        } // Module create callback


        if (module.create) {
          module.create.bind(instance)(moduleParams);
        }
      });
    }
  }], [{
    key: "components",
    set: function set(components) {
      var Class = this;
      if (!Class.use) return;
      Class.use(components);
    }
  }, {
    key: "installModule",
    value: function installModule(module) {
      var Class = this;
      if (!Class.prototype.modules) Class.prototype.modules = {};
      var name = module.name || "".concat(Object.keys(Class.prototype.modules).length, "_").concat(Utils.now());
      Class.prototype.modules[name] = module; // Prototype

      if (module.proto) {
        Object.keys(module.proto).forEach(function (key) {
          Class.prototype[key] = module.proto[key];
        });
      } // Class


      if (module.static) {
        Object.keys(module.static).forEach(function (key) {
          Class[key] = module.static[key];
        });
      } // Callback


      if (module.install) {
        for (var _len3 = arguments.length, params = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
          params[_key3 - 1] = arguments[_key3];
        }

        module.install.apply(Class, params);
      }

      return Class;
    }
  }, {
    key: "use",
    value: function use(module) {
      var Class = this;

      if (Array.isArray(module)) {
        module.forEach(function (m) {
          return Class.installModule(m);
        });
        return Class;
      }

      for (var _len4 = arguments.length, params = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
        params[_key4 - 1] = arguments[_key4];
      }

      return Class.installModule.apply(Class, [module].concat(params));
    }
  }]);

  return SwiperClass;
}();

function updateSize() {
  var swiper = this;
  var width;
  var height;
  var $el = swiper.$el;

  if (typeof swiper.params.width !== 'undefined') {
    width = swiper.params.width;
  } else {
    width = $el[0].clientWidth;
  }

  if (typeof swiper.params.height !== 'undefined') {
    height = swiper.params.height;
  } else {
    height = $el[0].clientHeight;
  }

  if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {
    return;
  } // Subtract paddings


  width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10);
  height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10);
  Utils.extend(swiper, {
    width: width,
    height: height,
    size: swiper.isHorizontal() ? width : height
  });
}

function updateSlides() {
  var swiper = this;
  var params = swiper.params;
  var $wrapperEl = swiper.$wrapperEl,
      swiperSize = swiper.size,
      rtl = swiper.rtlTranslate,
      wrongRTL = swiper.wrongRTL;
  var isVirtual = swiper.virtual && params.virtual.enabled;
  var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;
  var slides = $wrapperEl.children(".".concat(swiper.params.slideClass));
  var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;
  var snapGrid = [];
  var slidesGrid = [];
  var slidesSizesGrid = [];

  function slidesForMargin(slideIndex) {
    if (!params.cssMode) return true;

    if (slideIndex === slides.length - 1) {
      return false;
    }

    return true;
  }

  var offsetBefore = params.slidesOffsetBefore;

  if (typeof offsetBefore === 'function') {
    offsetBefore = params.slidesOffsetBefore.call(swiper);
  }

  var offsetAfter = params.slidesOffsetAfter;

  if (typeof offsetAfter === 'function') {
    offsetAfter = params.slidesOffsetAfter.call(swiper);
  }

  var previousSnapGridLength = swiper.snapGrid.length;
  var previousSlidesGridLength = swiper.snapGrid.length;
  var spaceBetween = params.spaceBetween;
  var slidePosition = -offsetBefore;
  var prevSlideSize = 0;
  var index = 0;

  if (typeof swiperSize === 'undefined') {
    return;
  }

  if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
    spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;
  }

  swiper.virtualSize = -spaceBetween; // reset margins

  if (rtl) slides.css({
    marginLeft: '',
    marginTop: ''
  });else slides.css({
    marginRight: '',
    marginBottom: ''
  });
  var slidesNumberEvenToRows;

  if (params.slidesPerColumn > 1) {
    if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {
      slidesNumberEvenToRows = slidesLength;
    } else {
      slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;
    }

    if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {
      slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);
    }
  } // Calc slides


  var slideSize;
  var slidesPerColumn = params.slidesPerColumn;
  var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;
  var numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);

  for (var i = 0; i < slidesLength; i += 1) {
    slideSize = 0;

    var _slide = slides.eq(i);

    if (params.slidesPerColumn > 1) {
      // Set slides order
      var newSlideOrderIndex = void 0;
      var column = void 0;
      var row = void 0;

      if (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) {
        var groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn));
        var slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex;
        var columnsInGroup = groupIndex === 0 ? params.slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / slidesPerColumn), params.slidesPerGroup);
        row = Math.floor(slideIndexInGroup / columnsInGroup);
        column = slideIndexInGroup - row * columnsInGroup + groupIndex * params.slidesPerGroup;
        newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn;

        _slide.css({
          '-webkit-box-ordinal-group': newSlideOrderIndex,
          '-moz-box-ordinal-group': newSlideOrderIndex,
          '-ms-flex-order': newSlideOrderIndex,
          '-webkit-order': newSlideOrderIndex,
          order: newSlideOrderIndex
        });
      } else if (params.slidesPerColumnFill === 'column') {
        column = Math.floor(i / slidesPerColumn);
        row = i - column * slidesPerColumn;

        if (column > numFullColumns || column === numFullColumns && row === slidesPerColumn - 1) {
          row += 1;

          if (row >= slidesPerColumn) {
            row = 0;
            column += 1;
          }
        }
      } else {
        row = Math.floor(i / slidesPerRow);
        column = i - row * slidesPerRow;
      }

      _slide.css("margin-".concat(swiper.isHorizontal() ? 'top' : 'left'), row !== 0 && params.spaceBetween && "".concat(params.spaceBetween, "px"));
    }

    if (_slide.css('display') === 'none') continue; // eslint-disable-line

    if (params.slidesPerView === 'auto') {
      var slideStyles = ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.getComputedStyle(_slide[0], null);
      var currentTransform = _slide[0].style.transform;
      var currentWebKitTransform = _slide[0].style.webkitTransform;

      if (currentTransform) {
        _slide[0].style.transform = 'none';
      }

      if (currentWebKitTransform) {
        _slide[0].style.webkitTransform = 'none';
      }

      if (params.roundLengths) {
        slideSize = swiper.isHorizontal() ? _slide.outerWidth(true) : _slide.outerHeight(true);
      } else {
        // eslint-disable-next-line
        if (swiper.isHorizontal()) {
          var width = parseFloat(slideStyles.getPropertyValue('width'));
          var paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left'));
          var paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right'));
          var marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left'));
          var marginRight = parseFloat(slideStyles.getPropertyValue('margin-right'));
          var boxSizing = slideStyles.getPropertyValue('box-sizing');

          if (boxSizing && boxSizing === 'border-box') {
            slideSize = width + marginLeft + marginRight;
          } else {
            slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight;
          }
        } else {
          var height = parseFloat(slideStyles.getPropertyValue('height'));
          var paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top'));
          var paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom'));
          var marginTop = parseFloat(slideStyles.getPropertyValue('margin-top'));
          var marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom'));

          var _boxSizing = slideStyles.getPropertyValue('box-sizing');

          if (_boxSizing && _boxSizing === 'border-box') {
            slideSize = height + marginTop + marginBottom;
          } else {
            slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom;
          }
        }
      }

      if (currentTransform) {
        _slide[0].style.transform = currentTransform;
      }

      if (currentWebKitTransform) {
        _slide[0].style.webkitTransform = currentWebKitTransform;
      }

      if (params.roundLengths) slideSize = Math.floor(slideSize);
    } else {
      slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;
      if (params.roundLengths) slideSize = Math.floor(slideSize);

      if (slides[i]) {
        if (swiper.isHorizontal()) {
          slides[i].style.width = "".concat(slideSize, "px");
        } else {
          slides[i].style.height = "".concat(slideSize, "px");
        }
      }
    }

    if (slides[i]) {
      slides[i].swiperSlideSize = slideSize;
    }

    slidesSizesGrid.push(slideSize);

    if (params.centeredSlides) {
      slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;
      if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
      if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
      if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;
      if (params.roundLengths) slidePosition = Math.floor(slidePosition);
      if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);
      slidesGrid.push(slidePosition);
    } else {
      if (params.roundLengths) slidePosition = Math.floor(slidePosition);
      if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);
      slidesGrid.push(slidePosition);
      slidePosition = slidePosition + slideSize + spaceBetween;
    }

    swiper.virtualSize += slideSize + spaceBetween;
    prevSlideSize = slideSize;
    index += 1;
  }

  swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;
  var newSlidesGrid;

  if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {
    $wrapperEl.css({
      width: "".concat(swiper.virtualSize + params.spaceBetween, "px")
    });
  }

  if (params.setWrapperSize) {
    if (swiper.isHorizontal()) $wrapperEl.css({
      width: "".concat(swiper.virtualSize + params.spaceBetween, "px")
    });else $wrapperEl.css({
      height: "".concat(swiper.virtualSize + params.spaceBetween, "px")
    });
  }

  if (params.slidesPerColumn > 1) {
    swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;
    swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;
    if (swiper.isHorizontal()) $wrapperEl.css({
      width: "".concat(swiper.virtualSize + params.spaceBetween, "px")
    });else $wrapperEl.css({
      height: "".concat(swiper.virtualSize + params.spaceBetween, "px")
    });

    if (params.centeredSlides) {
      newSlidesGrid = [];

      for (var _i = 0; _i < snapGrid.length; _i += 1) {
        var slidesGridItem = snapGrid[_i];
        if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);
        if (snapGrid[_i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);
      }

      snapGrid = newSlidesGrid;
    }
  } // Remove last grid elements depending on width


  if (!params.centeredSlides) {
    newSlidesGrid = [];

    for (var _i2 = 0; _i2 < snapGrid.length; _i2 += 1) {
      var _slidesGridItem = snapGrid[_i2];
      if (params.roundLengths) _slidesGridItem = Math.floor(_slidesGridItem);

      if (snapGrid[_i2] <= swiper.virtualSize - swiperSize) {
        newSlidesGrid.push(_slidesGridItem);
      }
    }

    snapGrid = newSlidesGrid;

    if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {
      snapGrid.push(swiper.virtualSize - swiperSize);
    }
  }

  if (snapGrid.length === 0) snapGrid = [0];

  if (params.spaceBetween !== 0) {
    if (swiper.isHorizontal()) {
      if (rtl) slides.filter(slidesForMargin).css({
        marginLeft: "".concat(spaceBetween, "px")
      });else slides.filter(slidesForMargin).css({
        marginRight: "".concat(spaceBetween, "px")
      });
    } else slides.filter(slidesForMargin).css({
      marginBottom: "".concat(spaceBetween, "px")
    });
  }

  if (params.centeredSlides && params.centeredSlidesBounds) {
    var allSlidesSize = 0;
    slidesSizesGrid.forEach(function (slideSizeValue) {
      allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);
    });
    allSlidesSize -= params.spaceBetween;
    var maxSnap = allSlidesSize - swiperSize;
    snapGrid = snapGrid.map(function (snap) {
      if (snap < 0) return -offsetBefore;
      if (snap > maxSnap) return maxSnap + offsetAfter;
      return snap;
    });
  }

  if (params.centerInsufficientSlides) {
    var _allSlidesSize = 0;
    slidesSizesGrid.forEach(function (slideSizeValue) {
      _allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);
    });
    _allSlidesSize -= params.spaceBetween;

    if (_allSlidesSize < swiperSize) {
      var allSlidesOffset = (swiperSize - _allSlidesSize) / 2;
      snapGrid.forEach(function (snap, snapIndex) {
        snapGrid[snapIndex] = snap - allSlidesOffset;
      });
      slidesGrid.forEach(function (snap, snapIndex) {
        slidesGrid[snapIndex] = snap + allSlidesOffset;
      });
    }
  }

  Utils.extend(swiper, {
    slides: slides,
    snapGrid: snapGrid,
    slidesGrid: slidesGrid,
    slidesSizesGrid: slidesSizesGrid
  });

  if (slidesLength !== previousSlidesLength) {
    swiper.emit('slidesLengthChange');
  }

  if (snapGrid.length !== previousSnapGridLength) {
    if (swiper.params.watchOverflow) swiper.checkOverflow();
    swiper.emit('snapGridLengthChange');
  }

  if (slidesGrid.length !== previousSlidesGridLength) {
    swiper.emit('slidesGridLengthChange');
  }

  if (params.watchSlidesProgress || params.watchSlidesVisibility) {
    swiper.updateSlidesOffset();
  }
}

function updateAutoHeight(speed) {
  var swiper = this;
  var activeSlides = [];
  var newHeight = 0;
  var i;

  if (typeof speed === 'number') {
    swiper.setTransition(speed);
  } else if (speed === true) {
    swiper.setTransition(swiper.params.speed);
  } // Find slides currently in view


  if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {
    if (swiper.params.centeredSlides) {
      swiper.visibleSlides.each(function (index, slide) {
        activeSlides.push(slide);
      });
    } else {
      for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {
        var _index = swiper.activeIndex + i;

        if (_index > swiper.slides.length) break;
        activeSlides.push(swiper.slides.eq(_index)[0]);
      }
    }
  } else {
    activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);
  } // Find new height from highest slide in view


  for (i = 0; i < activeSlides.length; i += 1) {
    if (typeof activeSlides[i] !== 'undefined') {
      var height = activeSlides[i].offsetHeight;
      newHeight = height > newHeight ? height : newHeight;
    }
  } // Update Height


  if (newHeight) swiper.$wrapperEl.css('height', "".concat(newHeight, "px"));
}

function updateSlidesOffset() {
  var swiper = this;
  var slides = swiper.slides;

  for (var i = 0; i < slides.length; i += 1) {
    slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;
  }
}

function updateSlidesProgress() {
  var translate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this && this.translate || 0;
  var swiper = this;
  var params = swiper.params;
  var slides = swiper.slides,
      rtl = swiper.rtlTranslate;
  if (slides.length === 0) return;
  if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();
  var offsetCenter = -translate;
  if (rtl) offsetCenter = translate; // Visible Slides

  slides.removeClass(params.slideVisibleClass);
  swiper.visibleSlidesIndexes = [];
  swiper.visibleSlides = [];

  for (var i = 0; i < slides.length; i += 1) {
    var _slide2 = slides[i];
    var slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - _slide2.swiperSlideOffset) / (_slide2.swiperSlideSize + params.spaceBetween);

    if (params.watchSlidesVisibility || params.centeredSlides && params.autoHeight) {
      var slideBefore = -(offsetCenter - _slide2.swiperSlideOffset);
      var slideAfter = slideBefore + swiper.slidesSizesGrid[i];
      var isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;

      if (isVisible) {
        swiper.visibleSlides.push(_slide2);
        swiper.visibleSlidesIndexes.push(i);
        slides.eq(i).addClass(params.slideVisibleClass);
      }
    }

    _slide2.progress = rtl ? -slideProgress : slideProgress;
  }

  swiper.visibleSlides = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(swiper.visibleSlides);
}

function updateProgress(translate) {
  var swiper = this;

  if (typeof translate === 'undefined') {
    var multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line

    translate = swiper && swiper.translate && swiper.translate * multiplier || 0;
  }

  var params = swiper.params;
  var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
  var progress = swiper.progress,
      isBeginning = swiper.isBeginning,
      isEnd = swiper.isEnd;
  var wasBeginning = isBeginning;
  var wasEnd = isEnd;

  if (translatesDiff === 0) {
    progress = 0;
    isBeginning = true;
    isEnd = true;
  } else {
    progress = (translate - swiper.minTranslate()) / translatesDiff;
    isBeginning = progress <= 0;
    isEnd = progress >= 1;
  }

  Utils.extend(swiper, {
    progress: progress,
    isBeginning: isBeginning,
    isEnd: isEnd
  });
  if (params.watchSlidesProgress || params.watchSlidesVisibility || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);

  if (isBeginning && !wasBeginning) {
    swiper.emit('reachBeginning toEdge');
  }

  if (isEnd && !wasEnd) {
    swiper.emit('reachEnd toEdge');
  }

  if (wasBeginning && !isBeginning || wasEnd && !isEnd) {
    swiper.emit('fromEdge');
  }

  swiper.emit('progress', progress);
}

function updateSlidesClasses() {
  var swiper = this;
  var slides = swiper.slides,
      params = swiper.params,
      $wrapperEl = swiper.$wrapperEl,
      activeIndex = swiper.activeIndex,
      realIndex = swiper.realIndex;
  var isVirtual = swiper.virtual && params.virtual.enabled;
  slides.removeClass("".concat(params.slideActiveClass, " ").concat(params.slideNextClass, " ").concat(params.slidePrevClass, " ").concat(params.slideDuplicateActiveClass, " ").concat(params.slideDuplicateNextClass, " ").concat(params.slideDuplicatePrevClass));
  var activeSlide;

  if (isVirtual) {
    activeSlide = swiper.$wrapperEl.find(".".concat(params.slideClass, "[data-swiper-slide-index=\"").concat(activeIndex, "\"]"));
  } else {
    activeSlide = slides.eq(activeIndex);
  } // Active classes


  activeSlide.addClass(params.slideActiveClass);

  if (params.loop) {
    // Duplicate to all looped slides
    if (activeSlide.hasClass(params.slideDuplicateClass)) {
      $wrapperEl.children(".".concat(params.slideClass, ":not(.").concat(params.slideDuplicateClass, ")[data-swiper-slide-index=\"").concat(realIndex, "\"]")).addClass(params.slideDuplicateActiveClass);
    } else {
      $wrapperEl.children(".".concat(params.slideClass, ".").concat(params.slideDuplicateClass, "[data-swiper-slide-index=\"").concat(realIndex, "\"]")).addClass(params.slideDuplicateActiveClass);
    }
  } // Next Slide


  var nextSlide = activeSlide.nextAll(".".concat(params.slideClass)).eq(0).addClass(params.slideNextClass);

  if (params.loop && nextSlide.length === 0) {
    nextSlide = slides.eq(0);
    nextSlide.addClass(params.slideNextClass);
  } // Prev Slide


  var prevSlide = activeSlide.prevAll(".".concat(params.slideClass)).eq(0).addClass(params.slidePrevClass);

  if (params.loop && prevSlide.length === 0) {
    prevSlide = slides.eq(-1);
    prevSlide.addClass(params.slidePrevClass);
  }

  if (params.loop) {
    // Duplicate to all looped slides
    if (nextSlide.hasClass(params.slideDuplicateClass)) {
      $wrapperEl.children(".".concat(params.slideClass, ":not(.").concat(params.slideDuplicateClass, ")[data-swiper-slide-index=\"").concat(nextSlide.attr('data-swiper-slide-index'), "\"]")).addClass(params.slideDuplicateNextClass);
    } else {
      $wrapperEl.children(".".concat(params.slideClass, ".").concat(params.slideDuplicateClass, "[data-swiper-slide-index=\"").concat(nextSlide.attr('data-swiper-slide-index'), "\"]")).addClass(params.slideDuplicateNextClass);
    }

    if (prevSlide.hasClass(params.slideDuplicateClass)) {
      $wrapperEl.children(".".concat(params.slideClass, ":not(.").concat(params.slideDuplicateClass, ")[data-swiper-slide-index=\"").concat(prevSlide.attr('data-swiper-slide-index'), "\"]")).addClass(params.slideDuplicatePrevClass);
    } else {
      $wrapperEl.children(".".concat(params.slideClass, ".").concat(params.slideDuplicateClass, "[data-swiper-slide-index=\"").concat(prevSlide.attr('data-swiper-slide-index'), "\"]")).addClass(params.slideDuplicatePrevClass);
    }
  }
}

function updateActiveIndex(newActiveIndex) {
  var swiper = this;
  var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
  var slidesGrid = swiper.slidesGrid,
      snapGrid = swiper.snapGrid,
      params = swiper.params,
      previousIndex = swiper.activeIndex,
      previousRealIndex = swiper.realIndex,
      previousSnapIndex = swiper.snapIndex;
  var activeIndex = newActiveIndex;
  var snapIndex;

  if (typeof activeIndex === 'undefined') {
    for (var i = 0; i < slidesGrid.length; i += 1) {
      if (typeof slidesGrid[i + 1] !== 'undefined') {
        if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {
          activeIndex = i;
        } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {
          activeIndex = i + 1;
        }
      } else if (translate >= slidesGrid[i]) {
        activeIndex = i;
      }
    } // Normalize slideIndex


    if (params.normalizeSlideIndex) {
      if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;
    }
  }

  if (snapGrid.indexOf(translate) >= 0) {
    snapIndex = snapGrid.indexOf(translate);
  } else {
    var skip = Math.min(params.slidesPerGroupSkip, activeIndex);
    snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);
  }

  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;

  if (activeIndex === previousIndex) {
    if (snapIndex !== previousSnapIndex) {
      swiper.snapIndex = snapIndex;
      swiper.emit('snapIndexChange');
    }

    return;
  } // Get real index


  var realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);
  Utils.extend(swiper, {
    snapIndex: snapIndex,
    realIndex: realIndex,
    previousIndex: previousIndex,
    activeIndex: activeIndex
  });
  swiper.emit('activeIndexChange');
  swiper.emit('snapIndexChange');

  if (previousRealIndex !== realIndex) {
    swiper.emit('realIndexChange');
  }

  if (swiper.initialized || swiper.params.runCallbacksOnInit) {
    swiper.emit('slideChange');
  }
}

function updateClickedSlide(e) {
  var swiper = this;
  var params = swiper.params;
  var slide = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(e.target).closest(".".concat(params.slideClass))[0];
  var slideFound = false;

  if (slide) {
    for (var i = 0; i < swiper.slides.length; i += 1) {
      if (swiper.slides[i] === slide) slideFound = true;
    }
  }

  if (slide && slideFound) {
    swiper.clickedSlide = slide;

    if (swiper.virtual && swiper.params.virtual.enabled) {
      swiper.clickedIndex = parseInt((0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(slide).attr('data-swiper-slide-index'), 10);
    } else {
      swiper.clickedIndex = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(slide).index();
    }
  } else {
    swiper.clickedSlide = undefined;
    swiper.clickedIndex = undefined;
    return;
  }

  if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {
    swiper.slideToClickedSlide();
  }
}

var update = {
  updateSize: updateSize,
  updateSlides: updateSlides,
  updateAutoHeight: updateAutoHeight,
  updateSlidesOffset: updateSlidesOffset,
  updateSlidesProgress: updateSlidesProgress,
  updateProgress: updateProgress,
  updateSlidesClasses: updateSlidesClasses,
  updateActiveIndex: updateActiveIndex,
  updateClickedSlide: updateClickedSlide
};

function getTranslate() {
  var axis = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.isHorizontal() ? 'x' : 'y';
  var swiper = this;
  var params = swiper.params,
      rtl = swiper.rtlTranslate,
      translate = swiper.translate,
      $wrapperEl = swiper.$wrapperEl;

  if (params.virtualTranslate) {
    return rtl ? -translate : translate;
  }

  if (params.cssMode) {
    return translate;
  }

  var currentTranslate = Utils.getTranslate($wrapperEl[0], axis);
  if (rtl) currentTranslate = -currentTranslate;
  return currentTranslate || 0;
}

function setTranslate(translate, byController) {
  var swiper = this;
  var rtl = swiper.rtlTranslate,
      params = swiper.params,
      $wrapperEl = swiper.$wrapperEl,
      wrapperEl = swiper.wrapperEl,
      progress = swiper.progress;
  var x = 0;
  var y = 0;
  var z = 0;

  if (swiper.isHorizontal()) {
    x = rtl ? -translate : translate;
  } else {
    y = translate;
  }

  if (params.roundLengths) {
    x = Math.floor(x);
    y = Math.floor(y);
  }

  if (params.cssMode) {
    wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;
  } else if (!params.virtualTranslate) {
    $wrapperEl.transform("translate3d(".concat(x, "px, ").concat(y, "px, ").concat(z, "px)"));
  }

  swiper.previousTranslate = swiper.translate;
  swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress

  var newProgress;
  var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();

  if (translatesDiff === 0) {
    newProgress = 0;
  } else {
    newProgress = (translate - swiper.minTranslate()) / translatesDiff;
  }

  if (newProgress !== progress) {
    swiper.updateProgress(translate);
  }

  swiper.emit('setTranslate', swiper.translate, byController);
}

function minTranslate() {
  return -this.snapGrid[0];
}

function maxTranslate() {
  return -this.snapGrid[this.snapGrid.length - 1];
}

function translateTo() {
  var translate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
  var speed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.params.speed;
  var runCallbacks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
  var translateBounds = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
  var internal = arguments.length > 4 ? arguments[4] : undefined;
  var swiper = this;
  var params = swiper.params,
      wrapperEl = swiper.wrapperEl;

  if (swiper.animating && params.preventInteractionOnTransition) {
    return false;
  }

  var minTranslate = swiper.minTranslate();
  var maxTranslate = swiper.maxTranslate();
  var newTranslate;
  if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress

  swiper.updateProgress(newTranslate);

  if (params.cssMode) {
    var isH = swiper.isHorizontal();

    if (speed === 0) {
      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;
    } else {
      // eslint-disable-next-line
      if (wrapperEl.scrollTo) {
        var _wrapperEl$scrollTo;

        wrapperEl.scrollTo((_wrapperEl$scrollTo = {}, (0,_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_4__["default"])(_wrapperEl$scrollTo, isH ? 'left' : 'top', -newTranslate), (0,_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_4__["default"])(_wrapperEl$scrollTo, "behavior", 'smooth'), _wrapperEl$scrollTo));
      } else {
        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;
      }
    }

    return true;
  }

  if (speed === 0) {
    swiper.setTransition(0);
    swiper.setTranslate(newTranslate);

    if (runCallbacks) {
      swiper.emit('beforeTransitionStart', speed, internal);
      swiper.emit('transitionEnd');
    }
  } else {
    swiper.setTransition(speed);
    swiper.setTranslate(newTranslate);

    if (runCallbacks) {
      swiper.emit('beforeTransitionStart', speed, internal);
      swiper.emit('transitionStart');
    }

    if (!swiper.animating) {
      swiper.animating = true;

      if (!swiper.onTranslateToWrapperTransitionEnd) {
        swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {
          if (!swiper || swiper.destroyed) return;
          if (e.target !== this) return;
          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);
          swiper.onTranslateToWrapperTransitionEnd = null;
          delete swiper.onTranslateToWrapperTransitionEnd;

          if (runCallbacks) {
            swiper.emit('transitionEnd');
          }
        };
      }

      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);
    }
  }

  return true;
}

var translate = {
  getTranslate: getTranslate,
  setTranslate: setTranslate,
  minTranslate: minTranslate,
  maxTranslate: maxTranslate,
  translateTo: translateTo
};

function setTransition(duration, byController) {
  var swiper = this;

  if (!swiper.params.cssMode) {
    swiper.$wrapperEl.transition(duration);
  }

  swiper.emit('setTransition', duration, byController);
}

function transitionStart() {
  var runCallbacks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
  var direction = arguments.length > 1 ? arguments[1] : undefined;
  var swiper = this;
  var activeIndex = swiper.activeIndex,
      params = swiper.params,
      previousIndex = swiper.previousIndex;
  if (params.cssMode) return;

  if (params.autoHeight) {
    swiper.updateAutoHeight();
  }

  var dir = direction;

  if (!dir) {
    if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';
  }

  swiper.emit('transitionStart');

  if (runCallbacks && activeIndex !== previousIndex) {
    if (dir === 'reset') {
      swiper.emit('slideResetTransitionStart');
      return;
    }

    swiper.emit('slideChangeTransitionStart');

    if (dir === 'next') {
      swiper.emit('slideNextTransitionStart');
    } else {
      swiper.emit('slidePrevTransitionStart');
    }
  }
}

function transitionEnd() {
  var runCallbacks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
  var direction = arguments.length > 1 ? arguments[1] : undefined;
  var swiper = this;
  var activeIndex = swiper.activeIndex,
      previousIndex = swiper.previousIndex,
      params = swiper.params;
  swiper.animating = false;
  if (params.cssMode) return;
  swiper.setTransition(0);
  var dir = direction;

  if (!dir) {
    if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';
  }

  swiper.emit('transitionEnd');

  if (runCallbacks && activeIndex !== previousIndex) {
    if (dir === 'reset') {
      swiper.emit('slideResetTransitionEnd');
      return;
    }

    swiper.emit('slideChangeTransitionEnd');

    if (dir === 'next') {
      swiper.emit('slideNextTransitionEnd');
    } else {
      swiper.emit('slidePrevTransitionEnd');
    }
  }
}

var transition = {
  setTransition: setTransition,
  transitionStart: transitionStart,
  transitionEnd: transitionEnd
};

function slideTo() {
  var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
  var speed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.params.speed;
  var runCallbacks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
  var internal = arguments.length > 3 ? arguments[3] : undefined;
  var swiper = this;
  var slideIndex = index;
  if (slideIndex < 0) slideIndex = 0;
  var params = swiper.params,
      snapGrid = swiper.snapGrid,
      slidesGrid = swiper.slidesGrid,
      previousIndex = swiper.previousIndex,
      activeIndex = swiper.activeIndex,
      rtl = swiper.rtlTranslate,
      wrapperEl = swiper.wrapperEl;

  if (swiper.animating && params.preventInteractionOnTransition) {
    return false;
  }

  var skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);
  var snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);
  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;

  if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {
    swiper.emit('beforeSlideChangeStart');
  }

  var translate = -snapGrid[snapIndex]; // Update progress

  swiper.updateProgress(translate); // Normalize slideIndex

  if (params.normalizeSlideIndex) {
    for (var i = 0; i < slidesGrid.length; i += 1) {
      if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {
        slideIndex = i;
      }
    }
  } // Directions locks


  if (swiper.initialized && slideIndex !== activeIndex) {
    if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {
      return false;
    }

    if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {
      if ((activeIndex || 0) !== slideIndex) return false;
    }
  }

  var direction;
  if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index

  if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {
    swiper.updateActiveIndex(slideIndex); // Update Height

    if (params.autoHeight) {
      swiper.updateAutoHeight();
    }

    swiper.updateSlidesClasses();

    if (params.effect !== 'slide') {
      swiper.setTranslate(translate);
    }

    if (direction !== 'reset') {
      swiper.transitionStart(runCallbacks, direction);
      swiper.transitionEnd(runCallbacks, direction);
    }

    return false;
  }

  if (params.cssMode) {
    var isH = swiper.isHorizontal();
    var t = -translate;

    if (rtl) {
      t = wrapperEl.scrollWidth - wrapperEl.offsetWidth - t;
    }

    if (speed === 0) {
      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
    } else {
      // eslint-disable-next-line
      if (wrapperEl.scrollTo) {
        var _wrapperEl$scrollTo2;

        wrapperEl.scrollTo((_wrapperEl$scrollTo2 = {}, (0,_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_4__["default"])(_wrapperEl$scrollTo2, isH ? 'left' : 'top', t), (0,_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_4__["default"])(_wrapperEl$scrollTo2, "behavior", 'smooth'), _wrapperEl$scrollTo2));
      } else {
        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
      }
    }

    return true;
  }

  if (speed === 0) {
    swiper.setTransition(0);
    swiper.setTranslate(translate);
    swiper.updateActiveIndex(slideIndex);
    swiper.updateSlidesClasses();
    swiper.emit('beforeTransitionStart', speed, internal);
    swiper.transitionStart(runCallbacks, direction);
    swiper.transitionEnd(runCallbacks, direction);
  } else {
    swiper.setTransition(speed);
    swiper.setTranslate(translate);
    swiper.updateActiveIndex(slideIndex);
    swiper.updateSlidesClasses();
    swiper.emit('beforeTransitionStart', speed, internal);
    swiper.transitionStart(runCallbacks, direction);

    if (!swiper.animating) {
      swiper.animating = true;

      if (!swiper.onSlideToWrapperTransitionEnd) {
        swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {
          if (!swiper || swiper.destroyed) return;
          if (e.target !== this) return;
          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);
          swiper.onSlideToWrapperTransitionEnd = null;
          delete swiper.onSlideToWrapperTransitionEnd;
          swiper.transitionEnd(runCallbacks, direction);
        };
      }

      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);
    }
  }

  return true;
}

function slideToLoop() {
  var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
  var speed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.params.speed;
  var runCallbacks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
  var internal = arguments.length > 3 ? arguments[3] : undefined;
  var swiper = this;
  var newIndex = index;

  if (swiper.params.loop) {
    newIndex += swiper.loopedSlides;
  }

  return swiper.slideTo(newIndex, speed, runCallbacks, internal);
}
/* eslint no-unused-vars: "off" */


function slideNext() {
  var speed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.params.speed;
  var runCallbacks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
  var internal = arguments.length > 2 ? arguments[2] : undefined;
  var swiper = this;
  var params = swiper.params,
      animating = swiper.animating;
  var increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup;

  if (params.loop) {
    if (animating) return false;
    swiper.loopFix(); // eslint-disable-next-line

    swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
  }

  return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);
}
/* eslint no-unused-vars: "off" */


function slidePrev() {
  var speed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.params.speed;
  var runCallbacks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
  var internal = arguments.length > 2 ? arguments[2] : undefined;
  var swiper = this;
  var params = swiper.params,
      animating = swiper.animating,
      snapGrid = swiper.snapGrid,
      slidesGrid = swiper.slidesGrid,
      rtlTranslate = swiper.rtlTranslate;

  if (params.loop) {
    if (animating) return false;
    swiper.loopFix(); // eslint-disable-next-line

    swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
  }

  var translate = rtlTranslate ? swiper.translate : -swiper.translate;

  function normalize(val) {
    if (val < 0) return -Math.floor(Math.abs(val));
    return Math.floor(val);
  }

  var normalizedTranslate = normalize(translate);
  var normalizedSnapGrid = snapGrid.map(function (val) {
    return normalize(val);
  });
  var normalizedSlidesGrid = slidesGrid.map(function (val) {
    return normalize(val);
  });
  var currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];
  var prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];

  if (typeof prevSnap === 'undefined' && params.cssMode) {
    snapGrid.forEach(function (snap) {
      if (!prevSnap && normalizedTranslate >= snap) prevSnap = snap;
    });
  }

  var prevIndex;

  if (typeof prevSnap !== 'undefined') {
    prevIndex = slidesGrid.indexOf(prevSnap);
    if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;
  }

  return swiper.slideTo(prevIndex, speed, runCallbacks, internal);
}
/* eslint no-unused-vars: "off" */


function slideReset() {
  var speed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.params.speed;
  var runCallbacks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
  var internal = arguments.length > 2 ? arguments[2] : undefined;
  var swiper = this;
  return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);
}
/* eslint no-unused-vars: "off" */


function slideToClosest() {
  var speed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.params.speed;
  var runCallbacks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
  var internal = arguments.length > 2 ? arguments[2] : undefined;
  var threshold = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.5;
  var swiper = this;
  var index = swiper.activeIndex;
  var skip = Math.min(swiper.params.slidesPerGroupSkip, index);
  var snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);
  var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;

  if (translate >= swiper.snapGrid[snapIndex]) {
    // The current translate is on or after the current snap index, so the choice
    // is between the current index and the one after it.
    var currentSnap = swiper.snapGrid[snapIndex];
    var nextSnap = swiper.snapGrid[snapIndex + 1];

    if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {
      index += swiper.params.slidesPerGroup;
    }
  } else {
    // The current translate is before the current snap index, so the choice
    // is between the current index and the one before it.
    var prevSnap = swiper.snapGrid[snapIndex - 1];
    var _currentSnap = swiper.snapGrid[snapIndex];

    if (translate - prevSnap <= (_currentSnap - prevSnap) * threshold) {
      index -= swiper.params.slidesPerGroup;
    }
  }

  index = Math.max(index, 0);
  index = Math.min(index, swiper.slidesGrid.length - 1);
  return swiper.slideTo(index, speed, runCallbacks, internal);
}

function slideToClickedSlide() {
  var swiper = this;
  var params = swiper.params,
      $wrapperEl = swiper.$wrapperEl;
  var slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;
  var slideToIndex = swiper.clickedIndex;
  var realIndex;

  if (params.loop) {
    if (swiper.animating) return;
    realIndex = parseInt((0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);

    if (params.centeredSlides) {
      if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {
        swiper.loopFix();
        slideToIndex = $wrapperEl.children(".".concat(params.slideClass, "[data-swiper-slide-index=\"").concat(realIndex, "\"]:not(.").concat(params.slideDuplicateClass, ")")).eq(0).index();
        Utils.nextTick(function () {
          swiper.slideTo(slideToIndex);
        });
      } else {
        swiper.slideTo(slideToIndex);
      }
    } else if (slideToIndex > swiper.slides.length - slidesPerView) {
      swiper.loopFix();
      slideToIndex = $wrapperEl.children(".".concat(params.slideClass, "[data-swiper-slide-index=\"").concat(realIndex, "\"]:not(.").concat(params.slideDuplicateClass, ")")).eq(0).index();
      Utils.nextTick(function () {
        swiper.slideTo(slideToIndex);
      });
    } else {
      swiper.slideTo(slideToIndex);
    }
  } else {
    swiper.slideTo(slideToIndex);
  }
}

var slide = {
  slideTo: slideTo,
  slideToLoop: slideToLoop,
  slideNext: slideNext,
  slidePrev: slidePrev,
  slideReset: slideReset,
  slideToClosest: slideToClosest,
  slideToClickedSlide: slideToClickedSlide
};

function loopCreate() {
  var swiper = this;
  var params = swiper.params,
      $wrapperEl = swiper.$wrapperEl; // Remove duplicated slides

  $wrapperEl.children(".".concat(params.slideClass, ".").concat(params.slideDuplicateClass)).remove();
  var slides = $wrapperEl.children(".".concat(params.slideClass));

  if (params.loopFillGroupWithBlank) {
    var blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;

    if (blankSlidesNum !== params.slidesPerGroup) {
      for (var i = 0; i < blankSlidesNum; i += 1) {
        var blankNode = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.createElement('div')).addClass("".concat(params.slideClass, " ").concat(params.slideBlankClass));
        $wrapperEl.append(blankNode);
      }

      slides = $wrapperEl.children(".".concat(params.slideClass));
    }
  }

  if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;
  swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));
  swiper.loopedSlides += params.loopAdditionalSlides;

  if (swiper.loopedSlides > slides.length) {
    swiper.loopedSlides = slides.length;
  }

  var prependSlides = [];
  var appendSlides = [];
  slides.each(function (index, el) {
    var slide = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(el);
    if (index < swiper.loopedSlides) appendSlides.push(el);
    if (index < slides.length && index >= slides.length - swiper.loopedSlides) prependSlides.push(el);
    slide.attr('data-swiper-slide-index', index);
  });

  for (var _i3 = 0; _i3 < appendSlides.length; _i3 += 1) {
    $wrapperEl.append((0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(appendSlides[_i3].cloneNode(true)).addClass(params.slideDuplicateClass));
  }

  for (var _i4 = prependSlides.length - 1; _i4 >= 0; _i4 -= 1) {
    $wrapperEl.prepend((0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(prependSlides[_i4].cloneNode(true)).addClass(params.slideDuplicateClass));
  }
}

function loopFix() {
  var swiper = this;
  swiper.emit('beforeLoopFix');
  var activeIndex = swiper.activeIndex,
      slides = swiper.slides,
      loopedSlides = swiper.loopedSlides,
      allowSlidePrev = swiper.allowSlidePrev,
      allowSlideNext = swiper.allowSlideNext,
      snapGrid = swiper.snapGrid,
      rtl = swiper.rtlTranslate;
  var newIndex;
  swiper.allowSlidePrev = true;
  swiper.allowSlideNext = true;
  var snapTranslate = -snapGrid[activeIndex];
  var diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding

  if (activeIndex < loopedSlides) {
    newIndex = slides.length - loopedSlides * 3 + activeIndex;
    newIndex += loopedSlides;
    var slideChanged = swiper.slideTo(newIndex, 0, false, true);

    if (slideChanged && diff !== 0) {
      swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
    }
  } else if (activeIndex >= slides.length - loopedSlides) {
    // Fix For Positive Oversliding
    newIndex = -slides.length + activeIndex + loopedSlides;
    newIndex += loopedSlides;

    var _slideChanged = swiper.slideTo(newIndex, 0, false, true);

    if (_slideChanged && diff !== 0) {
      swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
    }
  }

  swiper.allowSlidePrev = allowSlidePrev;
  swiper.allowSlideNext = allowSlideNext;
  swiper.emit('loopFix');
}

function loopDestroy() {
  var swiper = this;
  var $wrapperEl = swiper.$wrapperEl,
      params = swiper.params,
      slides = swiper.slides;
  $wrapperEl.children(".".concat(params.slideClass, ".").concat(params.slideDuplicateClass, ",.").concat(params.slideClass, ".").concat(params.slideBlankClass)).remove();
  slides.removeAttr('data-swiper-slide-index');
}

var loop = {
  loopCreate: loopCreate,
  loopFix: loopFix,
  loopDestroy: loopDestroy
};

function setGrabCursor(moving) {
  var swiper = this;
  if (Support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;
  var el = swiper.el;
  el.style.cursor = 'move';
  el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';
  el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';
  el.style.cursor = moving ? 'grabbing' : 'grab';
}

function unsetGrabCursor() {
  var swiper = this;
  if (Support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;
  swiper.el.style.cursor = '';
}

var grabCursor = {
  setGrabCursor: setGrabCursor,
  unsetGrabCursor: unsetGrabCursor
};

function appendSlide(slides) {
  var swiper = this;
  var $wrapperEl = swiper.$wrapperEl,
      params = swiper.params;

  if (params.loop) {
    swiper.loopDestroy();
  }

  if ((0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_7__["default"])(slides) === 'object' && 'length' in slides) {
    for (var i = 0; i < slides.length; i += 1) {
      if (slides[i]) $wrapperEl.append(slides[i]);
    }
  } else {
    $wrapperEl.append(slides);
  }

  if (params.loop) {
    swiper.loopCreate();
  }

  if (!(params.observer && Support.observer)) {
    swiper.update();
  }
}

function prependSlide(slides) {
  var swiper = this;
  var params = swiper.params,
      $wrapperEl = swiper.$wrapperEl,
      activeIndex = swiper.activeIndex;

  if (params.loop) {
    swiper.loopDestroy();
  }

  var newActiveIndex = activeIndex + 1;

  if ((0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_7__["default"])(slides) === 'object' && 'length' in slides) {
    for (var i = 0; i < slides.length; i += 1) {
      if (slides[i]) $wrapperEl.prepend(slides[i]);
    }

    newActiveIndex = activeIndex + slides.length;
  } else {
    $wrapperEl.prepend(slides);
  }

  if (params.loop) {
    swiper.loopCreate();
  }

  if (!(params.observer && Support.observer)) {
    swiper.update();
  }

  swiper.slideTo(newActiveIndex, 0, false);
}

function addSlide(index, slides) {
  var swiper = this;
  var $wrapperEl = swiper.$wrapperEl,
      params = swiper.params,
      activeIndex = swiper.activeIndex;
  var activeIndexBuffer = activeIndex;

  if (params.loop) {
    activeIndexBuffer -= swiper.loopedSlides;
    swiper.loopDestroy();
    swiper.slides = $wrapperEl.children(".".concat(params.slideClass));
  }

  var baseLength = swiper.slides.length;

  if (index <= 0) {
    swiper.prependSlide(slides);
    return;
  }

  if (index >= baseLength) {
    swiper.appendSlide(slides);
    return;
  }

  var newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;
  var slidesBuffer = [];

  for (var i = baseLength - 1; i >= index; i -= 1) {
    var currentSlide = swiper.slides.eq(i);
    currentSlide.remove();
    slidesBuffer.unshift(currentSlide);
  }

  if ((0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_7__["default"])(slides) === 'object' && 'length' in slides) {
    for (var _i5 = 0; _i5 < slides.length; _i5 += 1) {
      if (slides[_i5]) $wrapperEl.append(slides[_i5]);
    }

    newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;
  } else {
    $wrapperEl.append(slides);
  }

  for (var _i6 = 0; _i6 < slidesBuffer.length; _i6 += 1) {
    $wrapperEl.append(slidesBuffer[_i6]);
  }

  if (params.loop) {
    swiper.loopCreate();
  }

  if (!(params.observer && Support.observer)) {
    swiper.update();
  }

  if (params.loop) {
    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
  } else {
    swiper.slideTo(newActiveIndex, 0, false);
  }
}

function removeSlide(slidesIndexes) {
  var swiper = this;
  var params = swiper.params,
      $wrapperEl = swiper.$wrapperEl,
      activeIndex = swiper.activeIndex;
  var activeIndexBuffer = activeIndex;

  if (params.loop) {
    activeIndexBuffer -= swiper.loopedSlides;
    swiper.loopDestroy();
    swiper.slides = $wrapperEl.children(".".concat(params.slideClass));
  }

  var newActiveIndex = activeIndexBuffer;
  var indexToRemove;

  if ((0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_7__["default"])(slidesIndexes) === 'object' && 'length' in slidesIndexes) {
    for (var i = 0; i < slidesIndexes.length; i += 1) {
      indexToRemove = slidesIndexes[i];
      if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();
      if (indexToRemove < newActiveIndex) newActiveIndex -= 1;
    }

    newActiveIndex = Math.max(newActiveIndex, 0);
  } else {
    indexToRemove = slidesIndexes;
    if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();
    if (indexToRemove < newActiveIndex) newActiveIndex -= 1;
    newActiveIndex = Math.max(newActiveIndex, 0);
  }

  if (params.loop) {
    swiper.loopCreate();
  }

  if (!(params.observer && Support.observer)) {
    swiper.update();
  }

  if (params.loop) {
    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
  } else {
    swiper.slideTo(newActiveIndex, 0, false);
  }
}

function removeAllSlides() {
  var swiper = this;
  var slidesIndexes = [];

  for (var i = 0; i < swiper.slides.length; i += 1) {
    slidesIndexes.push(i);
  }

  swiper.removeSlide(slidesIndexes);
}

var manipulation = {
  appendSlide: appendSlide,
  prependSlide: prependSlide,
  addSlide: addSlide,
  removeSlide: removeSlide,
  removeAllSlides: removeAllSlides
};

var Device = function Device() {
  var platform = ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.navigator.platform;
  var ua = ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.navigator.userAgent;
  var device = {
    ios: false,
    android: false,
    androidChrome: false,
    desktop: false,
    iphone: false,
    ipod: false,
    ipad: false,
    edge: false,
    ie: false,
    firefox: false,
    macos: false,
    windows: false,
    cordova: !!(ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.cordova || ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.phonegap),
    phonegap: !!(ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.cordova || ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.phonegap),
    electron: false
  };
  var screenWidth = ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.screen.width;
  var screenHeight = ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.screen.height;
  var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); // eslint-disable-line

  var ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
  var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
  var iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/);
  var ie = ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;
  var edge = ua.indexOf('Edge/') >= 0;
  var firefox = ua.indexOf('Gecko/') >= 0 && ua.indexOf('Firefox/') >= 0;
  var windows = platform === 'Win32';
  var electron = ua.toLowerCase().indexOf('electron') >= 0;
  var macos = platform === 'MacIntel'; // iPadOs 13 fix

  if (!ipad && macos && Support.touch && (screenWidth === 1024 && screenHeight === 1366 // Pro 12.9
  || screenWidth === 834 && screenHeight === 1194 // Pro 11
  || screenWidth === 834 && screenHeight === 1112 // Pro 10.5
  || screenWidth === 768 && screenHeight === 1024 // other
  )) {
    ipad = ua.match(/(Version)\/([\d.]+)/);
    macos = false;
  }

  device.ie = ie;
  device.edge = edge;
  device.firefox = firefox; // Android

  if (android && !windows) {
    device.os = 'android';
    device.osVersion = android[2];
    device.android = true;
    device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;
  }

  if (ipad || iphone || ipod) {
    device.os = 'ios';
    device.ios = true;
  } // iOS


  if (iphone && !ipod) {
    device.osVersion = iphone[2].replace(/_/g, '.');
    device.iphone = true;
  }

  if (ipad) {
    device.osVersion = ipad[2].replace(/_/g, '.');
    device.ipad = true;
  }

  if (ipod) {
    device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;
    device.ipod = true;
  } // iOS 8+ changed UA


  if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {
    if (device.osVersion.split('.')[0] === '10') {
      device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];
    }
  } // Webview


  device.webView = !!((iphone || ipad || ipod) && (ua.match(/.*AppleWebKit(?!.*Safari)/i) || ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.navigator.standalone)) || ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.matchMedia && ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.matchMedia('(display-mode: standalone)').matches;
  device.webview = device.webView;
  device.standalone = device.webView; // Desktop

  device.desktop = !(device.ios || device.android) || electron;

  if (device.desktop) {
    device.electron = electron;
    device.macos = macos;
    device.windows = windows;

    if (device.macos) {
      device.os = 'macos';
    }

    if (device.windows) {
      device.os = 'windows';
    }
  } // Pixel Ratio


  device.pixelRatio = ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.devicePixelRatio || 1; // Export object

  return device;
}();

function onTouchStart(event) {
  var swiper = this;
  var data = swiper.touchEventsData;
  var params = swiper.params,
      touches = swiper.touches;

  if (swiper.animating && params.preventInteractionOnTransition) {
    return;
  }

  var e = event;
  if (e.originalEvent) e = e.originalEvent;
  var $targetEl = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(e.target);

  if (params.touchEventsTarget === 'wrapper') {
    if (!$targetEl.closest(swiper.wrapperEl).length) return;
  }

  data.isTouchEvent = e.type === 'touchstart';
  if (!data.isTouchEvent && 'which' in e && e.which === 3) return;
  if (!data.isTouchEvent && 'button' in e && e.button > 0) return;
  if (data.isTouched && data.isMoved) return;

  if (params.noSwiping && $targetEl.closest(params.noSwipingSelector ? params.noSwipingSelector : ".".concat(params.noSwipingClass))[0]) {
    swiper.allowClick = true;
    return;
  }

  if (params.swipeHandler) {
    if (!$targetEl.closest(params.swipeHandler)[0]) return;
  }

  touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
  touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
  var startX = touches.currentX;
  var startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore

  var edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;
  var edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;

  if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.screen.width - edgeSwipeThreshold)) {
    return;
  }

  Utils.extend(data, {
    isTouched: true,
    isMoved: false,
    allowTouchCallbacks: true,
    isScrolling: undefined,
    startMoving: undefined
  });
  touches.startX = startX;
  touches.startY = startY;
  data.touchStartTime = Utils.now();
  swiper.allowClick = true;
  swiper.updateSize();
  swiper.swipeDirection = undefined;
  if (params.threshold > 0) data.allowThresholdMove = false;

  if (e.type !== 'touchstart') {
    var preventDefault = true;
    if ($targetEl.is(data.formElements)) preventDefault = false;

    if (ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.activeElement && (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.activeElement).is(data.formElements) && ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.activeElement !== $targetEl[0]) {
      ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.activeElement.blur();
    }

    var shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;

    if (params.touchStartForcePreventDefault || shouldPreventDefault) {
      e.preventDefault();
    }
  }

  swiper.emit('touchStart', e);
}

function onTouchMove(event) {
  var swiper = this;
  var data = swiper.touchEventsData;
  var params = swiper.params,
      touches = swiper.touches,
      rtl = swiper.rtlTranslate;
  var e = event;
  if (e.originalEvent) e = e.originalEvent;

  if (!data.isTouched) {
    if (data.startMoving && data.isScrolling) {
      swiper.emit('touchMoveOpposite', e);
    }

    return;
  }

  if (data.isTouchEvent && e.type !== 'touchmove') return;
  var targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);
  var pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;
  var pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;

  if (e.preventedByNestedSwiper) {
    touches.startX = pageX;
    touches.startY = pageY;
    return;
  }

  if (!swiper.allowTouchMove) {
    // isMoved = true;
    swiper.allowClick = false;

    if (data.isTouched) {
      Utils.extend(touches, {
        startX: pageX,
        startY: pageY,
        currentX: pageX,
        currentY: pageY
      });
      data.touchStartTime = Utils.now();
    }

    return;
  }

  if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {
    if (swiper.isVertical()) {
      // Vertical
      if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {
        data.isTouched = false;
        data.isMoved = false;
        return;
      }
    } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {
      return;
    }
  }

  if (data.isTouchEvent && ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.activeElement) {
    if (e.target === ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.activeElement && (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(e.target).is(data.formElements)) {
      data.isMoved = true;
      swiper.allowClick = false;
      return;
    }
  }

  if (data.allowTouchCallbacks) {
    swiper.emit('touchMove', e);
  }

  if (e.targetTouches && e.targetTouches.length > 1) return;
  touches.currentX = pageX;
  touches.currentY = pageY;
  var diffX = touches.currentX - touches.startX;
  var diffY = touches.currentY - touches.startY;
  if (swiper.params.threshold && Math.sqrt(Math.pow(diffX, 2) + Math.pow(diffY, 2)) < swiper.params.threshold) return;

  if (typeof data.isScrolling === 'undefined') {
    var touchAngle;

    if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {
      data.isScrolling = false;
    } else {
      // eslint-disable-next-line
      if (diffX * diffX + diffY * diffY >= 25) {
        touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;
        data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;
      }
    }
  }

  if (data.isScrolling) {
    swiper.emit('touchMoveOpposite', e);
  }

  if (typeof data.startMoving === 'undefined') {
    if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {
      data.startMoving = true;
    }
  }

  if (data.isScrolling) {
    data.isTouched = false;
    return;
  }

  if (!data.startMoving) {
    return;
  }

  swiper.allowClick = false;

  if (!params.cssMode && e.cancelable) {
    e.preventDefault();
  }

  if (params.touchMoveStopPropagation && !params.nested) {
    e.stopPropagation();
  }

  if (!data.isMoved) {
    if (params.loop) {
      swiper.loopFix();
    }

    data.startTranslate = swiper.getTranslate();
    swiper.setTransition(0);

    if (swiper.animating) {
      swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');
    }

    data.allowMomentumBounce = false; // Grab Cursor

    if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
      swiper.setGrabCursor(true);
    }

    swiper.emit('sliderFirstMove', e);
  }

  swiper.emit('sliderMove', e);
  data.isMoved = true;
  var diff = swiper.isHorizontal() ? diffX : diffY;
  touches.diff = diff;
  diff *= params.touchRatio;
  if (rtl) diff = -diff;
  swiper.swipeDirection = diff > 0 ? 'prev' : 'next';
  data.currentTranslate = diff + data.startTranslate;
  var disableParentSwiper = true;
  var resistanceRatio = params.resistanceRatio;

  if (params.touchReleaseOnEdges) {
    resistanceRatio = 0;
  }

  if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {
    disableParentSwiper = false;
    if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + Math.pow(-swiper.minTranslate() + data.startTranslate + diff, resistanceRatio);
  } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {
    disableParentSwiper = false;
    if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - Math.pow(swiper.maxTranslate() - data.startTranslate - diff, resistanceRatio);
  }

  if (disableParentSwiper) {
    e.preventedByNestedSwiper = true;
  } // Directions locks


  if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {
    data.currentTranslate = data.startTranslate;
  }

  if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {
    data.currentTranslate = data.startTranslate;
  } // Threshold


  if (params.threshold > 0) {
    if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {
      if (!data.allowThresholdMove) {
        data.allowThresholdMove = true;
        touches.startX = touches.currentX;
        touches.startY = touches.currentY;
        data.currentTranslate = data.startTranslate;
        touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;
        return;
      }
    } else {
      data.currentTranslate = data.startTranslate;
      return;
    }
  }

  if (!params.followFinger || params.cssMode) return; // Update active index in free mode

  if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {
    swiper.updateActiveIndex();
    swiper.updateSlidesClasses();
  }

  if (params.freeMode) {
    // Velocity
    if (data.velocities.length === 0) {
      data.velocities.push({
        position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],
        time: data.touchStartTime
      });
    }

    data.velocities.push({
      position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],
      time: Utils.now()
    });
  } // Update progress


  swiper.updateProgress(data.currentTranslate); // Update translate

  swiper.setTranslate(data.currentTranslate);
}

function onTouchEnd(event) {
  var swiper = this;
  var data = swiper.touchEventsData;
  var params = swiper.params,
      touches = swiper.touches,
      rtl = swiper.rtlTranslate,
      $wrapperEl = swiper.$wrapperEl,
      slidesGrid = swiper.slidesGrid,
      snapGrid = swiper.snapGrid;
  var e = event;
  if (e.originalEvent) e = e.originalEvent;

  if (data.allowTouchCallbacks) {
    swiper.emit('touchEnd', e);
  }

  data.allowTouchCallbacks = false;

  if (!data.isTouched) {
    if (data.isMoved && params.grabCursor) {
      swiper.setGrabCursor(false);
    }

    data.isMoved = false;
    data.startMoving = false;
    return;
  } // Return Grab Cursor


  if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
    swiper.setGrabCursor(false);
  } // Time diff


  var touchEndTime = Utils.now();
  var timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click

  if (swiper.allowClick) {
    swiper.updateClickedSlide(e);
    swiper.emit('tap click', e);

    if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {
      swiper.emit('doubleTap doubleClick', e);
    }
  }

  data.lastClickTime = Utils.now();
  Utils.nextTick(function () {
    if (!swiper.destroyed) swiper.allowClick = true;
  });

  if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {
    data.isTouched = false;
    data.isMoved = false;
    data.startMoving = false;
    return;
  }

  data.isTouched = false;
  data.isMoved = false;
  data.startMoving = false;
  var currentPos;

  if (params.followFinger) {
    currentPos = rtl ? swiper.translate : -swiper.translate;
  } else {
    currentPos = -data.currentTranslate;
  }

  if (params.cssMode) {
    return;
  }

  if (params.freeMode) {
    if (currentPos < -swiper.minTranslate()) {
      swiper.slideTo(swiper.activeIndex);
      return;
    }

    if (currentPos > -swiper.maxTranslate()) {
      if (swiper.slides.length < snapGrid.length) {
        swiper.slideTo(snapGrid.length - 1);
      } else {
        swiper.slideTo(swiper.slides.length - 1);
      }

      return;
    }

    if (params.freeModeMomentum) {
      if (data.velocities.length > 1) {
        var lastMoveEvent = data.velocities.pop();
        var velocityEvent = data.velocities.pop();
        var distance = lastMoveEvent.position - velocityEvent.position;
        var time = lastMoveEvent.time - velocityEvent.time;
        swiper.velocity = distance / time;
        swiper.velocity /= 2;

        if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {
          swiper.velocity = 0;
        } // this implies that the user stopped moving a finger then released.
        // There would be no events with distance zero, so the last event is stale.


        if (time > 150 || Utils.now() - lastMoveEvent.time > 300) {
          swiper.velocity = 0;
        }
      } else {
        swiper.velocity = 0;
      }

      swiper.velocity *= params.freeModeMomentumVelocityRatio;
      data.velocities.length = 0;
      var momentumDuration = 1000 * params.freeModeMomentumRatio;
      var momentumDistance = swiper.velocity * momentumDuration;
      var newPosition = swiper.translate + momentumDistance;
      if (rtl) newPosition = -newPosition;
      var doBounce = false;
      var afterBouncePosition;
      var bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;
      var needsLoopFix;

      if (newPosition < swiper.maxTranslate()) {
        if (params.freeModeMomentumBounce) {
          if (newPosition + swiper.maxTranslate() < -bounceAmount) {
            newPosition = swiper.maxTranslate() - bounceAmount;
          }

          afterBouncePosition = swiper.maxTranslate();
          doBounce = true;
          data.allowMomentumBounce = true;
        } else {
          newPosition = swiper.maxTranslate();
        }

        if (params.loop && params.centeredSlides) needsLoopFix = true;
      } else if (newPosition > swiper.minTranslate()) {
        if (params.freeModeMomentumBounce) {
          if (newPosition - swiper.minTranslate() > bounceAmount) {
            newPosition = swiper.minTranslate() + bounceAmount;
          }

          afterBouncePosition = swiper.minTranslate();
          doBounce = true;
          data.allowMomentumBounce = true;
        } else {
          newPosition = swiper.minTranslate();
        }

        if (params.loop && params.centeredSlides) needsLoopFix = true;
      } else if (params.freeModeSticky) {
        var nextSlide;

        for (var j = 0; j < snapGrid.length; j += 1) {
          if (snapGrid[j] > -newPosition) {
            nextSlide = j;
            break;
          }
        }

        if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {
          newPosition = snapGrid[nextSlide];
        } else {
          newPosition = snapGrid[nextSlide - 1];
        }

        newPosition = -newPosition;
      }

      if (needsLoopFix) {
        swiper.once('transitionEnd', function () {
          swiper.loopFix();
        });
      } // Fix duration


      if (swiper.velocity !== 0) {
        if (rtl) {
          momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);
        } else {
          momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);
        }

        if (params.freeModeSticky) {
          // If freeModeSticky is active and the user ends a swipe with a slow-velocity
          // event, then durations can be 20+ seconds to slide one (or zero!) slides.
          // It's easy to see this when simulating touch with mouse events. To fix this,
          // limit single-slide swipes to the default slide duration. This also has the
          // nice side effect of matching slide speed if the user stopped moving before
          // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.
          // For faster swipes, also apply limits (albeit higher ones).
          var moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);
          var currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];

          if (moveDistance < currentSlideSize) {
            momentumDuration = params.speed;
          } else if (moveDistance < 2 * currentSlideSize) {
            momentumDuration = params.speed * 1.5;
          } else {
            momentumDuration = params.speed * 2.5;
          }
        }
      } else if (params.freeModeSticky) {
        swiper.slideToClosest();
        return;
      }

      if (params.freeModeMomentumBounce && doBounce) {
        swiper.updateProgress(afterBouncePosition);
        swiper.setTransition(momentumDuration);
        swiper.setTranslate(newPosition);
        swiper.transitionStart(true, swiper.swipeDirection);
        swiper.animating = true;
        $wrapperEl.transitionEnd(function () {
          if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;
          swiper.emit('momentumBounce');
          swiper.setTransition(params.speed);
          setTimeout(function () {
            swiper.setTranslate(afterBouncePosition);
            $wrapperEl.transitionEnd(function () {
              if (!swiper || swiper.destroyed) return;
              swiper.transitionEnd();
            });
          }, 0);
        });
      } else if (swiper.velocity) {
        swiper.updateProgress(newPosition);
        swiper.setTransition(momentumDuration);
        swiper.setTranslate(newPosition);
        swiper.transitionStart(true, swiper.swipeDirection);

        if (!swiper.animating) {
          swiper.animating = true;
          $wrapperEl.transitionEnd(function () {
            if (!swiper || swiper.destroyed) return;
            swiper.transitionEnd();
          });
        }
      } else {
        swiper.updateProgress(newPosition);
      }

      swiper.updateActiveIndex();
      swiper.updateSlidesClasses();
    } else if (params.freeModeSticky) {
      swiper.slideToClosest();
      return;
    }

    if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {
      swiper.updateProgress();
      swiper.updateActiveIndex();
      swiper.updateSlidesClasses();
    }

    return;
  } // Find current slide


  var stopIndex = 0;
  var groupSize = swiper.slidesSizesGrid[0];

  for (var i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {
    var _increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;

    if (typeof slidesGrid[i + _increment] !== 'undefined') {
      if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + _increment]) {
        stopIndex = i;
        groupSize = slidesGrid[i + _increment] - slidesGrid[i];
      }
    } else if (currentPos >= slidesGrid[i]) {
      stopIndex = i;
      groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];
    }
  } // Find current slide size


  var ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;
  var increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;

  if (timeDiff > params.longSwipesMs) {
    // Long touches
    if (!params.longSwipes) {
      swiper.slideTo(swiper.activeIndex);
      return;
    }

    if (swiper.swipeDirection === 'next') {
      if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex);
    }

    if (swiper.swipeDirection === 'prev') {
      if (ratio > 1 - params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex);
    }
  } else {
    // Short swipes
    if (!params.shortSwipes) {
      swiper.slideTo(swiper.activeIndex);
      return;
    }

    var isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);

    if (!isNavButtonTarget) {
      if (swiper.swipeDirection === 'next') {
        swiper.slideTo(stopIndex + increment);
      }

      if (swiper.swipeDirection === 'prev') {
        swiper.slideTo(stopIndex);
      }
    } else if (e.target === swiper.navigation.nextEl) {
      swiper.slideTo(stopIndex + increment);
    } else {
      swiper.slideTo(stopIndex);
    }
  }
}

function onResize() {
  var swiper = this;
  var params = swiper.params,
      el = swiper.el;
  if (el && el.offsetWidth === 0) return; // Breakpoints

  if (params.breakpoints) {
    swiper.setBreakpoint();
  } // Save locks


  var allowSlideNext = swiper.allowSlideNext,
      allowSlidePrev = swiper.allowSlidePrev,
      snapGrid = swiper.snapGrid; // Disable locks on resize

  swiper.allowSlideNext = true;
  swiper.allowSlidePrev = true;
  swiper.updateSize();
  swiper.updateSlides();
  swiper.updateSlidesClasses();

  if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) {
    swiper.slideTo(swiper.slides.length - 1, 0, false, true);
  } else {
    swiper.slideTo(swiper.activeIndex, 0, false, true);
  }

  if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {
    swiper.autoplay.run();
  } // Return locks after resize


  swiper.allowSlidePrev = allowSlidePrev;
  swiper.allowSlideNext = allowSlideNext;

  if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {
    swiper.checkOverflow();
  }
}

function onClick(e) {
  var swiper = this;

  if (!swiper.allowClick) {
    if (swiper.params.preventClicks) e.preventDefault();

    if (swiper.params.preventClicksPropagation && swiper.animating) {
      e.stopPropagation();
      e.stopImmediatePropagation();
    }
  }
}

function onScroll() {
  var swiper = this;
  var wrapperEl = swiper.wrapperEl,
      rtlTranslate = swiper.rtlTranslate;
  swiper.previousTranslate = swiper.translate;

  if (swiper.isHorizontal()) {
    if (rtlTranslate) {
      swiper.translate = wrapperEl.scrollWidth - wrapperEl.offsetWidth - wrapperEl.scrollLeft;
    } else {
      swiper.translate = -wrapperEl.scrollLeft;
    }
  } else {
    swiper.translate = -wrapperEl.scrollTop;
  } // eslint-disable-next-line


  if (swiper.translate === -0) swiper.translate = 0;
  swiper.updateActiveIndex();
  swiper.updateSlidesClasses();
  var newProgress;
  var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();

  if (translatesDiff === 0) {
    newProgress = 0;
  } else {
    newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;
  }

  if (newProgress !== swiper.progress) {
    swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);
  }

  swiper.emit('setTranslate', swiper.translate, false);
}

var dummyEventAttached = false;

function dummyEventListener() {}

function attachEvents() {
  var swiper = this;
  var params = swiper.params,
      touchEvents = swiper.touchEvents,
      el = swiper.el,
      wrapperEl = swiper.wrapperEl;
  swiper.onTouchStart = onTouchStart.bind(swiper);
  swiper.onTouchMove = onTouchMove.bind(swiper);
  swiper.onTouchEnd = onTouchEnd.bind(swiper);

  if (params.cssMode) {
    swiper.onScroll = onScroll.bind(swiper);
  }

  swiper.onClick = onClick.bind(swiper);
  var capture = !!params.nested; // Touch Events

  if (!Support.touch && Support.pointerEvents) {
    el.addEventListener(touchEvents.start, swiper.onTouchStart, false);
    ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.addEventListener(touchEvents.move, swiper.onTouchMove, capture);
    ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.addEventListener(touchEvents.end, swiper.onTouchEnd, false);
  } else {
    if (Support.touch) {
      var passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? {
        passive: true,
        capture: false
      } : false;
      el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
      el.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? {
        passive: false,
        capture: capture
      } : capture);
      el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);

      if (touchEvents.cancel) {
        el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);
      }

      if (!dummyEventAttached) {
        ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.addEventListener('touchstart', dummyEventListener);
        dummyEventAttached = true;
      }
    }

    if (params.simulateTouch && !Device.ios && !Device.android || params.simulateTouch && !Support.touch && Device.ios) {
      el.addEventListener('mousedown', swiper.onTouchStart, false);
      ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.addEventListener('mousemove', swiper.onTouchMove, capture);
      ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.addEventListener('mouseup', swiper.onTouchEnd, false);
    }
  } // Prevent Links Clicks


  if (params.preventClicks || params.preventClicksPropagation) {
    el.addEventListener('click', swiper.onClick, true);
  }

  if (params.cssMode) {
    wrapperEl.addEventListener('scroll', swiper.onScroll);
  } // Resize handler


  if (params.updateOnWindowResize) {
    swiper.on(Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);
  } else {
    swiper.on('observerUpdate', onResize, true);
  }
}

function detachEvents() {
  var swiper = this;
  var params = swiper.params,
      touchEvents = swiper.touchEvents,
      el = swiper.el,
      wrapperEl = swiper.wrapperEl;
  var capture = !!params.nested; // Touch Events

  if (!Support.touch && Support.pointerEvents) {
    el.removeEventListener(touchEvents.start, swiper.onTouchStart, false);
    ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
    ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);
  } else {
    if (Support.touch) {
      var passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? {
        passive: true,
        capture: false
      } : false;
      el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
      el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
      el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);

      if (touchEvents.cancel) {
        el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);
      }
    }

    if (params.simulateTouch && !Device.ios && !Device.android || params.simulateTouch && !Support.touch && Device.ios) {
      el.removeEventListener('mousedown', swiper.onTouchStart, false);
      ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.removeEventListener('mousemove', swiper.onTouchMove, capture);
      ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.removeEventListener('mouseup', swiper.onTouchEnd, false);
    }
  } // Prevent Links Clicks


  if (params.preventClicks || params.preventClicksPropagation) {
    el.removeEventListener('click', swiper.onClick, true);
  }

  if (params.cssMode) {
    wrapperEl.removeEventListener('scroll', swiper.onScroll);
  } // Resize handler


  swiper.off(Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize);
}

var events = {
  attachEvents: attachEvents,
  detachEvents: detachEvents
};

function setBreakpoint() {
  var swiper = this;
  var activeIndex = swiper.activeIndex,
      initialized = swiper.initialized,
      _swiper$loopedSlides = swiper.loopedSlides,
      loopedSlides = _swiper$loopedSlides === void 0 ? 0 : _swiper$loopedSlides,
      params = swiper.params,
      $el = swiper.$el;
  var breakpoints = params.breakpoints;
  if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters

  var breakpoint = swiper.getBreakpoint(breakpoints);

  if (breakpoint && swiper.currentBreakpoint !== breakpoint) {
    var breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;

    if (breakpointOnlyParams) {
      ['slidesPerView', 'spaceBetween', 'slidesPerGroup', 'slidesPerGroupSkip', 'slidesPerColumn'].forEach(function (param) {
        var paramValue = breakpointOnlyParams[param];
        if (typeof paramValue === 'undefined') return;

        if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {
          breakpointOnlyParams[param] = 'auto';
        } else if (param === 'slidesPerView') {
          breakpointOnlyParams[param] = parseFloat(paramValue);
        } else {
          breakpointOnlyParams[param] = parseInt(paramValue, 10);
        }
      });
    }

    var breakpointParams = breakpointOnlyParams || swiper.originalParams;
    var wasMultiRow = params.slidesPerColumn > 1;
    var isMultiRow = breakpointParams.slidesPerColumn > 1;

    if (wasMultiRow && !isMultiRow) {
      $el.removeClass("".concat(params.containerModifierClass, "multirow ").concat(params.containerModifierClass, "multirow-column"));
    } else if (!wasMultiRow && isMultiRow) {
      $el.addClass("".concat(params.containerModifierClass, "multirow"));

      if (breakpointParams.slidesPerColumnFill === 'column') {
        $el.addClass("".concat(params.containerModifierClass, "multirow-column"));
      }
    }

    var directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;
    var needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);

    if (directionChanged && initialized) {
      swiper.changeDirection();
    }

    Utils.extend(swiper.params, breakpointParams);
    Utils.extend(swiper, {
      allowTouchMove: swiper.params.allowTouchMove,
      allowSlideNext: swiper.params.allowSlideNext,
      allowSlidePrev: swiper.params.allowSlidePrev
    });
    swiper.currentBreakpoint = breakpoint;

    if (needsReLoop && initialized) {
      swiper.loopDestroy();
      swiper.loopCreate();
      swiper.updateSlides();
      swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);
    }

    swiper.emit('breakpoint', breakpointParams);
  }
}

function getBreakpoint(breakpoints) {
  // Get breakpoint for window width
  if (!breakpoints) return undefined;
  var breakpoint = false;
  var points = Object.keys(breakpoints).map(function (point) {
    if (typeof point === 'string' && point.indexOf('@') === 0) {
      var minRatio = parseFloat(point.substr(1));
      var value = ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.innerHeight * minRatio;
      return {
        value: value,
        point: point
      };
    }

    return {
      value: point,
      point: point
    };
  });
  points.sort(function (a, b) {
    return parseInt(a.value, 10) - parseInt(b.value, 10);
  });

  for (var i = 0; i < points.length; i += 1) {
    var _points$i = points[i],
        point = _points$i.point,
        value = _points$i.value;

    if (value <= ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.innerWidth) {
      breakpoint = point;
    }
  }

  return breakpoint || 'max';
}

var breakpoints = {
  setBreakpoint: setBreakpoint,
  getBreakpoint: getBreakpoint
};

function addClasses() {
  var swiper = this;
  var classNames = swiper.classNames,
      params = swiper.params,
      rtl = swiper.rtl,
      $el = swiper.$el;
  var suffixes = [];
  suffixes.push('initialized');
  suffixes.push(params.direction);

  if (params.freeMode) {
    suffixes.push('free-mode');
  }

  if (params.autoHeight) {
    suffixes.push('autoheight');
  }

  if (rtl) {
    suffixes.push('rtl');
  }

  if (params.slidesPerColumn > 1) {
    suffixes.push('multirow');

    if (params.slidesPerColumnFill === 'column') {
      suffixes.push('multirow-column');
    }
  }

  if (Device.android) {
    suffixes.push('android');
  }

  if (Device.ios) {
    suffixes.push('ios');
  }

  if (params.cssMode) {
    suffixes.push('css-mode');
  }

  suffixes.forEach(function (suffix) {
    classNames.push(params.containerModifierClass + suffix);
  });
  $el.addClass(classNames.join(' '));
}

function removeClasses() {
  var swiper = this;
  var $el = swiper.$el,
      classNames = swiper.classNames;
  $el.removeClass(classNames.join(' '));
}

var classes = {
  addClasses: addClasses,
  removeClasses: removeClasses
};

function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {
  var image;

  function onReady() {
    if (callback) callback();
  }

  var isPicture = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(imageEl).parent('picture')[0];

  if (!isPicture && (!imageEl.complete || !checkForComplete)) {
    if (src) {
      image = new ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.Image();
      image.onload = onReady;
      image.onerror = onReady;

      if (sizes) {
        image.sizes = sizes;
      }

      if (srcset) {
        image.srcset = srcset;
      }

      if (src) {
        image.src = src;
      }
    } else {
      onReady();
    }
  } else {
    // image already loaded...
    onReady();
  }
}

function preloadImages() {
  var swiper = this;
  swiper.imagesToLoad = swiper.$el.find('img');

  function onReady() {
    if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;
    if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;

    if (swiper.imagesLoaded === swiper.imagesToLoad.length) {
      if (swiper.params.updateOnImagesReady) swiper.update();
      swiper.emit('imagesReady');
    }
  }

  for (var i = 0; i < swiper.imagesToLoad.length; i += 1) {
    var imageEl = swiper.imagesToLoad[i];
    swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);
  }
}

var images = {
  loadImage: loadImage,
  preloadImages: preloadImages
};

function checkOverflow() {
  var swiper = this;
  var params = swiper.params;
  var wasLocked = swiper.isLocked;
  var lastSlidePosition = swiper.slides.length > 0 && params.slidesOffsetBefore + params.spaceBetween * (swiper.slides.length - 1) + swiper.slides[0].offsetWidth * swiper.slides.length;

  if (params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition) {
    swiper.isLocked = lastSlidePosition <= swiper.size;
  } else {
    swiper.isLocked = swiper.snapGrid.length === 1;
  }

  swiper.allowSlideNext = !swiper.isLocked;
  swiper.allowSlidePrev = !swiper.isLocked; // events

  if (wasLocked !== swiper.isLocked) swiper.emit(swiper.isLocked ? 'lock' : 'unlock');

  if (wasLocked && wasLocked !== swiper.isLocked) {
    swiper.isEnd = false;
    if (swiper.navigation) swiper.navigation.update();
  }
}

var checkOverflow$1 = {
  checkOverflow: checkOverflow
};
var defaults = {
  init: true,
  direction: 'horizontal',
  touchEventsTarget: 'container',
  initialSlide: 0,
  speed: 300,
  cssMode: false,
  updateOnWindowResize: true,
  //
  preventInteractionOnTransition: false,
  // To support iOS's swipe-to-go-back gesture (when being used in-app).
  edgeSwipeDetection: false,
  edgeSwipeThreshold: 20,
  // Free mode
  freeMode: false,
  freeModeMomentum: true,
  freeModeMomentumRatio: 1,
  freeModeMomentumBounce: true,
  freeModeMomentumBounceRatio: 1,
  freeModeMomentumVelocityRatio: 1,
  freeModeSticky: false,
  freeModeMinimumVelocity: 0.02,
  // Autoheight
  autoHeight: false,
  // Set wrapper width
  setWrapperSize: false,
  // Virtual Translate
  virtualTranslate: false,
  // Effects
  effect: 'slide',
  // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'
  // Breakpoints
  breakpoints: undefined,
  // Slides grid
  spaceBetween: 0,
  slidesPerView: 1,
  slidesPerColumn: 1,
  slidesPerColumnFill: 'column',
  slidesPerGroup: 1,
  slidesPerGroupSkip: 0,
  centeredSlides: false,
  centeredSlidesBounds: false,
  slidesOffsetBefore: 0,
  // in px
  slidesOffsetAfter: 0,
  // in px
  normalizeSlideIndex: true,
  centerInsufficientSlides: false,
  // Disable swiper and hide navigation when container not overflow
  watchOverflow: false,
  // Round length
  roundLengths: false,
  // Touches
  touchRatio: 1,
  touchAngle: 45,
  simulateTouch: true,
  shortSwipes: true,
  longSwipes: true,
  longSwipesRatio: 0.5,
  longSwipesMs: 300,
  followFinger: true,
  allowTouchMove: true,
  threshold: 0,
  touchMoveStopPropagation: false,
  touchStartPreventDefault: true,
  touchStartForcePreventDefault: false,
  touchReleaseOnEdges: false,
  // Unique Navigation Elements
  uniqueNavElements: true,
  // Resistance
  resistance: true,
  resistanceRatio: 0.85,
  // Progress
  watchSlidesProgress: false,
  watchSlidesVisibility: false,
  // Cursor
  grabCursor: false,
  // Clicks
  preventClicks: true,
  preventClicksPropagation: true,
  slideToClickedSlide: false,
  // Images
  preloadImages: true,
  updateOnImagesReady: true,
  // loop
  loop: false,
  loopAdditionalSlides: 0,
  loopedSlides: null,
  loopFillGroupWithBlank: false,
  // Swiping/no swiping
  allowSlidePrev: true,
  allowSlideNext: true,
  swipeHandler: null,
  // '.swipe-handler',
  noSwiping: true,
  noSwipingClass: 'swiper-no-swiping',
  noSwipingSelector: null,
  // Passive Listeners
  passiveListeners: true,
  // NS
  containerModifierClass: 'swiper-container-',
  // NEW
  slideClass: 'swiper-slide',
  slideBlankClass: 'swiper-slide-invisible-blank',
  slideActiveClass: 'swiper-slide-active',
  slideDuplicateActiveClass: 'swiper-slide-duplicate-active',
  slideVisibleClass: 'swiper-slide-visible',
  slideDuplicateClass: 'swiper-slide-duplicate',
  slideNextClass: 'swiper-slide-next',
  slideDuplicateNextClass: 'swiper-slide-duplicate-next',
  slidePrevClass: 'swiper-slide-prev',
  slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',
  wrapperClass: 'swiper-wrapper',
  // Callbacks
  runCallbacksOnInit: true
};
/* eslint no-param-reassign: "off" */

var prototypes = {
  update: update,
  translate: translate,
  transition: transition,
  slide: slide,
  loop: loop,
  grabCursor: grabCursor,
  manipulation: manipulation,
  events: events,
  breakpoints: breakpoints,
  checkOverflow: checkOverflow$1,
  classes: classes,
  images: images
};
var extendedDefaults = {};

var Swiper = /*#__PURE__*/function (_SwiperClass) {
  (0,_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_1__["default"])(Swiper, _SwiperClass);

  var _super = _createSuper(Swiper);

  function Swiper() {
    var _this;

    (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_5__["default"])(this, Swiper);

    var el;
    var params;

    for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
      args[_key5] = arguments[_key5];
    }

    if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {
      params = args[0];
    } else {
      el = args[0];
      params = args[1];
    }

    if (!params) params = {};
    params = Utils.extend({}, params);
    if (el && !params.el) params.el = el;
    _this = _super.call(this, params);
    Object.keys(prototypes).forEach(function (prototypeGroup) {
      Object.keys(prototypes[prototypeGroup]).forEach(function (protoMethod) {
        if (!Swiper.prototype[protoMethod]) {
          Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];
        }
      });
    }); // Swiper Instance

    var swiper = (0,_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__["default"])(_this);

    if (typeof swiper.modules === 'undefined') {
      swiper.modules = {};
    }

    Object.keys(swiper.modules).forEach(function (moduleName) {
      var module = swiper.modules[moduleName];

      if (module.params) {
        var moduleParamName = Object.keys(module.params)[0];
        var moduleParams = module.params[moduleParamName];
        if ((0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_7__["default"])(moduleParams) !== 'object' || moduleParams === null) return;
        if (!(moduleParamName in params && 'enabled' in moduleParams)) return;

        if (params[moduleParamName] === true) {
          params[moduleParamName] = {
            enabled: true
          };
        }

        if ((0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_7__["default"])(params[moduleParamName]) === 'object' && !('enabled' in params[moduleParamName])) {
          params[moduleParamName].enabled = true;
        }

        if (!params[moduleParamName]) params[moduleParamName] = {
          enabled: false
        };
      }
    }); // Extend defaults with modules params

    var swiperParams = Utils.extend({}, defaults);
    swiper.useModulesParams(swiperParams); // Extend defaults with passed params

    swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params);
    swiper.originalParams = Utils.extend({}, swiper.params);
    swiper.passedParams = Utils.extend({}, params); // Save Dom lib

    swiper.$ = dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$; // Find el

    var $el = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(swiper.params.el);
    el = $el[0];

    if (!el) {
      return (0,_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__["default"])(_this, undefined);
    }

    if ($el.length > 1) {
      var swipers = [];
      $el.each(function (index, containerEl) {
        var newParams = Utils.extend({}, params, {
          el: containerEl
        });
        swipers.push(new Swiper(newParams));
      });
      return (0,_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__["default"])(_this, swipers);
    }

    el.swiper = swiper;
    $el.data('swiper', swiper); // Find Wrapper

    var $wrapperEl;

    if (el && el.shadowRoot && el.shadowRoot.querySelector) {
      $wrapperEl = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(el.shadowRoot.querySelector(".".concat(swiper.params.wrapperClass))); // Children needs to return slot items

      $wrapperEl.children = function (options) {
        return $el.children(options);
      };
    } else {
      $wrapperEl = $el.children(".".concat(swiper.params.wrapperClass));
    } // Extend Swiper


    Utils.extend(swiper, {
      $el: $el,
      el: el,
      $wrapperEl: $wrapperEl,
      wrapperEl: $wrapperEl[0],
      // Classes
      classNames: [],
      // Slides
      slides: (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(),
      slidesGrid: [],
      snapGrid: [],
      slidesSizesGrid: [],
      // isDirection
      isHorizontal: function isHorizontal() {
        return swiper.params.direction === 'horizontal';
      },
      isVertical: function isVertical() {
        return swiper.params.direction === 'vertical';
      },
      // RTL
      rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',
      rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),
      wrongRTL: $wrapperEl.css('display') === '-webkit-box',
      // Indexes
      activeIndex: 0,
      realIndex: 0,
      //
      isBeginning: true,
      isEnd: false,
      // Props
      translate: 0,
      previousTranslate: 0,
      progress: 0,
      velocity: 0,
      animating: false,
      // Locks
      allowSlideNext: swiper.params.allowSlideNext,
      allowSlidePrev: swiper.params.allowSlidePrev,
      // Touch Events
      touchEvents: function touchEvents() {
        var touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];
        var desktop = ['mousedown', 'mousemove', 'mouseup'];

        if (Support.pointerEvents) {
          desktop = ['pointerdown', 'pointermove', 'pointerup'];
        }

        swiper.touchEventsTouch = {
          start: touch[0],
          move: touch[1],
          end: touch[2],
          cancel: touch[3]
        };
        swiper.touchEventsDesktop = {
          start: desktop[0],
          move: desktop[1],
          end: desktop[2]
        };
        return Support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;
      }(),
      touchEventsData: {
        isTouched: undefined,
        isMoved: undefined,
        allowTouchCallbacks: undefined,
        touchStartTime: undefined,
        isScrolling: undefined,
        currentTranslate: undefined,
        startTranslate: undefined,
        allowThresholdMove: undefined,
        // Form elements to match
        formElements: 'input, select, option, textarea, button, video, label',
        // Last click time
        lastClickTime: Utils.now(),
        clickTimeout: undefined,
        // Velocities
        velocities: [],
        allowMomentumBounce: undefined,
        isTouchEvent: undefined,
        startMoving: undefined
      },
      // Clicks
      allowClick: true,
      // Touches
      allowTouchMove: swiper.params.allowTouchMove,
      touches: {
        startX: 0,
        startY: 0,
        currentX: 0,
        currentY: 0,
        diff: 0
      },
      // Images
      imagesToLoad: [],
      imagesLoaded: 0
    }); // Install Modules

    swiper.useModules(); // Init

    if (swiper.params.init) {
      swiper.init();
    } // Return app instance


    return (0,_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__["default"])(_this, swiper);
  }

  (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_6__["default"])(Swiper, [{
    key: "slidesPerViewDynamic",
    value: function slidesPerViewDynamic() {
      var swiper = this;
      var params = swiper.params,
          slides = swiper.slides,
          slidesGrid = swiper.slidesGrid,
          swiperSize = swiper.size,
          activeIndex = swiper.activeIndex;
      var spv = 1;

      if (params.centeredSlides) {
        var slideSize = slides[activeIndex].swiperSlideSize;
        var breakLoop;

        for (var i = activeIndex + 1; i < slides.length; i += 1) {
          if (slides[i] && !breakLoop) {
            slideSize += slides[i].swiperSlideSize;
            spv += 1;
            if (slideSize > swiperSize) breakLoop = true;
          }
        }

        for (var _i7 = activeIndex - 1; _i7 >= 0; _i7 -= 1) {
          if (slides[_i7] && !breakLoop) {
            slideSize += slides[_i7].swiperSlideSize;
            spv += 1;
            if (slideSize > swiperSize) breakLoop = true;
          }
        }
      } else {
        for (var _i8 = activeIndex + 1; _i8 < slides.length; _i8 += 1) {
          if (slidesGrid[_i8] - slidesGrid[activeIndex] < swiperSize) {
            spv += 1;
          }
        }
      }

      return spv;
    }
  }, {
    key: "update",
    value: function update() {
      var swiper = this;
      if (!swiper || swiper.destroyed) return;
      var snapGrid = swiper.snapGrid,
          params = swiper.params; // Breakpoints

      if (params.breakpoints) {
        swiper.setBreakpoint();
      }

      swiper.updateSize();
      swiper.updateSlides();
      swiper.updateProgress();
      swiper.updateSlidesClasses();

      function setTranslate() {
        var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;
        var newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());
        swiper.setTranslate(newTranslate);
        swiper.updateActiveIndex();
        swiper.updateSlidesClasses();
      }

      var translated;

      if (swiper.params.freeMode) {
        setTranslate();

        if (swiper.params.autoHeight) {
          swiper.updateAutoHeight();
        }
      } else {
        if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {
          translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);
        } else {
          translated = swiper.slideTo(swiper.activeIndex, 0, false, true);
        }

        if (!translated) {
          setTranslate();
        }
      }

      if (params.watchOverflow && snapGrid !== swiper.snapGrid) {
        swiper.checkOverflow();
      }

      swiper.emit('update');
    }
  }, {
    key: "changeDirection",
    value: function changeDirection(newDirection) {
      var needUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
      var swiper = this;
      var currentDirection = swiper.params.direction;

      if (!newDirection) {
        // eslint-disable-next-line
        newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';
      }

      if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {
        return swiper;
      }

      swiper.$el.removeClass("".concat(swiper.params.containerModifierClass).concat(currentDirection)).addClass("".concat(swiper.params.containerModifierClass).concat(newDirection));
      swiper.params.direction = newDirection;
      swiper.slides.each(function (slideIndex, slideEl) {
        if (newDirection === 'vertical') {
          slideEl.style.width = '';
        } else {
          slideEl.style.height = '';
        }
      });
      swiper.emit('changeDirection');
      if (needUpdate) swiper.update();
      return swiper;
    }
  }, {
    key: "init",
    value: function init() {
      var swiper = this;
      if (swiper.initialized) return;
      swiper.emit('beforeInit'); // Set breakpoint

      if (swiper.params.breakpoints) {
        swiper.setBreakpoint();
      } // Add Classes


      swiper.addClasses(); // Create loop

      if (swiper.params.loop) {
        swiper.loopCreate();
      } // Update size


      swiper.updateSize(); // Update slides

      swiper.updateSlides();

      if (swiper.params.watchOverflow) {
        swiper.checkOverflow();
      } // Set Grab Cursor


      if (swiper.params.grabCursor) {
        swiper.setGrabCursor();
      }

      if (swiper.params.preloadImages) {
        swiper.preloadImages();
      } // Slide To Initial Slide


      if (swiper.params.loop) {
        swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);
      } else {
        swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);
      } // Attach events


      swiper.attachEvents(); // Init Flag

      swiper.initialized = true; // Emit

      swiper.emit('init');
    }
  }, {
    key: "destroy",
    value: function destroy() {
      var deleteInstance = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
      var cleanStyles = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
      var swiper = this;
      var params = swiper.params,
          $el = swiper.$el,
          $wrapperEl = swiper.$wrapperEl,
          slides = swiper.slides;

      if (typeof swiper.params === 'undefined' || swiper.destroyed) {
        return null;
      }

      swiper.emit('beforeDestroy'); // Init Flag

      swiper.initialized = false; // Detach events

      swiper.detachEvents(); // Destroy loop

      if (params.loop) {
        swiper.loopDestroy();
      } // Cleanup styles


      if (cleanStyles) {
        swiper.removeClasses();
        $el.removeAttr('style');
        $wrapperEl.removeAttr('style');

        if (slides && slides.length) {
          slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index');
        }
      }

      swiper.emit('destroy'); // Detach emitter events

      Object.keys(swiper.eventsListeners).forEach(function (eventName) {
        swiper.off(eventName);
      });

      if (deleteInstance !== false) {
        swiper.$el[0].swiper = null;
        swiper.$el.data('swiper', null);
        Utils.deleteProps(swiper);
      }

      swiper.destroyed = true;
      return null;
    }
  }], [{
    key: "extendDefaults",
    value: function extendDefaults(newDefaults) {
      Utils.extend(extendedDefaults, newDefaults);
    }
  }, {
    key: "extendedDefaults",
    get: function get() {
      return extendedDefaults;
    }
  }, {
    key: "defaults",
    get: function get() {
      return defaults;
    }
  }, {
    key: "Class",
    get: function get() {
      return SwiperClass;
    }
  }, {
    key: "$",
    get: function get() {
      return dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$;
    }
  }]);

  return Swiper;
}(SwiperClass);

var Device$1 = {
  name: 'device',
  proto: {
    device: Device
  },
  static: {
    device: Device
  }
};
var Support$1 = {
  name: 'support',
  proto: {
    support: Support
  },
  static: {
    support: Support
  }
};

var Browser = function Browser() {
  function isSafari() {
    var ua = ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.navigator.userAgent.toLowerCase();
    return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;
  }

  return {
    isEdge: !!ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.navigator.userAgent.match(/Edge/g),
    isSafari: isSafari(),
    isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.navigator.userAgent)
  };
}();

var Browser$1 = {
  name: 'browser',
  proto: {
    browser: Browser
  },
  static: {
    browser: Browser
  }
};
var Resize = {
  name: 'resize',
  create: function create() {
    var swiper = this;
    Utils.extend(swiper, {
      resize: {
        resizeHandler: function resizeHandler() {
          if (!swiper || swiper.destroyed || !swiper.initialized) return;
          swiper.emit('beforeResize');
          swiper.emit('resize');
        },
        orientationChangeHandler: function orientationChangeHandler() {
          if (!swiper || swiper.destroyed || !swiper.initialized) return;
          swiper.emit('orientationchange');
        }
      }
    });
  },
  on: {
    init: function init() {
      var swiper = this; // Emit resize

      ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.addEventListener('resize', swiper.resize.resizeHandler); // Emit orientationchange

      ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);
    },
    destroy: function destroy() {
      var swiper = this;
      ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.removeEventListener('resize', swiper.resize.resizeHandler);
      ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);
    }
  }
};
var Observer = {
  func: ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.MutationObserver || ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.WebkitMutationObserver,
  attach: function attach(target) {
    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
    var swiper = this;
    var ObserverFunc = Observer.func;
    var observer = new ObserverFunc(function (mutations) {
      // The observerUpdate event should only be triggered
      // once despite the number of mutations.  Additional
      // triggers are redundant and are very costly
      if (mutations.length === 1) {
        swiper.emit('observerUpdate', mutations[0]);
        return;
      }

      var observerUpdate = function observerUpdate() {
        swiper.emit('observerUpdate', mutations[0]);
      };

      if (ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.requestAnimationFrame) {
        ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.requestAnimationFrame(observerUpdate);
      } else {
        ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.setTimeout(observerUpdate, 0);
      }
    });
    observer.observe(target, {
      attributes: typeof options.attributes === 'undefined' ? true : options.attributes,
      childList: typeof options.childList === 'undefined' ? true : options.childList,
      characterData: typeof options.characterData === 'undefined' ? true : options.characterData
    });
    swiper.observer.observers.push(observer);
  },
  init: function init() {
    var swiper = this;
    if (!Support.observer || !swiper.params.observer) return;

    if (swiper.params.observeParents) {
      var containerParents = swiper.$el.parents();

      for (var i = 0; i < containerParents.length; i += 1) {
        swiper.observer.attach(containerParents[i]);
      }
    } // Observe container


    swiper.observer.attach(swiper.$el[0], {
      childList: swiper.params.observeSlideChildren
    }); // Observe wrapper

    swiper.observer.attach(swiper.$wrapperEl[0], {
      attributes: false
    });
  },
  destroy: function destroy() {
    var swiper = this;
    swiper.observer.observers.forEach(function (observer) {
      observer.disconnect();
    });
    swiper.observer.observers = [];
  }
};
var Observer$1 = {
  name: 'observer',
  params: {
    observer: false,
    observeParents: false,
    observeSlideChildren: false
  },
  create: function create() {
    var swiper = this;
    Utils.extend(swiper, {
      observer: {
        init: Observer.init.bind(swiper),
        attach: Observer.attach.bind(swiper),
        destroy: Observer.destroy.bind(swiper),
        observers: []
      }
    });
  },
  on: {
    init: function init() {
      var swiper = this;
      swiper.observer.init();
    },
    destroy: function destroy() {
      var swiper = this;
      swiper.observer.destroy();
    }
  }
};
var Virtual = {
  update: function update(force) {
    var swiper = this;
    var _swiper$params = swiper.params,
        slidesPerView = _swiper$params.slidesPerView,
        slidesPerGroup = _swiper$params.slidesPerGroup,
        centeredSlides = _swiper$params.centeredSlides;
    var _swiper$params$virtua = swiper.params.virtual,
        addSlidesBefore = _swiper$params$virtua.addSlidesBefore,
        addSlidesAfter = _swiper$params$virtua.addSlidesAfter;
    var _swiper$virtual = swiper.virtual,
        previousFrom = _swiper$virtual.from,
        previousTo = _swiper$virtual.to,
        slides = _swiper$virtual.slides,
        previousSlidesGrid = _swiper$virtual.slidesGrid,
        renderSlide = _swiper$virtual.renderSlide,
        previousOffset = _swiper$virtual.offset;
    swiper.updateActiveIndex();
    var activeIndex = swiper.activeIndex || 0;
    var offsetProp;
    if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top';
    var slidesAfter;
    var slidesBefore;

    if (centeredSlides) {
      slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;
      slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;
    } else {
      slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesBefore;
      slidesBefore = slidesPerGroup + addSlidesAfter;
    }

    var from = Math.max((activeIndex || 0) - slidesBefore, 0);
    var to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);
    var offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);
    Utils.extend(swiper.virtual, {
      from: from,
      to: to,
      offset: offset,
      slidesGrid: swiper.slidesGrid
    });

    function onRendered() {
      swiper.updateSlides();
      swiper.updateProgress();
      swiper.updateSlidesClasses();

      if (swiper.lazy && swiper.params.lazy.enabled) {
        swiper.lazy.load();
      }
    }

    if (previousFrom === from && previousTo === to && !force) {
      if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {
        swiper.slides.css(offsetProp, "".concat(offset, "px"));
      }

      swiper.updateProgress();
      return;
    }

    if (swiper.params.virtual.renderExternal) {
      swiper.params.virtual.renderExternal.call(swiper, {
        offset: offset,
        from: from,
        to: to,
        slides: function getSlides() {
          var slidesToRender = [];

          for (var i = from; i <= to; i += 1) {
            slidesToRender.push(slides[i]);
          }

          return slidesToRender;
        }()
      });
      onRendered();
      return;
    }

    var prependIndexes = [];
    var appendIndexes = [];

    if (force) {
      swiper.$wrapperEl.find(".".concat(swiper.params.slideClass)).remove();
    } else {
      for (var i = previousFrom; i <= previousTo; i += 1) {
        if (i < from || i > to) {
          swiper.$wrapperEl.find(".".concat(swiper.params.slideClass, "[data-swiper-slide-index=\"").concat(i, "\"]")).remove();
        }
      }
    }

    for (var _i9 = 0; _i9 < slides.length; _i9 += 1) {
      if (_i9 >= from && _i9 <= to) {
        if (typeof previousTo === 'undefined' || force) {
          appendIndexes.push(_i9);
        } else {
          if (_i9 > previousTo) appendIndexes.push(_i9);
          if (_i9 < previousFrom) prependIndexes.push(_i9);
        }
      }
    }

    appendIndexes.forEach(function (index) {
      swiper.$wrapperEl.append(renderSlide(slides[index], index));
    });
    prependIndexes.sort(function (a, b) {
      return b - a;
    }).forEach(function (index) {
      swiper.$wrapperEl.prepend(renderSlide(slides[index], index));
    });
    swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, "".concat(offset, "px"));
    onRendered();
  },
  renderSlide: function renderSlide(slide, index) {
    var swiper = this;
    var params = swiper.params.virtual;

    if (params.cache && swiper.virtual.cache[index]) {
      return swiper.virtual.cache[index];
    }

    var $slideEl = params.renderSlide ? (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(params.renderSlide.call(swiper, slide, index)) : (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)("<div class=\"".concat(swiper.params.slideClass, "\" data-swiper-slide-index=\"").concat(index, "\">").concat(slide, "</div>"));
    if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index);
    if (params.cache) swiper.virtual.cache[index] = $slideEl;
    return $slideEl;
  },
  appendSlide: function appendSlide(slides) {
    var swiper = this;

    if ((0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_7__["default"])(slides) === 'object' && 'length' in slides) {
      for (var i = 0; i < slides.length; i += 1) {
        if (slides[i]) swiper.virtual.slides.push(slides[i]);
      }
    } else {
      swiper.virtual.slides.push(slides);
    }

    swiper.virtual.update(true);
  },
  prependSlide: function prependSlide(slides) {
    var swiper = this;
    var activeIndex = swiper.activeIndex;
    var newActiveIndex = activeIndex + 1;
    var numberOfNewSlides = 1;

    if (Array.isArray(slides)) {
      for (var i = 0; i < slides.length; i += 1) {
        if (slides[i]) swiper.virtual.slides.unshift(slides[i]);
      }

      newActiveIndex = activeIndex + slides.length;
      numberOfNewSlides = slides.length;
    } else {
      swiper.virtual.slides.unshift(slides);
    }

    if (swiper.params.virtual.cache) {
      var cache = swiper.virtual.cache;
      var newCache = {};
      Object.keys(cache).forEach(function (cachedIndex) {
        var $cachedEl = cache[cachedIndex];
        var cachedElIndex = $cachedEl.attr('data-swiper-slide-index');

        if (cachedElIndex) {
          $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + 1);
        }

        newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;
      });
      swiper.virtual.cache = newCache;
    }

    swiper.virtual.update(true);
    swiper.slideTo(newActiveIndex, 0);
  },
  removeSlide: function removeSlide(slidesIndexes) {
    var swiper = this;
    if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;
    var activeIndex = swiper.activeIndex;

    if (Array.isArray(slidesIndexes)) {
      for (var i = slidesIndexes.length - 1; i >= 0; i -= 1) {
        swiper.virtual.slides.splice(slidesIndexes[i], 1);

        if (swiper.params.virtual.cache) {
          delete swiper.virtual.cache[slidesIndexes[i]];
        }

        if (slidesIndexes[i] < activeIndex) activeIndex -= 1;
        activeIndex = Math.max(activeIndex, 0);
      }
    } else {
      swiper.virtual.slides.splice(slidesIndexes, 1);

      if (swiper.params.virtual.cache) {
        delete swiper.virtual.cache[slidesIndexes];
      }

      if (slidesIndexes < activeIndex) activeIndex -= 1;
      activeIndex = Math.max(activeIndex, 0);
    }

    swiper.virtual.update(true);
    swiper.slideTo(activeIndex, 0);
  },
  removeAllSlides: function removeAllSlides() {
    var swiper = this;
    swiper.virtual.slides = [];

    if (swiper.params.virtual.cache) {
      swiper.virtual.cache = {};
    }

    swiper.virtual.update(true);
    swiper.slideTo(0, 0);
  }
};
var Virtual$1 = {
  name: 'virtual',
  params: {
    virtual: {
      enabled: false,
      slides: [],
      cache: true,
      renderSlide: null,
      renderExternal: null,
      addSlidesBefore: 0,
      addSlidesAfter: 0
    }
  },
  create: function create() {
    var swiper = this;
    Utils.extend(swiper, {
      virtual: {
        update: Virtual.update.bind(swiper),
        appendSlide: Virtual.appendSlide.bind(swiper),
        prependSlide: Virtual.prependSlide.bind(swiper),
        removeSlide: Virtual.removeSlide.bind(swiper),
        removeAllSlides: Virtual.removeAllSlides.bind(swiper),
        renderSlide: Virtual.renderSlide.bind(swiper),
        slides: swiper.params.virtual.slides,
        cache: {}
      }
    });
  },
  on: {
    beforeInit: function beforeInit() {
      var swiper = this;
      if (!swiper.params.virtual.enabled) return;
      swiper.classNames.push("".concat(swiper.params.containerModifierClass, "virtual"));
      var overwriteParams = {
        watchSlidesProgress: true
      };
      Utils.extend(swiper.params, overwriteParams);
      Utils.extend(swiper.originalParams, overwriteParams);

      if (!swiper.params.initialSlide) {
        swiper.virtual.update();
      }
    },
    setTranslate: function setTranslate() {
      var swiper = this;
      if (!swiper.params.virtual.enabled) return;
      swiper.virtual.update();
    }
  }
};
var Keyboard = {
  handle: function handle(event) {
    var swiper = this;
    var rtl = swiper.rtlTranslate;
    var e = event;
    if (e.originalEvent) e = e.originalEvent; // jquery fix

    var kc = e.keyCode || e.charCode;
    var pageUpDown = swiper.params.keyboard.pageUpDown;
    var isPageUp = pageUpDown && kc === 33;
    var isPageDown = pageUpDown && kc === 34;
    var isArrowLeft = kc === 37;
    var isArrowRight = kc === 39;
    var isArrowUp = kc === 38;
    var isArrowDown = kc === 40; // Directions locks

    if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {
      return false;
    }

    if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {
      return false;
    }

    if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {
      return undefined;
    }

    if (ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.activeElement && ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.activeElement.nodeName && (ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.activeElement.nodeName.toLowerCase() === 'input' || ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.activeElement.nodeName.toLowerCase() === 'textarea')) {
      return undefined;
    }

    if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {
      var inView = false; // Check that swiper should be inside of visible area of window

      if (swiper.$el.parents(".".concat(swiper.params.slideClass)).length > 0 && swiper.$el.parents(".".concat(swiper.params.slideActiveClass)).length === 0) {
        return undefined;
      }

      var windowWidth = ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.innerWidth;
      var windowHeight = ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.innerHeight;
      var swiperOffset = swiper.$el.offset();
      if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;
      var swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiper.width, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiper.height], [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height]];

      for (var i = 0; i < swiperCoord.length; i += 1) {
        var point = swiperCoord[i];

        if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {
          inView = true;
        }
      }

      if (!inView) return undefined;
    }

    if (swiper.isHorizontal()) {
      if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {
        if (e.preventDefault) e.preventDefault();else e.returnValue = false;
      }

      if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();
      if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();
    } else {
      if (isPageUp || isPageDown || isArrowUp || isArrowDown) {
        if (e.preventDefault) e.preventDefault();else e.returnValue = false;
      }

      if (isPageDown || isArrowDown) swiper.slideNext();
      if (isPageUp || isArrowUp) swiper.slidePrev();
    }

    swiper.emit('keyPress', kc);
    return undefined;
  },
  enable: function enable() {
    var swiper = this;
    if (swiper.keyboard.enabled) return;
    (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(ssr_window__WEBPACK_IMPORTED_MODULE_9__.document).on('keydown', swiper.keyboard.handle);
    swiper.keyboard.enabled = true;
  },
  disable: function disable() {
    var swiper = this;
    if (!swiper.keyboard.enabled) return;
    (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(ssr_window__WEBPACK_IMPORTED_MODULE_9__.document).off('keydown', swiper.keyboard.handle);
    swiper.keyboard.enabled = false;
  }
};
var Keyboard$1 = {
  name: 'keyboard',
  params: {
    keyboard: {
      enabled: false,
      onlyInViewport: true,
      pageUpDown: true
    }
  },
  create: function create() {
    var swiper = this;
    Utils.extend(swiper, {
      keyboard: {
        enabled: false,
        enable: Keyboard.enable.bind(swiper),
        disable: Keyboard.disable.bind(swiper),
        handle: Keyboard.handle.bind(swiper)
      }
    });
  },
  on: {
    init: function init() {
      var swiper = this;

      if (swiper.params.keyboard.enabled) {
        swiper.keyboard.enable();
      }
    },
    destroy: function destroy() {
      var swiper = this;

      if (swiper.keyboard.enabled) {
        swiper.keyboard.disable();
      }
    }
  }
};

function isEventSupported() {
  var eventName = 'onwheel';
  var isSupported = (eventName in ssr_window__WEBPACK_IMPORTED_MODULE_9__.document);

  if (!isSupported) {
    var element = ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.createElement('div');
    element.setAttribute(eventName, 'return;');
    isSupported = typeof element[eventName] === 'function';
  }

  if (!isSupported && ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.implementation && ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.implementation.hasFeature // always returns true in newer browsers as per the standard.
  // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature
  && ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.implementation.hasFeature('', '') !== true) {
    // This is the only way to test support for the `wheel` event in IE9+.
    isSupported = ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.implementation.hasFeature('Events.wheel', '3.0');
  }

  return isSupported;
}

var Mousewheel = {
  lastScrollTime: Utils.now(),
  lastEventBeforeSnap: undefined,
  recentWheelEvents: [],
  event: function event() {
    if (ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.navigator.userAgent.indexOf('firefox') > -1) return 'DOMMouseScroll';
    return isEventSupported() ? 'wheel' : 'mousewheel';
  },
  normalize: function normalize(e) {
    // Reasonable defaults
    var PIXEL_STEP = 10;
    var LINE_HEIGHT = 40;
    var PAGE_HEIGHT = 800;
    var sX = 0;
    var sY = 0; // spinX, spinY

    var pX = 0;
    var pY = 0; // pixelX, pixelY
    // Legacy

    if ('detail' in e) {
      sY = e.detail;
    }

    if ('wheelDelta' in e) {
      sY = -e.wheelDelta / 120;
    }

    if ('wheelDeltaY' in e) {
      sY = -e.wheelDeltaY / 120;
    }

    if ('wheelDeltaX' in e) {
      sX = -e.wheelDeltaX / 120;
    } // side scrolling on FF with DOMMouseScroll


    if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {
      sX = sY;
      sY = 0;
    }

    pX = sX * PIXEL_STEP;
    pY = sY * PIXEL_STEP;

    if ('deltaY' in e) {
      pY = e.deltaY;
    }

    if ('deltaX' in e) {
      pX = e.deltaX;
    }

    if (e.shiftKey && !pX) {
      // if user scrolls with shift he wants horizontal scroll
      pX = pY;
      pY = 0;
    }

    if ((pX || pY) && e.deltaMode) {
      if (e.deltaMode === 1) {
        // delta in LINE units
        pX *= LINE_HEIGHT;
        pY *= LINE_HEIGHT;
      } else {
        // delta in PAGE units
        pX *= PAGE_HEIGHT;
        pY *= PAGE_HEIGHT;
      }
    } // Fall-back if spin cannot be determined


    if (pX && !sX) {
      sX = pX < 1 ? -1 : 1;
    }

    if (pY && !sY) {
      sY = pY < 1 ? -1 : 1;
    }

    return {
      spinX: sX,
      spinY: sY,
      pixelX: pX,
      pixelY: pY
    };
  },
  handleMouseEnter: function handleMouseEnter() {
    var swiper = this;
    swiper.mouseEntered = true;
  },
  handleMouseLeave: function handleMouseLeave() {
    var swiper = this;
    swiper.mouseEntered = false;
  },
  handle: function handle(event) {
    var e = event;
    var swiper = this;
    var params = swiper.params.mousewheel;

    if (swiper.params.cssMode) {
      e.preventDefault();
    }

    var target = swiper.$el;

    if (swiper.params.mousewheel.eventsTarged !== 'container') {
      target = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(swiper.params.mousewheel.eventsTarged);
    }

    if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true;
    if (e.originalEvent) e = e.originalEvent; // jquery fix

    var delta = 0;
    var rtlFactor = swiper.rtlTranslate ? -1 : 1;
    var data = Mousewheel.normalize(e);

    if (params.forceToAxis) {
      if (swiper.isHorizontal()) {
        if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true;
      } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true;
    } else {
      delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;
    }

    if (delta === 0) return true;
    if (params.invert) delta = -delta;

    if (!swiper.params.freeMode) {
      // Register the new event in a variable which stores the relevant data
      var newEvent = {
        time: Utils.now(),
        delta: Math.abs(delta),
        direction: Math.sign(delta),
        raw: event
      }; // Keep the most recent events

      var recentWheelEvents = swiper.mousewheel.recentWheelEvents;

      if (recentWheelEvents.length >= 2) {
        recentWheelEvents.shift(); // only store the last N events
      }

      var prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;
      recentWheelEvents.push(newEvent); // If there is at least one previous recorded event:
      //   If direction has changed or
      //   if the scroll is quicker than the previous one:
      //     Animate the slider.
      // Else (this is the first time the wheel is moved):
      //     Animate the slider.

      if (prevEvent) {
        if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {
          swiper.mousewheel.animateSlider(newEvent);
        }
      } else {
        swiper.mousewheel.animateSlider(newEvent);
      } // If it's time to release the scroll:
      //   Return now so you don't hit the preventDefault.


      if (swiper.mousewheel.releaseScroll(newEvent)) {
        return true;
      }
    } else {
      // Freemode or scrollContainer:
      // If we recently snapped after a momentum scroll, then ignore wheel events
      // to give time for the deceleration to finish. Stop ignoring after 500 msecs
      // or if it's a new scroll (larger delta or inverse sign as last event before
      // an end-of-momentum snap).
      var _newEvent = {
        time: Utils.now(),
        delta: Math.abs(delta),
        direction: Math.sign(delta)
      };
      var lastEventBeforeSnap = swiper.mousewheel.lastEventBeforeSnap;
      var ignoreWheelEvents = lastEventBeforeSnap && _newEvent.time < lastEventBeforeSnap.time + 500 && _newEvent.delta <= lastEventBeforeSnap.delta && _newEvent.direction === lastEventBeforeSnap.direction;

      if (!ignoreWheelEvents) {
        swiper.mousewheel.lastEventBeforeSnap = undefined;

        if (swiper.params.loop) {
          swiper.loopFix();
        }

        var position = swiper.getTranslate() + delta * params.sensitivity;
        var wasBeginning = swiper.isBeginning;
        var wasEnd = swiper.isEnd;
        if (position >= swiper.minTranslate()) position = swiper.minTranslate();
        if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();
        swiper.setTransition(0);
        swiper.setTranslate(position);
        swiper.updateProgress();
        swiper.updateActiveIndex();
        swiper.updateSlidesClasses();

        if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {
          swiper.updateSlidesClasses();
        }

        if (swiper.params.freeModeSticky) {
          // When wheel scrolling starts with sticky (aka snap) enabled, then detect
          // the end of a momentum scroll by storing recent (N=15?) wheel events.
          // 1. do all N events have decreasing or same (absolute value) delta?
          // 2. did all N events arrive in the last M (M=500?) msecs?
          // 3. does the earliest event have an (absolute value) delta that's
          //    at least P (P=1?) larger than the most recent event's delta?
          // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?
          // If 1-4 are "yes" then we're near the end of a momuntum scroll deceleration.
          // Snap immediately and ignore remaining wheel events in this scroll.
          // See comment above for "remaining wheel events in this scroll" determination.
          // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.
          clearTimeout(swiper.mousewheel.timeout);
          swiper.mousewheel.timeout = undefined;
          var _recentWheelEvents = swiper.mousewheel.recentWheelEvents;

          if (_recentWheelEvents.length >= 15) {
            _recentWheelEvents.shift(); // only store the last N events

          }

          var _prevEvent = _recentWheelEvents.length ? _recentWheelEvents[_recentWheelEvents.length - 1] : undefined;

          var firstEvent = _recentWheelEvents[0];

          _recentWheelEvents.push(_newEvent);

          if (_prevEvent && (_newEvent.delta > _prevEvent.delta || _newEvent.direction !== _prevEvent.direction)) {
            // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.
            _recentWheelEvents.splice(0);
          } else if (_recentWheelEvents.length >= 15 && _newEvent.time - firstEvent.time < 500 && firstEvent.delta - _newEvent.delta >= 1 && _newEvent.delta <= 6) {
            // We're at the end of the deceleration of a momentum scroll, so there's no need
            // to wait for more events. Snap ASAP on the next tick.
            // Also, because there's some remaining momentum we'll bias the snap in the
            // direction of the ongoing scroll because it's better UX for the scroll to snap
            // in the same direction as the scroll instead of reversing to snap.  Therefore,
            // if it's already scrolled more than 20% in the current direction, keep going.
            var snapToThreshold = delta > 0 ? 0.8 : 0.2;
            swiper.mousewheel.lastEventBeforeSnap = _newEvent;

            _recentWheelEvents.splice(0);

            swiper.mousewheel.timeout = Utils.nextTick(function () {
              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);
            }, 0); // no delay; move on next tick
          }

          if (!swiper.mousewheel.timeout) {
            // if we get here, then we haven't detected the end of a momentum scroll, so
            // we'll consider a scroll "complete" when there haven't been any wheel events
            // for 500ms.
            swiper.mousewheel.timeout = Utils.nextTick(function () {
              var snapToThreshold = 0.5;
              swiper.mousewheel.lastEventBeforeSnap = _newEvent;

              _recentWheelEvents.splice(0);

              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);
            }, 500);
          }
        } // Emit event


        if (!ignoreWheelEvents) swiper.emit('scroll', e); // Stop autoplay

        if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop(); // Return page scroll on edge positions

        if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;
      }
    }

    if (e.preventDefault) e.preventDefault();else e.returnValue = false;
    return false;
  },
  animateSlider: function animateSlider(newEvent) {
    var swiper = this; // If the movement is NOT big enough and
    // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):
    //   Don't go any further (avoid insignificant scroll movement).

    if (newEvent.delta >= 6 && Utils.now() - swiper.mousewheel.lastScrollTime < 60) {
      // Return false as a default
      return true;
    } // If user is scrolling towards the end:
    //   If the slider hasn't hit the latest slide or
    //   if the slider is a loop and
    //   if the slider isn't moving right now:
    //     Go to next slide and
    //     emit a scroll event.
    // Else (the user is scrolling towards the beginning) and
    // if the slider hasn't hit the first slide or
    // if the slider is a loop and
    // if the slider isn't moving right now:
    //   Go to prev slide and
    //   emit a scroll event.


    if (newEvent.direction < 0) {
      if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {
        swiper.slideNext();
        swiper.emit('scroll', newEvent.raw);
      }
    } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {
      swiper.slidePrev();
      swiper.emit('scroll', newEvent.raw);
    } // If you got here is because an animation has been triggered so store the current time


    swiper.mousewheel.lastScrollTime = new ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.Date().getTime(); // Return false as a default

    return false;
  },
  releaseScroll: function releaseScroll(newEvent) {
    var swiper = this;
    var params = swiper.params.mousewheel;

    if (newEvent.direction < 0) {
      if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {
        // Return true to animate scroll on edges
        return true;
      }
    } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {
      // Return true to animate scroll on edges
      return true;
    }

    return false;
  },
  enable: function enable() {
    var swiper = this;
    var event = Mousewheel.event();

    if (swiper.params.cssMode) {
      swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle);
      return true;
    }

    if (!event) return false;
    if (swiper.mousewheel.enabled) return false;
    var target = swiper.$el;

    if (swiper.params.mousewheel.eventsTarged !== 'container') {
      target = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(swiper.params.mousewheel.eventsTarged);
    }

    target.on('mouseenter', swiper.mousewheel.handleMouseEnter);
    target.on('mouseleave', swiper.mousewheel.handleMouseLeave);
    target.on(event, swiper.mousewheel.handle);
    swiper.mousewheel.enabled = true;
    return true;
  },
  disable: function disable() {
    var swiper = this;
    var event = Mousewheel.event();

    if (swiper.params.cssMode) {
      swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle);
      return true;
    }

    if (!event) return false;
    if (!swiper.mousewheel.enabled) return false;
    var target = swiper.$el;

    if (swiper.params.mousewheel.eventsTarged !== 'container') {
      target = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(swiper.params.mousewheel.eventsTarged);
    }

    target.off(event, swiper.mousewheel.handle);
    swiper.mousewheel.enabled = false;
    return true;
  }
};
var Mousewheel$1 = {
  name: 'mousewheel',
  params: {
    mousewheel: {
      enabled: false,
      releaseOnEdges: false,
      invert: false,
      forceToAxis: false,
      sensitivity: 1,
      eventsTarged: 'container'
    }
  },
  create: function create() {
    var swiper = this;
    Utils.extend(swiper, {
      mousewheel: {
        enabled: false,
        enable: Mousewheel.enable.bind(swiper),
        disable: Mousewheel.disable.bind(swiper),
        handle: Mousewheel.handle.bind(swiper),
        handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper),
        handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper),
        animateSlider: Mousewheel.animateSlider.bind(swiper),
        releaseScroll: Mousewheel.releaseScroll.bind(swiper),
        lastScrollTime: Utils.now(),
        lastEventBeforeSnap: undefined,
        recentWheelEvents: []
      }
    });
  },
  on: {
    init: function init() {
      var swiper = this;

      if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {
        swiper.mousewheel.disable();
      }

      if (swiper.params.mousewheel.enabled) swiper.mousewheel.enable();
    },
    destroy: function destroy() {
      var swiper = this;

      if (swiper.params.cssMode) {
        swiper.mousewheel.enable();
      }

      if (swiper.mousewheel.enabled) swiper.mousewheel.disable();
    }
  }
};
var Navigation = {
  update: function update() {
    // Update Navigation Buttons
    var swiper = this;
    var params = swiper.params.navigation;
    if (swiper.params.loop) return;
    var _swiper$navigation = swiper.navigation,
        $nextEl = _swiper$navigation.$nextEl,
        $prevEl = _swiper$navigation.$prevEl;

    if ($prevEl && $prevEl.length > 0) {
      if (swiper.isBeginning) {
        $prevEl.addClass(params.disabledClass);
      } else {
        $prevEl.removeClass(params.disabledClass);
      }

      $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
    }

    if ($nextEl && $nextEl.length > 0) {
      if (swiper.isEnd) {
        $nextEl.addClass(params.disabledClass);
      } else {
        $nextEl.removeClass(params.disabledClass);
      }

      $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
    }
  },
  onPrevClick: function onPrevClick(e) {
    var swiper = this;
    e.preventDefault();
    if (swiper.isBeginning && !swiper.params.loop) return;
    swiper.slidePrev();
  },
  onNextClick: function onNextClick(e) {
    var swiper = this;
    e.preventDefault();
    if (swiper.isEnd && !swiper.params.loop) return;
    swiper.slideNext();
  },
  init: function init() {
    var swiper = this;
    var params = swiper.params.navigation;
    if (!(params.nextEl || params.prevEl)) return;
    var $nextEl;
    var $prevEl;

    if (params.nextEl) {
      $nextEl = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(params.nextEl);

      if (swiper.params.uniqueNavElements && typeof params.nextEl === 'string' && $nextEl.length > 1 && swiper.$el.find(params.nextEl).length === 1) {
        $nextEl = swiper.$el.find(params.nextEl);
      }
    }

    if (params.prevEl) {
      $prevEl = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(params.prevEl);

      if (swiper.params.uniqueNavElements && typeof params.prevEl === 'string' && $prevEl.length > 1 && swiper.$el.find(params.prevEl).length === 1) {
        $prevEl = swiper.$el.find(params.prevEl);
      }
    }

    if ($nextEl && $nextEl.length > 0) {
      $nextEl.on('click', swiper.navigation.onNextClick);
    }

    if ($prevEl && $prevEl.length > 0) {
      $prevEl.on('click', swiper.navigation.onPrevClick);
    }

    Utils.extend(swiper.navigation, {
      $nextEl: $nextEl,
      nextEl: $nextEl && $nextEl[0],
      $prevEl: $prevEl,
      prevEl: $prevEl && $prevEl[0]
    });
  },
  destroy: function destroy() {
    var swiper = this;
    var _swiper$navigation2 = swiper.navigation,
        $nextEl = _swiper$navigation2.$nextEl,
        $prevEl = _swiper$navigation2.$prevEl;

    if ($nextEl && $nextEl.length) {
      $nextEl.off('click', swiper.navigation.onNextClick);
      $nextEl.removeClass(swiper.params.navigation.disabledClass);
    }

    if ($prevEl && $prevEl.length) {
      $prevEl.off('click', swiper.navigation.onPrevClick);
      $prevEl.removeClass(swiper.params.navigation.disabledClass);
    }
  }
};
var Navigation$1 = {
  name: 'navigation',
  params: {
    navigation: {
      nextEl: null,
      prevEl: null,
      hideOnClick: false,
      disabledClass: 'swiper-button-disabled',
      hiddenClass: 'swiper-button-hidden',
      lockClass: 'swiper-button-lock'
    }
  },
  create: function create() {
    var swiper = this;
    Utils.extend(swiper, {
      navigation: {
        init: Navigation.init.bind(swiper),
        update: Navigation.update.bind(swiper),
        destroy: Navigation.destroy.bind(swiper),
        onNextClick: Navigation.onNextClick.bind(swiper),
        onPrevClick: Navigation.onPrevClick.bind(swiper)
      }
    });
  },
  on: {
    init: function init() {
      var swiper = this;
      swiper.navigation.init();
      swiper.navigation.update();
    },
    toEdge: function toEdge() {
      var swiper = this;
      swiper.navigation.update();
    },
    fromEdge: function fromEdge() {
      var swiper = this;
      swiper.navigation.update();
    },
    destroy: function destroy() {
      var swiper = this;
      swiper.navigation.destroy();
    },
    click: function click(e) {
      var swiper = this;
      var _swiper$navigation3 = swiper.navigation,
          $nextEl = _swiper$navigation3.$nextEl,
          $prevEl = _swiper$navigation3.$prevEl;

      if (swiper.params.navigation.hideOnClick && !(0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(e.target).is($prevEl) && !(0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(e.target).is($nextEl)) {
        var isHidden;

        if ($nextEl) {
          isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);
        } else if ($prevEl) {
          isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);
        }

        if (isHidden === true) {
          swiper.emit('navigationShow', swiper);
        } else {
          swiper.emit('navigationHide', swiper);
        }

        if ($nextEl) {
          $nextEl.toggleClass(swiper.params.navigation.hiddenClass);
        }

        if ($prevEl) {
          $prevEl.toggleClass(swiper.params.navigation.hiddenClass);
        }
      }
    }
  }
};
var Pagination = {
  update: function update() {
    // Render || Update Pagination bullets/items
    var swiper = this;
    var rtl = swiper.rtl;
    var params = swiper.params.pagination;
    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;
    var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
    var $el = swiper.pagination.$el; // Current/Total

    var current;
    var total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;

    if (swiper.params.loop) {
      current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);

      if (current > slidesLength - 1 - swiper.loopedSlides * 2) {
        current -= slidesLength - swiper.loopedSlides * 2;
      }

      if (current > total - 1) current -= total;
      if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;
    } else if (typeof swiper.snapIndex !== 'undefined') {
      current = swiper.snapIndex;
    } else {
      current = swiper.activeIndex || 0;
    } // Types


    if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {
      var bullets = swiper.pagination.bullets;
      var firstIndex;
      var lastIndex;
      var midIndex;

      if (params.dynamicBullets) {
        swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);
        $el.css(swiper.isHorizontal() ? 'width' : 'height', "".concat(swiper.pagination.bulletSize * (params.dynamicMainBullets + 4), "px"));

        if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {
          swiper.pagination.dynamicBulletIndex += current - swiper.previousIndex;

          if (swiper.pagination.dynamicBulletIndex > params.dynamicMainBullets - 1) {
            swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;
          } else if (swiper.pagination.dynamicBulletIndex < 0) {
            swiper.pagination.dynamicBulletIndex = 0;
          }
        }

        firstIndex = current - swiper.pagination.dynamicBulletIndex;
        lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);
        midIndex = (lastIndex + firstIndex) / 2;
      }

      bullets.removeClass("".concat(params.bulletActiveClass, " ").concat(params.bulletActiveClass, "-next ").concat(params.bulletActiveClass, "-next-next ").concat(params.bulletActiveClass, "-prev ").concat(params.bulletActiveClass, "-prev-prev ").concat(params.bulletActiveClass, "-main"));

      if ($el.length > 1) {
        bullets.each(function (index, bullet) {
          var $bullet = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(bullet);
          var bulletIndex = $bullet.index();

          if (bulletIndex === current) {
            $bullet.addClass(params.bulletActiveClass);
          }

          if (params.dynamicBullets) {
            if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {
              $bullet.addClass("".concat(params.bulletActiveClass, "-main"));
            }

            if (bulletIndex === firstIndex) {
              $bullet.prev().addClass("".concat(params.bulletActiveClass, "-prev")).prev().addClass("".concat(params.bulletActiveClass, "-prev-prev"));
            }

            if (bulletIndex === lastIndex) {
              $bullet.next().addClass("".concat(params.bulletActiveClass, "-next")).next().addClass("".concat(params.bulletActiveClass, "-next-next"));
            }
          }
        });
      } else {
        var $bullet = bullets.eq(current);
        var bulletIndex = $bullet.index();
        $bullet.addClass(params.bulletActiveClass);

        if (params.dynamicBullets) {
          var $firstDisplayedBullet = bullets.eq(firstIndex);
          var $lastDisplayedBullet = bullets.eq(lastIndex);

          for (var i = firstIndex; i <= lastIndex; i += 1) {
            bullets.eq(i).addClass("".concat(params.bulletActiveClass, "-main"));
          }

          if (swiper.params.loop) {
            if (bulletIndex >= bullets.length - params.dynamicMainBullets) {
              for (var _i10 = params.dynamicMainBullets; _i10 >= 0; _i10 -= 1) {
                bullets.eq(bullets.length - _i10).addClass("".concat(params.bulletActiveClass, "-main"));
              }

              bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass("".concat(params.bulletActiveClass, "-prev"));
            } else {
              $firstDisplayedBullet.prev().addClass("".concat(params.bulletActiveClass, "-prev")).prev().addClass("".concat(params.bulletActiveClass, "-prev-prev"));
              $lastDisplayedBullet.next().addClass("".concat(params.bulletActiveClass, "-next")).next().addClass("".concat(params.bulletActiveClass, "-next-next"));
            }
          } else {
            $firstDisplayedBullet.prev().addClass("".concat(params.bulletActiveClass, "-prev")).prev().addClass("".concat(params.bulletActiveClass, "-prev-prev"));
            $lastDisplayedBullet.next().addClass("".concat(params.bulletActiveClass, "-next")).next().addClass("".concat(params.bulletActiveClass, "-next-next"));
          }
        }
      }

      if (params.dynamicBullets) {
        var dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);
        var bulletsOffset = (swiper.pagination.bulletSize * dynamicBulletsLength - swiper.pagination.bulletSize) / 2 - midIndex * swiper.pagination.bulletSize;
        var offsetProp = rtl ? 'right' : 'left';
        bullets.css(swiper.isHorizontal() ? offsetProp : 'top', "".concat(bulletsOffset, "px"));
      }
    }

    if (params.type === 'fraction') {
      $el.find(".".concat(params.currentClass)).text(params.formatFractionCurrent(current + 1));
      $el.find(".".concat(params.totalClass)).text(params.formatFractionTotal(total));
    }

    if (params.type === 'progressbar') {
      var progressbarDirection;

      if (params.progressbarOpposite) {
        progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';
      } else {
        progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';
      }

      var scale = (current + 1) / total;
      var scaleX = 1;
      var scaleY = 1;

      if (progressbarDirection === 'horizontal') {
        scaleX = scale;
      } else {
        scaleY = scale;
      }

      $el.find(".".concat(params.progressbarFillClass)).transform("translate3d(0,0,0) scaleX(".concat(scaleX, ") scaleY(").concat(scaleY, ")")).transition(swiper.params.speed);
    }

    if (params.type === 'custom' && params.renderCustom) {
      $el.html(params.renderCustom(swiper, current + 1, total));
      swiper.emit('paginationRender', swiper, $el[0]);
    } else {
      swiper.emit('paginationUpdate', swiper, $el[0]);
    }

    $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
  },
  render: function render() {
    // Render Container
    var swiper = this;
    var params = swiper.params.pagination;
    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;
    var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
    var $el = swiper.pagination.$el;
    var paginationHTML = '';

    if (params.type === 'bullets') {
      var numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;

      for (var i = 0; i < numberOfBullets; i += 1) {
        if (params.renderBullet) {
          paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);
        } else {
          paginationHTML += "<".concat(params.bulletElement, " class=\"").concat(params.bulletClass, "\"></").concat(params.bulletElement, ">");
        }
      }

      $el.html(paginationHTML);
      swiper.pagination.bullets = $el.find(".".concat(params.bulletClass));
    }

    if (params.type === 'fraction') {
      if (params.renderFraction) {
        paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);
      } else {
        paginationHTML = "<span class=\"".concat(params.currentClass, "\"></span>") + ' / ' + "<span class=\"".concat(params.totalClass, "\"></span>");
      }

      $el.html(paginationHTML);
    }

    if (params.type === 'progressbar') {
      if (params.renderProgressbar) {
        paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);
      } else {
        paginationHTML = "<span class=\"".concat(params.progressbarFillClass, "\"></span>");
      }

      $el.html(paginationHTML);
    }

    if (params.type !== 'custom') {
      swiper.emit('paginationRender', swiper.pagination.$el[0]);
    }
  },
  init: function init() {
    var swiper = this;
    var params = swiper.params.pagination;
    if (!params.el) return;
    var $el = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(params.el);
    if ($el.length === 0) return;

    if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) {
      $el = swiper.$el.find(params.el);
    }

    if (params.type === 'bullets' && params.clickable) {
      $el.addClass(params.clickableClass);
    }

    $el.addClass(params.modifierClass + params.type);

    if (params.type === 'bullets' && params.dynamicBullets) {
      $el.addClass("".concat(params.modifierClass).concat(params.type, "-dynamic"));
      swiper.pagination.dynamicBulletIndex = 0;

      if (params.dynamicMainBullets < 1) {
        params.dynamicMainBullets = 1;
      }
    }

    if (params.type === 'progressbar' && params.progressbarOpposite) {
      $el.addClass(params.progressbarOppositeClass);
    }

    if (params.clickable) {
      $el.on('click', ".".concat(params.bulletClass), function onClick(e) {
        e.preventDefault();
        var index = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(this).index() * swiper.params.slidesPerGroup;
        if (swiper.params.loop) index += swiper.loopedSlides;
        swiper.slideTo(index);
      });
    }

    Utils.extend(swiper.pagination, {
      $el: $el,
      el: $el[0]
    });
  },
  destroy: function destroy() {
    var swiper = this;
    var params = swiper.params.pagination;
    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;
    var $el = swiper.pagination.$el;
    $el.removeClass(params.hiddenClass);
    $el.removeClass(params.modifierClass + params.type);
    if (swiper.pagination.bullets) swiper.pagination.bullets.removeClass(params.bulletActiveClass);

    if (params.clickable) {
      $el.off('click', ".".concat(params.bulletClass));
    }
  }
};
var Pagination$1 = {
  name: 'pagination',
  params: {
    pagination: {
      el: null,
      bulletElement: 'span',
      clickable: false,
      hideOnClick: false,
      renderBullet: null,
      renderProgressbar: null,
      renderFraction: null,
      renderCustom: null,
      progressbarOpposite: false,
      type: 'bullets',
      // 'bullets' or 'progressbar' or 'fraction' or 'custom'
      dynamicBullets: false,
      dynamicMainBullets: 1,
      formatFractionCurrent: function formatFractionCurrent(number) {
        return number;
      },
      formatFractionTotal: function formatFractionTotal(number) {
        return number;
      },
      bulletClass: 'swiper-pagination-bullet',
      bulletActiveClass: 'swiper-pagination-bullet-active',
      modifierClass: 'swiper-pagination-',
      // NEW
      currentClass: 'swiper-pagination-current',
      totalClass: 'swiper-pagination-total',
      hiddenClass: 'swiper-pagination-hidden',
      progressbarFillClass: 'swiper-pagination-progressbar-fill',
      progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',
      clickableClass: 'swiper-pagination-clickable',
      // NEW
      lockClass: 'swiper-pagination-lock'
    }
  },
  create: function create() {
    var swiper = this;
    Utils.extend(swiper, {
      pagination: {
        init: Pagination.init.bind(swiper),
        render: Pagination.render.bind(swiper),
        update: Pagination.update.bind(swiper),
        destroy: Pagination.destroy.bind(swiper),
        dynamicBulletIndex: 0
      }
    });
  },
  on: {
    init: function init() {
      var swiper = this;
      swiper.pagination.init();
      swiper.pagination.render();
      swiper.pagination.update();
    },
    activeIndexChange: function activeIndexChange() {
      var swiper = this;

      if (swiper.params.loop) {
        swiper.pagination.update();
      } else if (typeof swiper.snapIndex === 'undefined') {
        swiper.pagination.update();
      }
    },
    snapIndexChange: function snapIndexChange() {
      var swiper = this;

      if (!swiper.params.loop) {
        swiper.pagination.update();
      }
    },
    slidesLengthChange: function slidesLengthChange() {
      var swiper = this;

      if (swiper.params.loop) {
        swiper.pagination.render();
        swiper.pagination.update();
      }
    },
    snapGridLengthChange: function snapGridLengthChange() {
      var swiper = this;

      if (!swiper.params.loop) {
        swiper.pagination.render();
        swiper.pagination.update();
      }
    },
    destroy: function destroy() {
      var swiper = this;
      swiper.pagination.destroy();
    },
    click: function click(e) {
      var swiper = this;

      if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && swiper.pagination.$el.length > 0 && !(0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(e.target).hasClass(swiper.params.pagination.bulletClass)) {
        var isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);

        if (isHidden === true) {
          swiper.emit('paginationShow', swiper);
        } else {
          swiper.emit('paginationHide', swiper);
        }

        swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);
      }
    }
  }
};
var Scrollbar = {
  setTranslate: function setTranslate() {
    var swiper = this;
    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
    var scrollbar = swiper.scrollbar,
        rtl = swiper.rtlTranslate,
        progress = swiper.progress;
    var dragSize = scrollbar.dragSize,
        trackSize = scrollbar.trackSize,
        $dragEl = scrollbar.$dragEl,
        $el = scrollbar.$el;
    var params = swiper.params.scrollbar;
    var newSize = dragSize;
    var newPos = (trackSize - dragSize) * progress;

    if (rtl) {
      newPos = -newPos;

      if (newPos > 0) {
        newSize = dragSize - newPos;
        newPos = 0;
      } else if (-newPos + dragSize > trackSize) {
        newSize = trackSize + newPos;
      }
    } else if (newPos < 0) {
      newSize = dragSize + newPos;
      newPos = 0;
    } else if (newPos + dragSize > trackSize) {
      newSize = trackSize - newPos;
    }

    if (swiper.isHorizontal()) {
      $dragEl.transform("translate3d(".concat(newPos, "px, 0, 0)"));
      $dragEl[0].style.width = "".concat(newSize, "px");
    } else {
      $dragEl.transform("translate3d(0px, ".concat(newPos, "px, 0)"));
      $dragEl[0].style.height = "".concat(newSize, "px");
    }

    if (params.hide) {
      clearTimeout(swiper.scrollbar.timeout);
      $el[0].style.opacity = 1;
      swiper.scrollbar.timeout = setTimeout(function () {
        $el[0].style.opacity = 0;
        $el.transition(400);
      }, 1000);
    }
  },
  setTransition: function setTransition(duration) {
    var swiper = this;
    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
    swiper.scrollbar.$dragEl.transition(duration);
  },
  updateSize: function updateSize() {
    var swiper = this;
    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
    var scrollbar = swiper.scrollbar;
    var $dragEl = scrollbar.$dragEl,
        $el = scrollbar.$el;
    $dragEl[0].style.width = '';
    $dragEl[0].style.height = '';
    var trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;
    var divider = swiper.size / swiper.virtualSize;
    var moveDivider = divider * (trackSize / swiper.size);
    var dragSize;

    if (swiper.params.scrollbar.dragSize === 'auto') {
      dragSize = trackSize * divider;
    } else {
      dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);
    }

    if (swiper.isHorizontal()) {
      $dragEl[0].style.width = "".concat(dragSize, "px");
    } else {
      $dragEl[0].style.height = "".concat(dragSize, "px");
    }

    if (divider >= 1) {
      $el[0].style.display = 'none';
    } else {
      $el[0].style.display = '';
    }

    if (swiper.params.scrollbar.hide) {
      $el[0].style.opacity = 0;
    }

    Utils.extend(scrollbar, {
      trackSize: trackSize,
      divider: divider,
      moveDivider: moveDivider,
      dragSize: dragSize
    });
    scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);
  },
  getPointerPosition: function getPointerPosition(e) {
    var swiper = this;

    if (swiper.isHorizontal()) {
      return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientX : e.clientX;
    }

    return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientY : e.clientY;
  },
  setDragPosition: function setDragPosition(e) {
    var swiper = this;
    var scrollbar = swiper.scrollbar,
        rtl = swiper.rtlTranslate;
    var $el = scrollbar.$el,
        dragSize = scrollbar.dragSize,
        trackSize = scrollbar.trackSize,
        dragStartPos = scrollbar.dragStartPos;
    var positionRatio;
    positionRatio = (scrollbar.getPointerPosition(e) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);
    positionRatio = Math.max(Math.min(positionRatio, 1), 0);

    if (rtl) {
      positionRatio = 1 - positionRatio;
    }

    var position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;
    swiper.updateProgress(position);
    swiper.setTranslate(position);
    swiper.updateActiveIndex();
    swiper.updateSlidesClasses();
  },
  onDragStart: function onDragStart(e) {
    var swiper = this;
    var params = swiper.params.scrollbar;
    var scrollbar = swiper.scrollbar,
        $wrapperEl = swiper.$wrapperEl;
    var $el = scrollbar.$el,
        $dragEl = scrollbar.$dragEl;
    swiper.scrollbar.isTouched = true;
    swiper.scrollbar.dragStartPos = e.target === $dragEl[0] || e.target === $dragEl ? scrollbar.getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;
    e.preventDefault();
    e.stopPropagation();
    $wrapperEl.transition(100);
    $dragEl.transition(100);
    scrollbar.setDragPosition(e);
    clearTimeout(swiper.scrollbar.dragTimeout);
    $el.transition(0);

    if (params.hide) {
      $el.css('opacity', 1);
    }

    if (swiper.params.cssMode) {
      swiper.$wrapperEl.css('scroll-snap-type', 'none');
    }

    swiper.emit('scrollbarDragStart', e);
  },
  onDragMove: function onDragMove(e) {
    var swiper = this;
    var scrollbar = swiper.scrollbar,
        $wrapperEl = swiper.$wrapperEl;
    var $el = scrollbar.$el,
        $dragEl = scrollbar.$dragEl;
    if (!swiper.scrollbar.isTouched) return;
    if (e.preventDefault) e.preventDefault();else e.returnValue = false;
    scrollbar.setDragPosition(e);
    $wrapperEl.transition(0);
    $el.transition(0);
    $dragEl.transition(0);
    swiper.emit('scrollbarDragMove', e);
  },
  onDragEnd: function onDragEnd(e) {
    var swiper = this;
    var params = swiper.params.scrollbar;
    var scrollbar = swiper.scrollbar,
        $wrapperEl = swiper.$wrapperEl;
    var $el = scrollbar.$el;
    if (!swiper.scrollbar.isTouched) return;
    swiper.scrollbar.isTouched = false;

    if (swiper.params.cssMode) {
      swiper.$wrapperEl.css('scroll-snap-type', '');
      $wrapperEl.transition('');
    }

    if (params.hide) {
      clearTimeout(swiper.scrollbar.dragTimeout);
      swiper.scrollbar.dragTimeout = Utils.nextTick(function () {
        $el.css('opacity', 0);
        $el.transition(400);
      }, 1000);
    }

    swiper.emit('scrollbarDragEnd', e);

    if (params.snapOnRelease) {
      swiper.slideToClosest();
    }
  },
  enableDraggable: function enableDraggable() {
    var swiper = this;
    if (!swiper.params.scrollbar.el) return;
    var scrollbar = swiper.scrollbar,
        touchEventsTouch = swiper.touchEventsTouch,
        touchEventsDesktop = swiper.touchEventsDesktop,
        params = swiper.params;
    var $el = scrollbar.$el;
    var target = $el[0];
    var activeListener = Support.passiveListener && params.passiveListeners ? {
      passive: false,
      capture: false
    } : false;
    var passiveListener = Support.passiveListener && params.passiveListeners ? {
      passive: true,
      capture: false
    } : false;

    if (!Support.touch) {
      target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);
      ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);
      ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);
    } else {
      target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);
      target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);
      target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);
    }
  },
  disableDraggable: function disableDraggable() {
    var swiper = this;
    if (!swiper.params.scrollbar.el) return;
    var scrollbar = swiper.scrollbar,
        touchEventsTouch = swiper.touchEventsTouch,
        touchEventsDesktop = swiper.touchEventsDesktop,
        params = swiper.params;
    var $el = scrollbar.$el;
    var target = $el[0];
    var activeListener = Support.passiveListener && params.passiveListeners ? {
      passive: false,
      capture: false
    } : false;
    var passiveListener = Support.passiveListener && params.passiveListeners ? {
      passive: true,
      capture: false
    } : false;

    if (!Support.touch) {
      target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);
      ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);
      ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);
    } else {
      target.removeEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);
      target.removeEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);
      target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);
    }
  },
  init: function init() {
    var swiper = this;
    if (!swiper.params.scrollbar.el) return;
    var scrollbar = swiper.scrollbar,
        $swiperEl = swiper.$el;
    var params = swiper.params.scrollbar;
    var $el = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(params.el);

    if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {
      $el = $swiperEl.find(params.el);
    }

    var $dragEl = $el.find(".".concat(swiper.params.scrollbar.dragClass));

    if ($dragEl.length === 0) {
      $dragEl = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)("<div class=\"".concat(swiper.params.scrollbar.dragClass, "\"></div>"));
      $el.append($dragEl);
    }

    Utils.extend(scrollbar, {
      $el: $el,
      el: $el[0],
      $dragEl: $dragEl,
      dragEl: $dragEl[0]
    });

    if (params.draggable) {
      scrollbar.enableDraggable();
    }
  },
  destroy: function destroy() {
    var swiper = this;
    swiper.scrollbar.disableDraggable();
  }
};
var Scrollbar$1 = {
  name: 'scrollbar',
  params: {
    scrollbar: {
      el: null,
      dragSize: 'auto',
      hide: false,
      draggable: false,
      snapOnRelease: true,
      lockClass: 'swiper-scrollbar-lock',
      dragClass: 'swiper-scrollbar-drag'
    }
  },
  create: function create() {
    var swiper = this;
    Utils.extend(swiper, {
      scrollbar: {
        init: Scrollbar.init.bind(swiper),
        destroy: Scrollbar.destroy.bind(swiper),
        updateSize: Scrollbar.updateSize.bind(swiper),
        setTranslate: Scrollbar.setTranslate.bind(swiper),
        setTransition: Scrollbar.setTransition.bind(swiper),
        enableDraggable: Scrollbar.enableDraggable.bind(swiper),
        disableDraggable: Scrollbar.disableDraggable.bind(swiper),
        setDragPosition: Scrollbar.setDragPosition.bind(swiper),
        getPointerPosition: Scrollbar.getPointerPosition.bind(swiper),
        onDragStart: Scrollbar.onDragStart.bind(swiper),
        onDragMove: Scrollbar.onDragMove.bind(swiper),
        onDragEnd: Scrollbar.onDragEnd.bind(swiper),
        isTouched: false,
        timeout: null,
        dragTimeout: null
      }
    });
  },
  on: {
    init: function init() {
      var swiper = this;
      swiper.scrollbar.init();
      swiper.scrollbar.updateSize();
      swiper.scrollbar.setTranslate();
    },
    update: function update() {
      var swiper = this;
      swiper.scrollbar.updateSize();
    },
    resize: function resize() {
      var swiper = this;
      swiper.scrollbar.updateSize();
    },
    observerUpdate: function observerUpdate() {
      var swiper = this;
      swiper.scrollbar.updateSize();
    },
    setTranslate: function setTranslate() {
      var swiper = this;
      swiper.scrollbar.setTranslate();
    },
    setTransition: function setTransition(duration) {
      var swiper = this;
      swiper.scrollbar.setTransition(duration);
    },
    destroy: function destroy() {
      var swiper = this;
      swiper.scrollbar.destroy();
    }
  }
};
var Parallax = {
  setTransform: function setTransform(el, progress) {
    var swiper = this;
    var rtl = swiper.rtl;
    var $el = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(el);
    var rtlFactor = rtl ? -1 : 1;
    var p = $el.attr('data-swiper-parallax') || '0';
    var x = $el.attr('data-swiper-parallax-x');
    var y = $el.attr('data-swiper-parallax-y');
    var scale = $el.attr('data-swiper-parallax-scale');
    var opacity = $el.attr('data-swiper-parallax-opacity');

    if (x || y) {
      x = x || '0';
      y = y || '0';
    } else if (swiper.isHorizontal()) {
      x = p;
      y = '0';
    } else {
      y = p;
      x = '0';
    }

    if (x.indexOf('%') >= 0) {
      x = "".concat(parseInt(x, 10) * progress * rtlFactor, "%");
    } else {
      x = "".concat(x * progress * rtlFactor, "px");
    }

    if (y.indexOf('%') >= 0) {
      y = "".concat(parseInt(y, 10) * progress, "%");
    } else {
      y = "".concat(y * progress, "px");
    }

    if (typeof opacity !== 'undefined' && opacity !== null) {
      var currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));
      $el[0].style.opacity = currentOpacity;
    }

    if (typeof scale === 'undefined' || scale === null) {
      $el.transform("translate3d(".concat(x, ", ").concat(y, ", 0px)"));
    } else {
      var currentScale = scale - (scale - 1) * (1 - Math.abs(progress));
      $el.transform("translate3d(".concat(x, ", ").concat(y, ", 0px) scale(").concat(currentScale, ")"));
    }
  },
  setTranslate: function setTranslate() {
    var swiper = this;
    var $el = swiper.$el,
        slides = swiper.slides,
        progress = swiper.progress,
        snapGrid = swiper.snapGrid;
    $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (index, el) {
      swiper.parallax.setTransform(el, progress);
    });
    slides.each(function (slideIndex, slideEl) {
      var slideProgress = slideEl.progress;

      if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {
        slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);
      }

      slideProgress = Math.min(Math.max(slideProgress, -1), 1);
      (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (index, el) {
        swiper.parallax.setTransform(el, slideProgress);
      });
    });
  },
  setTransition: function setTransition() {
    var duration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.params.speed;
    var swiper = this;
    var $el = swiper.$el;
    $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (index, parallaxEl) {
      var $parallaxEl = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(parallaxEl);
      var parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;
      if (duration === 0) parallaxDuration = 0;
      $parallaxEl.transition(parallaxDuration);
    });
  }
};
var Parallax$1 = {
  name: 'parallax',
  params: {
    parallax: {
      enabled: false
    }
  },
  create: function create() {
    var swiper = this;
    Utils.extend(swiper, {
      parallax: {
        setTransform: Parallax.setTransform.bind(swiper),
        setTranslate: Parallax.setTranslate.bind(swiper),
        setTransition: Parallax.setTransition.bind(swiper)
      }
    });
  },
  on: {
    beforeInit: function beforeInit() {
      var swiper = this;
      if (!swiper.params.parallax.enabled) return;
      swiper.params.watchSlidesProgress = true;
      swiper.originalParams.watchSlidesProgress = true;
    },
    init: function init() {
      var swiper = this;
      if (!swiper.params.parallax.enabled) return;
      swiper.parallax.setTranslate();
    },
    setTranslate: function setTranslate() {
      var swiper = this;
      if (!swiper.params.parallax.enabled) return;
      swiper.parallax.setTranslate();
    },
    setTransition: function setTransition(duration) {
      var swiper = this;
      if (!swiper.params.parallax.enabled) return;
      swiper.parallax.setTransition(duration);
    }
  }
};
var Zoom = {
  // Calc Scale From Multi-touches
  getDistanceBetweenTouches: function getDistanceBetweenTouches(e) {
    if (e.targetTouches.length < 2) return 1;
    var x1 = e.targetTouches[0].pageX;
    var y1 = e.targetTouches[0].pageY;
    var x2 = e.targetTouches[1].pageX;
    var y2 = e.targetTouches[1].pageY;
    var distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
    return distance;
  },
  // Events
  onGestureStart: function onGestureStart(e) {
    var swiper = this;
    var params = swiper.params.zoom;
    var zoom = swiper.zoom;
    var gesture = zoom.gesture;
    zoom.fakeGestureTouched = false;
    zoom.fakeGestureMoved = false;

    if (!Support.gestures) {
      if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) {
        return;
      }

      zoom.fakeGestureTouched = true;
      gesture.scaleStart = Zoom.getDistanceBetweenTouches(e);
    }

    if (!gesture.$slideEl || !gesture.$slideEl.length) {
      gesture.$slideEl = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(e.target).closest(".".concat(swiper.params.slideClass));
      if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);
      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');
      gesture.$imageWrapEl = gesture.$imageEl.parent(".".concat(params.containerClass));
      gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;

      if (gesture.$imageWrapEl.length === 0) {
        gesture.$imageEl = undefined;
        return;
      }
    }

    if (gesture.$imageEl) {
      gesture.$imageEl.transition(0);
    }

    swiper.zoom.isScaling = true;
  },
  onGestureChange: function onGestureChange(e) {
    var swiper = this;
    var params = swiper.params.zoom;
    var zoom = swiper.zoom;
    var gesture = zoom.gesture;

    if (!Support.gestures) {
      if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) {
        return;
      }

      zoom.fakeGestureMoved = true;
      gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);
    }

    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;

    if (Support.gestures) {
      zoom.scale = e.scale * zoom.currentScale;
    } else {
      zoom.scale = gesture.scaleMove / gesture.scaleStart * zoom.currentScale;
    }

    if (zoom.scale > gesture.maxRatio) {
      zoom.scale = gesture.maxRatio - 1 + Math.pow(zoom.scale - gesture.maxRatio + 1, 0.5);
    }

    if (zoom.scale < params.minRatio) {
      zoom.scale = params.minRatio + 1 - Math.pow(params.minRatio - zoom.scale + 1, 0.5);
    }

    gesture.$imageEl.transform("translate3d(0,0,0) scale(".concat(zoom.scale, ")"));
  },
  onGestureEnd: function onGestureEnd(e) {
    var swiper = this;
    var params = swiper.params.zoom;
    var zoom = swiper.zoom;
    var gesture = zoom.gesture;

    if (!Support.gestures) {
      if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {
        return;
      }

      if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2 && !Device.android) {
        return;
      }

      zoom.fakeGestureTouched = false;
      zoom.fakeGestureMoved = false;
    }

    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
    zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);
    gesture.$imageEl.transition(swiper.params.speed).transform("translate3d(0,0,0) scale(".concat(zoom.scale, ")"));
    zoom.currentScale = zoom.scale;
    zoom.isScaling = false;
    if (zoom.scale === 1) gesture.$slideEl = undefined;
  },
  onTouchStart: function onTouchStart(e) {
    var swiper = this;
    var zoom = swiper.zoom;
    var gesture = zoom.gesture,
        image = zoom.image;
    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
    if (image.isTouched) return;
    if (Device.android && e.cancelable) e.preventDefault();
    image.isTouched = true;
    image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
    image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
  },
  onTouchMove: function onTouchMove(e) {
    var swiper = this;
    var zoom = swiper.zoom;
    var gesture = zoom.gesture,
        image = zoom.image,
        velocity = zoom.velocity;
    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
    swiper.allowClick = false;
    if (!image.isTouched || !gesture.$slideEl) return;

    if (!image.isMoved) {
      image.width = gesture.$imageEl[0].offsetWidth;
      image.height = gesture.$imageEl[0].offsetHeight;
      image.startX = Utils.getTranslate(gesture.$imageWrapEl[0], 'x') || 0;
      image.startY = Utils.getTranslate(gesture.$imageWrapEl[0], 'y') || 0;
      gesture.slideWidth = gesture.$slideEl[0].offsetWidth;
      gesture.slideHeight = gesture.$slideEl[0].offsetHeight;
      gesture.$imageWrapEl.transition(0);

      if (swiper.rtl) {
        image.startX = -image.startX;
        image.startY = -image.startY;
      }
    } // Define if we need image drag


    var scaledWidth = image.width * zoom.scale;
    var scaledHeight = image.height * zoom.scale;
    if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;
    image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);
    image.maxX = -image.minX;
    image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);
    image.maxY = -image.minY;
    image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;
    image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;

    if (!image.isMoved && !zoom.isScaling) {
      if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {
        image.isTouched = false;
        return;
      }

      if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {
        image.isTouched = false;
        return;
      }
    }

    if (e.cancelable) {
      e.preventDefault();
    }

    e.stopPropagation();
    image.isMoved = true;
    image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX;
    image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY;

    if (image.currentX < image.minX) {
      image.currentX = image.minX + 1 - Math.pow(image.minX - image.currentX + 1, 0.8);
    }

    if (image.currentX > image.maxX) {
      image.currentX = image.maxX - 1 + Math.pow(image.currentX - image.maxX + 1, 0.8);
    }

    if (image.currentY < image.minY) {
      image.currentY = image.minY + 1 - Math.pow(image.minY - image.currentY + 1, 0.8);
    }

    if (image.currentY > image.maxY) {
      image.currentY = image.maxY - 1 + Math.pow(image.currentY - image.maxY + 1, 0.8);
    } // Velocity


    if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;
    if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;
    if (!velocity.prevTime) velocity.prevTime = Date.now();
    velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;
    velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;
    if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;
    if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;
    velocity.prevPositionX = image.touchesCurrent.x;
    velocity.prevPositionY = image.touchesCurrent.y;
    velocity.prevTime = Date.now();
    gesture.$imageWrapEl.transform("translate3d(".concat(image.currentX, "px, ").concat(image.currentY, "px,0)"));
  },
  onTouchEnd: function onTouchEnd() {
    var swiper = this;
    var zoom = swiper.zoom;
    var gesture = zoom.gesture,
        image = zoom.image,
        velocity = zoom.velocity;
    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;

    if (!image.isTouched || !image.isMoved) {
      image.isTouched = false;
      image.isMoved = false;
      return;
    }

    image.isTouched = false;
    image.isMoved = false;
    var momentumDurationX = 300;
    var momentumDurationY = 300;
    var momentumDistanceX = velocity.x * momentumDurationX;
    var newPositionX = image.currentX + momentumDistanceX;
    var momentumDistanceY = velocity.y * momentumDurationY;
    var newPositionY = image.currentY + momentumDistanceY; // Fix duration

    if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);
    if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);
    var momentumDuration = Math.max(momentumDurationX, momentumDurationY);
    image.currentX = newPositionX;
    image.currentY = newPositionY; // Define if we need image drag

    var scaledWidth = image.width * zoom.scale;
    var scaledHeight = image.height * zoom.scale;
    image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);
    image.maxX = -image.minX;
    image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);
    image.maxY = -image.minY;
    image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);
    image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);
    gesture.$imageWrapEl.transition(momentumDuration).transform("translate3d(".concat(image.currentX, "px, ").concat(image.currentY, "px,0)"));
  },
  onTransitionEnd: function onTransitionEnd() {
    var swiper = this;
    var zoom = swiper.zoom;
    var gesture = zoom.gesture;

    if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {
      if (gesture.$imageEl) {
        gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');
      }

      if (gesture.$imageWrapEl) {
        gesture.$imageWrapEl.transform('translate3d(0,0,0)');
      }

      zoom.scale = 1;
      zoom.currentScale = 1;
      gesture.$slideEl = undefined;
      gesture.$imageEl = undefined;
      gesture.$imageWrapEl = undefined;
    }
  },
  // Toggle Zoom
  toggle: function toggle(e) {
    var swiper = this;
    var zoom = swiper.zoom;

    if (zoom.scale && zoom.scale !== 1) {
      // Zoom Out
      zoom.out();
    } else {
      // Zoom In
      zoom.in(e);
    }
  },
  in: function _in(e) {
    var swiper = this;
    var zoom = swiper.zoom;
    var params = swiper.params.zoom;
    var gesture = zoom.gesture,
        image = zoom.image;

    if (!gesture.$slideEl) {
      if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {
        gesture.$slideEl = swiper.$wrapperEl.children(".".concat(swiper.params.slideActiveClass));
      } else {
        gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);
      }

      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');
      gesture.$imageWrapEl = gesture.$imageEl.parent(".".concat(params.containerClass));
    }

    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
    gesture.$slideEl.addClass("".concat(params.zoomedSlideClass));
    var touchX;
    var touchY;
    var offsetX;
    var offsetY;
    var diffX;
    var diffY;
    var translateX;
    var translateY;
    var imageWidth;
    var imageHeight;
    var scaledWidth;
    var scaledHeight;
    var translateMinX;
    var translateMinY;
    var translateMaxX;
    var translateMaxY;
    var slideWidth;
    var slideHeight;

    if (typeof image.touchesStart.x === 'undefined' && e) {
      touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;
      touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;
    } else {
      touchX = image.touchesStart.x;
      touchY = image.touchesStart.y;
    }

    zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
    zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;

    if (e) {
      slideWidth = gesture.$slideEl[0].offsetWidth;
      slideHeight = gesture.$slideEl[0].offsetHeight;
      offsetX = gesture.$slideEl.offset().left;
      offsetY = gesture.$slideEl.offset().top;
      diffX = offsetX + slideWidth / 2 - touchX;
      diffY = offsetY + slideHeight / 2 - touchY;
      imageWidth = gesture.$imageEl[0].offsetWidth;
      imageHeight = gesture.$imageEl[0].offsetHeight;
      scaledWidth = imageWidth * zoom.scale;
      scaledHeight = imageHeight * zoom.scale;
      translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);
      translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);
      translateMaxX = -translateMinX;
      translateMaxY = -translateMinY;
      translateX = diffX * zoom.scale;
      translateY = diffY * zoom.scale;

      if (translateX < translateMinX) {
        translateX = translateMinX;
      }

      if (translateX > translateMaxX) {
        translateX = translateMaxX;
      }

      if (translateY < translateMinY) {
        translateY = translateMinY;
      }

      if (translateY > translateMaxY) {
        translateY = translateMaxY;
      }
    } else {
      translateX = 0;
      translateY = 0;
    }

    gesture.$imageWrapEl.transition(300).transform("translate3d(".concat(translateX, "px, ").concat(translateY, "px,0)"));
    gesture.$imageEl.transition(300).transform("translate3d(0,0,0) scale(".concat(zoom.scale, ")"));
  },
  out: function out() {
    var swiper = this;
    var zoom = swiper.zoom;
    var params = swiper.params.zoom;
    var gesture = zoom.gesture;

    if (!gesture.$slideEl) {
      if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {
        gesture.$slideEl = swiper.$wrapperEl.children(".".concat(swiper.params.slideActiveClass));
      } else {
        gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);
      }

      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');
      gesture.$imageWrapEl = gesture.$imageEl.parent(".".concat(params.containerClass));
    }

    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
    zoom.scale = 1;
    zoom.currentScale = 1;
    gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');
    gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');
    gesture.$slideEl.removeClass("".concat(params.zoomedSlideClass));
    gesture.$slideEl = undefined;
  },
  // Attach/Detach Events
  enable: function enable() {
    var swiper = this;
    var zoom = swiper.zoom;
    if (zoom.enabled) return;
    zoom.enabled = true;
    var passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? {
      passive: true,
      capture: false
    } : false;
    var activeListenerWithCapture = Support.passiveListener ? {
      passive: false,
      capture: true
    } : true;
    var slideSelector = ".".concat(swiper.params.slideClass); // Scale image

    if (Support.gestures) {
      swiper.$wrapperEl.on('gesturestart', slideSelector, zoom.onGestureStart, passiveListener);
      swiper.$wrapperEl.on('gesturechange', slideSelector, zoom.onGestureChange, passiveListener);
      swiper.$wrapperEl.on('gestureend', slideSelector, zoom.onGestureEnd, passiveListener);
    } else if (swiper.touchEvents.start === 'touchstart') {
      swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);
      swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);
      swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);

      if (swiper.touchEvents.cancel) {
        swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);
      }
    } // Move image


    swiper.$wrapperEl.on(swiper.touchEvents.move, ".".concat(swiper.params.zoom.containerClass), zoom.onTouchMove, activeListenerWithCapture);
  },
  disable: function disable() {
    var swiper = this;
    var zoom = swiper.zoom;
    if (!zoom.enabled) return;
    swiper.zoom.enabled = false;
    var passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? {
      passive: true,
      capture: false
    } : false;
    var activeListenerWithCapture = Support.passiveListener ? {
      passive: false,
      capture: true
    } : true;
    var slideSelector = ".".concat(swiper.params.slideClass); // Scale image

    if (Support.gestures) {
      swiper.$wrapperEl.off('gesturestart', slideSelector, zoom.onGestureStart, passiveListener);
      swiper.$wrapperEl.off('gesturechange', slideSelector, zoom.onGestureChange, passiveListener);
      swiper.$wrapperEl.off('gestureend', slideSelector, zoom.onGestureEnd, passiveListener);
    } else if (swiper.touchEvents.start === 'touchstart') {
      swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);
      swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);
      swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);

      if (swiper.touchEvents.cancel) {
        swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);
      }
    } // Move image


    swiper.$wrapperEl.off(swiper.touchEvents.move, ".".concat(swiper.params.zoom.containerClass), zoom.onTouchMove, activeListenerWithCapture);
  }
};
var Zoom$1 = {
  name: 'zoom',
  params: {
    zoom: {
      enabled: false,
      maxRatio: 3,
      minRatio: 1,
      toggle: true,
      containerClass: 'swiper-zoom-container',
      zoomedSlideClass: 'swiper-slide-zoomed'
    }
  },
  create: function create() {
    var swiper = this;
    var zoom = {
      enabled: false,
      scale: 1,
      currentScale: 1,
      isScaling: false,
      gesture: {
        $slideEl: undefined,
        slideWidth: undefined,
        slideHeight: undefined,
        $imageEl: undefined,
        $imageWrapEl: undefined,
        maxRatio: 3
      },
      image: {
        isTouched: undefined,
        isMoved: undefined,
        currentX: undefined,
        currentY: undefined,
        minX: undefined,
        minY: undefined,
        maxX: undefined,
        maxY: undefined,
        width: undefined,
        height: undefined,
        startX: undefined,
        startY: undefined,
        touchesStart: {},
        touchesCurrent: {}
      },
      velocity: {
        x: undefined,
        y: undefined,
        prevPositionX: undefined,
        prevPositionY: undefined,
        prevTime: undefined
      }
    };
    'onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out'.split(' ').forEach(function (methodName) {
      zoom[methodName] = Zoom[methodName].bind(swiper);
    });
    Utils.extend(swiper, {
      zoom: zoom
    });
    var scale = 1;
    Object.defineProperty(swiper.zoom, 'scale', {
      get: function get() {
        return scale;
      },
      set: function set(value) {
        if (scale !== value) {
          var imageEl = swiper.zoom.gesture.$imageEl ? swiper.zoom.gesture.$imageEl[0] : undefined;
          var slideEl = swiper.zoom.gesture.$slideEl ? swiper.zoom.gesture.$slideEl[0] : undefined;
          swiper.emit('zoomChange', value, imageEl, slideEl);
        }

        scale = value;
      }
    });
  },
  on: {
    init: function init() {
      var swiper = this;

      if (swiper.params.zoom.enabled) {
        swiper.zoom.enable();
      }
    },
    destroy: function destroy() {
      var swiper = this;
      swiper.zoom.disable();
    },
    touchStart: function touchStart(e) {
      var swiper = this;
      if (!swiper.zoom.enabled) return;
      swiper.zoom.onTouchStart(e);
    },
    touchEnd: function touchEnd(e) {
      var swiper = this;
      if (!swiper.zoom.enabled) return;
      swiper.zoom.onTouchEnd(e);
    },
    doubleTap: function doubleTap(e) {
      var swiper = this;

      if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {
        swiper.zoom.toggle(e);
      }
    },
    transitionEnd: function transitionEnd() {
      var swiper = this;

      if (swiper.zoom.enabled && swiper.params.zoom.enabled) {
        swiper.zoom.onTransitionEnd();
      }
    },
    slideChange: function slideChange() {
      var swiper = this;

      if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {
        swiper.zoom.onTransitionEnd();
      }
    }
  }
};
var Lazy = {
  loadInSlide: function loadInSlide(index) {
    var loadInDuplicate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
    var swiper = this;
    var params = swiper.params.lazy;
    if (typeof index === 'undefined') return;
    if (swiper.slides.length === 0) return;
    var isVirtual = swiper.virtual && swiper.params.virtual.enabled;
    var $slideEl = isVirtual ? swiper.$wrapperEl.children(".".concat(swiper.params.slideClass, "[data-swiper-slide-index=\"").concat(index, "\"]")) : swiper.slides.eq(index);
    var $images = $slideEl.find(".".concat(params.elementClass, ":not(.").concat(params.loadedClass, "):not(.").concat(params.loadingClass, ")"));

    if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {
      $images = $images.add($slideEl[0]);
    }

    if ($images.length === 0) return;
    $images.each(function (imageIndex, imageEl) {
      var $imageEl = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(imageEl);
      $imageEl.addClass(params.loadingClass);
      var background = $imageEl.attr('data-background');
      var src = $imageEl.attr('data-src');
      var srcset = $imageEl.attr('data-srcset');
      var sizes = $imageEl.attr('data-sizes');
      var $pictureEl = $imageEl.parent('picture');
      swiper.loadImage($imageEl[0], src || background, srcset, sizes, false, function () {
        if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper && !swiper.params || swiper.destroyed) return;

        if (background) {
          $imageEl.css('background-image', "url(\"".concat(background, "\")"));
          $imageEl.removeAttr('data-background');
        } else {
          if (srcset) {
            $imageEl.attr('srcset', srcset);
            $imageEl.removeAttr('data-srcset');
          }

          if (sizes) {
            $imageEl.attr('sizes', sizes);
            $imageEl.removeAttr('data-sizes');
          }

          if ($pictureEl.length) {
            $pictureEl.children('source').each(function (sourceIndex, sourceEl) {
              var $source = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(sourceEl);

              if ($source.attr('data-srcset')) {
                $source.attr('srcset', $source.attr('data-srcset'));
                $source.removeAttr('data-srcset');
              }
            });
          }

          if (src) {
            $imageEl.attr('src', src);
            $imageEl.removeAttr('data-src');
          }
        }

        $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);
        $slideEl.find(".".concat(params.preloaderClass)).remove();

        if (swiper.params.loop && loadInDuplicate) {
          var slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');

          if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {
            var originalSlide = swiper.$wrapperEl.children("[data-swiper-slide-index=\"".concat(slideOriginalIndex, "\"]:not(.").concat(swiper.params.slideDuplicateClass, ")"));
            swiper.lazy.loadInSlide(originalSlide.index(), false);
          } else {
            var duplicatedSlide = swiper.$wrapperEl.children(".".concat(swiper.params.slideDuplicateClass, "[data-swiper-slide-index=\"").concat(slideOriginalIndex, "\"]"));
            swiper.lazy.loadInSlide(duplicatedSlide.index(), false);
          }
        }

        swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);

        if (swiper.params.autoHeight) {
          swiper.updateAutoHeight();
        }
      });
      swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);
    });
  },
  load: function load() {
    var swiper = this;
    var $wrapperEl = swiper.$wrapperEl,
        swiperParams = swiper.params,
        slides = swiper.slides,
        activeIndex = swiper.activeIndex;
    var isVirtual = swiper.virtual && swiperParams.virtual.enabled;
    var params = swiperParams.lazy;
    var slidesPerView = swiperParams.slidesPerView;

    if (slidesPerView === 'auto') {
      slidesPerView = 0;
    }

    function slideExist(index) {
      if (isVirtual) {
        if ($wrapperEl.children(".".concat(swiperParams.slideClass, "[data-swiper-slide-index=\"").concat(index, "\"]")).length) {
          return true;
        }
      } else if (slides[index]) return true;

      return false;
    }

    function slideIndex(slideEl) {
      if (isVirtual) {
        return (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(slideEl).attr('data-swiper-slide-index');
      }

      return (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(slideEl).index();
    }

    if (!swiper.lazy.initialImageLoaded) swiper.lazy.initialImageLoaded = true;

    if (swiper.params.watchSlidesVisibility) {
      $wrapperEl.children(".".concat(swiperParams.slideVisibleClass)).each(function (elIndex, slideEl) {
        var index = isVirtual ? (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(slideEl).attr('data-swiper-slide-index') : (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(slideEl).index();
        swiper.lazy.loadInSlide(index);
      });
    } else if (slidesPerView > 1) {
      for (var i = activeIndex; i < activeIndex + slidesPerView; i += 1) {
        if (slideExist(i)) swiper.lazy.loadInSlide(i);
      }
    } else {
      swiper.lazy.loadInSlide(activeIndex);
    }

    if (params.loadPrevNext) {
      if (slidesPerView > 1 || params.loadPrevNextAmount && params.loadPrevNextAmount > 1) {
        var amount = params.loadPrevNextAmount;
        var spv = slidesPerView;
        var maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);
        var minIndex = Math.max(activeIndex - Math.max(spv, amount), 0); // Next Slides

        for (var _i11 = activeIndex + slidesPerView; _i11 < maxIndex; _i11 += 1) {
          if (slideExist(_i11)) swiper.lazy.loadInSlide(_i11);
        } // Prev Slides


        for (var _i12 = minIndex; _i12 < activeIndex; _i12 += 1) {
          if (slideExist(_i12)) swiper.lazy.loadInSlide(_i12);
        }
      } else {
        var nextSlide = $wrapperEl.children(".".concat(swiperParams.slideNextClass));
        if (nextSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(nextSlide));
        var prevSlide = $wrapperEl.children(".".concat(swiperParams.slidePrevClass));
        if (prevSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(prevSlide));
      }
    }
  }
};
var Lazy$1 = {
  name: 'lazy',
  params: {
    lazy: {
      enabled: false,
      loadPrevNext: false,
      loadPrevNextAmount: 1,
      loadOnTransitionStart: false,
      elementClass: 'swiper-lazy',
      loadingClass: 'swiper-lazy-loading',
      loadedClass: 'swiper-lazy-loaded',
      preloaderClass: 'swiper-lazy-preloader'
    }
  },
  create: function create() {
    var swiper = this;
    Utils.extend(swiper, {
      lazy: {
        initialImageLoaded: false,
        load: Lazy.load.bind(swiper),
        loadInSlide: Lazy.loadInSlide.bind(swiper)
      }
    });
  },
  on: {
    beforeInit: function beforeInit() {
      var swiper = this;

      if (swiper.params.lazy.enabled && swiper.params.preloadImages) {
        swiper.params.preloadImages = false;
      }
    },
    init: function init() {
      var swiper = this;

      if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {
        swiper.lazy.load();
      }
    },
    scroll: function scroll() {
      var swiper = this;

      if (swiper.params.freeMode && !swiper.params.freeModeSticky) {
        swiper.lazy.load();
      }
    },
    resize: function resize() {
      var swiper = this;

      if (swiper.params.lazy.enabled) {
        swiper.lazy.load();
      }
    },
    scrollbarDragMove: function scrollbarDragMove() {
      var swiper = this;

      if (swiper.params.lazy.enabled) {
        swiper.lazy.load();
      }
    },
    transitionStart: function transitionStart() {
      var swiper = this;

      if (swiper.params.lazy.enabled) {
        if (swiper.params.lazy.loadOnTransitionStart || !swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded) {
          swiper.lazy.load();
        }
      }
    },
    transitionEnd: function transitionEnd() {
      var swiper = this;

      if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {
        swiper.lazy.load();
      }
    },
    slideChange: function slideChange() {
      var swiper = this;

      if (swiper.params.lazy.enabled && swiper.params.cssMode) {
        swiper.lazy.load();
      }
    }
  }
};
/* eslint no-bitwise: ["error", { "allow": [">>"] }] */

var Controller = {
  LinearSpline: function LinearSpline(x, y) {
    var binarySearch = function search() {
      var maxIndex;
      var minIndex;
      var guess;
      return function (array, val) {
        minIndex = -1;
        maxIndex = array.length;

        while (maxIndex - minIndex > 1) {
          guess = maxIndex + minIndex >> 1;

          if (array[guess] <= val) {
            minIndex = guess;
          } else {
            maxIndex = guess;
          }
        }

        return maxIndex;
      };
    }();

    this.x = x;
    this.y = y;
    this.lastIndex = x.length - 1; // Given an x value (x2), return the expected y2 value:
    // (x1,y1) is the known point before given value,
    // (x3,y3) is the known point after given value.

    var i1;
    var i3;

    this.interpolate = function interpolate(x2) {
      if (!x2) return 0; // Get the indexes of x1 and x3 (the array indexes before and after given x2):

      i3 = binarySearch(this.x, x2);
      i1 = i3 - 1; // We have our indexes i1 & i3, so we can calculate already:
      // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1

      return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];
    };

    return this;
  },
  // xxx: for now i will just save one spline function to to
  getInterpolateFunction: function getInterpolateFunction(c) {
    var swiper = this;

    if (!swiper.controller.spline) {
      swiper.controller.spline = swiper.params.loop ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid) : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);
    }
  },
  setTranslate: function setTranslate(_setTranslate, byController) {
    var swiper = this;
    var controlled = swiper.controller.control;
    var multiplier;
    var controlledTranslate;

    function setControlledTranslate(c) {
      // this will create an Interpolate function based on the snapGrids
      // x is the Grid of the scrolled scroller and y will be the controlled scroller
      // it makes sense to create this only once and recall it for the interpolation
      // the function does a lot of value caching for performance
      var translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;

      if (swiper.params.controller.by === 'slide') {
        swiper.controller.getInterpolateFunction(c); // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid
        // but it did not work out

        controlledTranslate = -swiper.controller.spline.interpolate(-translate);
      }

      if (!controlledTranslate || swiper.params.controller.by === 'container') {
        multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());
        controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();
      }

      if (swiper.params.controller.inverse) {
        controlledTranslate = c.maxTranslate() - controlledTranslate;
      }

      c.updateProgress(controlledTranslate);
      c.setTranslate(controlledTranslate, swiper);
      c.updateActiveIndex();
      c.updateSlidesClasses();
    }

    if (Array.isArray(controlled)) {
      for (var i = 0; i < controlled.length; i += 1) {
        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
          setControlledTranslate(controlled[i]);
        }
      }
    } else if (controlled instanceof Swiper && byController !== controlled) {
      setControlledTranslate(controlled);
    }
  },
  setTransition: function setTransition(duration, byController) {
    var swiper = this;
    var controlled = swiper.controller.control;
    var i;

    function setControlledTransition(c) {
      c.setTransition(duration, swiper);

      if (duration !== 0) {
        c.transitionStart();

        if (c.params.autoHeight) {
          Utils.nextTick(function () {
            c.updateAutoHeight();
          });
        }

        c.$wrapperEl.transitionEnd(function () {
          if (!controlled) return;

          if (c.params.loop && swiper.params.controller.by === 'slide') {
            c.loopFix();
          }

          c.transitionEnd();
        });
      }
    }

    if (Array.isArray(controlled)) {
      for (i = 0; i < controlled.length; i += 1) {
        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
          setControlledTransition(controlled[i]);
        }
      }
    } else if (controlled instanceof Swiper && byController !== controlled) {
      setControlledTransition(controlled);
    }
  }
};
var Controller$1 = {
  name: 'controller',
  params: {
    controller: {
      control: undefined,
      inverse: false,
      by: 'slide' // or 'container'

    }
  },
  create: function create() {
    var swiper = this;
    Utils.extend(swiper, {
      controller: {
        control: swiper.params.controller.control,
        getInterpolateFunction: Controller.getInterpolateFunction.bind(swiper),
        setTranslate: Controller.setTranslate.bind(swiper),
        setTransition: Controller.setTransition.bind(swiper)
      }
    });
  },
  on: {
    update: function update() {
      var swiper = this;
      if (!swiper.controller.control) return;

      if (swiper.controller.spline) {
        swiper.controller.spline = undefined;
        delete swiper.controller.spline;
      }
    },
    resize: function resize() {
      var swiper = this;
      if (!swiper.controller.control) return;

      if (swiper.controller.spline) {
        swiper.controller.spline = undefined;
        delete swiper.controller.spline;
      }
    },
    observerUpdate: function observerUpdate() {
      var swiper = this;
      if (!swiper.controller.control) return;

      if (swiper.controller.spline) {
        swiper.controller.spline = undefined;
        delete swiper.controller.spline;
      }
    },
    setTranslate: function setTranslate(translate, byController) {
      var swiper = this;
      if (!swiper.controller.control) return;
      swiper.controller.setTranslate(translate, byController);
    },
    setTransition: function setTransition(duration, byController) {
      var swiper = this;
      if (!swiper.controller.control) return;
      swiper.controller.setTransition(duration, byController);
    }
  }
};
var a11y = {
  makeElFocusable: function makeElFocusable($el) {
    $el.attr('tabIndex', '0');
    return $el;
  },
  makeElNotFocusable: function makeElNotFocusable($el) {
    $el.attr('tabIndex', '-1');
    return $el;
  },
  addElRole: function addElRole($el, role) {
    $el.attr('role', role);
    return $el;
  },
  addElLabel: function addElLabel($el, label) {
    $el.attr('aria-label', label);
    return $el;
  },
  disableEl: function disableEl($el) {
    $el.attr('aria-disabled', true);
    return $el;
  },
  enableEl: function enableEl($el) {
    $el.attr('aria-disabled', false);
    return $el;
  },
  onEnterKey: function onEnterKey(e) {
    var swiper = this;
    var params = swiper.params.a11y;
    if (e.keyCode !== 13) return;
    var $targetEl = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(e.target);

    if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {
      if (!(swiper.isEnd && !swiper.params.loop)) {
        swiper.slideNext();
      }

      if (swiper.isEnd) {
        swiper.a11y.notify(params.lastSlideMessage);
      } else {
        swiper.a11y.notify(params.nextSlideMessage);
      }
    }

    if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {
      if (!(swiper.isBeginning && !swiper.params.loop)) {
        swiper.slidePrev();
      }

      if (swiper.isBeginning) {
        swiper.a11y.notify(params.firstSlideMessage);
      } else {
        swiper.a11y.notify(params.prevSlideMessage);
      }
    }

    if (swiper.pagination && $targetEl.is(".".concat(swiper.params.pagination.bulletClass))) {
      $targetEl[0].click();
    }
  },
  notify: function notify(message) {
    var swiper = this;
    var notification = swiper.a11y.liveRegion;
    if (notification.length === 0) return;
    notification.html('');
    notification.html(message);
  },
  updateNavigation: function updateNavigation() {
    var swiper = this;
    if (swiper.params.loop || !swiper.navigation) return;
    var _swiper$navigation4 = swiper.navigation,
        $nextEl = _swiper$navigation4.$nextEl,
        $prevEl = _swiper$navigation4.$prevEl;

    if ($prevEl && $prevEl.length > 0) {
      if (swiper.isBeginning) {
        swiper.a11y.disableEl($prevEl);
        swiper.a11y.makeElNotFocusable($prevEl);
      } else {
        swiper.a11y.enableEl($prevEl);
        swiper.a11y.makeElFocusable($prevEl);
      }
    }

    if ($nextEl && $nextEl.length > 0) {
      if (swiper.isEnd) {
        swiper.a11y.disableEl($nextEl);
        swiper.a11y.makeElNotFocusable($nextEl);
      } else {
        swiper.a11y.enableEl($nextEl);
        swiper.a11y.makeElFocusable($nextEl);
      }
    }
  },
  updatePagination: function updatePagination() {
    var swiper = this;
    var params = swiper.params.a11y;

    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
      swiper.pagination.bullets.each(function (bulletIndex, bulletEl) {
        var $bulletEl = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(bulletEl);
        swiper.a11y.makeElFocusable($bulletEl);
        swiper.a11y.addElRole($bulletEl, 'button');
        swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/\{\{index\}\}/, $bulletEl.index() + 1));
      });
    }
  },
  init: function init() {
    var swiper = this;
    swiper.$el.append(swiper.a11y.liveRegion); // Navigation

    var params = swiper.params.a11y;
    var $nextEl;
    var $prevEl;

    if (swiper.navigation && swiper.navigation.$nextEl) {
      $nextEl = swiper.navigation.$nextEl;
    }

    if (swiper.navigation && swiper.navigation.$prevEl) {
      $prevEl = swiper.navigation.$prevEl;
    }

    if ($nextEl) {
      swiper.a11y.makeElFocusable($nextEl);
      swiper.a11y.addElRole($nextEl, 'button');
      swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);
      $nextEl.on('keydown', swiper.a11y.onEnterKey);
    }

    if ($prevEl) {
      swiper.a11y.makeElFocusable($prevEl);
      swiper.a11y.addElRole($prevEl, 'button');
      swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);
      $prevEl.on('keydown', swiper.a11y.onEnterKey);
    } // Pagination


    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
      swiper.pagination.$el.on('keydown', ".".concat(swiper.params.pagination.bulletClass), swiper.a11y.onEnterKey);
    }
  },
  destroy: function destroy() {
    var swiper = this;
    if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) swiper.a11y.liveRegion.remove();
    var $nextEl;
    var $prevEl;

    if (swiper.navigation && swiper.navigation.$nextEl) {
      $nextEl = swiper.navigation.$nextEl;
    }

    if (swiper.navigation && swiper.navigation.$prevEl) {
      $prevEl = swiper.navigation.$prevEl;
    }

    if ($nextEl) {
      $nextEl.off('keydown', swiper.a11y.onEnterKey);
    }

    if ($prevEl) {
      $prevEl.off('keydown', swiper.a11y.onEnterKey);
    } // Pagination


    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
      swiper.pagination.$el.off('keydown', ".".concat(swiper.params.pagination.bulletClass), swiper.a11y.onEnterKey);
    }
  }
};
var A11y = {
  name: 'a11y',
  params: {
    a11y: {
      enabled: true,
      notificationClass: 'swiper-notification',
      prevSlideMessage: 'Previous slide',
      nextSlideMessage: 'Next slide',
      firstSlideMessage: 'This is the first slide',
      lastSlideMessage: 'This is the last slide',
      paginationBulletMessage: 'Go to slide {{index}}'
    }
  },
  create: function create() {
    var swiper = this;
    Utils.extend(swiper, {
      a11y: {
        liveRegion: (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)("<span class=\"".concat(swiper.params.a11y.notificationClass, "\" aria-live=\"assertive\" aria-atomic=\"true\"></span>"))
      }
    });
    Object.keys(a11y).forEach(function (methodName) {
      swiper.a11y[methodName] = a11y[methodName].bind(swiper);
    });
  },
  on: {
    init: function init() {
      var swiper = this;
      if (!swiper.params.a11y.enabled) return;
      swiper.a11y.init();
      swiper.a11y.updateNavigation();
    },
    toEdge: function toEdge() {
      var swiper = this;
      if (!swiper.params.a11y.enabled) return;
      swiper.a11y.updateNavigation();
    },
    fromEdge: function fromEdge() {
      var swiper = this;
      if (!swiper.params.a11y.enabled) return;
      swiper.a11y.updateNavigation();
    },
    paginationUpdate: function paginationUpdate() {
      var swiper = this;
      if (!swiper.params.a11y.enabled) return;
      swiper.a11y.updatePagination();
    },
    destroy: function destroy() {
      var swiper = this;
      if (!swiper.params.a11y.enabled) return;
      swiper.a11y.destroy();
    }
  }
};
var History = {
  init: function init() {
    var swiper = this;
    if (!swiper.params.history) return;

    if (!ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.history || !ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.history.pushState) {
      swiper.params.history.enabled = false;
      swiper.params.hashNavigation.enabled = true;
      return;
    }

    var history = swiper.history;
    history.initialized = true;
    history.paths = History.getPathValues();
    if (!history.paths.key && !history.paths.value) return;
    history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);

    if (!swiper.params.history.replaceState) {
      ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.addEventListener('popstate', swiper.history.setHistoryPopState);
    }
  },
  destroy: function destroy() {
    var swiper = this;

    if (!swiper.params.history.replaceState) {
      ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.removeEventListener('popstate', swiper.history.setHistoryPopState);
    }
  },
  setHistoryPopState: function setHistoryPopState() {
    var swiper = this;
    swiper.history.paths = History.getPathValues();
    swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);
  },
  getPathValues: function getPathValues() {
    var pathArray = ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.location.pathname.slice(1).split('/').filter(function (part) {
      return part !== '';
    });
    var total = pathArray.length;
    var key = pathArray[total - 2];
    var value = pathArray[total - 1];
    return {
      key: key,
      value: value
    };
  },
  setHistory: function setHistory(key, index) {
    var swiper = this;
    if (!swiper.history.initialized || !swiper.params.history.enabled) return;
    var slide = swiper.slides.eq(index);
    var value = History.slugify(slide.attr('data-history'));

    if (!ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.location.pathname.includes(key)) {
      value = "".concat(key, "/").concat(value);
    }

    var currentState = ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.history.state;

    if (currentState && currentState.value === value) {
      return;
    }

    if (swiper.params.history.replaceState) {
      ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.history.replaceState({
        value: value
      }, null, value);
    } else {
      ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.history.pushState({
        value: value
      }, null, value);
    }
  },
  slugify: function slugify(text) {
    return text.toString().replace(/\s+/g, '-').replace(/[^\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');
  },
  scrollToSlide: function scrollToSlide(speed, value, runCallbacks) {
    var swiper = this;

    if (value) {
      for (var i = 0, length = swiper.slides.length; i < length; i += 1) {
        var _slide3 = swiper.slides.eq(i);

        var slideHistory = History.slugify(_slide3.attr('data-history'));

        if (slideHistory === value && !_slide3.hasClass(swiper.params.slideDuplicateClass)) {
          var _index2 = _slide3.index();

          swiper.slideTo(_index2, speed, runCallbacks);
        }
      }
    } else {
      swiper.slideTo(0, speed, runCallbacks);
    }
  }
};
var History$1 = {
  name: 'history',
  params: {
    history: {
      enabled: false,
      replaceState: false,
      key: 'slides'
    }
  },
  create: function create() {
    var swiper = this;
    Utils.extend(swiper, {
      history: {
        init: History.init.bind(swiper),
        setHistory: History.setHistory.bind(swiper),
        setHistoryPopState: History.setHistoryPopState.bind(swiper),
        scrollToSlide: History.scrollToSlide.bind(swiper),
        destroy: History.destroy.bind(swiper)
      }
    });
  },
  on: {
    init: function init() {
      var swiper = this;

      if (swiper.params.history.enabled) {
        swiper.history.init();
      }
    },
    destroy: function destroy() {
      var swiper = this;

      if (swiper.params.history.enabled) {
        swiper.history.destroy();
      }
    },
    transitionEnd: function transitionEnd() {
      var swiper = this;

      if (swiper.history.initialized) {
        swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);
      }
    },
    slideChange: function slideChange() {
      var swiper = this;

      if (swiper.history.initialized && swiper.params.cssMode) {
        swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);
      }
    }
  }
};
var HashNavigation = {
  onHashCange: function onHashCange() {
    var swiper = this;
    swiper.emit('hashChange');
    var newHash = ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.location.hash.replace('#', '');
    var activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');

    if (newHash !== activeSlideHash) {
      var newIndex = swiper.$wrapperEl.children(".".concat(swiper.params.slideClass, "[data-hash=\"").concat(newHash, "\"]")).index();
      if (typeof newIndex === 'undefined') return;
      swiper.slideTo(newIndex);
    }
  },
  setHash: function setHash() {
    var swiper = this;
    if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) return;

    if (swiper.params.hashNavigation.replaceState && ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.history && ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.history.replaceState) {
      ssr_window__WEBPACK_IMPORTED_MODULE_9__.window.history.replaceState(null, null, "#".concat(swiper.slides.eq(swiper.activeIndex).attr('data-hash')) || 0);
      swiper.emit('hashSet');
    } else {
      var _slide4 = swiper.slides.eq(swiper.activeIndex);

      var hash = _slide4.attr('data-hash') || _slide4.attr('data-history');

      ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.location.hash = hash || '';
      swiper.emit('hashSet');
    }
  },
  init: function init() {
    var swiper = this;
    if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return;
    swiper.hashNavigation.initialized = true;
    var hash = ssr_window__WEBPACK_IMPORTED_MODULE_9__.document.location.hash.replace('#', '');

    if (hash) {
      var speed = 0;

      for (var i = 0, length = swiper.slides.length; i < length; i += 1) {
        var _slide5 = swiper.slides.eq(i);

        var slideHash = _slide5.attr('data-hash') || _slide5.attr('data-history');

        if (slideHash === hash && !_slide5.hasClass(swiper.params.slideDuplicateClass)) {
          var _index3 = _slide5.index();

          swiper.slideTo(_index3, speed, swiper.params.runCallbacksOnInit, true);
        }
      }
    }

    if (swiper.params.hashNavigation.watchState) {
      (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(ssr_window__WEBPACK_IMPORTED_MODULE_9__.window).on('hashchange', swiper.hashNavigation.onHashCange);
    }
  },
  destroy: function destroy() {
    var swiper = this;

    if (swiper.params.hashNavigation.watchState) {
      (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(ssr_window__WEBPACK_IMPORTED_MODULE_9__.window).off('hashchange', swiper.hashNavigation.onHashCange);
    }
  }
};
var HashNavigation$1 = {
  name: 'hash-navigation',
  params: {
    hashNavigation: {
      enabled: false,
      replaceState: false,
      watchState: false
    }
  },
  create: function create() {
    var swiper = this;
    Utils.extend(swiper, {
      hashNavigation: {
        initialized: false,
        init: HashNavigation.init.bind(swiper),
        destroy: HashNavigation.destroy.bind(swiper),
        setHash: HashNavigation.setHash.bind(swiper),
        onHashCange: HashNavigation.onHashCange.bind(swiper)
      }
    });
  },
  on: {
    init: function init() {
      var swiper = this;

      if (swiper.params.hashNavigation.enabled) {
        swiper.hashNavigation.init();
      }
    },
    destroy: function destroy() {
      var swiper = this;

      if (swiper.params.hashNavigation.enabled) {
        swiper.hashNavigation.destroy();
      }
    },
    transitionEnd: function transitionEnd() {
      var swiper = this;

      if (swiper.hashNavigation.initialized) {
        swiper.hashNavigation.setHash();
      }
    },
    slideChange: function slideChange() {
      var swiper = this;

      if (swiper.hashNavigation.initialized && swiper.params.cssMode) {
        swiper.hashNavigation.setHash();
      }
    }
  }
};
/* eslint no-underscore-dangle: "off" */

var Autoplay = {
  run: function run() {
    var swiper = this;
    var $activeSlideEl = swiper.slides.eq(swiper.activeIndex);
    var delay = swiper.params.autoplay.delay;

    if ($activeSlideEl.attr('data-swiper-autoplay')) {
      delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;
    }

    clearTimeout(swiper.autoplay.timeout);
    swiper.autoplay.timeout = Utils.nextTick(function () {
      if (swiper.params.autoplay.reverseDirection) {
        if (swiper.params.loop) {
          swiper.loopFix();
          swiper.slidePrev(swiper.params.speed, true, true);
          swiper.emit('autoplay');
        } else if (!swiper.isBeginning) {
          swiper.slidePrev(swiper.params.speed, true, true);
          swiper.emit('autoplay');
        } else if (!swiper.params.autoplay.stopOnLastSlide) {
          swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);
          swiper.emit('autoplay');
        } else {
          swiper.autoplay.stop();
        }
      } else if (swiper.params.loop) {
        swiper.loopFix();
        swiper.slideNext(swiper.params.speed, true, true);
        swiper.emit('autoplay');
      } else if (!swiper.isEnd) {
        swiper.slideNext(swiper.params.speed, true, true);
        swiper.emit('autoplay');
      } else if (!swiper.params.autoplay.stopOnLastSlide) {
        swiper.slideTo(0, swiper.params.speed, true, true);
        swiper.emit('autoplay');
      } else {
        swiper.autoplay.stop();
      }

      if (swiper.params.cssMode && swiper.autoplay.running) swiper.autoplay.run();
    }, delay);
  },
  start: function start() {
    var swiper = this;
    if (typeof swiper.autoplay.timeout !== 'undefined') return false;
    if (swiper.autoplay.running) return false;
    swiper.autoplay.running = true;
    swiper.emit('autoplayStart');
    swiper.autoplay.run();
    return true;
  },
  stop: function stop() {
    var swiper = this;
    if (!swiper.autoplay.running) return false;
    if (typeof swiper.autoplay.timeout === 'undefined') return false;

    if (swiper.autoplay.timeout) {
      clearTimeout(swiper.autoplay.timeout);
      swiper.autoplay.timeout = undefined;
    }

    swiper.autoplay.running = false;
    swiper.emit('autoplayStop');
    return true;
  },
  pause: function pause(speed) {
    var swiper = this;
    if (!swiper.autoplay.running) return;
    if (swiper.autoplay.paused) return;
    if (swiper.autoplay.timeout) clearTimeout(swiper.autoplay.timeout);
    swiper.autoplay.paused = true;

    if (speed === 0 || !swiper.params.autoplay.waitForTransition) {
      swiper.autoplay.paused = false;
      swiper.autoplay.run();
    } else {
      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);
      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);
    }
  }
};
var Autoplay$1 = {
  name: 'autoplay',
  params: {
    autoplay: {
      enabled: false,
      delay: 3000,
      waitForTransition: true,
      disableOnInteraction: true,
      stopOnLastSlide: false,
      reverseDirection: false
    }
  },
  create: function create() {
    var swiper = this;
    Utils.extend(swiper, {
      autoplay: {
        running: false,
        paused: false,
        run: Autoplay.run.bind(swiper),
        start: Autoplay.start.bind(swiper),
        stop: Autoplay.stop.bind(swiper),
        pause: Autoplay.pause.bind(swiper),
        onVisibilityChange: function onVisibilityChange() {
          if (document.visibilityState === 'hidden' && swiper.autoplay.running) {
            swiper.autoplay.pause();
          }

          if (document.visibilityState === 'visible' && swiper.autoplay.paused) {
            swiper.autoplay.run();
            swiper.autoplay.paused = false;
          }
        },
        onTransitionEnd: function onTransitionEnd(e) {
          if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;
          if (e.target !== this) return;
          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);
          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);
          swiper.autoplay.paused = false;

          if (!swiper.autoplay.running) {
            swiper.autoplay.stop();
          } else {
            swiper.autoplay.run();
          }
        }
      }
    });
  },
  on: {
    init: function init() {
      var swiper = this;

      if (swiper.params.autoplay.enabled) {
        swiper.autoplay.start();
        document.addEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);
      }
    },
    beforeTransitionStart: function beforeTransitionStart(speed, internal) {
      var swiper = this;

      if (swiper.autoplay.running) {
        if (internal || !swiper.params.autoplay.disableOnInteraction) {
          swiper.autoplay.pause(speed);
        } else {
          swiper.autoplay.stop();
        }
      }
    },
    sliderFirstMove: function sliderFirstMove() {
      var swiper = this;

      if (swiper.autoplay.running) {
        if (swiper.params.autoplay.disableOnInteraction) {
          swiper.autoplay.stop();
        } else {
          swiper.autoplay.pause();
        }
      }
    },
    touchEnd: function touchEnd() {
      var swiper = this;

      if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {
        swiper.autoplay.run();
      }
    },
    destroy: function destroy() {
      var swiper = this;

      if (swiper.autoplay.running) {
        swiper.autoplay.stop();
      }

      document.removeEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);
    }
  }
};
var Fade = {
  setTranslate: function setTranslate() {
    var swiper = this;
    var slides = swiper.slides;

    for (var i = 0; i < slides.length; i += 1) {
      var $slideEl = swiper.slides.eq(i);
      var _offset = $slideEl[0].swiperSlideOffset;
      var tx = -_offset;
      if (!swiper.params.virtualTranslate) tx -= swiper.translate;
      var ty = 0;

      if (!swiper.isHorizontal()) {
        ty = tx;
        tx = 0;
      }

      var slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs($slideEl[0].progress), 0) : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);
      $slideEl.css({
        opacity: slideOpacity
      }).transform("translate3d(".concat(tx, "px, ").concat(ty, "px, 0px)"));
    }
  },
  setTransition: function setTransition(duration) {
    var swiper = this;
    var slides = swiper.slides,
        $wrapperEl = swiper.$wrapperEl;
    slides.transition(duration);

    if (swiper.params.virtualTranslate && duration !== 0) {
      var eventTriggered = false;
      slides.transitionEnd(function () {
        if (eventTriggered) return;
        if (!swiper || swiper.destroyed) return;
        eventTriggered = true;
        swiper.animating = false;
        var triggerEvents = ['webkitTransitionEnd', 'transitionend'];

        for (var i = 0; i < triggerEvents.length; i += 1) {
          $wrapperEl.trigger(triggerEvents[i]);
        }
      });
    }
  }
};
var EffectFade = {
  name: 'effect-fade',
  params: {
    fadeEffect: {
      crossFade: false
    }
  },
  create: function create() {
    var swiper = this;
    Utils.extend(swiper, {
      fadeEffect: {
        setTranslate: Fade.setTranslate.bind(swiper),
        setTransition: Fade.setTransition.bind(swiper)
      }
    });
  },
  on: {
    beforeInit: function beforeInit() {
      var swiper = this;
      if (swiper.params.effect !== 'fade') return;
      swiper.classNames.push("".concat(swiper.params.containerModifierClass, "fade"));
      var overwriteParams = {
        slidesPerView: 1,
        slidesPerColumn: 1,
        slidesPerGroup: 1,
        watchSlidesProgress: true,
        spaceBetween: 0,
        virtualTranslate: true
      };
      Utils.extend(swiper.params, overwriteParams);
      Utils.extend(swiper.originalParams, overwriteParams);
    },
    setTranslate: function setTranslate() {
      var swiper = this;
      if (swiper.params.effect !== 'fade') return;
      swiper.fadeEffect.setTranslate();
    },
    setTransition: function setTransition(duration) {
      var swiper = this;
      if (swiper.params.effect !== 'fade') return;
      swiper.fadeEffect.setTransition(duration);
    }
  }
};
var Cube = {
  setTranslate: function setTranslate() {
    var swiper = this;
    var $el = swiper.$el,
        $wrapperEl = swiper.$wrapperEl,
        slides = swiper.slides,
        swiperWidth = swiper.width,
        swiperHeight = swiper.height,
        rtl = swiper.rtlTranslate,
        swiperSize = swiper.size;
    var params = swiper.params.cubeEffect;
    var isHorizontal = swiper.isHorizontal();
    var isVirtual = swiper.virtual && swiper.params.virtual.enabled;
    var wrapperRotate = 0;
    var $cubeShadowEl;

    if (params.shadow) {
      if (isHorizontal) {
        $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');

        if ($cubeShadowEl.length === 0) {
          $cubeShadowEl = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)('<div class="swiper-cube-shadow"></div>');
          $wrapperEl.append($cubeShadowEl);
        }

        $cubeShadowEl.css({
          height: "".concat(swiperWidth, "px")
        });
      } else {
        $cubeShadowEl = $el.find('.swiper-cube-shadow');

        if ($cubeShadowEl.length === 0) {
          $cubeShadowEl = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)('<div class="swiper-cube-shadow"></div>');
          $el.append($cubeShadowEl);
        }
      }
    }

    for (var i = 0; i < slides.length; i += 1) {
      var $slideEl = slides.eq(i);
      var slideIndex = i;

      if (isVirtual) {
        slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);
      }

      var slideAngle = slideIndex * 90;
      var round = Math.floor(slideAngle / 360);

      if (rtl) {
        slideAngle = -slideAngle;
        round = Math.floor(-slideAngle / 360);
      }

      var progress = Math.max(Math.min($slideEl[0].progress, 1), -1);
      var tx = 0;
      var ty = 0;
      var tz = 0;

      if (slideIndex % 4 === 0) {
        tx = -round * 4 * swiperSize;
        tz = 0;
      } else if ((slideIndex - 1) % 4 === 0) {
        tx = 0;
        tz = -round * 4 * swiperSize;
      } else if ((slideIndex - 2) % 4 === 0) {
        tx = swiperSize + round * 4 * swiperSize;
        tz = swiperSize;
      } else if ((slideIndex - 3) % 4 === 0) {
        tx = -swiperSize;
        tz = 3 * swiperSize + swiperSize * 4 * round;
      }

      if (rtl) {
        tx = -tx;
      }

      if (!isHorizontal) {
        ty = tx;
        tx = 0;
      }

      var _transform = "rotateX(".concat(isHorizontal ? 0 : -slideAngle, "deg) rotateY(").concat(isHorizontal ? slideAngle : 0, "deg) translate3d(").concat(tx, "px, ").concat(ty, "px, ").concat(tz, "px)");

      if (progress <= 1 && progress > -1) {
        wrapperRotate = slideIndex * 90 + progress * 90;
        if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;
      }

      $slideEl.transform(_transform);

      if (params.slideShadows) {
        // Set shadows
        var shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
        var shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');

        if (shadowBefore.length === 0) {
          shadowBefore = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)("<div class=\"swiper-slide-shadow-".concat(isHorizontal ? 'left' : 'top', "\"></div>"));
          $slideEl.append(shadowBefore);
        }

        if (shadowAfter.length === 0) {
          shadowAfter = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)("<div class=\"swiper-slide-shadow-".concat(isHorizontal ? 'right' : 'bottom', "\"></div>"));
          $slideEl.append(shadowAfter);
        }

        if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);
        if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);
      }
    }

    $wrapperEl.css({
      '-webkit-transform-origin': "50% 50% -".concat(swiperSize / 2, "px"),
      '-moz-transform-origin': "50% 50% -".concat(swiperSize / 2, "px"),
      '-ms-transform-origin': "50% 50% -".concat(swiperSize / 2, "px"),
      'transform-origin': "50% 50% -".concat(swiperSize / 2, "px")
    });

    if (params.shadow) {
      if (isHorizontal) {
        $cubeShadowEl.transform("translate3d(0px, ".concat(swiperWidth / 2 + params.shadowOffset, "px, ").concat(-swiperWidth / 2, "px) rotateX(90deg) rotateZ(0deg) scale(").concat(params.shadowScale, ")"));
      } else {
        var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;
        var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);
        var scale1 = params.shadowScale;
        var scale2 = params.shadowScale / multiplier;
        var _offset2 = params.shadowOffset;
        $cubeShadowEl.transform("scale3d(".concat(scale1, ", 1, ").concat(scale2, ") translate3d(0px, ").concat(swiperHeight / 2 + _offset2, "px, ").concat(-swiperHeight / 2 / scale2, "px) rotateX(-90deg)"));
      }
    }

    var zFactor = Browser.isSafari || Browser.isWebView ? -swiperSize / 2 : 0;
    $wrapperEl.transform("translate3d(0px,0,".concat(zFactor, "px) rotateX(").concat(swiper.isHorizontal() ? 0 : wrapperRotate, "deg) rotateY(").concat(swiper.isHorizontal() ? -wrapperRotate : 0, "deg)"));
  },
  setTransition: function setTransition(duration) {
    var swiper = this;
    var $el = swiper.$el,
        slides = swiper.slides;
    slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);

    if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {
      $el.find('.swiper-cube-shadow').transition(duration);
    }
  }
};
var EffectCube = {
  name: 'effect-cube',
  params: {
    cubeEffect: {
      slideShadows: true,
      shadow: true,
      shadowOffset: 20,
      shadowScale: 0.94
    }
  },
  create: function create() {
    var swiper = this;
    Utils.extend(swiper, {
      cubeEffect: {
        setTranslate: Cube.setTranslate.bind(swiper),
        setTransition: Cube.setTransition.bind(swiper)
      }
    });
  },
  on: {
    beforeInit: function beforeInit() {
      var swiper = this;
      if (swiper.params.effect !== 'cube') return;
      swiper.classNames.push("".concat(swiper.params.containerModifierClass, "cube"));
      swiper.classNames.push("".concat(swiper.params.containerModifierClass, "3d"));
      var overwriteParams = {
        slidesPerView: 1,
        slidesPerColumn: 1,
        slidesPerGroup: 1,
        watchSlidesProgress: true,
        resistanceRatio: 0,
        spaceBetween: 0,
        centeredSlides: false,
        virtualTranslate: true
      };
      Utils.extend(swiper.params, overwriteParams);
      Utils.extend(swiper.originalParams, overwriteParams);
    },
    setTranslate: function setTranslate() {
      var swiper = this;
      if (swiper.params.effect !== 'cube') return;
      swiper.cubeEffect.setTranslate();
    },
    setTransition: function setTransition(duration) {
      var swiper = this;
      if (swiper.params.effect !== 'cube') return;
      swiper.cubeEffect.setTransition(duration);
    }
  }
};
var Flip = {
  setTranslate: function setTranslate() {
    var swiper = this;
    var slides = swiper.slides,
        rtl = swiper.rtlTranslate;

    for (var i = 0; i < slides.length; i += 1) {
      var $slideEl = slides.eq(i);
      var progress = $slideEl[0].progress;

      if (swiper.params.flipEffect.limitRotation) {
        progress = Math.max(Math.min($slideEl[0].progress, 1), -1);
      }

      var _offset3 = $slideEl[0].swiperSlideOffset;
      var rotate = -180 * progress;
      var rotateY = rotate;
      var rotateX = 0;
      var tx = -_offset3;
      var ty = 0;

      if (!swiper.isHorizontal()) {
        ty = tx;
        tx = 0;
        rotateX = -rotateY;
        rotateY = 0;
      } else if (rtl) {
        rotateY = -rotateY;
      }

      $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;

      if (swiper.params.flipEffect.slideShadows) {
        // Set shadows
        var shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
        var shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');

        if (shadowBefore.length === 0) {
          shadowBefore = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)("<div class=\"swiper-slide-shadow-".concat(swiper.isHorizontal() ? 'left' : 'top', "\"></div>"));
          $slideEl.append(shadowBefore);
        }

        if (shadowAfter.length === 0) {
          shadowAfter = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)("<div class=\"swiper-slide-shadow-".concat(swiper.isHorizontal() ? 'right' : 'bottom', "\"></div>"));
          $slideEl.append(shadowAfter);
        }

        if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);
        if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);
      }

      $slideEl.transform("translate3d(".concat(tx, "px, ").concat(ty, "px, 0px) rotateX(").concat(rotateX, "deg) rotateY(").concat(rotateY, "deg)"));
    }
  },
  setTransition: function setTransition(duration) {
    var swiper = this;
    var slides = swiper.slides,
        activeIndex = swiper.activeIndex,
        $wrapperEl = swiper.$wrapperEl;
    slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);

    if (swiper.params.virtualTranslate && duration !== 0) {
      var eventTriggered = false; // eslint-disable-next-line

      slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {
        if (eventTriggered) return;
        if (!swiper || swiper.destroyed) return; // if (!$(this).hasClass(swiper.params.slideActiveClass)) return;

        eventTriggered = true;
        swiper.animating = false;
        var triggerEvents = ['webkitTransitionEnd', 'transitionend'];

        for (var i = 0; i < triggerEvents.length; i += 1) {
          $wrapperEl.trigger(triggerEvents[i]);
        }
      });
    }
  }
};
var EffectFlip = {
  name: 'effect-flip',
  params: {
    flipEffect: {
      slideShadows: true,
      limitRotation: true
    }
  },
  create: function create() {
    var swiper = this;
    Utils.extend(swiper, {
      flipEffect: {
        setTranslate: Flip.setTranslate.bind(swiper),
        setTransition: Flip.setTransition.bind(swiper)
      }
    });
  },
  on: {
    beforeInit: function beforeInit() {
      var swiper = this;
      if (swiper.params.effect !== 'flip') return;
      swiper.classNames.push("".concat(swiper.params.containerModifierClass, "flip"));
      swiper.classNames.push("".concat(swiper.params.containerModifierClass, "3d"));
      var overwriteParams = {
        slidesPerView: 1,
        slidesPerColumn: 1,
        slidesPerGroup: 1,
        watchSlidesProgress: true,
        spaceBetween: 0,
        virtualTranslate: true
      };
      Utils.extend(swiper.params, overwriteParams);
      Utils.extend(swiper.originalParams, overwriteParams);
    },
    setTranslate: function setTranslate() {
      var swiper = this;
      if (swiper.params.effect !== 'flip') return;
      swiper.flipEffect.setTranslate();
    },
    setTransition: function setTransition(duration) {
      var swiper = this;
      if (swiper.params.effect !== 'flip') return;
      swiper.flipEffect.setTransition(duration);
    }
  }
};
var Coverflow = {
  setTranslate: function setTranslate() {
    var swiper = this;
    var swiperWidth = swiper.width,
        swiperHeight = swiper.height,
        slides = swiper.slides,
        $wrapperEl = swiper.$wrapperEl,
        slidesSizesGrid = swiper.slidesSizesGrid;
    var params = swiper.params.coverflowEffect;
    var isHorizontal = swiper.isHorizontal();
    var transform = swiper.translate;
    var center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;
    var rotate = isHorizontal ? params.rotate : -params.rotate;
    var translate = params.depth; // Each slide offset from center

    for (var i = 0, length = slides.length; i < length; i += 1) {
      var $slideEl = slides.eq(i);
      var slideSize = slidesSizesGrid[i];
      var slideOffset = $slideEl[0].swiperSlideOffset;
      var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * params.modifier;
      var rotateY = isHorizontal ? rotate * offsetMultiplier : 0;
      var rotateX = isHorizontal ? 0 : rotate * offsetMultiplier; // var rotateZ = 0

      var translateZ = -translate * Math.abs(offsetMultiplier);
      var stretch = params.stretch; // Allow percentage to make a relative stretch for responsive sliders

      if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {
        stretch = parseFloat(params.stretch) / 100 * slideSize;
      }

      var translateY = isHorizontal ? 0 : stretch * offsetMultiplier;
      var translateX = isHorizontal ? stretch * offsetMultiplier : 0;
      var scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier); // Fix for ultra small values

      if (Math.abs(translateX) < 0.001) translateX = 0;
      if (Math.abs(translateY) < 0.001) translateY = 0;
      if (Math.abs(translateZ) < 0.001) translateZ = 0;
      if (Math.abs(rotateY) < 0.001) rotateY = 0;
      if (Math.abs(rotateX) < 0.001) rotateX = 0;
      if (Math.abs(scale) < 0.001) scale = 0;
      var slideTransform = "translate3d(".concat(translateX, "px,").concat(translateY, "px,").concat(translateZ, "px)  rotateX(").concat(rotateX, "deg) rotateY(").concat(rotateY, "deg) scale(").concat(scale, ")");
      $slideEl.transform(slideTransform);
      $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;

      if (params.slideShadows) {
        // Set shadows
        var $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
        var $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');

        if ($shadowBeforeEl.length === 0) {
          $shadowBeforeEl = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)("<div class=\"swiper-slide-shadow-".concat(isHorizontal ? 'left' : 'top', "\"></div>"));
          $slideEl.append($shadowBeforeEl);
        }

        if ($shadowAfterEl.length === 0) {
          $shadowAfterEl = (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)("<div class=\"swiper-slide-shadow-".concat(isHorizontal ? 'right' : 'bottom', "\"></div>"));
          $slideEl.append($shadowAfterEl);
        }

        if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;
        if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;
      }
    } // Set correct perspective for IE10


    if (Support.pointerEvents || Support.prefixedPointerEvents) {
      var ws = $wrapperEl[0].style;
      ws.perspectiveOrigin = "".concat(center, "px 50%");
    }
  },
  setTransition: function setTransition(duration) {
    var swiper = this;
    swiper.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);
  }
};
var EffectCoverflow = {
  name: 'effect-coverflow',
  params: {
    coverflowEffect: {
      rotate: 50,
      stretch: 0,
      depth: 100,
      scale: 1,
      modifier: 1,
      slideShadows: true
    }
  },
  create: function create() {
    var swiper = this;
    Utils.extend(swiper, {
      coverflowEffect: {
        setTranslate: Coverflow.setTranslate.bind(swiper),
        setTransition: Coverflow.setTransition.bind(swiper)
      }
    });
  },
  on: {
    beforeInit: function beforeInit() {
      var swiper = this;
      if (swiper.params.effect !== 'coverflow') return;
      swiper.classNames.push("".concat(swiper.params.containerModifierClass, "coverflow"));
      swiper.classNames.push("".concat(swiper.params.containerModifierClass, "3d"));
      swiper.params.watchSlidesProgress = true;
      swiper.originalParams.watchSlidesProgress = true;
    },
    setTranslate: function setTranslate() {
      var swiper = this;
      if (swiper.params.effect !== 'coverflow') return;
      swiper.coverflowEffect.setTranslate();
    },
    setTransition: function setTransition(duration) {
      var swiper = this;
      if (swiper.params.effect !== 'coverflow') return;
      swiper.coverflowEffect.setTransition(duration);
    }
  }
};
var Thumbs = {
  init: function init() {
    var swiper = this;
    var thumbsParams = swiper.params.thumbs;
    var SwiperClass = swiper.constructor;

    if (thumbsParams.swiper instanceof SwiperClass) {
      swiper.thumbs.swiper = thumbsParams.swiper;
      Utils.extend(swiper.thumbs.swiper.originalParams, {
        watchSlidesProgress: true,
        slideToClickedSlide: false
      });
      Utils.extend(swiper.thumbs.swiper.params, {
        watchSlidesProgress: true,
        slideToClickedSlide: false
      });
    } else if (Utils.isObject(thumbsParams.swiper)) {
      swiper.thumbs.swiper = new SwiperClass(Utils.extend({}, thumbsParams.swiper, {
        watchSlidesVisibility: true,
        watchSlidesProgress: true,
        slideToClickedSlide: false
      }));
      swiper.thumbs.swiperCreated = true;
    }

    swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);
    swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick);
  },
  onThumbClick: function onThumbClick() {
    var swiper = this;
    var thumbsSwiper = swiper.thumbs.swiper;
    if (!thumbsSwiper) return;
    var clickedIndex = thumbsSwiper.clickedIndex;
    var clickedSlide = thumbsSwiper.clickedSlide;
    if (clickedSlide && (0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;
    if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;
    var slideToIndex;

    if (thumbsSwiper.params.loop) {
      slideToIndex = parseInt((0,dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_8__.$)(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);
    } else {
      slideToIndex = clickedIndex;
    }

    if (swiper.params.loop) {
      var currentIndex = swiper.activeIndex;

      if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {
        swiper.loopFix(); // eslint-disable-next-line

        swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
        currentIndex = swiper.activeIndex;
      }

      var prevIndex = swiper.slides.eq(currentIndex).prevAll("[data-swiper-slide-index=\"".concat(slideToIndex, "\"]")).eq(0).index();
      var nextIndex = swiper.slides.eq(currentIndex).nextAll("[data-swiper-slide-index=\"".concat(slideToIndex, "\"]")).eq(0).index();
      if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;else slideToIndex = prevIndex;
    }

    swiper.slideTo(slideToIndex);
  },
  update: function update(initial) {
    var swiper = this;
    var thumbsSwiper = swiper.thumbs.swiper;
    if (!thumbsSwiper) return;
    var slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;
    var autoScrollOffset = swiper.params.thumbs.autoScrollOffset;
    var useOffset = autoScrollOffset && !thumbsSwiper.params.loop;

    if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {
      var currentThumbsIndex = thumbsSwiper.activeIndex;
      var newThumbsIndex;
      var direction;

      if (thumbsSwiper.params.loop) {
        if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {
          thumbsSwiper.loopFix(); // eslint-disable-next-line

          thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;
          currentThumbsIndex = thumbsSwiper.activeIndex;
        } // Find actual thumbs index to slide to


        var prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll("[data-swiper-slide-index=\"".concat(swiper.realIndex, "\"]")).eq(0).index();
        var nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll("[data-swiper-slide-index=\"".concat(swiper.realIndex, "\"]")).eq(0).index();
        if (typeof prevThumbsIndex === 'undefined') newThumbsIndex = nextThumbsIndex;else if (typeof nextThumbsIndex === 'undefined') newThumbsIndex = prevThumbsIndex;else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) newThumbsIndex = currentThumbsIndex;else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) newThumbsIndex = nextThumbsIndex;else newThumbsIndex = prevThumbsIndex;
        direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';
      } else {
        newThumbsIndex = swiper.realIndex;
        direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';
      }

      if (useOffset) {
        newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;
      }

      if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {
        if (thumbsSwiper.params.centeredSlides) {
          if (newThumbsIndex > currentThumbsIndex) {
            newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;
          } else {
            newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;
          }
        } else if (newThumbsIndex > currentThumbsIndex) {
          newThumbsIndex = newThumbsIndex - slidesPerView + 1;
        }

        thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);
      }
    } // Activate thumbs


    var thumbsToActivate = 1;
    var thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;

    if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {
      thumbsToActivate = swiper.params.slidesPerView;
    }

    if (!swiper.params.thumbs.multipleActiveThumbs) {
      thumbsToActivate = 1;
    }

    thumbsToActivate = Math.floor(thumbsToActivate);
    thumbsSwiper.slides.removeClass(thumbActiveClass);

    if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {
      for (var i = 0; i < thumbsToActivate; i += 1) {
        thumbsSwiper.$wrapperEl.children("[data-swiper-slide-index=\"".concat(swiper.realIndex + i, "\"]")).addClass(thumbActiveClass);
      }
    } else {
      for (var _i13 = 0; _i13 < thumbsToActivate; _i13 += 1) {
        thumbsSwiper.slides.eq(swiper.realIndex + _i13).addClass(thumbActiveClass);
      }
    }
  }
};
var Thumbs$1 = {
  name: 'thumbs',
  params: {
    thumbs: {
      swiper: null,
      multipleActiveThumbs: true,
      autoScrollOffset: 0,
      slideThumbActiveClass: 'swiper-slide-thumb-active',
      thumbsContainerClass: 'swiper-container-thumbs'
    }
  },
  create: function create() {
    var swiper = this;
    Utils.extend(swiper, {
      thumbs: {
        swiper: null,
        init: Thumbs.init.bind(swiper),
        update: Thumbs.update.bind(swiper),
        onThumbClick: Thumbs.onThumbClick.bind(swiper)
      }
    });
  },
  on: {
    beforeInit: function beforeInit() {
      var swiper = this;
      var thumbs = swiper.params.thumbs;
      if (!thumbs || !thumbs.swiper) return;
      swiper.thumbs.init();
      swiper.thumbs.update(true);
    },
    slideChange: function slideChange() {
      var swiper = this;
      if (!swiper.thumbs.swiper) return;
      swiper.thumbs.update();
    },
    update: function update() {
      var swiper = this;
      if (!swiper.thumbs.swiper) return;
      swiper.thumbs.update();
    },
    resize: function resize() {
      var swiper = this;
      if (!swiper.thumbs.swiper) return;
      swiper.thumbs.update();
    },
    observerUpdate: function observerUpdate() {
      var swiper = this;
      if (!swiper.thumbs.swiper) return;
      swiper.thumbs.update();
    },
    setTransition: function setTransition(duration) {
      var swiper = this;
      var thumbsSwiper = swiper.thumbs.swiper;
      if (!thumbsSwiper) return;
      thumbsSwiper.setTransition(duration);
    },
    beforeDestroy: function beforeDestroy() {
      var swiper = this;
      var thumbsSwiper = swiper.thumbs.swiper;
      if (!thumbsSwiper) return;

      if (swiper.thumbs.swiperCreated && thumbsSwiper) {
        thumbsSwiper.destroy();
      }
    }
  }
}; // Swiper Class

var components = [Device$1, Support$1, Browser$1, Resize, Observer$1, Virtual$1, Keyboard$1, Mousewheel$1, Navigation$1, Pagination$1, Scrollbar$1, Parallax$1, Zoom$1, Lazy$1, Controller$1, A11y, History$1, HashNavigation$1, Autoplay$1, EffectFade, EffectCube, EffectFlip, EffectCoverflow, Thumbs$1];

if (typeof Swiper.use === 'undefined') {
  Swiper.use = Swiper.Class.use;
  Swiper.installModule = Swiper.Class.installModule;
}

Swiper.use(components);
/* harmony default export */ __webpack_exports__["default"] = (Swiper);

/***/ }),

/***/ "./src/common/js/_accordion.js":
/*!*************************************!*\
  !*** ./src/common/js/_accordion.js ***!
  \*************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_config */ "./src/common/js/_config.js");

var accordions = [];
var ACCORDION_TARGET_CLASS = 'js-pf-accordion';
var ACCORDION_TRIGGER_CLASS = 'js-pf-accordion_trigger';
var ACCORDION_CONTENT_CLASS = 'js-pf-accordion_cont';
var ACCORDION_COMPLATED_CLASS = 'js-pf-accordion-completed';
var ACCORDION_STATE_DATA = 'data-acc-state';
var ACCORDION_STATE_OPEN = 'open';
var ACCORDION_STATE_CLOSE = 'close';
var ACCORDION_ONLY_PC_DATA = 'data-acc-only-pc';
var ACCORDION_ONLY_SP_DATA = 'data-acc-only-sp';
/**
 * アコーディオン機能付与
 *
 * @param { HTMLElement } ele         付与対象の要素
 * @param { Boolean }     defaultOpen 初期開閉状態
 */

var Accordion = function Accordion(ele) {
  var defaultOpen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
  var targetElement = ele;
  var triggerElement = targetElement.querySelector(".".concat(ACCORDION_TRIGGER_CLASS));
  var contentElement = targetElement.querySelector(".".concat(ACCORDION_CONTENT_CLASS));
  if (triggerElement == undefined || contentElement == undefined) return;
  var isOnlyPC = targetElement.getAttribute(ACCORDION_ONLY_PC_DATA) !== null;
  var isOnlySP = targetElement.getAttribute(ACCORDION_ONLY_SP_DATA) !== null;
  var isDisable;
  /**
   * 特定デバイスのみアコーディオンが活性になる指定の場合、現在のデバイスを判定し非活性かどうかを返す
   * @return { Boolean } 活性指定の値と、デバイスが一致しない場合はtrue（アコーディオンを非活性とする）
   */

  var isDisableState = function isDisableState() {
    return isOnlyPC && _config__WEBPACK_IMPORTED_MODULE_0__["default"].CURRENT_DEVICE === _config__WEBPACK_IMPORTED_MODULE_0__["default"].DEVICE.SP || isOnlySP && _config__WEBPACK_IMPORTED_MODULE_0__["default"].CURRENT_DEVICE === _config__WEBPACK_IMPORTED_MODULE_0__["default"].DEVICE.PC;
  };
  /**
   * オープン
   */


  var open = function open() {
    var duration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 300;
    targetElement.setAttribute(ACCORDION_STATE_DATA, ACCORDION_STATE_OPEN);
    $(contentElement).slideDown(duration);
  };
  /**
   * クローズ
   */


  var close = function close() {
    var duration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 300;
    targetElement.setAttribute(ACCORDION_STATE_DATA, ACCORDION_STATE_CLOSE);
    $(contentElement).slideUp(duration);
  };
  /**
   * デバイスがPCからSP、またはSPからPCへ変更した際に呼び出されます<br>
   * 活性状態から非活性状態へ遷移する際はアコーディオンを破棄します<br>
   * 非活性状態から活性状態へ遷移する際はアコーディオンを初期化します
   */


  var onDeviceChange = function onDeviceChange() {
    if (!isDisable && isDisableState()) {
      open(0);
      triggerElement.removeEventListener('click', toggleState, false);
    } else if (isDisable && !isDisableState()) {
      if (defaultOpen) {
        open(0);
        targetElement.setAttribute(ACCORDION_STATE_DATA, ACCORDION_STATE_OPEN);
      } else {
        close(0);
        targetElement.setAttribute(ACCORDION_STATE_DATA, ACCORDION_STATE_CLOSE);
      }

      triggerElement.addEventListener('click', toggleState, false);
    }

    isDisable = isDisableState();
  };
  /**
   * 開閉状態を切り替え
   */


  var toggleState = function toggleState() {
    switch (targetElement.getAttribute(ACCORDION_STATE_DATA)) {
      case ACCORDION_STATE_OPEN:
        targetElement.setAttribute(ACCORDION_STATE_DATA, ACCORDION_STATE_CLOSE);
        close();
        break;

      case ACCORDION_STATE_CLOSE:
        targetElement.setAttribute(ACCORDION_STATE_DATA, ACCORDION_STATE_OPEN);
        open();
        break;
    }
  };

  var initialize = function initialize() {
    isDisable = isDisableState();

    if (isDisable === false) {
      if (defaultOpen) {
        targetElement.setAttribute(ACCORDION_STATE_DATA, ACCORDION_STATE_OPEN);
        open(0);
      } else {
        targetElement.setAttribute(ACCORDION_STATE_DATA, ACCORDION_STATE_CLOSE);
        close(0);
      }

      triggerElement.addEventListener('click', toggleState, false);
    } else {
      open(0);
    }
  };
  /**
   * 初期化
   */


  var init = function init() {
    initialize();
    targetElement.classList.add(ACCORDION_COMPLATED_CLASS);

    if (window.rm) {
      window.rm.setOnChangeDeviceCallback(onDeviceChange);
    }
  };

  init();
  return {};
};

window.addEventListener('DOMContentLoaded', function () {
  [].slice.call(document.querySelectorAll(".".concat(ACCORDION_TARGET_CLASS, ":not(.").concat(ACCORDION_COMPLATED_CLASS, ")"))).forEach(function (ele) {
    accordions.push(new Accordion(ele));
  });
});

/***/ }),

/***/ "./src/common/js/_carousel.js":
/*!************************************!*\
  !*** ./src/common/js/_carousel.js ***!
  \************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var swiper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! swiper */ "./node_modules/swiper/js/swiper.esm.bundle.js");
/* harmony import */ var swiper_css_swiper_min_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! swiper/css/swiper.min.css */ "./node_modules/swiper/css/swiper.min.css");
/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_config */ "./src/common/js/_config.js");



var SWIPER_CONTAINER_CLASS = 'swiper-container';
var SWIPER_WRAPPER_CLASS = 'swiper-wrapper';
var SWIPER_SLIDE_CLASS = 'swiper-slide';
var SWIPER_PAGENATION_CLASS = 'swiper-pagination';
var CAROUSEL_PAGENATION_CLASS = 'pf-carousel_pagination';
/**
 * カルーセルマネージャ
 * 
 * @property { Array<Swiper> } CAROUSELS           カルーセルと関連情報を内包するオブジェクトのリスト
 * @property { String }        TRIGGER_CLASS       カルーセル実行対象のセレクタ名
 * @property { String }        CONTAINER_CLASS     カルーセルのコンテナー要素のセレクタ名
 * @property { String }        WRAPPER_CLASS       カルーセルのラッパー要素のセレクタ名
 * @property { String }        SLIDE_CLASS         カルーセルのアイテム要素のセレクタ名
 * @property { String }        PREV_CLASS          戻るボタン要素のセレクタ名
 * @property { String }        NEXT_CLASS          進むボタン要素のセレクタ名
 * @property { String }        PAGINATION_CLASS    ページネーション要素のセレクタ名
 * @property { String }        ACTIVE_CLASS        カルーセルアイテムがアクティブ時に付与されるクラス名
 * @property { String }        BULLET_CLASS        インジゲータのバレット要素のセレクタ名
 * @property { String }        BULLET_ACTIVE_CLASS バレットのアクティブ時に付与されるクラス名
 * @property { Object }        BASE_OPTIONS        カルーセル設定のベース値
 *
 */

var Carousel = function Carousel() {
  var TRIGGER_CLASS = 'js-pf-carousel';
  var CONTAINER_CLASS = 'js-pf-carousel-container';
  var WRAPPER_CLASS = 'js-pf-carousel-wrap';
  var SLIDE_CLASS = 'js-pf-carousel-slide';
  var PREV_CLASS = 'js-pf-carousel-prev';
  var NEXT_CLASS = 'js-pf-carousel-next';
  var PAGINATION_CLASS = 'js-pf-carousel-pagination';
  var ACTIVE_CLASS = 'js-pf-carousel-active';
  var BULLET_CLASS = 'pf-carousel_pagination_bullet';
  var BULLET_ACTIVE_CLASS = 'pf-carousel_pagination_bullet--active';
  var SHOW_COUNT_SP_DATA = 'data-show-count-sp';
  var SHOW_COUNT_PC_DATA = 'data-show-count-pc';
  var CENTER_DATA = 'data-carousel-center';
  var CENTER_SP_DATA = 'data-carousel-center-sp';
  var CENTER_PC_DATA = 'data-carousel-center-pc';
  var NO_LOOP_DATA = 'data-carousel-no-loop';
  var CAROUSEL_ONLY_PC_DATA = 'data-carousel-only-pc';
  var CAROUSEL_ONLY_SP_DATA = 'data-carousel-only-sp';
  var FOLLOWED_DATA = 'data-carousel-followed';
  var FOLLOW_TARGET_ID_DATA = 'data-carousel-follow-target-id';
  var BASE_OPTIONS = {
    wrapperClass: WRAPPER_CLASS,
    slideClass: SLIDE_CLASS,
    slideActiveClass: ACTIVE_CLASS,
    slidesPerView: 1,
    touchRatio: 1,
    breakpoints: {
      768: {}
    }
  };
  var CAROUSELS = [];
  /**
   * 特定デバイスのみカルーセルが活性になる指定の場合、現在のデバイスを判定し非活性かどうかを返す
   * @param  { HTMLElement }  ele カルーセルオブジェ
   * @return { Boolean }          活性指定の値と、デバイスが一致しない場合はtrue（カルーセルを非活性とする）
   */

  var isDisableState = function isDisableState(ele) {
    return ele.getAttribute(CAROUSEL_ONLY_PC_DATA) !== null && _config__WEBPACK_IMPORTED_MODULE_2__["default"].CURRENT_DEVICE === _config__WEBPACK_IMPORTED_MODULE_2__["default"].DEVICE.SP || ele.getAttribute(CAROUSEL_ONLY_SP_DATA) !== null && _config__WEBPACK_IMPORTED_MODULE_2__["default"].CURRENT_DEVICE === _config__WEBPACK_IMPORTED_MODULE_2__["default"].DEVICE.PC;
  };
  /**
   * デバイスがPCからSP、またはSPからPCへ変更した際に呼び出されます<br>
   * 活性状態から非活性状態へ遷移する際はアコーディオンを破棄します<br>
   * 非活性状態から活性状態へ遷移する際はアコーディオンを初期化します
   */


  var onDeviceChange = function onDeviceChange() {
    CAROUSELS.forEach(function (carousel) {
      carousel.carousel.destroy(false, true);
      carousel.containerEle.classList.remove(SWIPER_CONTAINER_CLASS);
      carousel.wrapperEle.classList.remove(SWIPER_WRAPPER_CLASS);
      carousel.slideEles.forEach(function (slideEle) {
        return slideEle.classList.remove(SWIPER_SLIDE_CLASS);
      });
      carousel.options.pagination && carousel.options.pagination.el && carousel.options.pagination.el.classList.remove(SWIPER_PAGENATION_CLASS);
      carousel.options.pagination && carousel.options.pagination.el && carousel.options.pagination.el.classList.remove(CAROUSEL_PAGENATION_CLASS);
    });
    CAROUSELS = new Array();
    var carouselTargets = [].slice.call(document.querySelectorAll(".".concat(TRIGGER_CLASS)));
    carouselTargets.forEach(function (target) {
      if (!isDisableState(target)) makeSwiper(target);
    });
  };
  /**
   * カルーセル生成
   * @param  { HTMLElements> } ele カルーセル生成の対象要素
   */


  var makeSwiper = function makeSwiper(ele) {
    var containerEle = ele.querySelector(".".concat(CONTAINER_CLASS));
    var wrapperEle = ele.querySelector(".".concat(WRAPPER_CLASS));
    var slideEles = [].slice.call(ele.querySelectorAll(".".concat(SLIDE_CLASS)));
    if (slideEles === null || slideEles.length <= 1 || containerEle === null) return;
    var options = Object.assign({}, BASE_OPTIONS, {
      slidesPerView: ele.getAttribute(SHOW_COUNT_SP_DATA) ? ele.getAttribute(SHOW_COUNT_SP_DATA) : 1,
      centeredSlides: ele.getAttribute(CENTER_DATA) !== null || ele.getAttribute(CENTER_SP_DATA) !== null,
      loop: ele.getAttribute(NO_LOOP_DATA) !== null ? false : true,
      breakpoints: {
        768: {
          slidesPerView: ele.getAttribute(SHOW_COUNT_PC_DATA) ? ele.getAttribute(SHOW_COUNT_PC_DATA) : 1,
          centeredSlides: ele.getAttribute(CENTER_DATA) !== null || ele.getAttribute(CENTER_PC_DATA) !== null
        }
      }
    });
    var showSlideCount = _config__WEBPACK_IMPORTED_MODULE_2__["default"].CURRENT_DEVICE === _config__WEBPACK_IMPORTED_MODULE_2__["default"].DEVICE.SP ? ele.getAttribute(SHOW_COUNT_SP_DATA) ? parseInt(ele.getAttribute(SHOW_COUNT_SP_DATA)) : 1 : ele.getAttribute(SHOW_COUNT_PC_DATA) ? parseInt(ele.getAttribute(SHOW_COUNT_PC_DATA)) : 1;
    var prevEle = ele.querySelector(".".concat(PREV_CLASS));
    var nextEle = ele.querySelector(".".concat(NEXT_CLASS));
    var paginationEle = ele.querySelector(".".concat(PAGINATION_CLASS));

    if (showSlideCount < slideEles.length) {
      if (prevEle !== null && nextEle !== null) {
        prevEle.style.display = '';
        nextEle.style.display = '';
        options.navigation = {
          prevEl: prevEle,
          nextEl: nextEle
        };
      } else {
        options.navigation = {};
      }

      if (paginationEle !== null) {
        paginationEle.classList.add(SWIPER_PAGENATION_CLASS);
        paginationEle.classList.add(CAROUSEL_PAGENATION_CLASS);
        options.pagination = {
          el: paginationEle,
          clickable: true,
          bulletClass: BULLET_CLASS,
          bulletActiveClass: BULLET_ACTIVE_CLASS
        };
      } else {
        options.pagination = {};
      }
    } else {
      if (prevEle !== null && nextEle !== null) {
        prevEle.style.display = 'none';
        nextEle.style.display = 'none';
      }

      options.navigation = {};
      options.pagination = {};
    }

    containerEle.classList.add(SWIPER_CONTAINER_CLASS);
    wrapperEle.classList.add(SWIPER_WRAPPER_CLASS);
    slideEles.forEach(function (slideEle) {
      return slideEle.classList.add(SWIPER_SLIDE_CLASS);
    });

    if (ele.getAttribute(FOLLOW_TARGET_ID_DATA)) {
      // 追従カルーセル
      options.shortSwipes = false;
      options.watchSlidesVisibility = true;
    }

    var swiper = new swiper__WEBPACK_IMPORTED_MODULE_0__["default"](containerEle, options);

    if (ele.getAttribute(FOLLOW_TARGET_ID_DATA)) {
      // 追従カルーセル
      var followTargetId = ele.getAttribute(FOLLOW_TARGET_ID_DATA);
      var followTarget = CAROUSELS.find(function (carousel) {
        return carousel.carouselElementId === followTargetId;
      });

      if (followTarget) {
        swiper.controller.control = followTarget.carousel;
        followTarget.carousel.controller.control = swiper;
        var leftLength = wrapperEle.style.transform.match(/3d\((.*?),/);

        if (leftLength.length > 1) {
          wrapperEle.style.left = "-".concat(leftLength[1]);
        }
      } // 自身のカルーセルをページネーション化


      slideEles.forEach(function (slide, index) {
        slide.style.cursor = 'pointer';
        slide.addEventListener('click', function () {
          swiper.slideTo(index);
        }, false);
      });
    }

    var carousel = {
      carousel: swiper,
      carouselElement: ele,
      carouselElementId: ele.getAttribute('id'),
      containerEle: containerEle,
      wrapperEle: wrapperEle,
      slideEles: slideEles,
      prevEle: prevEle,
      nextEle: nextEle,
      options: options
    };
    CAROUSELS.push(carousel);
  };

  return {
    initialize: function initialize() {
      var carouselTargets = [].slice.call(document.querySelectorAll(".".concat(TRIGGER_CLASS)));
      carouselTargets.forEach(function (target) {
        if (!isDisableState(target)) makeSwiper(target);
      });

      if (window.rm) {
        window.rm.setOnChangeDeviceCallback(onDeviceChange);
      }
    }
  };
};

var carousel;
window.addEventListener('DOMContentLoaded', function () {
  carousel = new Carousel();
  carousel.initialize();
});
/* harmony default export */ __webpack_exports__["default"] = (carousel);

/***/ }),

/***/ "./src/common/js/_chart.js":
/*!*********************************!*\
  !*** ./src/common/js/_chart.js ***!
  \*********************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var chart_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! chart.js */ "./node_modules/chart.js/dist/Chart.js");
/* harmony import */ var chart_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(chart_js__WEBPACK_IMPORTED_MODULE_0__);

var barColor = 'rgba(216, 216, 216, 1)';
var barMaxColor = 'rgba(35, 143, 232, 1)';
var bgColors = [barColor, barColor, barColor, barColor, barColor, barColor, barColor, barColor];

if ($('#chartA').length) {
  //正社員
  var ctxA = document.getElementById("chartA");
  var dataA = $('#chartA').data('graph-data');
  var labelA = $('#chartA').data('graph-label');
  var boundaryMinA = $('#chartA').data('graph-boundary-min');
  var boundaryMaxA = $('#chartA').data('graph-boundary-max');
  var maxA = 0;
  var maxPositionA = null;

  for (var i in dataA) {
    if (maxA < dataA[i]) {
      maxA = dataA[i];
      maxPositionA = i;
    }
  }

  bgColors[maxPositionA] = barMaxColor;
  var chartA = new (chart_js__WEBPACK_IMPORTED_MODULE_0___default())(ctxA, {
    type: 'bar',
    data: {
      labels: labelA,
      datasets: [{
        label: '給料分布',
        data: dataA,
        backgroundColor: bgColors,
        hoverBackgroundColor: bgColors,
        borderWidth: 0
      }]
    },
    options: {
      tooltips: {
        enabled: false
      },
      legend: {
        display: false
      },
      scales: {
        xAxes: [{
          display: false,
          categoryPercentage: 1
        }],
        yAxes: [{
          display: false,
          ticks: {
            beginAtZero: true
          }
        }]
      }
    }
  });
  $('.js-pf-chart-min-a').text(boundaryMinA);
  $('.js-pf-chart-max-a').text(boundaryMaxA);
}

;

if ($('#chartB').length) {
  //パート・アルバイト
  var ctxB = document.getElementById("chartB");
  var dataB = $('#chartB').data('graph-data');
  var labelB = $('#chartB').data('graph-label');
  var boundaryMinB = $('#chartB').data('graph-boundary-min');
  var boundaryMaxB = $('#chartB').data('graph-boundary-max');
  var maxB = 0;
  var maxPositionB = null;

  for (var i in dataB) {
    if (maxB < dataB[i]) {
      maxB = dataB[i];
      maxPositionB = i;
    }
  }

  bgColors[maxPositionB] = barMaxColor;
  var chartB = new (chart_js__WEBPACK_IMPORTED_MODULE_0___default())(ctxB, {
    type: 'bar',
    data: {
      labels: labelB,
      datasets: [{
        label: '給料分布',
        data: dataB,
        backgroundColor: bgColors,
        hoverBackgroundColor: bgColors,
        borderWidth: 0
      }]
    },
    options: {
      tooltips: {
        enabled: false
      },
      legend: {
        display: false
      },
      scales: {
        xAxes: [{
          display: false,
          categoryPercentage: 1
        }],
        yAxes: [{
          display: false,
          ticks: {
            beginAtZero: true
          }
        }]
      }
    }
  });
  $('.js-pf-chart-min-b').text(boundaryMinB);
  $('.js-pf-chart-max-b').text(boundaryMaxB);
}

;

if ($('#chartC').length) {
  //派遣社員
  var ctxC = document.getElementById("chartC");
  var dataC = $('#chartC').data('graph-data');
  var labelC = $('#chartC').data('graph-label');
  var boundaryMinC = $('#chartC').data('graph-boundary-min');
  var boundaryMaxC = $('#chartC').data('graph-boundary-max');
  var maxC = 0;
  var maxPositionC = null;

  for (var i in dataC) {
    if (maxC < dataC[i]) {
      maxC = dataC[i];
      maxPositionC = i;
    }
  }

  bgColors[maxPositionC] = barMaxColor;
  var chartC = new (chart_js__WEBPACK_IMPORTED_MODULE_0___default())(ctxC, {
    type: 'bar',
    data: {
      labels: labelC,
      datasets: [{
        label: '給料分布',
        data: dataC,
        backgroundColor: bgColors,
        hoverBackgroundColor: bgColors,
        borderWidth: 0
      }]
    },
    options: {
      tooltips: {
        enabled: false
      },
      legend: {
        display: false
      },
      scales: {
        xAxes: [{
          display: false,
          categoryPercentage: 1
        }],
        yAxes: [{
          display: false,
          ticks: {
            beginAtZero: true
          }
        }]
      }
    }
  });
  $('.js-pf-chart-min-c').text(boundaryMinC);
  $('.js-pf-chart-max-c').text(boundaryMaxC);
}

/***/ }),

/***/ "./src/common/js/_checkbox.js":
/*!************************************!*\
  !*** ./src/common/js/_checkbox.js ***!
  \************************************/
/***/ (function() {

var TARGET_CLASS = 'js-pf-checkbox-all';
var COMPLETE_CLASS = 'js-pf-checkbox-all-completed';

var CheckboxAllSelectable = function CheckboxAllSelectable(targetEl) {
  var checkboxName = targetEl.getAttribute('name');
  if (!checkboxName) return;
  var PARENT_ELE = targetEl;
  var CLICKABLE_ELE = targetEl.nextElementSibling;
  var groupChildCheckboxes = [].slice.call(document.querySelectorAll("input[type=\"checkbox\"][name=\"".concat(checkboxName, "\"]"))).reduce(function (accum, cb) {
    if (!cb.isSameNode(PARENT_ELE)) accum.push(cb);
    return accum;
  }, []);

  var onParentClick = function onParentClick(ev) {
    if (PARENT_ELE.checked) {
      groupChildCheckboxes.forEach(function (el) {
        el.checked = false;
      });
      PARENT_ELE.checked = false;
    } else {
      groupChildCheckboxes.forEach(function (el) {
        el.checked = true;
      });
      PARENT_ELE.checked = true;
    }

    ev.preventDefault();
    ev.stopPropagation();
  };

  var onParentChange = function onParentChange() {
    if (ev.currentTarget.checked) {
      groupChildCheckboxes.forEach(function (el) {
        el.checked = true;
      });
    } else {
      groupChildCheckboxes.forEach(function (el) {
        el.checked = false;
      });
    }

    ev.preventDefault();
    ev.stopPropagation();
  };
  /**
   * 子要素の選択状態変化時に発火  
   * 子要素の選択状態に応じて親要素の選択状態を切り替える
   */


  var onChildChange = function onChildChange() {
    // 子要素全てが選択されている場合
    if (groupChildCheckboxes.every(function (child) {
      return child.checked;
    })) {
      PARENT_ELE.checked = true;
    } else {
      PARENT_ELE.checked = false;
    }
  };
  /**
   * 初期化
   */


  var init = function init() {
    if (CLICKABLE_ELE) {
      CLICKABLE_ELE.addEventListener('click', onParentClick, false);
    } else {
      PARENT_ELE.addEventListener('change', function (ev) {
        return onParentChange(ev);
      }, false);
    }

    groupChildCheckboxes.forEach(function (child) {
      child.addEventListener('change', onChildChange, false);
    });
    PARENT_ELE.classList.add(COMPLETE_CLASS);
  };

  init();
};

window.addEventListener('DOMContentLoaded', function () {
  [].slice.call(document.querySelectorAll(".".concat(TARGET_CLASS, ":not(.").concat(COMPLETE_CLASS, ")"))).forEach(function (target) {
    CheckboxAllSelectable(target);
  });
});

/***/ }),

/***/ "./src/common/js/_config.js":
/*!**********************************!*\
  !*** ./src/common/js/_config.js ***!
  \**********************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/**
 * モジュール横断で使用されるサイトの設定値
 * @property { Object.<String, Number> } BREAK_POINTS       ブレイクポイントのリスト管理
 * @property { String }                  CURRENT_DEVICE     現在のデバイス名、リサイズ時に更新
 * @property { Object.<String, String> } DEVICE             デバイス名称の定数リスト
 */
var CONFIG = {
  BREAK_POINTS: {
    SP: 767
  },
  CURRENT_DEVICE: null,
  DEVICE: {
    SP: 'SP',
    PC: 'PC'
  }
};
/* harmony default export */ __webpack_exports__["default"] = (CONFIG);

/***/ }),

/***/ "./src/common/js/_date.js":
/*!********************************!*\
  !*** ./src/common/js/_date.js ***!
  \********************************/
/***/ (function() {

window.addEventListener('DOMContentLoaded', function () {
  $(function () {
    function change_wareki(date) {
      year = Number(date.substring(0, 4));
      mm = Number(date.substring(5, 7));
      dd = Number(date.substring(8, 10));

      var dt = new Date(year, mm - 1, dd);
      var opt = {year:'numeric',month:'long',day:'numeric'};
      var result = dt.toLocaleDateString("ja-JP-u-ca-japanese", opt);

      return result;
    } //yyyy年mm月dd日 → 和暦yy年mm月dd日に変換


    $('.js-pf-datepicker_wareki').on('change', function () {
      this.value = change_wareki(this.value);
    });
    $('.js-pf-datepicker').datepicker({
      dateFormat: "yy年mm月dd日",
      closeText: "閉じる",
      prevText: "&#x3C;前",
      nextText: "次&#x3E;",
      currentText: "今日",
      monthNames: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
      monthNamesShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
      dayNames: ["日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"],
      dayNamesShort: ["日", "月", "火", "水", "木", "金", "土"],
      dayNamesMin: ["日", "月", "火", "水", "木", "金", "土"],
      weekHeader: "週",
      isRTL: false,
      showMonthAfterYear: true,
      yearSuffix: "年",
      firstDay: 1,
      // 週の初めは月曜
      showButtonPanel: true // "今日"ボタン, "閉じる"ボタンを表示する

    });
  });
});

/***/ }),

/***/ "./src/common/js/_emitter.js":
/*!***********************************!*\
  !*** ./src/common/js/_emitter.js ***!
  \***********************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
var ee = __webpack_require__(/*! events */ "./node_modules/events/events.js");

var emitter = new ee.EventEmitter();
/**
 * emittorはシングルトン（複数インスタンスの生成は禁止）
 */

/* harmony default export */ __webpack_exports__["default"] = ({
  emit: emitter.emit,
  off: emitter.off,
  on: emitter.on,
  once: emitter.once
});

/***/ }),

/***/ "./src/common/js/_favorite.js":
/*!************************************!*\
  !*** ./src/common/js/_favorite.js ***!
  \************************************/
/***/ (function() {

window.addEventListener('DOMContentLoaded', function () {
  $(function () {
    $('.js-favorite').on('click', function () {
      if ($(this).hasClass('is-active')) {
        //既に『キープリスト』のボタンの時に、『キープする』ボタンに戻す処理は行わない
        //$(this).removeClass('is-active');
      } else {
        $(this).addClass('is-active');
        $(this).find('.js-favorite_baloon').addClass('is-active');
        setTimeout($.proxy(function () {
          $(this).find('.js-favorite_baloon').removeClass('is-active');
        }, this), 2000);
      }
    });
  });
});

/***/ }),

/***/ "./src/common/js/_float-box.js":
/*!*************************************!*\
  !*** ./src/common/js/_float-box.js ***!
  \*************************************/
/***/ (function() {

/**
 * フロートボックスマネージャ
 */
var FloatBoxManager = function FloatBoxManager() {
  /*
  var TARGET_CLASS = 'js-pf-float-box';
  var CONTAINER_CLASS = 'js-pf-float-box-container';
  var TOGGLE_CLASS = 'js-pf-float-box-toggle';
  var STATE_DATA = 'data-float-box-state';
  var STATE_OPEN = 'open';
  var STATE_CLOSE = 'close';
  var BTN_TXT_OPEN = 'ひらく';
  var BTN_TXT_CLOSE = 'とじる';
  var FLOAT_BOXES = [];
  */

  var onClose = function onClose(floatBox) {
    floatBox.el.setAttribute(STATE_DATA, STATE_CLOSE);
    floatBox.toggleBtns.forEach(function (btn) {
      btn.innerText = BTN_TXT_OPEN;
    });
  };

  var onOpen = function onOpen(floatBox) {
    floatBox.el.setAttribute(STATE_DATA, STATE_OPEN);
    floatBox.toggleBtns.forEach(function (btn) {
      btn.innerText = BTN_TXT_CLOSE;
    });
  };
  /**
   * クリック時の処理
   * @param { Object } floatBox 対象のfloatBox要素
   */


  var onClick = function onClick(floatBox) {
    switch (floatBox.el.getAttribute(STATE_DATA)) {
      case STATE_OPEN:
        onClose(floatBox);
        break;

      case STATE_CLOSE:
        onOpen(floatBox);
        break;

      default:
        onClose(floatBox);
    }
  };
  /**
   * イベント付与
   * @param { Object } floatBox 対象のfloatBoxオブジェクト
   */


  var addEvent = function addEvent(floatBox) {
    floatBox.toggleBtns.forEach(function (btn) {
      btn.addEventListener('click', function () {
        onClick(floatBox);
      }, false);
    });
  };
  /**
   * 初期化
   */

  /*
  var init = function init() {
    var targets = [].slice.call(document.querySelectorAll(".".concat(TARGET_CLASS)));
    targets.forEach(function (target) {
      var containerEl = [].slice.call(target.querySelectorAll(".".concat(CONTAINER_CLASS)));
      var toggleBtns = [].slice.call(target.querySelectorAll(".".concat(TOGGLE_CLASS)));
      FLOAT_BOXES.push({
        el: target,
        containerEl: containerEl,
        toggleBtns: toggleBtns,
        originHTML: containerEl.innerHTML
      });
    });
    FLOAT_BOXES.forEach(function (floatbox) {
      addEvent(floatbox);
      onClose(floatbox);
    });
  };

  init();
  return {};
  */
};

window.addEventListener('DOMContentLoaded', function () {
  FloatBoxManager();
});

/***/ }),

/***/ "./src/common/js/_follow-card.js":
/*!***************************************!*\
  !*** ./src/common/js/_follow-card.js ***!
  \***************************************/
/***/ (function() {

var TRIGGER_CLASS = 'js-pf-follow-card';
var CLOSE_CLASS = 'js-pf-follow-card-close';
/**
 * 追従カード
 * @constructor
 *
 * @param    { HTMLElement }  triggerElement 生成の対象となる要素
 */

var FollowCard = function FollowCard(triggerElement) {
  var TARGET_ELE = triggerElement;
  var CLOSE_BNTs = [].slice.call(TARGET_ELE.querySelectorAll(".".concat(CLOSE_CLASS)));

  var onClose = function onClose() {
    TARGET_ELE.classList.add('is-close');
  };

  var addEvent = function addEvent() {
    CLOSE_BNTs.forEach(function (closeBtn) {
      closeBtn.addEventListener('click', onClose, false);
    }); // 検索追従表示を受け取り

    emitter.on('onFollowPageBottomVisible', function () {
      TARGET_ELE.classList.remove('is-hidden-page-bottom');
    }); // 検索追従非表示を受け取り

    emitter.on('onFollowPageBottomHidden', function () {
      TARGET_ELE.classList.add('is-hidden-page-bottom');
    });
    window.setTimeout(function () {
      TARGET_ELE.classList.remove('is-close');
    }, 10000);
  };

  var init = function init() {
    addEvent();
  };

  init();
};

window.addEventListener('DOMContentLoaded', function () {
  [].slice.call(document.querySelectorAll(".".concat(TRIGGER_CLASS))).forEach(function (trigger) {
    FollowCard(trigger);
  });
});

/***/ }),

/***/ "./src/common/js/_follow-page-bottom.js":
/*!**********************************************!*\
  !*** ./src/common/js/_follow-page-bottom.js ***!
  \**********************************************/
/***/ (function() {

// window.addEventListener('DOMContentLoaded', function(){
//   let elem = $('#pf-pagenation');
//   elem.each(function () {
//     let elemOffset = $(this).offset().top;
//     let scrollPos = $(window).scrollTop();
//     let wh = $(window).height();
//     if (scrollPos > elemOffset - wh + (wh / 1)) {
//       $('#pf-page-bottom').fadeOut();
//     } else {
//       $('#pf-page-bottom').fadeIn();
//     }
//   });
// });
var FllowPageBottom = function FllowPageBottom() {
  var TARGET_ID = 'pf-page-bottom';
  var DISPLAY_TRIGGER_DATA = 'data-display-trigger-id';
  var HIDDEN_TRIGGER_DATA = 'data-trigger-id';
  var TARGET_ELE = document.getElementById(TARGET_ID);
  if (!TARGET_ELE) return;
  var HIDDEN_TRIGGER_ID = TARGET_ELE.getAttribute(HIDDEN_TRIGGER_DATA);
  var HIDDEN_TRIGGER_ELE = HIDDEN_TRIGGER_ID ? document.getElementById(HIDDEN_TRIGGER_ID) : undefined;
  var DISPLAY_TRIGGER_ID = TARGET_ELE.getAttribute(DISPLAY_TRIGGER_DATA);
  var DISPLAY_TRIGGER_ELE = DISPLAY_TRIGGER_ID ? document.getElementById(DISPLAY_TRIGGER_ID) : undefined;
  if (!HIDDEN_TRIGGER_ELE) return;
  if (!DISPLAY_TRIGGER_ELE) return;

  var onVisible = function onVisible() {
    TARGET_ELE.classList.remove('is-hidden'); // 検索追従表示を発火

    emitter.emit('onFollowPageBottomVisible');
  };

  var onHidden = function onHidden() {
    TARGET_ELE.classList.add('is-hidden'); // 検索追従非表示を発火

    emitter.emit('onFollowPageBottomHidden');
  };

  var OBSRVE_OPTION = {
    root: null,
    // 今回はビューポートをルート要素とする
    rootMargin: "0px 0px",
    // ビューポートの中心を判定基準にする
    threshold: 0 // 閾値は0

  };

  var whenIntersect = function whenIntersect(entries) {
    entries.forEach(function (entry) {
      var targetDisplayY = DISPLAY_TRIGGER_ELE.getBoundingClientRect().top;
      var targetY = HIDDEN_TRIGGER_ELE.getBoundingClientRect().top;

      if (!entry.isIntersecting) {
        if (targetY < 0 || targetDisplayY > 0) {
          onHidden();
        } else {
          onVisible();
        }
      } else {
        if (targetY + window.innerHeight < 0) {
          onHidden();
        } else {
          onVisible();
        }
      }
    });
  };

  var observer = new IntersectionObserver(whenIntersect, OBSRVE_OPTION);
  observer.observe(DISPLAY_TRIGGER_ELE);
  observer.observe(HIDDEN_TRIGGER_ELE);
};

window.addEventListener('DOMContentLoaded', function () {
  FllowPageBottom();
});

/***/ }),

/***/ "./src/common/js/_licenseSelector.js":
/*!*******************************************!*\
  !*** ./src/common/js/_licenseSelector.js ***!
  \*******************************************/
/***/ (function() {

var WRAPPER_CLASS_NAME = 'js-pf-license-selector';
var DATA_FIXED_FIELD_NAME = 'fixed-field-name';
var DATA_FREE_FIELD_NAME = 'free-field-name';
var DATA_MODAL_ID = 'license-modal-id';
var FREE_FIELD_CLASS_NAME = 'js-pf-license-selector_free';
var FREE_BUTTON_CLASS_NAME = 'js-pf-license-selector_free-btn';
var CHECKBOX_CLASS_NAME = 'js-pf-license-selector_candidate';
var DELETE_BUTTON_CLASS_NAME = 'js-pf-license-selector_delete-btn';
var REGISTER_BUTTON_CLASS_NAME = 'js-pf-license-selector_register-btn';
var SEARCH_FIELD_CLASS_NAME = 'js-pf-license-selector_search';
var SEARCH_LABEL_CLASS_NAME = 'js-pf-license-selector_label';
var MODAL_CLOSE_BUTTON_CLASS_NAME = 'js-pf-modal-close';
var TAGS_CLASS_NAME = 'js-pf-license-selector_tags';
var TAG_TEMPLATE = '<div class="pf-tag pf-tag_delete">%name%<input type="hidden" name="%formElementName%" value="%value%"><span class="close-btn js-pf-tag-delete-btn ' + DELETE_BUTTON_CLASS_NAME + '"></span></div>';
window.addEventListener('DOMContentLoaded', function () {
  $(function () {
    var addTags = function addTags($wrapper, $modal, $tags) {
      var $checked = $modal.find('.' + CHECKBOX_CLASS_NAME + ':checked');
      var fixedFieldName = $wrapper.data(DATA_FIXED_FIELD_NAME);
      $checked.each(function () {
        $(this).prop('checked', false);
        var newTag = TAG_TEMPLATE + '';
        var myName = $(this).next().text();
        var myValue = $(this).val(); //すでに同一IDの要素があれば追加しない。

        if ($tags.find('input[value="' + myValue + '"]').length > 0) {
          return;
        }

        newTag = newTag.replace('%name%', myName);
        newTag = newTag.replace('%value%', myValue);
        newTag = newTag.replace('%formElementName%', fixedFieldName);
        $tags.append(newTag);
      });
    };

    var addFreeTag = function addFreeTag($wrapper, $tags, value) {
      var newTag = TAG_TEMPLATE + '';
      var freeFieldName = $wrapper.data(DATA_FREE_FIELD_NAME);
      value = value.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/'/g, "&#039;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
      newTag = newTag.replace('%name%', value);
      newTag = newTag.replace('%value%', value);
      newTag = newTag.replace('%formElementName%', freeFieldName);
      $tags.append(newTag);
    };

    if ($('.' + WRAPPER_CLASS_NAME).length > 0) {
      $('.' + WRAPPER_CLASS_NAME).each(function () {
        var $wrapper = $(this);
        var modalId = $wrapper.data(DATA_MODAL_ID);
        var $modal = $('#' + modalId);

        if ($modal.length < 1) {
          console.error('紐付けされたモーダルがありません');
          return;
        }

        var $tags = $wrapper.find('.' + TAGS_CLASS_NAME);
        $modal.on('click', '.' + REGISTER_BUTTON_CLASS_NAME, function () {
          addTags($wrapper, $modal, $tags);
          $modal.find('.' + MODAL_CLOSE_BUTTON_CLASS_NAME).trigger('click');
        });
        $wrapper.on('click', '.' + FREE_BUTTON_CLASS_NAME, function () {
          var $freeField = $wrapper.find('.' + FREE_FIELD_CLASS_NAME);
          var value = $freeField.val();

          if (value) {
            addFreeTag($wrapper, $tags, value);
            $freeField.val('');
          }
        });
        $wrapper.on('change', '.' + SEARCH_FIELD_CLASS_NAME, function () {
          $modal.find('.' + CHECKBOX_CLASS_NAME).prop('checked', false);
          var keyword = $(this).val();
          var keywords = keyword.trim().split(' ');
          $modal.find('.' + SEARCH_LABEL_CLASS_NAME).each(function () {
            var $this = $(this);
            var match = true;

            for (var i in keywords) {
              if ($(this).text().indexOf(keywords[i]) === -1) {
                match = false;
              }
            }

            if (keyword == '' || match) {
              $this.show();
            } else {
              $this.hide();
            }
          });
        });
      });
    }
  });
});

/***/ }),

/***/ "./src/common/js/_mailaddress.js":
/*!***************************************!*\
  !*** ./src/common/js/_mailaddress.js ***!
  \***************************************/
/***/ (function() {

window.addEventListener('DOMContentLoaded', function () {
  $(function () {
    if ($('.js-pf-mailaddress').length) {
      var pfMailaddressDomains = ['gmail.com', 'yahoo.co.jp', 'docomo.ne.jp', 'ezweb.ne.jp', 'i.softbank.jp', 'icloud.com', 'hotmail.co.jp', 'hotmail.com', 'outlook.jp', 'live.jp', 'outlook.com'];
      $('.js-pf-mailaddress').each(function () {
        var $this = $(this);
        var $suggest = $this.next();
        $this.on('keyup', function () {
          var addr = $this.val();
          $suggest.html('').hide();

          if (!addr.match(/@/)) {
            return null;
          }

          var addrElements = addr.split('@');
          var regexDomain = addrElements[1] ? addrElements[1] : '.+';
          var regex = new RegExp('^' + regexDomain);

          for (var i in pfMailaddressDomains) {
            if (pfMailaddressDomains[i].match(regex)) {
              var suggestedMailAddr = addrElements[0] + '@' + pfMailaddressDomains[i];

              if (suggestedMailAddr != $this.val()) {
                $('<button type="button" class="js-pf-mailaddress-candidate" />').text(suggestedMailAddr).on('click', function () {
                  $this.val($(this).text());
                  $this.trigger('keyup');
                  $suggest.hide();
                }).appendTo($suggest);
                $suggest.show();
              }
            }
          }
        });
      });
    }
  });
});

/***/ }),

/***/ "./src/common/js/_modal.js":
/*!*********************************!*\
  !*** ./src/common/js/_modal.js ***!
  \*********************************/
/***/ (function() {

var MODAL_OPEN_TRIGGER = 'js-pf-modal-open';
var MODAL_VIRTUAL_OPEN_TRIGGER = 'js-pf-modal-open-v';
var MODAL_CLOSE_TRIGGER = 'js-pf-modal-close';
var MODAL_STATUS = 'data-modal-status';
var STATUS_OPEN = 'open';
var STATUS_CLOSE = 'close';
var OPEN_READY_CLASS = 'pf-modal_ready-open';
var CLOSE_READY_CLASS = 'pf-modal_ready-close';
var MODAL_TARGET_DATA = 'data-modal-target';
var DATA_ONLY_PC = 'data-modal-only-pc';
var DATA_ONLY_SP = 'data-modal-only-sp';

var ModalManager = function ModalManager() {
  var onModalCLoseCallbacks = [];
  /**
   * クローズ処理
   */

  var onClose = function onClose() {
    var openModals = [].slice.call(document.querySelectorAll("[".concat(MODAL_STATUS, "=").concat(STATUS_OPEN, "]")));
    openModals.forEach(function (modal) {
      modal.classList.add(CLOSE_READY_CLASS);
      setTimeout(function () {
        modal.classList.remove(CLOSE_READY_CLASS);
        modal.setAttribute(MODAL_STATUS, STATUS_CLOSE); // コールバック実行

        var modalId = modal.getAttribute('id');
        onModalCLoseCallbacks.forEach(function (b) {
          b.apply(this, [modalId]);
        });
      }, 300);
    }); // 背景スクロールを解除

    document.body.style.height = '';
    document.body.style.overflow = '';
  };
  /**
   * オープン処理
   */


  var onOpen = function onOpen(modalId, el) {
    var target = document.getElementById(modalId);

    if (target) {
      target.setAttribute(MODAL_STATUS, STATUS_OPEN);
      target.classList.add(OPEN_READY_CLASS);
      setTimeout(function () {
        target.classList.remove(OPEN_READY_CLASS);
      }, 5); // 背景スクロールを禁止

      document.body.style.height = '100vh';
      document.body.style.overflow = 'hidden'; // オープンイベントを発火

      window.emitter.emit('onModalOpen', modalId, el);
    }
  };

  var onChangeDeviceType = function onChangeDeviceType(device) {
    var openModals = [].slice.call(document.querySelectorAll("[".concat(MODAL_STATUS, "=").concat(STATUS_OPEN, "]")));

    switch (device) {
      case 'SP':
        if (openModals.find(function (modal) {
          if (modal.hasAttribute(DATA_ONLY_PC)) {
            return true;
          }
        })) {
          onClose();
        }

        break;

      case 'PC':
        if (openModals.find(function (modal) {
          if (modal.hasAttribute(DATA_ONLY_SP)) {
            return true;
          }
        })) {
          onClose();
        }

        break;
    }
  };

  var init = function init() {
    var openBtn = [].slice.call(document.querySelectorAll(".".concat(MODAL_OPEN_TRIGGER)));
    openBtn.forEach(function (el) {
      el.addEventListener('click', function (ev) {
        ev.preventDefault();
        ev.stopPropagation();
        var targetModalId = el.getAttribute(MODAL_TARGET_DATA);

        if (targetModalId) {
          onOpen(targetModalId, el);
        }
      }, false);
    }); // jQueryからの擬似的クリック処理の追加

    $('.' + MODAL_VIRTUAL_OPEN_TRIGGER).on('v-click', function (ev) {
      ev.preventDefault();
      ev.stopPropagation();
      var el = $(this).get(0);
      var targetModalId = el.getAttribute(MODAL_TARGET_DATA);

      if (targetModalId) {
        onOpen(targetModalId, el);
      }
    });
    var closeBtn = [].slice.call(document.querySelectorAll(".".concat(MODAL_CLOSE_TRIGGER)));
    closeBtn.forEach(function (el) {
      el.addEventListener('click', function (ev) {
        onClose();
      }, false);
    });

    if (window.rm) {
      window.rm.setOnChangeDeviceCallback(onChangeDeviceType);
    }
  };

  init();
  return {
    /**
     * モーダル閉じる際に発火される
     * @param { Function } 処理
     */
    setOnModalCLoseCallback: function setOnModalCLoseCallback(func) {
      if (typeof func === 'function') onModalCLoseCallbacks.push(func);
    },
    open: function open(modalId) {
      onOpen(modalId, undefined);
    },
    close: function close() {
      onClose();
    },
    addModal: function addModal(triggerEl) {
      triggerEl.addEventListener('click', function (ev) {
        ev.preventDefault();
        ev.stopPropagation();
        var targetModalId = triggerEl.getAttribute(MODAL_TARGET_DATA);

        if (targetModalId) {
          onOpen(targetModalId, triggerEl);
        }
      }, false);
    }
  };
};

window.addEventListener('DOMContentLoaded', function () {
  window.ModalManager = ModalManager();
});

/***/ }),

/***/ "./src/common/js/_radio.js":
/*!*********************************!*\
  !*** ./src/common/js/_radio.js ***!
  \*********************************/
/***/ (function() {

/**
 * ラジオボタンを選択外せる仕様に変更
 *
 */
var UnFocusableRadio = function UnFocusableRadio() {
  var CHECKED_DATA = 'data-checked';
  /**
   * クリック時の処理  
   * ここで選択状態を切り替える
   */

  var onClick = function onClick(ev) {
    var targetEl = ev.currentTarget;
    var name = targetEl.getAttribute('name');
    [].slice.call(document.querySelectorAll("input[type=\"radio\"][name=\"".concat(name, "\"]"))).forEach(function (radio) {
      if (!radio.isSameNode(targetEl)) {
        radio.setAttribute(CHECKED_DATA, 'false');
      }
    });

    if (targetEl.getAttribute(CHECKED_DATA) === 'true') {
      targetEl.checked = false;
      targetEl.setAttribute(CHECKED_DATA, 'false');
    } else {
      targetEl.checked = true;
      targetEl.setAttribute(CHECKED_DATA, 'true');
    }
  };
  /**
   * 初期化
   */


  var init = function init() {
    var radios = [].slice.call(document.querySelectorAll("input[type=\"radio\"]:not([data-checked]"));
    radios.forEach(function (radio) {
      radio.addEventListener('click', function (ev) {
        onClick(ev);
      }, false);
      radio.setAttribute(CHECKED_DATA, 'false');
    });
  };

  init();
};

window.addEventListener('DOMContentLoaded', function () {
  UnFocusableRadio();
});

/***/ }),

/***/ "./src/common/js/_readmore.js":
/*!************************************!*\
  !*** ./src/common/js/_readmore.js ***!
  \************************************/
/***/ (function() {

window.addEventListener('DOMContentLoaded', function () {
  // もっと見る テキストクリック
  $('.pf-readmore_btn').on('click', function () {
    if ($(this).children().is('.is-open')) {
      $(this).html('<p class="is-close">閉じる</p>').addClass('pf-readmore_btn--close');
      $(this).parent().removeClass('pf-readmore_slide--up').addClass('pf-readmore_slide--down');
    } else {
      $(this).html('<p class="is-open">もっと見る</p>').removeClass('pf-readmore_btn--close');
      $(this).parent().removeClass('pf-readmore_slide--down').addClass('pf-readmore_slide--up');
    }
  }); // もっと見る ボタンクリック

  var contentsCount = $(".pf-js-article").find('.pf-js-article_item').length;
  var contentsCount_num = 4;

  if (contentsCount <= contentsCount_num) {
    $(".pf-js-article_btn").hide();
  } else {
    $(".pf-js-article_item").slice(contentsCount_num).hide();
    $(".pf-js-article_btn").on('click', function () {
      if ($(".pf-js-article_item").slice(contentsCount_num).is(':hidden')) {
        $(".pf-js-article_item").slice(contentsCount_num).slideDown();
        $(this).text('閉じる');
      } else {
        $(".pf-js-article_item").slice(contentsCount_num).slideUp();
        $(this).html('関連記事をもっと見る' + '<img src="/common/images/ic-addition.svg" alt="追加" class="pf-button--addition_img">');
      }
    });
  }
});

/***/ }),

/***/ "./src/common/js/_resize.js":
/*!**********************************!*\
  !*** ./src/common/js/_resize.js ***!
  \**********************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_config */ "./src/common/js/_config.js");


/**
 * リサイズマネージャ
 */

var ResizeManager = function ResizeManager() {
  var THROTTLE_TIME = 0;
  var resizeCallbacks = [];
  var resizeTimer;
  var onChangeDeviceCallbacks = [];
  /**
   * デバイスタイプを設定
   */

  var judgeDevice = function judgeDevice() {
    var device;
    Object.entries(_config__WEBPACK_IMPORTED_MODULE_1__["default"].BREAK_POINTS).forEach(function (_ref) {
      var _ref2 = (0,_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_ref, 2),
          key = _ref2[0],
          value = _ref2[1];

      if (window.matchMedia("(max-width: ".concat(value, "px)")).matches) {
        device = key;
      }
    });

    if (device == undefined) {
      device = _config__WEBPACK_IMPORTED_MODULE_1__["default"].DEVICE.PC;
    }

    return device;
  };
  /**
   * 初期化
   */


  var init = function init() {
    _config__WEBPACK_IMPORTED_MODULE_1__["default"].CURRENT_DEVICE = judgeDevice();
    window.addEventListener('resize', function () {
      clearTimeout(resizeTimer);
      resizeTimer = setTimeout(function () {
        var a = arguments;
        resizeCallbacks.forEach(function (b) {
          b.apply(this, a);
        });

        if (_config__WEBPACK_IMPORTED_MODULE_1__["default"].CURRENT_DEVICE !== judgeDevice()) {
          _config__WEBPACK_IMPORTED_MODULE_1__["default"].CURRENT_DEVICE = judgeDevice();
          onChangeDeviceCallbacks.forEach(function (b) {
            b.apply(this, [_config__WEBPACK_IMPORTED_MODULE_1__["default"].CURRENT_DEVICE]);
          });
        }
      }, THROTTLE_TIME);
    }, false);
  };

  init();
  return {
    /**
     * リサイズ時のコールバックを登録
     * @param { Function } func リサイズ時に呼び出す処理
     */
    setCallback: function setCallback(func) {
      if (typeof func === 'function') resizeCallbacks.push(func);
    },

    /**
     * デバイス変更時のコールバックを登録
     * @param { Function } リサイズ時に呼び出す処理
     */
    setOnChangeDeviceCallback: function setOnChangeDeviceCallback(func) {
      if (typeof func === 'function') onChangeDeviceCallbacks.push(func);
    }
  };
};

/* harmony default export */ __webpack_exports__["default"] = (ResizeManager);

/***/ }),

/***/ "./src/common/js/_scroll.js":
/*!**********************************!*\
  !*** ./src/common/js/_scroll.js ***!
  \**********************************/
/***/ (function() {

window.addEventListener('DOMContentLoaded', function () {
  var headerH = $('.js-fixed-header').height();
  var lastPos = 0;
  var docH = $(document).height();
  var winH = $(window).height();
  var btmPos = docH - winH;
  $(window).on('scroll', function () {
    var pos = $(this).scrollTop();

    if (pos >= 0 && pos > headerH && pos < lastPos) {
      $('.js-fixed-header').addClass('is-closed');
    } else {
      $('.js-fixed-header').removeClass('is-closed');
    }

    if (pos >= 0 && pos > headerH && pos > lastPos) {
      $('.js-fixed-header').addClass('is-closed');
    } else {
      $('.js-fixed-header').removeClass('is-closed');
    }

    if (pos == btmPos) {
      $('.js-fixed-header').removeClass('is-closed');
    }

    lastPos = pos;
  });
});

/***/ }),

/***/ "./src/common/js/_scrollManager.js":
/*!*****************************************!*\
  !*** ./src/common/js/_scrollManager.js ***!
  \*****************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/**
 * スクロールコールバック
 */
var ScrollManager = function ScrollManager() {
  var THROTTLE_TIME = 10;
  var callbacks = [];
  var throttleTimer;
  /**
   * 初期化
   */

  var init = function init() {
    window.addEventListener('scroll', function () {
      clearTimeout(throttleTimer);
      throttleTimer = setTimeout(function () {
        var a = arguments;
        callbacks.forEach(function (b) {
          b.apply(this, a);
        });
      }, THROTTLE_TIME);
    }, false);
  };

  init();
  return {
    /**
     * デバイスタイプを設定
     * @param { Function } リサイズ時に呼び出す処理
     */
    setCallback: function setCallback(func) {
      if (typeof func === 'function') callbacks.push(func);
    }
  };
};

/* harmony default export */ __webpack_exports__["default"] = (ScrollManager);

/***/ }),

/***/ "./src/common/js/_searchmenu.js":
/*!**************************************!*\
  !*** ./src/common/js/_searchmenu.js ***!
  \**************************************/
/***/ (function() {

var TARGET_CLASS = 'js-pf-searchmenu';
/**
 * 検索メニューマネージャ
 *
 * @param {string} key キー
 * @param {number} value 値
 * 
 * @return {number} 変数
 */

var SearchMenuManager = function SearchMenuManager(target) {
  var PAGE_CLASS = 'js-pf-searchmenu-page'; // 検索メニュー要素

  var SEARCH_MENU = target;
  var BODY = SEARCH_MENU.querySelector('.pf-searchmenu_body');
  var FOOT = SEARCH_MENU.querySelector('.pf-searchmenu_foot');
  var PAGE_ELEs = [].slice.call(target.querySelectorAll(".".concat(PAGE_CLASS)));
  var CURRENT_PAGE_CLASS = 'is-current-page';
  var DATA_PAGENAME = 'data-searchmenu-pagename';
  var DATA_BASE_PAGE = 'data-searchmenu-page-base';
  var DATA_LANDING_PAGE = 'data-searchmenu-landing-page';
  var DATA_REQUIRE_PAGE = 'data-searchmenu-require-page';
  var DATA_ACTIVE_CHECKED = 'data-searchmenu-active-cheked';
  var DATA_ACTIVE_STATUS = 'data-searchmenu-active-status';
  var DATA_ACTION_TYPE = 'data-searchmenu-action-type';
  var PAGE_ACTION_TYPEs = {
    SEARCH: 'search',
    // 検索ページにサブミット
    INPUT: 'input' // 指定箇所に入力内容を挿入

  }; // ページ遷移要素

  var DATA_MOVE_TO = 'data-searchmenu-move-to';
  var DATA_BACK_TO = 'data-searchmenu-back-to';
  var READY_RIGHT_IN_CLASS = 'is-ready-next-index';
  var READY_LEFT_IN_CLASS = 'is-ready-prev-index';
  var MOVE_BTN_CLASS = 'js-pf-searchmenu-move';
  var BACK_BTN_CLASS = 'js-pf-searchmenu-back';
  var PREV_BTNs = [].slice.call(SEARCH_MENU.querySelectorAll(".".concat(BACK_BTN_CLASS))); // 自身の検索メニューID

  var SELF_SEARCHMENU_ID = SEARCH_MENU.closest('.pf-modal').getAttribute('id'); // ステータス

  var DATA_SEARCHMENU_STATUS = 'data-searchmenu-status';
  var DATA_PAGE_STATUS = 'data-searchmenu-page-status';
  var PAGE_STATUS = {
    NEXT: 'next',
    COMPLETE: 'complete',
    ADD: 'add'
  }; // カテゴリー

  var DATA_CATEGORY = 'data-searchmenu-category';
  var DATA_SELECTED_CATEGORY = 'data-searchmenu-select-category'; // 入力値挿入

  var INPUT_TRIGGER_CLASS = 'js-pf-searchmenu-input';
  var DATA_INPUT_MOUNT_PAGEs = 'data-searchmenu-mount-pages';
  var DATA_INPUT_MOUNT_POINT = 'data-searchmenu-mount-point';
  var DATA_INPUT_MOUNT_POINT_CUSTOMs = 'data-searchmenu-mount-point-customs';
  var DATA_INPUT_MOUNT_FROM = 'data-searchmenu-mount-from';
  var ADD_TRIGGER_CLASS = 'js-pf-searchmenu-add';
  var DATA_ADD_MOUNT_TO = 'data-searchmenu-add-to';
  var DATA_ADD_MOUNT_POINT = 'data-add-mount-point';
  /**
   * リフレッシュ
   *
   */

  var refresh = function refresh() {
    SEARCH_MENU.removeAttribute(DATA_LANDING_PAGE);
    SEARCH_MENU.removeAttribute(DATA_INPUT_MOUNT_PAGEs);
    SEARCH_MENU.removeAttribute(PAGE_STATUS);
    SEARCH_MENU.removeAttribute(DATA_INPUT_MOUNT_POINT_CUSTOMs);
    PAGE_ELEs.forEach(function (page) {
      page.classList.remove(CURRENT_PAGE_CLASS);
    });
  };
  /**
   * 閉じる
   *
   */


  var onClose = function onClose() {
    refresh();

    if (window.ModalManager) {
      window.ModalManager.close();
    }
  };
  /**
   * 入力値をマウントポイントに挿入
   *
   */


  var onInput = function onInput() {
    if (SEARCH_MENU.hasAttribute(DATA_INPUT_MOUNT_POINT_CUSTOMs)) {
      // 挿入先の指定がある場合
      var customMountPoints = SEARCH_MENU.getAttribute(DATA_INPUT_MOUNT_POINT_CUSTOMs).split(',').reduce(function (accum, data) {
        var dataArr = data.split('=');
        accum.push({
          pageName: dataArr[0],
          mountPointsData: dataArr[1]
        });
        return accum;
      }, []);
      customMountPoints.forEach(function (mountPointData) {
        var pageEl = PAGE_ELEs.find(function (page) {
          return page.getAttribute(DATA_PAGENAME) === mountPointData.pageName;
        });

        if (pageEl) {
          var allCheckedValue = [].slice.call(pageEl.querySelectorAll("input:not(.js-pf-checkbox-all), select")).reduce(function (accum, input) {
            if (input.checked) accum.push(input.value);
            return accum;
          }, []);
          var mountPoints = [].slice.call(document.querySelectorAll(mountPointData.mountPointsData));
          var inputData = allCheckedValue.join(',');

          if (inputData !== '') {
            mountPoints.forEach(function (mountPoint) {
              mountPoint.setAttribute(DATA_INPUT_MOUNT_FROM, pageEl.getAttribute(DATA_PAGENAME));

              if (!mountPoint.hasAttribute('data-origin')) {
                mountPoint.setAttribute('data-origin', mountPoint.innerHTML);
              }

              if (mountPoint.tagName === 'INPUT') {
                mountPoint.value = allCheckedValue.join(',');
              } else {
                mountPoint.innerHTML = allCheckedValue.join(',');
              }
            });
          } else {
            mountPoints.forEach(function (mountPoint) {
              mountPoint.removeAttribute(DATA_INPUT_MOUNT_FROM);

              if (mountPoint.hasAttribute('data-origin')) {
                mountPoint.innerHTML = mountPoint.getAttribute('data-origin');
              }
            });
          }
        }
      });
    } else {
      // 指定の挿入先がない場合
      var targetPageNemas = SEARCH_MENU.getAttribute(DATA_INPUT_MOUNT_PAGEs).split(',');
      targetPageNemas.forEach(function (pageName) {
        var pageEl = PAGE_ELEs.find(function (page) {
          return page.getAttribute(DATA_PAGENAME) === pageName;
        });

        if (pageEl) {
          var allCheckedValue = [].slice.call(pageEl.querySelectorAll("input:not(.js-pf-checkbox-all), select")).reduce(function (accum, input) {
            if (input.checked) accum.push(input.value);
            return accum;
          }, []);
          var mountPoints = [].slice.call(document.querySelectorAll("[".concat(DATA_INPUT_MOUNT_POINT, "-").concat(pageName.toLowerCase(), "]")));
          var inputData = allCheckedValue.join(',');

          if (inputData !== '') {
            mountPoints.forEach(function (mountPoint) {
              mountPoint.setAttribute(DATA_INPUT_MOUNT_FROM, pageEl.getAttribute(DATA_PAGENAME));

              if (!mountPoint.hasAttribute('data-origin')) {
                mountPoint.setAttribute('data-origin', mountPoint.innerHTML);
              }

              if (mountPoint.tagName === 'INPUT') {
                mountPoint.value = allCheckedValue.join(',');
                $(mountPoint).trigger('virtualChange');
              } else {
                mountPoint.innerHTML = allCheckedValue.join(',');
              }
            });
          } else {
            mountPoints.forEach(function (mountPoint) {
              mountPoint.removeAttribute(DATA_INPUT_MOUNT_FROM);

              if (mountPoint.hasAttribute('data-origin')) {
                mountPoint.innerHTML = mountPoint.getAttribute('data-origin');
              }
            });
          }
        }
      });
    }
  };
  /**
   * 入力値をマウントポイントに挿入して他の検索条件追加に戻る
   *
   */


  var onAdd = function onAdd() {
    var currentPage = PAGE_ELEs.find(function (page) {
      return page.classList.contains(CURRENT_PAGE_CLASS);
    });

    if (currentPage) {
      var customMountPoints = currentPage.getAttribute(DATA_ADD_MOUNT_TO).split(',').reduce(function (accum, query) {
        accum.push(query);
        return accum;
      }, []);
      customMountPoints.forEach(function (mountPointQuery) {
        var allCheckedValue = [].slice.call(currentPage.querySelectorAll("input:not(.js-pf-checkbox-all), select")).reduce(function (accum, input) {
          if (input.checked || input.hasAttribute('type') && input.getAttribute('type') === 'text' || input.hasAttribute('type') && input.getAttribute('type') === 'number' || input.tagName === 'SELECT') {
            accum.push(input.value);
          }

          return accum;
        }, []);
        var mountPoints = [].slice.call(document.querySelectorAll(mountPointQuery));
        var inputData = allCheckedValue.join(',');

        if (inputData !== '') {
          mountPoints.forEach(function (mountPoint) {
            if (!mountPoint.hasAttribute('data-origin')) {
              mountPoint.setAttribute('data-origin', mountPoint.innerHTML);
            }

            if (mountPoint.tagName === 'INPUT') {
              mountPoint.value = inputData;
            } else {
              mountPoint.innerHTML = inputData;
            }
          });
        } else {
          mountPoints.forEach(function (mountPoint) {
            if (mountPoint.hasAttribute('data-origin')) {
              mountPoint.innerHTML = mountPoint.getAttribute('data-origin');
            }
          });
        }
      });
    }
  };
  /**
   * カテゴリーの表示/非表示切り替え
   */


  var toggleCategoryVisiblity = function toggleCategoryVisiblity() {
    // カテゴリを一旦全て非表示
    var categories = [].slice.call(SEARCH_MENU.querySelectorAll("*[".concat(DATA_CATEGORY, "]")));
    categories.forEach(function (category) {
      category.style.display = 'none';
    });
    var selectedCatogories = [].slice.call(SEARCH_MENU.querySelectorAll("*[".concat(DATA_SELECTED_CATEGORY, "]"))).reduce(function (accum, selectBtn) {
      var inputEl = selectBtn.querySelector('input');

      if (inputEl.checked) {
        var selectedCategory = selectBtn.getAttribute(DATA_SELECTED_CATEGORY); //IE対策

        if (!Array.prototype.includes) {
          // IEの場合
          var isNotIncluded = true;

          for (var i in accum) {
            if (accum[i] === selectedCategory) {
              isNotIncluded = false;
              break;
            }
          }

          if (isNotIncluded) {
            accum.push(selectedCategory);
          }
        } else {
          if (!accum.includes(selectedCategory)) {
            accum.push(selectedCategory);
          }
        }
      }

      return accum;
    }, []);
    categories.forEach(function (category) {
      var thisCategory = category.getAttribute(DATA_CATEGORY); //IE対策

      var isIncluded = false;

      if (!Array.prototype.includes) {
        //IEの場合
        for (var i in selectedCatogories) {
          if (selectedCatogories[i] == thisCategory) {
            isIncluded = true;
            break;
          }
        }
      } else {
        isIncluded = selectedCatogories.includes(thisCategory);
      }

      if (isIncluded) {
        category.style.display = '';
      } else {
        category.style.display = 'none'; // 選択状態を全て外す

        [].slice.call(category.querySelectorAll('input:checked')).forEach(function (input) {
          return input.checked = false;
        });
      }
    });
  };
  /**
   * ページ戻り
   * @param { HTMLElement }      triggerEl 遷移アクションのトリガー要素
   */


  var onPageBack = function onPageBack(triggerEl, backPageName) {
    var currentPage = PAGE_ELEs.find(function (page) {
      return page.classList.contains(CURRENT_PAGE_CLASS);
    }); // ボタンが戻り先を持っている場合はそちらを優先

    if (triggerEl && triggerEl.getAttribute(DATA_MOVE_TO)) {
      var backToPageName = triggerEl.getAttribute(DATA_MOVE_TO);
      var backToPageEl = PAGE_ELEs.find(function (page) {
        return page.getAttribute(DATA_PAGENAME) === backToPageName;
      });

      if (backToPageEl) {
        return openPage(backToPageEl, 'left');
      }
    } else if (backPageName) {
      var _backToPageEl = PAGE_ELEs.find(function (page) {
        return page.getAttribute(DATA_PAGENAME) === backPageName;
      });

      if (_backToPageEl) {
        return openPage(_backToPageEl, 'left');
      }
    } else if (currentPage && currentPage.getAttribute(DATA_BACK_TO)) {
      // ページに戻り先がある場合はそちら
      var _backToPageName = currentPage.getAttribute(DATA_BACK_TO);

      var _backToPageEl2 = PAGE_ELEs.find(function (page) {
        return page.getAttribute(DATA_PAGENAME) === _backToPageName;
      });

      if (_backToPageEl2) {
        return openPage(_backToPageEl2, 'left');
      }
    } else {
      // 何もない場合はランディングページに戻す
      var landingPageName = SEARCH_MENU.getAttribute(DATA_LANDING_PAGE);

      var _backToPageEl3 = PAGE_ELEs.find(function (page) {
        return page.getAttribute(DATA_PAGENAME) === landingPageName;
      });

      if (_backToPageEl3) {
        return openPage(_backToPageEl3, 'left');
      }
    }

    console.error('error: Not fount back to page');
  };
  /**
   * ページ遷移
   * @param { HTMLElement }      triggerEl 遷移アクションのトリガー要素
   */


  var onPageMove = function onPageMove(triggerEl) {
    var currentPage = PAGE_ELEs.find(function (page) {
      return page.classList.contains(CURRENT_PAGE_CLASS);
    }); // ボタンが遷移先を持っている場合はそちらを優先

    if (triggerEl.getAttribute(DATA_MOVE_TO)) {
      var moveToPageName = triggerEl.getAttribute(DATA_MOVE_TO);
      var moveToPageEl = PAGE_ELEs.find(function (page) {
        return page.getAttribute(DATA_PAGENAME) === moveToPageName;
      });

      if (moveToPageEl) {
        return openPage(moveToPageEl, 'right');
      }
    } else if (currentPage && currentPage.getAttribute(DATA_MOVE_TO)) {
      // ページに遷移先がある場合はそちら
      var _moveToPageName = currentPage.getAttribute(DATA_MOVE_TO);

      var _moveToPageEl = PAGE_ELEs.find(function (page) {
        return page.getAttribute(DATA_PAGENAME) === _moveToPageName;
      });

      if (_moveToPageEl) {
        return openPage(_moveToPageEl, 'right');
      }
    }

    console.error('error: Not fount move to page');
  };
  /**
   * イベント設定
   */


  var addEvent = function addEvent() {
    var moveBtns = [].slice.call(SEARCH_MENU.querySelectorAll(".".concat(MOVE_BTN_CLASS)));
    moveBtns.forEach(function (btn) {
      btn.addEventListener('click', function (ev) {
        ev.preventDefault();
        ev.stopPropagation();
        onPageMove(btn);
      }, false);
    });
    var backBtns = [].slice.call(SEARCH_MENU.querySelectorAll(".".concat(BACK_BTN_CLASS)));
    backBtns.forEach(function (btn) {
      btn.addEventListener('click', function (ev) {
        ev.preventDefault();
        ev.stopPropagation();
        onPageBack(btn);
      }, false);
    });
    var categorySelectBtns = [].slice.call(SEARCH_MENU.querySelectorAll("*[".concat(DATA_SELECTED_CATEGORY, "]")));
    categorySelectBtns.forEach(function (btn) {
      var input = btn.querySelector('input');

      if (input) {
        btn.addEventListener('click', function (ev) {
          // ev.preventDefault();
          // ev.stopPropagation();
          toggleCategoryVisiblity();
        }, false);
      }
    });
    var inputBtns = [].slice.call(SEARCH_MENU.querySelectorAll(".".concat(INPUT_TRIGGER_CLASS)));
    inputBtns.forEach(function (btn) {
      btn.addEventListener('click', function (ev) {
        ev.preventDefault();
        ev.stopPropagation();
        onInput();
        onClose();
      }, false);
    });
    var addBtns = [].slice.call(document.querySelectorAll(".".concat(ADD_TRIGGER_CLASS)));
    addBtns.forEach(function (btn) {
      btn.addEventListener('click', function (ev) {
        ev.preventDefault();
        ev.stopPropagation();
        onAdd();
        onPageBack(undefined, 'HOME');
      }, false);
    });
  };
  /**
   * フッター状態の設定
   * @param { HTMLElement } openedPage 開かれるページのHTML要素
   */


  var setFootStatus = function setFootStatus(openedPage) {
    var status = openedPage.getAttribute(DATA_PAGE_STATUS);

    if (status) {
      switch (status) {
        case PAGE_STATUS.NEXT:
          FOOT.setAttribute(DATA_SEARCHMENU_STATUS, 'next');
          break;

        case PAGE_STATUS.COMPLETE:
          FOOT.setAttribute(DATA_SEARCHMENU_STATUS, 'complete');
          break;

        case PAGE_STATUS.ADD:
          FOOT.setAttribute(DATA_SEARCHMENU_STATUS, 'add');
          break;
      }
    }
  };
  /**
   * ページのinput要素の変更を監視
   * @param { HTMLElement } targetPage    監視対象のページ
   */


  var ObserveInputChanged = function ObserveInputChanged(targetPage) {
    if (targetPage.hasAttribute(DATA_ACTIVE_CHECKED)) {
      var inputs = [].slice.call(targetPage.querySelectorAll("input"));
      inputs.forEach(function (input) {
        input.addEventListener('click', function (ev) {
          setTimeout(function () {
            if (inputs.some(function (input) {
              return input.checked === true;
            })) {
              SEARCH_MENU.setAttribute(DATA_ACTIVE_STATUS, 'active');
            } else {
              SEARCH_MENU.setAttribute(DATA_ACTIVE_STATUS, 'inactive');
            }
          }, 5);
        }, false);
      });
    }
  };
  /**
   * ページを開く
   * @param { HTMLElement }                targetPage    開く対象のページ
   * @param { false | 'left' | 'right' } openDirection ページ遷移方向の指定。 falseの場合はアニメーション無し。
   */


  var openPage = function openPage(targetPage) {
    var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;

    if (targetPage.hasAttribute(DATA_REQUIRE_PAGE)) {
      var requirePageName = targetPage.getAttribute(DATA_REQUIRE_PAGE);
      var requirePage = PAGE_ELEs.find(function (page) {
        return page.getAttribute(DATA_PAGENAME) === requirePageName;
      });

      if (requirePage) {
        var requirePageInputs = [].slice.call(requirePage.querySelectorAll("input"));

        if (!requirePageInputs.some(function (input) {
          return input.checked === true;
        })) {
          openPage(requirePage);
          return false;
        }
      }
    }

    if (direction) {
      // アニメーション用のクラス設定
      targetPage.classList.add(direction === 'left' ? READY_LEFT_IN_CLASS : READY_RIGHT_IN_CLASS);
      setTimeout(function () {
        PAGE_ELEs.forEach(function (page) {
          return page.classList.remove(CURRENT_PAGE_CLASS);
        });
        targetPage.classList.remove(direction === 'left' ? READY_LEFT_IN_CLASS : READY_RIGHT_IN_CLASS);
        targetPage.classList.add(CURRENT_PAGE_CLASS); // ページをトップにスクロール

        BODY.scrollTop = 0;
      }, 10);
    } else {
      // ページ即時切り替え
      PAGE_ELEs.forEach(function (page) {
        return page.classList.remove(CURRENT_PAGE_CLASS);
      });
      targetPage.classList.add(CURRENT_PAGE_CLASS); // ページをトップにスクロール

      BODY.scrollTop = 0;
    } // ベースページの場合、戻るボタンを非表示に


    if (targetPage.hasAttribute(DATA_BASE_PAGE)) {
      PREV_BTNs.forEach(function (prevBtn) {
        return prevBtn.style.display = 'none';
      });
    } else {
      PREV_BTNs.forEach(function (prevBtn) {
        return prevBtn.style.display = '';
      });
    } // チェックが何かしらついてないとフッターボタン押せないか


    if (targetPage.hasAttribute(DATA_ACTIVE_CHECKED)) {
      var inputs = [].slice.call(targetPage.querySelectorAll("input"));

      if (inputs.some(function (input) {
        return input.checked === true;
      })) {
        SEARCH_MENU.setAttribute(DATA_ACTIVE_STATUS, 'active');
      } else {
        SEARCH_MENU.setAttribute(DATA_ACTIVE_STATUS, 'inactive');
      }
    } else {
      SEARCH_MENU.removeAttribute(DATA_ACTIVE_STATUS);
    } // ステータス登録


    setFootStatus(targetPage);
  };
  /**
   * 立ち上がりページを設定
   * @param { String } landingPageId 初期表示ページのID
   */


  var setLandingPage = function setLandingPage(landingPageId) {
    var initPage = function () {
      var _PAGE_ELEs$find;

      if (!landingPageId) {
        var basePage = PAGE_ELEs.find(function (page) {
          return page.getAttribute(DATA_BASE_PAGE);
        });

        if (basePage) {
          return basePage;
        }

        return PAGE_ELEs[0];
      }

      return (_PAGE_ELEs$find = PAGE_ELEs.find(function (pageEl) {
        return pageEl.getAttribute(DATA_PAGENAME) === landingPageId;
      })) !== null && _PAGE_ELEs$find !== void 0 ? _PAGE_ELEs$find : PAGE_ELEs[0];
    }(); // 立ち上がりページを記録しておく


    SEARCH_MENU.setAttribute(DATA_LANDING_PAGE, initPage.getAttribute(DATA_PAGENAME));
    openPage(initPage);
  };
  /**
   * 開かれたボタンデータから、  
   * この検索メニューの入力値の挿入対象ページを設定する
   * @param { HTMLElement } openedTriggerEl モーダルオープンが実行されたボタン要素
   */


  var setInputTargetPages = function setInputTargetPages(openedTriggerEl) {
    var mountPointPages = openedTriggerEl.getAttribute(DATA_INPUT_MOUNT_PAGEs);

    if (mountPointPages) {
      SEARCH_MENU.setAttribute(DATA_INPUT_MOUNT_PAGEs, mountPointPages);
    } // マウントポイントの指定がある場合はそちらを登録


    if (openedTriggerEl.hasAttribute(DATA_INPUT_MOUNT_POINT_CUSTOMs)) {
      SEARCH_MENU.setAttribute(DATA_INPUT_MOUNT_POINT_CUSTOMs, openedTriggerEl.getAttribute(DATA_INPUT_MOUNT_POINT_CUSTOMs));
    }
  };
  /**
   * 開かれたボタンデータから、  
   * この検索メニューのページアクションを設定する
   * @param { HTMLElement } openedTriggerEl モーダルオープンが実行されたボタン要素
   */


  var setSearchType = function setSearchType(openedTriggerEl) {
    var actionType = openedTriggerEl.getAttribute(DATA_ACTION_TYPE);

    if (!actionType) {
      // デフォルトでは検索タイプ
      actionType = PAGE_ACTION_TYPEs.SEARCH;
    }

    if (actionType === PAGE_ACTION_TYPEs.INPUT) {
      setInputTargetPages(openedTriggerEl);
    }

    SEARCH_MENU.setAttribute(DATA_ACTION_TYPE, actionType);
  };
  /**
   * モーダルオープンイベントを受け取り、  
   * それが自身の検索メニューだった場合に処理を実行
   * @param { String }      openModalId 開かれるモーダルのID
   * @param { HTMLElement } clickedEl   モーダルオープンが実行されたボタン要素
   */


  var onModalOpen = function onModalOpen(openModalId, clickedEl) {
    if (openModalId === SELF_SEARCHMENU_ID) {
      // 立ち上がりページを設定
      setLandingPage(clickedEl.getAttribute(DATA_LANDING_PAGE)); // ページアクションタイプを設定

      setSearchType(clickedEl);
    }
  };
  /**
   * モーダルクローズイベントを受け取り、  
   * それが自身の検索メニューだった場合に処理を実行
   *
   * @param { String }      closeModalId 閉じるモーダルのID
   */


  var onModalClose = function onModalClose(closeModalId) {
    if (closeModalId === SELF_SEARCHMENU_ID) {}
  };

  var initialize = function initialize() {
    addEvent();
    PAGE_ELEs.forEach(function (page) {
      return ObserveInputChanged(page);
    });
    window.emitter.on('onModalOpen', onModalOpen);
    window.emitter.on('onModalClose', onModalClose);
  };

  var init = function init() {
    initialize();
  };

  init();
};

window.addEventListener('DOMContentLoaded', function () {
  var targets = [].slice.call(document.querySelectorAll(".".concat(TARGET_CLASS)));
  targets.forEach(function (target) {
    SearchMenuManager(target);
  });
});

/***/ }),

/***/ "./src/common/js/_selectOnce.js":
/*!**************************************!*\
  !*** ./src/common/js/_selectOnce.js ***!
  \**************************************/
/***/ (function() {

var TRIGGER_CLASS = 'js-pf-select-once';
window.addEventListener('DOMContentLoaded', function () {
  $(function () {
    $('.' + TRIGGER_CLASS).on('change', function () {
      var $this = $(this);
      var name = $this.attr('name');
      $('input[name="' + name + '"].js-pf-select-once').each(function () {
        $(this).prop('disabled', false);
      });
      $this.prop('disabled', 'disabled');
      $this.trigger('v-click');
    });
  });
});

/***/ }),

/***/ "./src/common/js/_selectedInserter.js":
/*!********************************************!*\
  !*** ./src/common/js/_selectedInserter.js ***!
  \********************************************/
/***/ (function() {

var TRIGGER_CLASS = 'js-pf-selected-inserter';
var MOUNT_TO_DATA = 'data-pf-selected-insert-mount-to';
var ITEM_CLASS = 'js-pf-selected-inserter-item';
var ITEM_CONTENT_CLASS = 'js-pf-selected-inserter-item-contents';
/**
 * 選択コンテンツ挿入
 * @constructor
 *
 * @param    { HTMLElement } target       生成対象要素
 * 
 * @property { HTMLElement } EXP_SENTENCE 生成対象の親要素
 */

var SelectedInserter = function SelectedInserter(target) {
  var SELECTED_INSERTER = target;
  var SELF_ID = SELECTED_INSERTER.getAttribute('id');
  var ITEMs = [].slice.call(SELECTED_INSERTER.querySelectorAll(".".concat(ITEM_CLASS)));
  var mountPointQuery = '';
  /**
   * 挿入
   * @param { HTMLElement } insertItem 挿入する選択要素
   */

  var insert = function insert(insertItem) {
    var mountPoints = [].slice.call(document.querySelectorAll(mountPointQuery));
    var insertContent = [].slice.call(insertItem.querySelectorAll(".".concat(ITEM_CONTENT_CLASS)));
    mountPoints.forEach(function (mountPoint) {
      if (mountPoint.tagName === 'INPUT' || mountPoint.tagName === 'TEXTAREA') {
        mountPoint.value = insertContent.map(function (content) {
          return content.innerText;
        }).join('');
      } else {
        mountPoint.innerHTML = insertContent.map(function (content) {
          return content.innerText;
        }).join('');
      }
    });
  };
  /**
   * イベント付与
   */


  var addEvent = function addEvent() {
    ITEMs.forEach(function (item) {
      item.addEventListener('click', function () {
        insert(item);

        if (window.ModalManager) {
          window.ModalManager.close();
        }
      }, false);
    });
  };
  /**
   * モーダルオープンイベントを受け取り、  
   * それが自身のコンテンツだった場合に処理を実行
   * @param { String }      openModalId 開かれるモーダルのID
   * @param { HTMLElement } clickedEl   モーダルオープンが実行されたボタン要素
   */


  var onModalOpen = function onModalOpen(openModalId, clickedEl) {
    if (openModalId === SELF_ID) {
      // 挿入先を記録
      mountPointQuery = clickedEl.getAttribute(MOUNT_TO_DATA);
    }
  };

  var init = function init() {
    addEvent();
    window.emitter.on('onModalOpen', onModalOpen);
  };

  init();
  return {};
};

window.addEventListener('DOMContentLoaded', function () {
  var targets = [].slice.call(document.querySelectorAll(".".concat(TRIGGER_CLASS)));
  targets.forEach(function (target) {
    SelectedInserter(target);
  });
});

/***/ }),

/***/ "./src/common/js/_set-main-height.js":
/*!*******************************************!*\
  !*** ./src/common/js/_set-main-height.js ***!
  \*******************************************/
/***/ (function() {

var setMainMinHeight = function setMainMinHeight() {
  var PF_MAIN = document.querySelector('.pf-main');
  var PF_FOOTER = document.getElementById('pf-footer');

  if (PF_MAIN && PF_FOOTER) {
    var PF_FOOTER_STYLE = PF_FOOTER.currentStyle || window.getComputedStyle(PF_FOOTER);
    var PF_FOOTER_MARGIN_TOP = parseFloat(PF_FOOTER_STYLE.marginTop);
    var PF_FOOTER_HEIGHT = PF_FOOTER.clientHeight + PF_FOOTER_MARGIN_TOP;
    PF_MAIN.style.minHeight = "calc(100vh - ".concat(PF_FOOTER_HEIGHT, "px)");
  }
};

setMainMinHeight();
window.addEventListener('DOMContentLoaded', function () {
  if (window.rm) {
    window.rm.setOnChangeDeviceCallback(setMainMinHeight);
  }
});

/***/ }),

/***/ "./src/common/js/_skyscraper.js":
/*!**************************************!*\
  !*** ./src/common/js/_skyscraper.js ***!
  \**************************************/
/***/ (function() {

window.addEventListener('DOMContentLoaded', function () {
  $(function () {
    var btn = $('.js-pf-skyscraper_btn');
    btn.on('click', function () {
      $('.js-pf-skyscraper').fadeOut();
    }); // 検索追従表示を受け取り

    emitter.on('onFollowPageBottomVisible', function () {
      $('.js-pf-skyscraper').removeClass('is-hidden-page-bottom');
    }); // 検索追従非表示を受け取り

    emitter.on('onFollowPageBottomHidden', function () {
      $('.js-pf-skyscraper').addClass('is-hidden-page-bottom');
    });
  });
});

/***/ }),

/***/ "./src/common/js/_slide-steps.js":
/*!***************************************!*\
  !*** ./src/common/js/_slide-steps.js ***!
  \***************************************/
/***/ (function() {

// フォーム ページ内ページめくり遷移
window.addEventListener('DOMContentLoaded', function () {
  $(function () {
    if ($('.js-pf-slide-steps').length > 1) {
      var $slideSteps = $('.js-pf-slide-steps');
      var $slideNextButtons = $('.js-pf-slide-steps--next');
      var $slidePrevButtons = $('.js-pf-slide-steps--prev');
      var steps = $('.js-pf-slide-steps').length;
      var activeStep = 0;
      var i = 0;
      var stillFound = false;
      $slideSteps.each(function () {
        if ($(this).hasClass('is-active')) {
          activeStep = i;
          stillFound = true;
        } else {
          $(this).addClass(stillFound ? 'is-right-behind' : 'is-left-behind').removeClass('is-before-init');
        }

        i++;
        $(this).data('slideStep', i);
      });

      if (i === 0) {
        $slideSteps.first().addClass('is-active');
      }

      var moveSteps = function moveSteps(direction, el, ev) {
        var $currentStep = $(el).closest('.js-pf-slide-steps');
        var currentStep = parseInt($currentStep.data('slideStep'));

        if (currentStep <= 1 && direction == -1 || currentStep >= steps && direction == 1) {
          console.error('存在しないステップへのリクエストです。');
          return;
        }

        var nextNumber = direction === 1 ? currentStep + 1 : currentStep - 1;
        var $nextStep;
        $slideSteps.each(function () {
          if ($(this).data('slideStep') === nextNumber) {
            $nextStep = $(this);
          }
        });
        var $classForRemove = direction === 1 ? 'is-right-behind' : 'is-left-behind';
        var $classForAdd = direction === 1 ? 'is-left-behind' : 'is-right-behind';
        $nextStep.removeClass($classForRemove).addClass('is-active');
        $currentStep.removeClass('is-active').addClass($classForAdd);
      };

      var movePrev = function movePrev(ev) {
        return moveSteps(-1, this, ev);
      };

      var moveNext = function moveNext(ev) {
        return moveSteps(1, this, ev);
      };

      $slidePrevButtons.on('click', movePrev);
      $slideNextButtons.on('click', moveNext);
    }
  });
});

/***/ }),

/***/ "./src/common/js/_smothscroll.js":
/*!***************************************!*\
  !*** ./src/common/js/_smothscroll.js ***!
  \***************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_config */ "./src/common/js/_config.js");

window.addEventListener('DOMContentLoaded', function () {
  $(function () {
    $('a[href^="#"]').click(function () {
      var speed = 1000;
      var href = $(this).attr("href");
      var target = $(href == "#" || href == "" ? 'html' : href);
      var position = target.offset().top;
      var offset = _config__WEBPACK_IMPORTED_MODULE_0__["default"].CURRENT_DEVICE === 'PC' ? 67 : 72;
      $("html, body").animate({
        scrollTop: position - offset
      }, speed, "swing");
      return false;
    });
  });
});

/***/ }),

/***/ "./src/common/js/_sns.js":
/*!*******************************!*\
  !*** ./src/common/js/_sns.js ***!
  \*******************************/
/***/ (function() {

window.addEventListener('DOMContentLoaded', function () {
  function pagePluginCode(w) {
    return '<div class="fb-page" data-href="https://www.facebook.com/kaigokyuujin/" data-tabs="timeline" data-width="' + w + '" data-height="120" data-small-header="false" data-adapt-container-width="true" data-hide-cover="false" data-show-facepile="false"><blockquote cite="https://www.facebook.com/kaigokyuujin/" class="fb-xfbml-parse-ignore"><a href="https://www.facebook.com/kaigokyuujin/">介護求人ナビ</a></blockquote></div>';
  }

  var facebookWrap = $('.pf-sns_timeline');
  facebookWrap.each(function (num, el) {
    var fbBeforeWidth = '';
    var fbWidth = $(el).width();
    var fbTimer = false;
    $(window).on('load resize', function () {
      if (fbTimer !== false) {
        clearTimeout(fbTimer);
      }

      fbTimer = setTimeout(function () {
        fbWidth = Math.floor($(el).width());

        if (fbWidth != fbBeforeWidth) {
          $(el).html(pagePluginCode(fbWidth));
          window.FB.XFBML.parse();
          fbBeforeWidth = fbWidth;
        }
      }, 200);
    });
  });
});

/***/ }),

/***/ "./src/common/js/_tab.js":
/*!*******************************!*\
  !*** ./src/common/js/_tab.js ***!
  \*******************************/
/***/ (function() {

/**
 * タブ
 *
 */
var TAB_CLASS = 'js-pf-tab';
var TAB_BTN_CLASS = 'js-pf-tab-ckbox';
var TAB_CONT_CLASS = 'js-pf-tab-cont';
var TAB_ACTIVE_CLASS = 'is-active';
var TAB_NAME_DATA = 'data-tab-name';

var TabManager = function TabManager(target) {
  var TAB = target;
  var BTNs = [].slice.call(TAB.querySelectorAll(".".concat(TAB_BTN_CLASS)));
  var CONTs = [].slice.call(TAB.querySelectorAll(".".concat(TAB_CONT_CLASS)));
  if (BTNs.length === 0 || CONTs.length === 0) return;

  var setActiveTab = function setActiveTab(tabName) {
    TAB.setAttribute(TAB_NAME_DATA, tabName);
    BTNs.forEach(function (btn) {
      if (btn.getAttribute(TAB_NAME_DATA) === tabName) {
        btn.classList.add(TAB_ACTIVE_CLASS);
      } else {
        btn.classList.remove(TAB_ACTIVE_CLASS);
      }
    });
    CONTs.forEach(function (cont) {
      if (cont.getAttribute(TAB_NAME_DATA) === tabName) {
        cont.style.display = 'block';
        cont.classList.add(TAB_ACTIVE_CLASS);
      } else {
        cont.style.display = 'none';
        cont.classList.remove(TAB_ACTIVE_CLASS);
      }
    });
  };

  var onChange = function onChange(ev) {
    var current = ev.currentTarget;
    var activeTabName = current.getAttribute(TAB_NAME_DATA);
    setActiveTab(activeTabName);
  };
  /**
  * イベントふよ
  */


  var addEvent = function addEvent() {
    BTNs.forEach(function (btn) {
      btn.addEventListener('change', onChange);
    });
  };
  /**
  * 初期化
  */


  var init = function init() {
    addEvent(); // 最初のタブをアクティブにする

    BTNs[0].checked = true;
    setActiveTab(BTNs[0].getAttribute(TAB_NAME_DATA)); // setActiveCurriculum(TABs[0].getAttribute(CURRICULUM_NAM_DATA));
  };

  init();
};

window.addEventListener('DOMContentLoaded', function () {
  [].slice.call(document.querySelectorAll(".".concat(TAB_CLASS))).forEach(function (target) {
    TabManager(target);
  });
});

/***/ }),

/***/ "./src/common/js/_tagdelete.js":
/*!*************************************!*\
  !*** ./src/common/js/_tagdelete.js ***!
  \*************************************/
/***/ (function() {

window.addEventListener('DOMContentLoaded', function () {
  $('body').on("click", '.js-pf-tag-delete-btn', function () {
    $(this).parent().remove();
  });
});

/***/ }),

/***/ "./src/common/js/_truncate.js":
/*!************************************!*\
  !*** ./src/common/js/_truncate.js ***!
  \************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var ellipsis_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ellipsis.js */ "./node_modules/ellipsis.js/ellipsis.js");
/* harmony import */ var ellipsis_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(ellipsis_js__WEBPACK_IMPORTED_MODULE_0__);

var TRUNCATE_TARGET_CLASS = 'js-pf-truncate';
var TRUNCATE_LINE_DATA = 'data-wordcount';
/**
 * 複数行文字列の長さをトリミング、加工する
 */

var TruncateManager = function TruncateManager() {
  var truncates = [];
  /**
   * リサイズイベント発行時に処理を実行
   */

  var onResize = function onResize() {
    truncates.forEach(function (truncate) {
      truncate.el.innerHTML = truncate.originText;
      var ellipsis = ellipsis_js__WEBPACK_IMPORTED_MODULE_0___default()({
        lines: truncate.el.getAttribute(TRUNCATE_LINE_DATA),
        responsive: true
      });
      ellipsis.add(truncate.el);
    });
  };

  return {
    /**
     * 処理前のスタイル設定、およびITEMSに要素を格納
     */
    init: function init() {
      [].slice.call(document.querySelectorAll(".".concat(TRUNCATE_TARGET_CLASS))).forEach(function (target) {
        var ellipsis = ellipsis_js__WEBPACK_IMPORTED_MODULE_0___default()({
          lines: target.getAttribute(TRUNCATE_LINE_DATA),
          responsive: true
        });
        var originText = target.innerHTML;
        ellipsis.add(target);
        truncates.push({
          ellipsis: ellipsis,
          el: target,
          originText: originText
        });
      });

      if (window.rm) {
        window.rm.setCallback(onResize);
      }
    }
  };
}; // window.addEventListener('DOMContentLoaded', function(){
//   const truncateManager = TruncateManager();
//   truncateManager.init();
// });

/***/ }),

/***/ "./src/common/js/_validation.js":
/*!**************************************!*\
  !*** ./src/common/js/_validation.js ***!
  \**************************************/
/***/ (function() {

window.addEventListener('DOMContentLoaded', function () {
  $(function () {
    /*
        .js-pf-valid-group
        バリデーション結果によってボタンのアクティブ・非アクティブを切り替える
         .js-pf-valid-group の子孫要素の .js-pf-valid-group-item すべてのバリデーションが合格していれば、
        .js-pf-valid-group の子孫要素の .js-pf-valid-group-button の表示・動作がアクティブ化される
     */
    // js-pf-valid-group
    if ($('.js-pf-valid-group').length) {
      var pfValidationRules = {
        'required': {
          'errorMsg': '入力されていません。',
          'isValid': function isValid($el) {
            return $el.val() != '';
          }
        },
        'katakana': {
          'errorMsg': '全角カタカナ以外の文字が含まれています',
          'isValid': function isValid($el) {
            var matches = $el.val().match(/[^ァ-ヶー　]/);
            return null == matches;
          }
        },
        'email': {
          'errorMsg': 'メールアドレスの書式が正しくありません',
          'isValid': function isValid($el) {
            if ($el.val() === '') {
              return true;
            }

            var matches = $el.val().match(/^[a-zA-Z0-9_.+-]+@([a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]*\.)+[a-zA-Z]{2,}$/);
            return null != matches;
          }
        },
        'phone_number': {
          'errorMsg': '電話番号の書式が正しくありません',
          'isValid': function isValid($el) {
            if ($el.val() === '') {
              return true;
            }

            var matches = $el.val().replace(/[━.*‐.*―.*－.*\-.*ー.*\-]/gi, '').match(/^(0[5-9]0[0-9]{8}|0[1-9][1-9][0-9]{7})$/);
            return null != matches;
          }
        }
      };
      $('.js-pf-valid-group-item').on('keyup change pfInit virtualChange', function () {
        var $item = $(this);
        var $group = $item.closest('.js-pf-valid-group');
        var validStatus = $group.data('validStatus');
        var requirements = $item.data('validReq').split(' ');
        var errors = [];
        var validity = true;

        for (var i in requirements) {
          if (!pfValidationRules[requirements[i]]) continue;
          var myValidity = pfValidationRules[requirements[i]].isValid($item);

          if (myValidity === false) {
            validity = false;
            errors.push(pfValidationRules[requirements[i]].errorMsg);
          }
        }

        $item.data('validity', validity);

        if (validity === false && validStatus !== 'beforeInput' && $item.attr('id') != '') {
          $('.js-pf-valid-group-error[data-valid-target="#' + $item.attr('id') + '"]').html(errors.join('<br>'));
        }
        if (validity === true && validStatus !== 'beforeInput' && $item.attr('id') != '') {
          $('.js-pf-valid-group-error[data-valid-target="#' + $item.attr('id') + '"]').html('');
        }

        $group.trigger('pfValidate');
      });
      $('.js-pf-valid-group-date select').on('change pdInit', function () {
        var $this = $(this);
        var $dateGroup = $this.closest('.js-pf-valid-group-date');
        var $group = $this.closest('.js-pf-valid-group');
        var requirements = $dateGroup.data('validReq').split(' ');
        var validity = true;
        var $year = $dateGroup.find('.js-pf-valid-group-date-year');
        var $month = $dateGroup.find('.js-pf-valid-group-date-month');
        var $day = $dateGroup.find('.js-pf-valid-group-date-day');

        for (var i in requirements) {
          if (requirements[i] === 'required-date') {
            if (!($year.val() && $month.val() && $day.val())) {
              validity = false;
            } else {
              var myDate = new Date($year.val(), $month.val(), $day.val());

              if (typeof myDate.getDate() === 'number' && isNaN(myDate.getDate())) {
                validity = false;
              }
            }
          }
        }

        $dateGroup.data('validity', validity);
        $group.trigger('pfValidate');
      });
      $('.js-pf-valid-group-checkboxes input').on('change pfInit', function () {
        var $this = $(this);
        var $boxGroup = $this.closest('.js-pf-valid-group-checkboxes');
        var $group = $this.closest('.js-pf-valid-group');
        var requirements = $boxGroup.data('validReq').split(' ');
        var validity = true;

        for (var i in requirements) {
          if (requirements[i] === 'checked-any') {
            if ($boxGroup.find('input[type="checkbox"]:checked,input[type="radio"]:checked').length < 1) {
              validity = false;
            }
          }
        }

        $boxGroup.data('validity', validity);
        $group.trigger('pfValidate');
      });
      $('.js-pf-valid-group').on('pfValidate', function () {
        var $this = $(this);
        var validity = true;
        $this.find('.js-pf-valid-group-item,.js-pf-valid-group-checkboxes,.js-pf-valid-group-date').each(function () {
          if ($(this).data('validity') === false) {
            validity = false;
          }
        });
        var $button = $this.find('.js-pf-valid-group-button');

        if (validity) {
          $this.data('validStatus', 'afterInput');
          $button.removeClass('pf-button--c-inactive').addClass('pf-button--c-primary').removeAttr('disabled');
        } else {
          $button.removeClass('pf-button--c-primary').addClass('pf-button--c-inactive').attr('disabled', 'disabled');
        }
      });
    } // js-pf-valid-group-date


    $('.js-pf-valid-group-date').each(function () {
      var $this = $(this);
      var $year = $this.find('.js-pf-valid-group-date-year');
      var $month = $this.find('.js-pf-valid-group-date-month');
      var $day = $this.find('.js-pf-valid-group-date-day');
      var today = new Date();
      var defaultYear = today.getFullYear() - 40;
      defaultDate = false;

      if ($this.data('defaultDate')) {
        defaultDate = new Date($this.data('defaultDate'));
        defaultYear = defaultDate.getFullYear();
      }

      for (var i = 1940; i < today.getFullYear(); i++) {
        $('<option/>').text(i + '年').attr('value', i).appendTo($year);
      }

      $year.val(defaultYear);

      for (var _i = 1; _i <= 12; _i++) {
        $('<option/>').text(_i + '月').attr('value', _i).appendTo($month);
      }

      var getLastDay = function getLastDay(year, month) {
        return new Date(year, month, 0).getDate();
      };

      $this.on('initDays', function () {
        $day.html('<option value="">日</option>');

        if ($year.val() && $month.val()) {
          for (var _i2 = 1; _i2 <= getLastDay($year.val(), $month.val()); _i2++) {
            $('<option/>').text(_i2 + '日').attr('value', _i2).appendTo($day);
          }
        }
      });

      if (defaultDate) {
        $month.val(defaultDate.getMonth() + 1);
        $this.trigger('initDays');
        $day.val(defaultDate.getDate());
      }

      var $group = $this.closest('.js-pf-valid-group');
      $year.on('change', function () {
        $this.trigger('initDays');
        $group.trigger('pfValidate');
      });
      $month.on('change', function () {
        $this.trigger('initDays');
        $group.trigger('pfValidate');
      });
    }); // 初期化

    $('.js-pf-valid-group-item,' + '.js-pf-valid-group-checkbox input:first,' + '.js-pf-valid-group-date select:first').trigger('pfInit').closest('.js-pf-validate-group').trigger('pfValidate'); // 郵便番号

    if ($('.js-pf-valid-postal').length) {
      var prefs = {};
      $.ajax({
        'type': 'GET',
        'url': 'https://geolonia.github.io/japanese-addresses/api/ja.json',
        'success': function success(data) {
          prefs = data;
        }
      });
      $('.js-pf-valid-postal').append('<script src="https://ajaxzip3.github.io/ajaxzip3.js" charset="UTF-8"></script>');
      $('.js-pf-valid-postal').each(function () {
        var $postal = $(this);
        var $zipcode = $postal.find('.js-pf-valid-postal-zipcode');
        var $pref = $postal.find('.js-pf-valid-postal-pref');
        var $cityPre = $postal.find('.js-pf-valid-postal-city_pre');
        var $city = $postal.find('.js-pf-valid-postal-city');
        var $address = $postal.find('.js-pf-valid-postal-address');
        $pref.on('change', function () {
          if ($pref.val() != '' && prefs[$pref.val()]) {
            var thisPref = prefs[$pref.val()];
            $city.html('<option value="">市区町村</option>');

            for (var i in thisPref) {
              $('<option/>').text(thisPref[i]).attr('value', thisPref[i]).appendTo($city);
            }
          }
        });
        $zipcode.on('keyup change', function () {
          AjaxZip3.zip2addr($zipcode.attr('name'), null, $pref.attr('name'), $cityPre.attr('name'), $address.attr('name'), $address.attr('name'));
          $pref.trigger('change');
          $city.trigger('change');
          $city.val($cityPre.val());
          $city.trigger('change');
        });
      });
    }
    /* js-pf-password
     パスワードの表示・非表示切り替え
      */


    if ($('.js-pf-password-toggle').length) {
      var pfPasswordTypes = ['password', 'text'];

      var pfPasswordInit = function pfPasswordInit() {
        var $this = $(this);
        var n = $this.data('visibility') == 1 ? 1 : 0;
        $($this.data('passwordTarget')).attr('type', pfPasswordTypes[n]);
      };

      $('.js-pf-password-toggle').each(pfPasswordInit);
      $('.js-pf-password-toggle').on('click', function () {
        var $this = $(this);
        var visibility = $this.data('visibility');
        $this.data('visibility', visibility == 1 ? 0 : 1);
        $this.each(pfPasswordInit);
      });
    }
  });
});

/***/ }),

/***/ "./src/common/js/libs/css_browser_selector.js":
/*!****************************************************!*\
  !*** ./src/common/js/libs/css_browser_selector.js ***!
  \****************************************************/
/***/ (function() {

/*
CSS Browser Selector v0.4.0 (Nov 02, 2010)
Rafael Lima (http://rafael.adm.br)
http://rafael.adm.br/css_browser_selector
License: http://creativecommons.org/licenses/by/2.5/
Contributors: http://rafael.adm.br/css_browser_selector#contributors
*/
function css_browser_selector(u) {
  var ua = u.toLowerCase(),
      is = function is(t) {
    return ua.indexOf(t) > -1;
  },
      g = 'gecko',
      w = 'webkit',
      s = 'safari',
      o = 'opera',
      m = 'mobile',
      h = document.documentElement,
      b = [!/opera|webtv/i.test(ua) && /msie\s(\d)/.test(ua) ? 'ie ie' + RegExp.$1 : is('firefox/2') ? g + ' ff2' : is('firefox/3.5') ? g + ' ff3 ff3_5' : is('firefox/3.6') ? g + ' ff3 ff3_6' : is('firefox/3') ? g + ' ff3' : is('gecko/') ? g : is('opera') ? o + (/version\/(\d+)/.test(ua) ? ' ' + o + RegExp.$1 : /opera(\s|\/)(\d+)/.test(ua) ? ' ' + o + RegExp.$2 : '') : is('konqueror') ? 'konqueror' : is('blackberry') ? m + ' blackberry' : is('android') ? m + ' android' : is('chrome') ? w + ' chrome' : is('iron') ? w + ' iron' : is('applewebkit/') ? w + ' ' + s + (/version\/(\d+)/.test(ua) ? ' ' + s + RegExp.$1 : '') : is('mozilla/') ? g : '', is('j2me') ? m + ' j2me' : is('iphone') ? m + ' iphone' : is('ipod') ? m + ' ipod' : is('ipad') ? m + ' ipad' : is('mac') ? 'mac' : is('darwin') ? 'mac' : is('webtv') ? 'webtv' : is('win') ? 'win' + (is('windows nt 6.0') ? ' vista' : '') : is('freebsd') ? 'freebsd' : is('x11') || is('linux') ? 'linux' : '', 'js'];

  c = b.join(' ');
  h.className += ' ' + c;
  return c;
}

;
css_browser_selector(navigator.userAgent);

/***/ }),

/***/ "./src/common/js/libs/jquery-ui.min.js":
/*!*********************************************!*\
  !*** ./src/common/js/libs/jquery-ui.min.js ***!
  \*********************************************/
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");

/*! jQuery UI - v1.13.0 - 2021-12-27
* http://jqueryui.com
* Includes: widget.js, position.js, keycode.js, unique-id.js, widgets/autocomplete.js, widgets/datepicker.js, widgets/menu.js
* Copyright jQuery Foundation and other contributors; Licensed MIT */
!function (e) {
  "use strict";

   true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! jquery */ "jquery")], __WEBPACK_AMD_DEFINE_FACTORY__ = (e),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;
}(function (G) {
  "use strict";

  G.ui = G.ui || {};
  G.ui.version = "1.13.0";
  var a,
      i = 0,
      r = Array.prototype.hasOwnProperty,
      o = Array.prototype.slice;
  G.cleanData = (a = G.cleanData, function (e) {
    for (var t, i, s = 0; null != (i = e[s]); s++) {
      (t = G._data(i, "events")) && t.remove && G(i).triggerHandler("remove");
    }

    a(e);
  }), G.widget = function (e, i, t) {
    var s,
        a,
        n,
        r = {},
        o = e.split(".")[0],
        l = o + "-" + (e = e.split(".")[1]);
    return t || (t = i, i = G.Widget), Array.isArray(t) && (t = G.extend.apply(null, [{}].concat(t))), G.expr.pseudos[l.toLowerCase()] = function (e) {
      return !!G.data(e, l);
    }, G[o] = G[o] || {}, s = G[o][e], a = G[o][e] = function (e, t) {
      if (!this._createWidget) return new a(e, t);
      arguments.length && this._createWidget(e, t);
    }, G.extend(a, s, {
      version: t.version,
      _proto: G.extend({}, t),
      _childConstructors: []
    }), (n = new i()).options = G.widget.extend({}, n.options), G.each(t, function (t, s) {
      function a() {
        return i.prototype[t].apply(this, arguments);
      }

      function n(e) {
        return i.prototype[t].apply(this, e);
      }

      r[t] = "function" == typeof s ? function () {
        var e,
            t = this._super,
            i = this._superApply;
        return this._super = a, this._superApply = n, e = s.apply(this, arguments), this._super = t, this._superApply = i, e;
      } : s;
    }), a.prototype = G.widget.extend(n, {
      widgetEventPrefix: s && n.widgetEventPrefix || e
    }, r, {
      constructor: a,
      namespace: o,
      widgetName: e,
      widgetFullName: l
    }), s ? (G.each(s._childConstructors, function (e, t) {
      var i = t.prototype;
      G.widget(i.namespace + "." + i.widgetName, a, t._proto);
    }), delete s._childConstructors) : i._childConstructors.push(a), G.widget.bridge(e, a), a;
  }, G.widget.extend = function (e) {
    for (var t, i, s = o.call(arguments, 1), a = 0, n = s.length; a < n; a++) {
      for (t in s[a]) {
        i = s[a][t], r.call(s[a], t) && void 0 !== i && (G.isPlainObject(i) ? e[t] = G.isPlainObject(e[t]) ? G.widget.extend({}, e[t], i) : G.widget.extend({}, i) : e[t] = i);
      }
    }

    return e;
  }, G.widget.bridge = function (n, t) {
    var r = t.prototype.widgetFullName || n;

    G.fn[n] = function (i) {
      var e = "string" == typeof i,
          s = o.call(arguments, 1),
          a = this;
      return e ? this.length || "instance" !== i ? this.each(function () {
        var e,
            t = G.data(this, r);
        return "instance" === i ? (a = t, !1) : t ? "function" != typeof t[i] || "_" === i.charAt(0) ? G.error("no such method '" + i + "' for " + n + " widget instance") : (e = t[i].apply(t, s)) !== t && void 0 !== e ? (a = e && e.jquery ? a.pushStack(e.get()) : e, !1) : void 0 : G.error("cannot call methods on " + n + " prior to initialization; attempted to call method '" + i + "'");
      }) : a = void 0 : (s.length && (i = G.widget.extend.apply(null, [i].concat(s))), this.each(function () {
        var e = G.data(this, r);
        e ? (e.option(i || {}), e._init && e._init()) : G.data(this, r, new t(i, this));
      })), a;
    };
  }, G.Widget = function () {}, G.Widget._childConstructors = [], G.Widget.prototype = {
    widgetName: "widget",
    widgetEventPrefix: "",
    defaultElement: "<div>",
    options: {
      classes: {},
      disabled: !1,
      create: null
    },
    _createWidget: function _createWidget(e, t) {
      t = G(t || this.defaultElement || this)[0], this.element = G(t), this.uuid = i++, this.eventNamespace = "." + this.widgetName + this.uuid, this.bindings = G(), this.hoverable = G(), this.focusable = G(), this.classesElementLookup = {}, t !== this && (G.data(t, this.widgetFullName, this), this._on(!0, this.element, {
        remove: function remove(e) {
          e.target === t && this.destroy();
        }
      }), this.document = G(t.style ? t.ownerDocument : t.document || t), this.window = G(this.document[0].defaultView || this.document[0].parentWindow)), this.options = G.widget.extend({}, this.options, this._getCreateOptions(), e), this._create(), this.options.disabled && this._setOptionDisabled(this.options.disabled), this._trigger("create", null, this._getCreateEventData()), this._init();
    },
    _getCreateOptions: function _getCreateOptions() {
      return {};
    },
    _getCreateEventData: G.noop,
    _create: G.noop,
    _init: G.noop,
    destroy: function destroy() {
      var i = this;
      this._destroy(), G.each(this.classesElementLookup, function (e, t) {
        i._removeClass(t, e);
      }), this.element.off(this.eventNamespace).removeData(this.widgetFullName), this.widget().off(this.eventNamespace).removeAttr("aria-disabled"), this.bindings.off(this.eventNamespace);
    },
    _destroy: G.noop,
    widget: function widget() {
      return this.element;
    },
    option: function option(e, t) {
      var i,
          s,
          a,
          n = e;
      if (0 === arguments.length) return G.widget.extend({}, this.options);
      if ("string" == typeof e) if (n = {}, e = (i = e.split(".")).shift(), i.length) {
        for (s = n[e] = G.widget.extend({}, this.options[e]), a = 0; a < i.length - 1; a++) {
          s[i[a]] = s[i[a]] || {}, s = s[i[a]];
        }

        if (e = i.pop(), 1 === arguments.length) return void 0 === s[e] ? null : s[e];
        s[e] = t;
      } else {
        if (1 === arguments.length) return void 0 === this.options[e] ? null : this.options[e];
        n[e] = t;
      }
      return this._setOptions(n), this;
    },
    _setOptions: function _setOptions(e) {
      for (var t in e) {
        this._setOption(t, e[t]);
      }

      return this;
    },
    _setOption: function _setOption(e, t) {
      return "classes" === e && this._setOptionClasses(t), this.options[e] = t, "disabled" === e && this._setOptionDisabled(t), this;
    },
    _setOptionClasses: function _setOptionClasses(e) {
      var t, i, s;

      for (t in e) {
        s = this.classesElementLookup[t], e[t] !== this.options.classes[t] && s && s.length && (i = G(s.get()), this._removeClass(s, t), i.addClass(this._classes({
          element: i,
          keys: t,
          classes: e,
          add: !0
        })));
      }
    },
    _setOptionDisabled: function _setOptionDisabled(e) {
      this._toggleClass(this.widget(), this.widgetFullName + "-disabled", null, !!e), e && (this._removeClass(this.hoverable, null, "ui-state-hover"), this._removeClass(this.focusable, null, "ui-state-focus"));
    },
    enable: function enable() {
      return this._setOptions({
        disabled: !1
      });
    },
    disable: function disable() {
      return this._setOptions({
        disabled: !0
      });
    },
    _classes: function _classes(a) {
      var n = [],
          r = this;

      function e(e, t) {
        for (var i, s = 0; s < e.length; s++) {
          i = r.classesElementLookup[e[s]] || G(), i = a.add ? (a.element.each(function (e, t) {
            G.map(r.classesElementLookup, function (e) {
              return e;
            }).some(function (e) {
              return e.is(t);
            }) || r._on(G(t), {
              remove: "_untrackClassesElement"
            });
          }), G(G.uniqueSort(i.get().concat(a.element.get())))) : G(i.not(a.element).get()), r.classesElementLookup[e[s]] = i, n.push(e[s]), t && a.classes[e[s]] && n.push(a.classes[e[s]]);
        }
      }

      return (a = G.extend({
        element: this.element,
        classes: this.options.classes || {}
      }, a)).keys && e(a.keys.match(/\S+/g) || [], !0), a.extra && e(a.extra.match(/\S+/g) || []), n.join(" ");
    },
    _untrackClassesElement: function _untrackClassesElement(i) {
      var s = this;
      G.each(s.classesElementLookup, function (e, t) {
        -1 !== G.inArray(i.target, t) && (s.classesElementLookup[e] = G(t.not(i.target).get()));
      }), this._off(G(i.target));
    },
    _removeClass: function _removeClass(e, t, i) {
      return this._toggleClass(e, t, i, !1);
    },
    _addClass: function _addClass(e, t, i) {
      return this._toggleClass(e, t, i, !0);
    },
    _toggleClass: function _toggleClass(e, t, i, s) {
      var a = "string" == typeof e || null === e,
          i = {
        extra: a ? t : i,
        keys: a ? e : t,
        element: a ? this.element : e,
        add: s = "boolean" == typeof s ? s : i
      };
      return i.element.toggleClass(this._classes(i), s), this;
    },
    _on: function _on(a, n, e) {
      var r,
          o = this;
      "boolean" != typeof a && (e = n, n = a, a = !1), e ? (n = r = G(n), this.bindings = this.bindings.add(n)) : (e = n, n = this.element, r = this.widget()), G.each(e, function (e, t) {
        function i() {
          if (a || !0 !== o.options.disabled && !G(this).hasClass("ui-state-disabled")) return ("string" == typeof t ? o[t] : t).apply(o, arguments);
        }

        "string" != typeof t && (i.guid = t.guid = t.guid || i.guid || G.guid++);
        var s = e.match(/^([\w:-]*)\s*(.*)$/),
            e = s[1] + o.eventNamespace,
            s = s[2];
        s ? r.on(e, s, i) : n.on(e, i);
      });
    },
    _off: function _off(e, t) {
      t = (t || "").split(" ").join(this.eventNamespace + " ") + this.eventNamespace, e.off(t), this.bindings = G(this.bindings.not(e).get()), this.focusable = G(this.focusable.not(e).get()), this.hoverable = G(this.hoverable.not(e).get());
    },
    _delay: function _delay(e, t) {
      var i = this;
      return setTimeout(function () {
        return ("string" == typeof e ? i[e] : e).apply(i, arguments);
      }, t || 0);
    },
    _hoverable: function _hoverable(e) {
      this.hoverable = this.hoverable.add(e), this._on(e, {
        mouseenter: function mouseenter(e) {
          this._addClass(G(e.currentTarget), null, "ui-state-hover");
        },
        mouseleave: function mouseleave(e) {
          this._removeClass(G(e.currentTarget), null, "ui-state-hover");
        }
      });
    },
    _focusable: function _focusable(e) {
      this.focusable = this.focusable.add(e), this._on(e, {
        focusin: function focusin(e) {
          this._addClass(G(e.currentTarget), null, "ui-state-focus");
        },
        focusout: function focusout(e) {
          this._removeClass(G(e.currentTarget), null, "ui-state-focus");
        }
      });
    },
    _trigger: function _trigger(e, t, i) {
      var s,
          a,
          n = this.options[e];
      if (i = i || {}, (t = G.Event(t)).type = (e === this.widgetEventPrefix ? e : this.widgetEventPrefix + e).toLowerCase(), t.target = this.element[0], a = t.originalEvent) for (s in a) {
        s in t || (t[s] = a[s]);
      }
      return this.element.trigger(t, i), !("function" == typeof n && !1 === n.apply(this.element[0], [t].concat(i)) || t.isDefaultPrevented());
    }
  }, G.each({
    show: "fadeIn",
    hide: "fadeOut"
  }, function (n, r) {
    G.Widget.prototype["_" + n] = function (t, e, i) {
      var s,
          a = (e = "string" == typeof e ? {
        effect: e
      } : e) ? !0 !== e && "number" != typeof e && e.effect || r : n;
      "number" == typeof (e = e || {}) ? e = {
        duration: e
      } : !0 === e && (e = {}), s = !G.isEmptyObject(e), e.complete = i, e.delay && t.delay(e.delay), s && G.effects && G.effects.effect[a] ? t[n](e) : a !== n && t[a] ? t[a](e.duration, e.easing, i) : t.queue(function (e) {
        G(this)[n](), i && i.call(t[0]), e();
      });
    };
  });
  var s, b, w, n, l, u, h, c, M;
  G.widget;

  function C(e, t, i) {
    return [parseFloat(e[0]) * (c.test(e[0]) ? t / 100 : 1), parseFloat(e[1]) * (c.test(e[1]) ? i / 100 : 1)];
  }

  function x(e, t) {
    return parseInt(G.css(e, t), 10) || 0;
  }

  function I(e) {
    return null != e && e === e.window;
  }

  b = Math.max, w = Math.abs, n = /left|center|right/, l = /top|center|bottom/, u = /[\+\-]\d+(\.[\d]+)?%?/, h = /^\w+/, c = /%$/, M = G.fn.position, G.position = {
    scrollbarWidth: function scrollbarWidth() {
      if (void 0 !== s) return s;
      var e,
          t = G("<div style='display:block;position:absolute;width:200px;height:200px;overflow:hidden;'><div style='height:300px;width:auto;'></div></div>"),
          i = t.children()[0];
      return G("body").append(t), e = i.offsetWidth, t.css("overflow", "scroll"), e === (i = i.offsetWidth) && (i = t[0].clientWidth), t.remove(), s = e - i;
    },
    getScrollInfo: function getScrollInfo(e) {
      var t = e.isWindow || e.isDocument ? "" : e.element.css("overflow-x"),
          i = e.isWindow || e.isDocument ? "" : e.element.css("overflow-y"),
          t = "scroll" === t || "auto" === t && e.width < e.element[0].scrollWidth;
      return {
        width: "scroll" === i || "auto" === i && e.height < e.element[0].scrollHeight ? G.position.scrollbarWidth() : 0,
        height: t ? G.position.scrollbarWidth() : 0
      };
    },
    getWithinInfo: function getWithinInfo(e) {
      var t = G(e || window),
          i = I(t[0]),
          s = !!t[0] && 9 === t[0].nodeType;
      return {
        element: t,
        isWindow: i,
        isDocument: s,
        offset: !i && !s ? G(e).offset() : {
          left: 0,
          top: 0
        },
        scrollLeft: t.scrollLeft(),
        scrollTop: t.scrollTop(),
        width: t.outerWidth(),
        height: t.outerHeight()
      };
    }
  }, G.fn.position = function (c) {
    if (!c || !c.of) return M.apply(this, arguments);

    var d,
        p,
        g,
        f,
        m,
        e,
        _ = "string" == typeof (c = G.extend({}, c)).of ? G(document).find(c.of) : G(c.of),
        v = G.position.getWithinInfo(c.within),
        y = G.position.getScrollInfo(v),
        k = (c.collision || "flip").split(" "),
        D = {},
        t = 9 === (e = (t = _)[0]).nodeType ? {
      width: t.width(),
      height: t.height(),
      offset: {
        top: 0,
        left: 0
      }
    } : I(e) ? {
      width: t.width(),
      height: t.height(),
      offset: {
        top: t.scrollTop(),
        left: t.scrollLeft()
      }
    } : e.preventDefault ? {
      width: 0,
      height: 0,
      offset: {
        top: e.pageY,
        left: e.pageX
      }
    } : {
      width: t.outerWidth(),
      height: t.outerHeight(),
      offset: t.offset()
    };

    return _[0].preventDefault && (c.at = "left top"), p = t.width, g = t.height, m = G.extend({}, f = t.offset), G.each(["my", "at"], function () {
      var e,
          t,
          i = (c[this] || "").split(" ");
      (i = 1 === i.length ? n.test(i[0]) ? i.concat(["center"]) : l.test(i[0]) ? ["center"].concat(i) : ["center", "center"] : i)[0] = n.test(i[0]) ? i[0] : "center", i[1] = l.test(i[1]) ? i[1] : "center", e = u.exec(i[0]), t = u.exec(i[1]), D[this] = [e ? e[0] : 0, t ? t[0] : 0], c[this] = [h.exec(i[0])[0], h.exec(i[1])[0]];
    }), 1 === k.length && (k[1] = k[0]), "right" === c.at[0] ? m.left += p : "center" === c.at[0] && (m.left += p / 2), "bottom" === c.at[1] ? m.top += g : "center" === c.at[1] && (m.top += g / 2), d = C(D.at, p, g), m.left += d[0], m.top += d[1], this.each(function () {
      var i,
          e,
          r = G(this),
          o = r.outerWidth(),
          l = r.outerHeight(),
          t = x(this, "marginLeft"),
          s = x(this, "marginTop"),
          a = o + t + x(this, "marginRight") + y.width,
          n = l + s + x(this, "marginBottom") + y.height,
          u = G.extend({}, m),
          h = C(D.my, r.outerWidth(), r.outerHeight());
      "right" === c.my[0] ? u.left -= o : "center" === c.my[0] && (u.left -= o / 2), "bottom" === c.my[1] ? u.top -= l : "center" === c.my[1] && (u.top -= l / 2), u.left += h[0], u.top += h[1], i = {
        marginLeft: t,
        marginTop: s
      }, G.each(["left", "top"], function (e, t) {
        G.ui.position[k[e]] && G.ui.position[k[e]][t](u, {
          targetWidth: p,
          targetHeight: g,
          elemWidth: o,
          elemHeight: l,
          collisionPosition: i,
          collisionWidth: a,
          collisionHeight: n,
          offset: [d[0] + h[0], d[1] + h[1]],
          my: c.my,
          at: c.at,
          within: v,
          elem: r
        });
      }), c.using && (e = function e(_e) {
        var t = f.left - u.left,
            i = t + p - o,
            s = f.top - u.top,
            a = s + g - l,
            n = {
          target: {
            element: _,
            left: f.left,
            top: f.top,
            width: p,
            height: g
          },
          element: {
            element: r,
            left: u.left,
            top: u.top,
            width: o,
            height: l
          },
          horizontal: i < 0 ? "left" : 0 < t ? "right" : "center",
          vertical: a < 0 ? "top" : 0 < s ? "bottom" : "middle"
        };
        p < o && w(t + i) < p && (n.horizontal = "center"), g < l && w(s + a) < g && (n.vertical = "middle"), b(w(t), w(i)) > b(w(s), w(a)) ? n.important = "horizontal" : n.important = "vertical", c.using.call(this, _e, n);
      }), r.offset(G.extend(u, {
        using: e
      }));
    });
  }, G.ui.position = {
    fit: {
      left: function left(e, t) {
        var i = t.within,
            s = i.isWindow ? i.scrollLeft : i.offset.left,
            a = i.width,
            n = e.left - t.collisionPosition.marginLeft,
            r = s - n,
            o = n + t.collisionWidth - a - s;
        t.collisionWidth > a ? 0 < r && o <= 0 ? (i = e.left + r + t.collisionWidth - a - s, e.left += r - i) : e.left = !(0 < o && r <= 0) && o < r ? s + a - t.collisionWidth : s : 0 < r ? e.left += r : 0 < o ? e.left -= o : e.left = b(e.left - n, e.left);
      },
      top: function top(e, t) {
        var i = t.within,
            s = i.isWindow ? i.scrollTop : i.offset.top,
            a = t.within.height,
            n = e.top - t.collisionPosition.marginTop,
            r = s - n,
            o = n + t.collisionHeight - a - s;
        t.collisionHeight > a ? 0 < r && o <= 0 ? (i = e.top + r + t.collisionHeight - a - s, e.top += r - i) : e.top = !(0 < o && r <= 0) && o < r ? s + a - t.collisionHeight : s : 0 < r ? e.top += r : 0 < o ? e.top -= o : e.top = b(e.top - n, e.top);
      }
    },
    flip: {
      left: function left(e, t) {
        var i = t.within,
            s = i.offset.left + i.scrollLeft,
            a = i.width,
            n = i.isWindow ? i.scrollLeft : i.offset.left,
            r = e.left - t.collisionPosition.marginLeft,
            o = r - n,
            l = r + t.collisionWidth - a - n,
            u = "left" === t.my[0] ? -t.elemWidth : "right" === t.my[0] ? t.elemWidth : 0,
            i = "left" === t.at[0] ? t.targetWidth : "right" === t.at[0] ? -t.targetWidth : 0,
            r = -2 * t.offset[0];
        o < 0 ? ((s = e.left + u + i + r + t.collisionWidth - a - s) < 0 || s < w(o)) && (e.left += u + i + r) : 0 < l && (0 < (n = e.left - t.collisionPosition.marginLeft + u + i + r - n) || w(n) < l) && (e.left += u + i + r);
      },
      top: function top(e, t) {
        var i = t.within,
            s = i.offset.top + i.scrollTop,
            a = i.height,
            n = i.isWindow ? i.scrollTop : i.offset.top,
            r = e.top - t.collisionPosition.marginTop,
            o = r - n,
            l = r + t.collisionHeight - a - n,
            u = "top" === t.my[1] ? -t.elemHeight : "bottom" === t.my[1] ? t.elemHeight : 0,
            i = "top" === t.at[1] ? t.targetHeight : "bottom" === t.at[1] ? -t.targetHeight : 0,
            r = -2 * t.offset[1];
        o < 0 ? ((s = e.top + u + i + r + t.collisionHeight - a - s) < 0 || s < w(o)) && (e.top += u + i + r) : 0 < l && (0 < (n = e.top - t.collisionPosition.marginTop + u + i + r - n) || w(n) < l) && (e.top += u + i + r);
      }
    },
    flipfit: {
      left: function left() {
        G.ui.position.flip.left.apply(this, arguments), G.ui.position.fit.left.apply(this, arguments);
      },
      top: function top() {
        G.ui.position.flip.top.apply(this, arguments), G.ui.position.fit.top.apply(this, arguments);
      }
    }
  };
  var e;
  G.ui.position, G.ui.keyCode = {
    BACKSPACE: 8,
    COMMA: 188,
    DELETE: 46,
    DOWN: 40,
    END: 35,
    ENTER: 13,
    ESCAPE: 27,
    HOME: 36,
    LEFT: 37,
    PAGE_DOWN: 34,
    PAGE_UP: 33,
    PERIOD: 190,
    RIGHT: 39,
    SPACE: 32,
    TAB: 9,
    UP: 38
  }, G.fn.extend({
    uniqueId: (e = 0, function () {
      return this.each(function () {
        this.id || (this.id = "ui-id-" + ++e);
      });
    }),
    removeUniqueId: function removeUniqueId() {
      return this.each(function () {
        /^ui-id-\d+$/.test(this.id) && G(this).removeAttr("id");
      });
    }
  }), G.ui.safeActiveElement = function (t) {
    var i;

    try {
      i = t.activeElement;
    } catch (e) {
      i = t.body;
    }

    return i = !(i = i || t.body).nodeName ? t.body : i;
  }, G.widget("ui.menu", {
    version: "1.13.0",
    defaultElement: "<ul>",
    delay: 300,
    options: {
      icons: {
        submenu: "ui-icon-caret-1-e"
      },
      items: "> *",
      menus: "ul",
      position: {
        my: "left top",
        at: "right top"
      },
      role: "menu",
      blur: null,
      focus: null,
      select: null
    },
    _create: function _create() {
      this.activeMenu = this.element, this.mouseHandled = !1, this.lastMousePosition = {
        x: null,
        y: null
      }, this.element.uniqueId().attr({
        role: this.options.role,
        tabIndex: 0
      }), this._addClass("ui-menu", "ui-widget ui-widget-content"), this._on({
        "mousedown .ui-menu-item": function mousedownUiMenuItem(e) {
          e.preventDefault(), this._activateItem(e);
        },
        "click .ui-menu-item": function clickUiMenuItem(e) {
          var t = G(e.target),
              i = G(G.ui.safeActiveElement(this.document[0]));
          !this.mouseHandled && t.not(".ui-state-disabled").length && (this.select(e), e.isPropagationStopped() || (this.mouseHandled = !0), t.has(".ui-menu").length ? this.expand(e) : !this.element.is(":focus") && i.closest(".ui-menu").length && (this.element.trigger("focus", [!0]), this.active && 1 === this.active.parents(".ui-menu").length && clearTimeout(this.timer)));
        },
        "mouseenter .ui-menu-item": "_activateItem",
        "mousemove .ui-menu-item": "_activateItem",
        mouseleave: "collapseAll",
        "mouseleave .ui-menu": "collapseAll",
        focus: function focus(e, t) {
          var i = this.active || this._menuItems().first();

          t || this.focus(e, i);
        },
        blur: function blur(e) {
          this._delay(function () {
            G.contains(this.element[0], G.ui.safeActiveElement(this.document[0])) || this.collapseAll(e);
          });
        },
        keydown: "_keydown"
      }), this.refresh(), this._on(this.document, {
        click: function click(e) {
          this._closeOnDocumentClick(e) && this.collapseAll(e, !0), this.mouseHandled = !1;
        }
      });
    },
    _activateItem: function _activateItem(e) {
      var t, i;
      this.previousFilter || e.clientX === this.lastMousePosition.x && e.clientY === this.lastMousePosition.y || (this.lastMousePosition = {
        x: e.clientX,
        y: e.clientY
      }, t = G(e.target).closest(".ui-menu-item"), i = G(e.currentTarget), t[0] === i[0] && (i.is(".ui-state-active") || (this._removeClass(i.siblings().children(".ui-state-active"), null, "ui-state-active"), this.focus(e, i))));
    },
    _destroy: function _destroy() {
      var e = this.element.find(".ui-menu-item").removeAttr("role aria-disabled").children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");
      this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(), e.children().each(function () {
        var e = G(this);
        e.data("ui-menu-submenu-caret") && e.remove();
      });
    },
    _keydown: function _keydown(e) {
      var t,
          i,
          s,
          a = !0;

      switch (e.keyCode) {
        case G.ui.keyCode.PAGE_UP:
          this.previousPage(e);
          break;

        case G.ui.keyCode.PAGE_DOWN:
          this.nextPage(e);
          break;

        case G.ui.keyCode.HOME:
          this._move("first", "first", e);

          break;

        case G.ui.keyCode.END:
          this._move("last", "last", e);

          break;

        case G.ui.keyCode.UP:
          this.previous(e);
          break;

        case G.ui.keyCode.DOWN:
          this.next(e);
          break;

        case G.ui.keyCode.LEFT:
          this.collapse(e);
          break;

        case G.ui.keyCode.RIGHT:
          this.active && !this.active.is(".ui-state-disabled") && this.expand(e);
          break;

        case G.ui.keyCode.ENTER:
        case G.ui.keyCode.SPACE:
          this._activate(e);

          break;

        case G.ui.keyCode.ESCAPE:
          this.collapse(e);
          break;

        default:
          t = this.previousFilter || "", s = a = !1, i = 96 <= e.keyCode && e.keyCode <= 105 ? (e.keyCode - 96).toString() : String.fromCharCode(e.keyCode), clearTimeout(this.filterTimer), i === t ? s = !0 : i = t + i, t = this._filterMenuItems(i), (t = s && -1 !== t.index(this.active.next()) ? this.active.nextAll(".ui-menu-item") : t).length || (i = String.fromCharCode(e.keyCode), t = this._filterMenuItems(i)), t.length ? (this.focus(e, t), this.previousFilter = i, this.filterTimer = this._delay(function () {
            delete this.previousFilter;
          }, 1e3)) : delete this.previousFilter;
      }

      a && e.preventDefault();
    },
    _activate: function _activate(e) {
      this.active && !this.active.is(".ui-state-disabled") && (this.active.children("[aria-haspopup='true']").length ? this.expand(e) : this.select(e));
    },
    refresh: function refresh() {
      var e,
          t,
          s = this,
          a = this.options.icons.submenu,
          i = this.element.find(this.options.menus);
      this._toggleClass("ui-menu-icons", null, !!this.element.find(".ui-icon").length), t = i.filter(":not(.ui-menu)").hide().attr({
        role: this.options.role,
        "aria-hidden": "true",
        "aria-expanded": "false"
      }).each(function () {
        var e = G(this),
            t = e.prev(),
            i = G("<span>").data("ui-menu-submenu-caret", !0);
        s._addClass(i, "ui-menu-icon", "ui-icon " + a), t.attr("aria-haspopup", "true").prepend(i), e.attr("aria-labelledby", t.attr("id"));
      }), this._addClass(t, "ui-menu", "ui-widget ui-widget-content ui-front"), (e = i.add(this.element).find(this.options.items)).not(".ui-menu-item").each(function () {
        var e = G(this);
        s._isDivider(e) && s._addClass(e, "ui-menu-divider", "ui-widget-content");
      }), i = (t = e.not(".ui-menu-item, .ui-menu-divider")).children().not(".ui-menu").uniqueId().attr({
        tabIndex: -1,
        role: this._itemRole()
      }), this._addClass(t, "ui-menu-item")._addClass(i, "ui-menu-item-wrapper"), e.filter(".ui-state-disabled").attr("aria-disabled", "true"), this.active && !G.contains(this.element[0], this.active[0]) && this.blur();
    },
    _itemRole: function _itemRole() {
      return {
        menu: "menuitem",
        listbox: "option"
      }[this.options.role];
    },
    _setOption: function _setOption(e, t) {
      var i;
      "icons" === e && (i = this.element.find(".ui-menu-icon"), this._removeClass(i, null, this.options.icons.submenu)._addClass(i, null, t.submenu)), this._super(e, t);
    },
    _setOptionDisabled: function _setOptionDisabled(e) {
      this._super(e), this.element.attr("aria-disabled", String(e)), this._toggleClass(null, "ui-state-disabled", !!e);
    },
    focus: function focus(e, t) {
      var i;
      this.blur(e, e && "focus" === e.type), this._scrollIntoView(t), this.active = t.first(), i = this.active.children(".ui-menu-item-wrapper"), this._addClass(i, null, "ui-state-active"), this.options.role && this.element.attr("aria-activedescendant", i.attr("id")), i = this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"), this._addClass(i, null, "ui-state-active"), e && "keydown" === e.type ? this._close() : this.timer = this._delay(function () {
        this._close();
      }, this.delay), (i = t.children(".ui-menu")).length && e && /^mouse/.test(e.type) && this._startOpening(i), this.activeMenu = t.parent(), this._trigger("focus", e, {
        item: t
      });
    },
    _scrollIntoView: function _scrollIntoView(e) {
      var t, i, s;
      this._hasScroll() && (i = parseFloat(G.css(this.activeMenu[0], "borderTopWidth")) || 0, s = parseFloat(G.css(this.activeMenu[0], "paddingTop")) || 0, t = e.offset().top - this.activeMenu.offset().top - i - s, i = this.activeMenu.scrollTop(), s = this.activeMenu.height(), e = e.outerHeight(), t < 0 ? this.activeMenu.scrollTop(i + t) : s < t + e && this.activeMenu.scrollTop(i + t - s + e));
    },
    blur: function blur(e, t) {
      t || clearTimeout(this.timer), this.active && (this._removeClass(this.active.children(".ui-menu-item-wrapper"), null, "ui-state-active"), this._trigger("blur", e, {
        item: this.active
      }), this.active = null);
    },
    _startOpening: function _startOpening(e) {
      clearTimeout(this.timer), "true" === e.attr("aria-hidden") && (this.timer = this._delay(function () {
        this._close(), this._open(e);
      }, this.delay));
    },
    _open: function _open(e) {
      var t = G.extend({
        of: this.active
      }, this.options.position);
      clearTimeout(this.timer), this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden", "true"), e.show().removeAttr("aria-hidden").attr("aria-expanded", "true").position(t);
    },
    collapseAll: function collapseAll(t, i) {
      clearTimeout(this.timer), this.timer = this._delay(function () {
        var e = i ? this.element : G(t && t.target).closest(this.element.find(".ui-menu"));
        e.length || (e = this.element), this._close(e), this.blur(t), this._removeClass(e.find(".ui-state-active"), null, "ui-state-active"), this.activeMenu = e;
      }, i ? 0 : this.delay);
    },
    _close: function _close(e) {
      (e = e || (this.active ? this.active.parent() : this.element)).find(".ui-menu").hide().attr("aria-hidden", "true").attr("aria-expanded", "false");
    },
    _closeOnDocumentClick: function _closeOnDocumentClick(e) {
      return !G(e.target).closest(".ui-menu").length;
    },
    _isDivider: function _isDivider(e) {
      return !/[^\-\u2014\u2013\s]/.test(e.text());
    },
    collapse: function collapse(e) {
      var t = this.active && this.active.parent().closest(".ui-menu-item", this.element);
      t && t.length && (this._close(), this.focus(e, t));
    },
    expand: function expand(e) {
      var t = this.active && this._menuItems(this.active.children(".ui-menu")).first();

      t && t.length && (this._open(t.parent()), this._delay(function () {
        this.focus(e, t);
      }));
    },
    next: function next(e) {
      this._move("next", "first", e);
    },
    previous: function previous(e) {
      this._move("prev", "last", e);
    },
    isFirstItem: function isFirstItem() {
      return this.active && !this.active.prevAll(".ui-menu-item").length;
    },
    isLastItem: function isLastItem() {
      return this.active && !this.active.nextAll(".ui-menu-item").length;
    },
    _menuItems: function _menuItems(e) {
      return (e || this.element).find(this.options.items).filter(".ui-menu-item");
    },
    _move: function _move(e, t, i) {
      var s;
      (s = this.active ? "first" === e || "last" === e ? this.active["first" === e ? "prevAll" : "nextAll"](".ui-menu-item").last() : this.active[e + "All"](".ui-menu-item").first() : s) && s.length && this.active || (s = this._menuItems(this.activeMenu)[t]()), this.focus(i, s);
    },
    nextPage: function nextPage(e) {
      var t, i, s;
      this.active ? this.isLastItem() || (this._hasScroll() ? (i = this.active.offset().top, s = this.element.innerHeight(), 0 === G.fn.jquery.indexOf("3.2.") && (s += this.element[0].offsetHeight - this.element.outerHeight()), this.active.nextAll(".ui-menu-item").each(function () {
        return (t = G(this)).offset().top - i - s < 0;
      }), this.focus(e, t)) : this.focus(e, this._menuItems(this.activeMenu)[this.active ? "last" : "first"]())) : this.next(e);
    },
    previousPage: function previousPage(e) {
      var t, i, s;
      this.active ? this.isFirstItem() || (this._hasScroll() ? (i = this.active.offset().top, s = this.element.innerHeight(), 0 === G.fn.jquery.indexOf("3.2.") && (s += this.element[0].offsetHeight - this.element.outerHeight()), this.active.prevAll(".ui-menu-item").each(function () {
        return 0 < (t = G(this)).offset().top - i + s;
      }), this.focus(e, t)) : this.focus(e, this._menuItems(this.activeMenu).first())) : this.next(e);
    },
    _hasScroll: function _hasScroll() {
      return this.element.outerHeight() < this.element.prop("scrollHeight");
    },
    select: function select(e) {
      this.active = this.active || G(e.target).closest(".ui-menu-item");
      var t = {
        item: this.active
      };
      this.active.has(".ui-menu").length || this.collapseAll(e, !0), this._trigger("select", e, t);
    },
    _filterMenuItems: function _filterMenuItems(e) {
      var e = e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"),
          t = new RegExp("^" + e, "i");
      return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function () {
        return t.test(String.prototype.trim.call(G(this).children(".ui-menu-item-wrapper").text()));
      });
    }
  });
  G.widget("ui.autocomplete", {
    version: "1.13.0",
    defaultElement: "<input>",
    options: {
      appendTo: null,
      autoFocus: !1,
      delay: 300,
      minLength: 1,
      position: {
        my: "left top",
        at: "left bottom",
        collision: "none"
      },
      source: null,
      change: null,
      close: null,
      focus: null,
      open: null,
      response: null,
      search: null,
      select: null
    },
    requestIndex: 0,
    pending: 0,
    _create: function _create() {
      var i,
          s,
          a,
          e = this.element[0].nodeName.toLowerCase(),
          t = "textarea" === e,
          e = "input" === e;
      this.isMultiLine = t || !e && this._isContentEditable(this.element), this.valueMethod = this.element[t || e ? "val" : "text"], this.isNewMenu = !0, this._addClass("ui-autocomplete-input"), this.element.attr("autocomplete", "off"), this._on(this.element, {
        keydown: function keydown(e) {
          if (this.element.prop("readOnly")) s = a = i = !0;else {
            s = a = i = !1;
            var t = G.ui.keyCode;

            switch (e.keyCode) {
              case t.PAGE_UP:
                i = !0, this._move("previousPage", e);
                break;

              case t.PAGE_DOWN:
                i = !0, this._move("nextPage", e);
                break;

              case t.UP:
                i = !0, this._keyEvent("previous", e);
                break;

              case t.DOWN:
                i = !0, this._keyEvent("next", e);
                break;

              case t.ENTER:
                this.menu.active && (i = !0, e.preventDefault(), this.menu.select(e));
                break;

              case t.TAB:
                this.menu.active && this.menu.select(e);
                break;

              case t.ESCAPE:
                this.menu.element.is(":visible") && (this.isMultiLine || this._value(this.term), this.close(e), e.preventDefault());
                break;

              default:
                s = !0, this._searchTimeout(e);
            }
          }
        },
        keypress: function keypress(e) {
          if (i) return i = !1, void (this.isMultiLine && !this.menu.element.is(":visible") || e.preventDefault());

          if (!s) {
            var t = G.ui.keyCode;

            switch (e.keyCode) {
              case t.PAGE_UP:
                this._move("previousPage", e);

                break;

              case t.PAGE_DOWN:
                this._move("nextPage", e);

                break;

              case t.UP:
                this._keyEvent("previous", e);

                break;

              case t.DOWN:
                this._keyEvent("next", e);

            }
          }
        },
        input: function input(e) {
          if (a) return a = !1, void e.preventDefault();

          this._searchTimeout(e);
        },
        focus: function focus() {
          this.selectedItem = null, this.previous = this._value();
        },
        blur: function blur(e) {
          clearTimeout(this.searching), this.close(e), this._change(e);
        }
      }), this._initSource(), this.menu = G("<ul>").appendTo(this._appendTo()).menu({
        role: null
      }).hide().attr({
        unselectable: "on"
      }).menu("instance"), this._addClass(this.menu.element, "ui-autocomplete", "ui-front"), this._on(this.menu.element, {
        mousedown: function mousedown(e) {
          e.preventDefault();
        },
        menufocus: function menufocus(e, t) {
          var i;
          if (this.isNewMenu && (this.isNewMenu = !1, e.originalEvent && /^mouse/.test(e.originalEvent.type))) return this.menu.blur(), void this.document.one("mousemove", function () {
            G(e.target).trigger(e.originalEvent);
          });
          i = t.item.data("ui-autocomplete-item"), !1 !== this._trigger("focus", e, {
            item: i
          }) && e.originalEvent && /^key/.test(e.originalEvent.type) && this._value(i.value), (i = t.item.attr("aria-label") || i.value) && String.prototype.trim.call(i).length && (this.liveRegion.children().hide(), G("<div>").text(i).appendTo(this.liveRegion));
        },
        menuselect: function menuselect(e, t) {
          var i = t.item.data("ui-autocomplete-item"),
              s = this.previous;
          this.element[0] !== G.ui.safeActiveElement(this.document[0]) && (this.element.trigger("focus"), this.previous = s, this._delay(function () {
            this.previous = s, this.selectedItem = i;
          })), !1 !== this._trigger("select", e, {
            item: i
          }) && this._value(i.value), this.term = this._value(), this.close(e), this.selectedItem = i;
        }
      }), this.liveRegion = G("<div>", {
        role: "status",
        "aria-live": "assertive",
        "aria-relevant": "additions"
      }).appendTo(this.document[0].body), this._addClass(this.liveRegion, null, "ui-helper-hidden-accessible"), this._on(this.window, {
        beforeunload: function beforeunload() {
          this.element.removeAttr("autocomplete");
        }
      });
    },
    _destroy: function _destroy() {
      clearTimeout(this.searching), this.element.removeAttr("autocomplete"), this.menu.element.remove(), this.liveRegion.remove();
    },
    _setOption: function _setOption(e, t) {
      this._super(e, t), "source" === e && this._initSource(), "appendTo" === e && this.menu.element.appendTo(this._appendTo()), "disabled" === e && t && this.xhr && this.xhr.abort();
    },
    _isEventTargetInWidget: function _isEventTargetInWidget(e) {
      var t = this.menu.element[0];
      return e.target === this.element[0] || e.target === t || G.contains(t, e.target);
    },
    _closeOnClickOutside: function _closeOnClickOutside(e) {
      this._isEventTargetInWidget(e) || this.close();
    },
    _appendTo: function _appendTo() {
      var e = this.options.appendTo;
      return e = !(e = !(e = e && (e.jquery || e.nodeType ? G(e) : this.document.find(e).eq(0))) || !e[0] ? this.element.closest(".ui-front, dialog") : e).length ? this.document[0].body : e;
    },
    _initSource: function _initSource() {
      var i,
          s,
          a = this;
      Array.isArray(this.options.source) ? (i = this.options.source, this.source = function (e, t) {
        t(G.ui.autocomplete.filter(i, e.term));
      }) : "string" == typeof this.options.source ? (s = this.options.source, this.source = function (e, t) {
        a.xhr && a.xhr.abort(), a.xhr = G.ajax({
          url: s,
          data: e,
          dataType: "json",
          success: function success(e) {
            t(e);
          },
          error: function error() {
            t([]);
          }
        });
      }) : this.source = this.options.source;
    },
    _searchTimeout: function _searchTimeout(s) {
      clearTimeout(this.searching), this.searching = this._delay(function () {
        var e = this.term === this._value(),
            t = this.menu.element.is(":visible"),
            i = s.altKey || s.ctrlKey || s.metaKey || s.shiftKey;

        e && (t || i) || (this.selectedItem = null, this.search(null, s));
      }, this.options.delay);
    },
    search: function search(e, t) {
      return e = null != e ? e : this._value(), this.term = this._value(), e.length < this.options.minLength ? this.close(t) : !1 !== this._trigger("search", t) ? this._search(e) : void 0;
    },
    _search: function _search(e) {
      this.pending++, this._addClass("ui-autocomplete-loading"), this.cancelSearch = !1, this.source({
        term: e
      }, this._response());
    },
    _response: function _response() {
      var t = ++this.requestIndex;
      return function (e) {
        t === this.requestIndex && this.__response(e), this.pending--, this.pending || this._removeClass("ui-autocomplete-loading");
      }.bind(this);
    },
    __response: function __response(e) {
      e = e && this._normalize(e), this._trigger("response", null, {
        content: e
      }), !this.options.disabled && e && e.length && !this.cancelSearch ? (this._suggest(e), this._trigger("open")) : this._close();
    },
    close: function close(e) {
      this.cancelSearch = !0, this._close(e);
    },
    _close: function _close(e) {
      this._off(this.document, "mousedown"), this.menu.element.is(":visible") && (this.menu.element.hide(), this.menu.blur(), this.isNewMenu = !0, this._trigger("close", e));
    },
    _change: function _change(e) {
      this.previous !== this._value() && this._trigger("change", e, {
        item: this.selectedItem
      });
    },
    _normalize: function _normalize(e) {
      return e.length && e[0].label && e[0].value ? e : G.map(e, function (e) {
        return "string" == typeof e ? {
          label: e,
          value: e
        } : G.extend({}, e, {
          label: e.label || e.value,
          value: e.value || e.label
        });
      });
    },
    _suggest: function _suggest(e) {
      var t = this.menu.element.empty();
      this._renderMenu(t, e), this.isNewMenu = !0, this.menu.refresh(), t.show(), this._resizeMenu(), t.position(G.extend({
        of: this.element
      }, this.options.position)), this.options.autoFocus && this.menu.next(), this._on(this.document, {
        mousedown: "_closeOnClickOutside"
      });
    },
    _resizeMenu: function _resizeMenu() {
      var e = this.menu.element;
      e.outerWidth(Math.max(e.width("").outerWidth() + 1, this.element.outerWidth()));
    },
    _renderMenu: function _renderMenu(i, e) {
      var s = this;
      G.each(e, function (e, t) {
        s._renderItemData(i, t);
      });
    },
    _renderItemData: function _renderItemData(e, t) {
      return this._renderItem(e, t).data("ui-autocomplete-item", t);
    },
    _renderItem: function _renderItem(e, t) {
      return G("<li>").append(G("<div>").text(t.label)).appendTo(e);
    },
    _move: function _move(e, t) {
      if (this.menu.element.is(":visible")) return this.menu.isFirstItem() && /^previous/.test(e) || this.menu.isLastItem() && /^next/.test(e) ? (this.isMultiLine || this._value(this.term), void this.menu.blur()) : void this.menu[e](t);
      this.search(null, t);
    },
    widget: function widget() {
      return this.menu.element;
    },
    _value: function _value() {
      return this.valueMethod.apply(this.element, arguments);
    },
    _keyEvent: function _keyEvent(e, t) {
      this.isMultiLine && !this.menu.element.is(":visible") || (this._move(e, t), t.preventDefault());
    },
    _isContentEditable: function _isContentEditable(e) {
      if (!e.length) return !1;
      var t = e.prop("contentEditable");
      return "inherit" === t ? this._isContentEditable(e.parent()) : "true" === t;
    }
  }), G.extend(G.ui.autocomplete, {
    escapeRegex: function escapeRegex(e) {
      return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
    },
    filter: function filter(e, t) {
      var i = new RegExp(G.ui.autocomplete.escapeRegex(t), "i");
      return G.grep(e, function (e) {
        return i.test(e.label || e.value || e);
      });
    }
  }), G.widget("ui.autocomplete", G.ui.autocomplete, {
    options: {
      messages: {
        noResults: "No search results.",
        results: function results(e) {
          return e + (1 < e ? " results are" : " result is") + " available, use up and down arrow keys to navigate.";
        }
      }
    },
    __response: function __response(e) {
      this._superApply(arguments), this.options.disabled || this.cancelSearch || (e = e && e.length ? this.options.messages.results(e.length) : this.options.messages.noResults, this.liveRegion.children().hide(), G("<div>").text(e).appendTo(this.liveRegion));
    }
  });
  var d;
  G.ui.autocomplete;

  function t() {
    this._curInst = null, this._keyEvent = !1, this._disabledInputs = [], this._datepickerShowing = !1, this._inDialog = !1, this._mainDivId = "ui-datepicker-div", this._inlineClass = "ui-datepicker-inline", this._appendClass = "ui-datepicker-append", this._triggerClass = "ui-datepicker-trigger", this._dialogClass = "ui-datepicker-dialog", this._disableClass = "ui-datepicker-disabled", this._unselectableClass = "ui-datepicker-unselectable", this._currentClass = "ui-datepicker-current-day", this._dayOverClass = "ui-datepicker-days-cell-over", this.regional = [], this.regional[""] = {
      closeText: "Done",
      prevText: "Prev",
      nextText: "Next",
      currentText: "Today",
      monthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
      monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
      dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
      dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
      dayNamesMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
      weekHeader: "Wk",
      dateFormat: "mm/dd/yy",
      firstDay: 0,
      isRTL: !1,
      showMonthAfterYear: !1,
      yearSuffix: "",
      selectMonthLabel: "Select month",
      selectYearLabel: "Select year"
    }, this._defaults = {
      showOn: "focus",
      showAnim: "fadeIn",
      showOptions: {},
      defaultDate: null,
      appendText: "",
      buttonText: "...",
      buttonImage: "",
      buttonImageOnly: !1,
      hideIfNoPrevNext: !1,
      navigationAsDateFormat: !1,
      gotoCurrent: !1,
      changeMonth: !1,
      changeYear: !1,
      yearRange: "c-10:c+10",
      showOtherMonths: !1,
      selectOtherMonths: !1,
      showWeek: !1,
      calculateWeek: this.iso8601Week,
      shortYearCutoff: "+10",
      minDate: null,
      maxDate: null,
      duration: "fast",
      beforeShowDay: null,
      beforeShow: null,
      onSelect: null,
      onChangeMonthYear: null,
      onClose: null,
      onUpdateDatepicker: null,
      numberOfMonths: 1,
      showCurrentAtPos: 0,
      stepMonths: 1,
      stepBigMonths: 12,
      altField: "",
      altFormat: "",
      constrainInput: !0,
      showButtonPanel: !1,
      autoSize: !1,
      disabled: !1
    }, G.extend(this._defaults, this.regional[""]), this.regional.en = G.extend(!0, {}, this.regional[""]), this.regional["en-US"] = G.extend(!0, {}, this.regional.en), this.dpDiv = p(G("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"));
  }

  function p(e) {
    var t = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
    return e.on("mouseout", t, function () {
      G(this).removeClass("ui-state-hover"), -1 !== this.className.indexOf("ui-datepicker-prev") && G(this).removeClass("ui-datepicker-prev-hover"), -1 !== this.className.indexOf("ui-datepicker-next") && G(this).removeClass("ui-datepicker-next-hover");
    }).on("mouseover", t, g);
  }

  function g() {
    G.datepicker._isDisabledDatepicker((d.inline ? d.dpDiv.parent() : d.input)[0]) || (G(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"), G(this).addClass("ui-state-hover"), -1 !== this.className.indexOf("ui-datepicker-prev") && G(this).addClass("ui-datepicker-prev-hover"), -1 !== this.className.indexOf("ui-datepicker-next") && G(this).addClass("ui-datepicker-next-hover"));
  }

  function f(e, t) {
    for (var i in G.extend(e, t), t) {
      null == t[i] && (e[i] = t[i]);
    }

    return e;
  }

  G.extend(G.ui, {
    datepicker: {
      version: "1.13.0"
    }
  }), G.extend(t.prototype, {
    markerClassName: "hasDatepicker",
    maxRows: 4,
    _widgetDatepicker: function _widgetDatepicker() {
      return this.dpDiv;
    },
    setDefaults: function setDefaults(e) {
      return f(this._defaults, e || {}), this;
    },
    _attachDatepicker: function _attachDatepicker(e, t) {
      var i,
          s = e.nodeName.toLowerCase(),
          a = "div" === s || "span" === s;
      e.id || (this.uuid += 1, e.id = "dp" + this.uuid), (i = this._newInst(G(e), a)).settings = G.extend({}, t || {}), "input" === s ? this._connectDatepicker(e, i) : a && this._inlineDatepicker(e, i);
    },
    _newInst: function _newInst(e, t) {
      return {
        id: e[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"),
        input: e,
        selectedDay: 0,
        selectedMonth: 0,
        selectedYear: 0,
        drawMonth: 0,
        drawYear: 0,
        inline: t,
        dpDiv: t ? p(G("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")) : this.dpDiv
      };
    },
    _connectDatepicker: function _connectDatepicker(e, t) {
      var i = G(e);
      t.append = G([]), t.trigger = G([]), i.hasClass(this.markerClassName) || (this._attachments(i, t), i.addClass(this.markerClassName).on("keydown", this._doKeyDown).on("keypress", this._doKeyPress).on("keyup", this._doKeyUp), this._autoSize(t), G.data(e, "datepicker", t), t.settings.disabled && this._disableDatepicker(e));
    },
    _attachments: function _attachments(e, t) {
      var i,
          s = this._get(t, "appendText"),
          a = this._get(t, "isRTL");

      t.append && t.append.remove(), s && (t.append = G("<span>").addClass(this._appendClass).text(s), e[a ? "before" : "after"](t.append)), e.off("focus", this._showDatepicker), t.trigger && t.trigger.remove(), "focus" !== (i = this._get(t, "showOn")) && "both" !== i || e.on("focus", this._showDatepicker), "button" !== i && "both" !== i || (s = this._get(t, "buttonText"), i = this._get(t, "buttonImage"), this._get(t, "buttonImageOnly") ? t.trigger = G("<img>").addClass(this._triggerClass).attr({
        src: i,
        alt: s,
        title: s
      }) : (t.trigger = G("<button type='button'>").addClass(this._triggerClass), i ? t.trigger.html(G("<img>").attr({
        src: i,
        alt: s,
        title: s
      })) : t.trigger.text(s)), e[a ? "before" : "after"](t.trigger), t.trigger.on("click", function () {
        return G.datepicker._datepickerShowing && G.datepicker._lastInput === e[0] ? G.datepicker._hideDatepicker() : (G.datepicker._datepickerShowing && G.datepicker._lastInput !== e[0] && G.datepicker._hideDatepicker(), G.datepicker._showDatepicker(e[0])), !1;
      }));
    },
    _autoSize: function _autoSize(e) {
      var t, i, s, a, n, r;
      this._get(e, "autoSize") && !e.inline && (n = new Date(2009, 11, 20), (r = this._get(e, "dateFormat")).match(/[DM]/) && (t = function t(e) {
        for (a = s = i = 0; a < e.length; a++) {
          e[a].length > i && (i = e[a].length, s = a);
        }

        return s;
      }, n.setMonth(t(this._get(e, r.match(/MM/) ? "monthNames" : "monthNamesShort"))), n.setDate(t(this._get(e, r.match(/DD/) ? "dayNames" : "dayNamesShort")) + 20 - n.getDay())), e.input.attr("size", this._formatDate(e, n).length));
    },
    _inlineDatepicker: function _inlineDatepicker(e, t) {
      var i = G(e);
      i.hasClass(this.markerClassName) || (i.addClass(this.markerClassName).append(t.dpDiv), G.data(e, "datepicker", t), this._setDate(t, this._getDefaultDate(t), !0), this._updateDatepicker(t), this._updateAlternate(t), t.settings.disabled && this._disableDatepicker(e), t.dpDiv.css("display", "block"));
    },
    _dialogDatepicker: function _dialogDatepicker(e, t, i, s, a) {
      var n,
          r = this._dialogInst;
      return r || (this.uuid += 1, n = "dp" + this.uuid, this._dialogInput = G("<input type='text' id='" + n + "' style='position: absolute; top: -100px; width: 0px;'/>"), this._dialogInput.on("keydown", this._doKeyDown), G("body").append(this._dialogInput), (r = this._dialogInst = this._newInst(this._dialogInput, !1)).settings = {}, G.data(this._dialogInput[0], "datepicker", r)), f(r.settings, s || {}), t = t && t.constructor === Date ? this._formatDate(r, t) : t, this._dialogInput.val(t), this._pos = a ? a.length ? a : [a.pageX, a.pageY] : null, this._pos || (n = document.documentElement.clientWidth, s = document.documentElement.clientHeight, t = document.documentElement.scrollLeft || document.body.scrollLeft, a = document.documentElement.scrollTop || document.body.scrollTop, this._pos = [n / 2 - 100 + t, s / 2 - 150 + a]), this._dialogInput.css("left", this._pos[0] + 20 + "px").css("top", this._pos[1] + "px"), r.settings.onSelect = i, this._inDialog = !0, this.dpDiv.addClass(this._dialogClass), this._showDatepicker(this._dialogInput[0]), G.blockUI && G.blockUI(this.dpDiv), G.data(this._dialogInput[0], "datepicker", r), this;
    },
    _destroyDatepicker: function _destroyDatepicker(e) {
      var t,
          i = G(e),
          s = G.data(e, "datepicker");
      i.hasClass(this.markerClassName) && (t = e.nodeName.toLowerCase(), G.removeData(e, "datepicker"), "input" === t ? (s.append.remove(), s.trigger.remove(), i.removeClass(this.markerClassName).off("focus", this._showDatepicker).off("keydown", this._doKeyDown).off("keypress", this._doKeyPress).off("keyup", this._doKeyUp)) : "div" !== t && "span" !== t || i.removeClass(this.markerClassName).empty(), d === s && (d = null, this._curInst = null));
    },
    _enableDatepicker: function _enableDatepicker(t) {
      var e,
          i = G(t),
          s = G.data(t, "datepicker");
      i.hasClass(this.markerClassName) && ("input" === (e = t.nodeName.toLowerCase()) ? (t.disabled = !1, s.trigger.filter("button").each(function () {
        this.disabled = !1;
      }).end().filter("img").css({
        opacity: "1.0",
        cursor: ""
      })) : "div" !== e && "span" !== e || ((i = i.children("." + this._inlineClass)).children().removeClass("ui-state-disabled"), i.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled", !1)), this._disabledInputs = G.map(this._disabledInputs, function (e) {
        return e === t ? null : e;
      }));
    },
    _disableDatepicker: function _disableDatepicker(t) {
      var e,
          i = G(t),
          s = G.data(t, "datepicker");
      i.hasClass(this.markerClassName) && ("input" === (e = t.nodeName.toLowerCase()) ? (t.disabled = !0, s.trigger.filter("button").each(function () {
        this.disabled = !0;
      }).end().filter("img").css({
        opacity: "0.5",
        cursor: "default"
      })) : "div" !== e && "span" !== e || ((i = i.children("." + this._inlineClass)).children().addClass("ui-state-disabled"), i.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled", !0)), this._disabledInputs = G.map(this._disabledInputs, function (e) {
        return e === t ? null : e;
      }), this._disabledInputs[this._disabledInputs.length] = t);
    },
    _isDisabledDatepicker: function _isDisabledDatepicker(e) {
      if (!e) return !1;

      for (var t = 0; t < this._disabledInputs.length; t++) {
        if (this._disabledInputs[t] === e) return !0;
      }

      return !1;
    },
    _getInst: function _getInst(e) {
      try {
        return G.data(e, "datepicker");
      } catch (e) {
        throw "Missing instance data for this datepicker";
      }
    },
    _optionDatepicker: function _optionDatepicker(e, t, i) {
      var s,
          a,
          n = this._getInst(e);

      if (2 === arguments.length && "string" == typeof t) return "defaults" === t ? G.extend({}, G.datepicker._defaults) : n ? "all" === t ? G.extend({}, n.settings) : this._get(n, t) : null;
      s = t || {}, "string" == typeof t && ((s = {})[t] = i), n && (this._curInst === n && this._hideDatepicker(), a = this._getDateDatepicker(e, !0), t = this._getMinMaxDate(n, "min"), i = this._getMinMaxDate(n, "max"), f(n.settings, s), null !== t && void 0 !== s.dateFormat && void 0 === s.minDate && (n.settings.minDate = this._formatDate(n, t)), null !== i && void 0 !== s.dateFormat && void 0 === s.maxDate && (n.settings.maxDate = this._formatDate(n, i)), "disabled" in s && (s.disabled ? this._disableDatepicker(e) : this._enableDatepicker(e)), this._attachments(G(e), n), this._autoSize(n), this._setDate(n, a), this._updateAlternate(n), this._updateDatepicker(n));
    },
    _changeDatepicker: function _changeDatepicker(e, t, i) {
      this._optionDatepicker(e, t, i);
    },
    _refreshDatepicker: function _refreshDatepicker(e) {
      e = this._getInst(e);
      e && this._updateDatepicker(e);
    },
    _setDateDatepicker: function _setDateDatepicker(e, t) {
      e = this._getInst(e);
      e && (this._setDate(e, t), this._updateDatepicker(e), this._updateAlternate(e));
    },
    _getDateDatepicker: function _getDateDatepicker(e, t) {
      e = this._getInst(e);
      return e && !e.inline && this._setDateFromField(e, t), e ? this._getDate(e) : null;
    },
    _doKeyDown: function _doKeyDown(e) {
      var t,
          i,
          s = G.datepicker._getInst(e.target),
          a = !0,
          n = s.dpDiv.is(".ui-datepicker-rtl");

      if (s._keyEvent = !0, G.datepicker._datepickerShowing) switch (e.keyCode) {
        case 9:
          G.datepicker._hideDatepicker(), a = !1;
          break;

        case 13:
          return (i = G("td." + G.datepicker._dayOverClass + ":not(." + G.datepicker._currentClass + ")", s.dpDiv))[0] && G.datepicker._selectDay(e.target, s.selectedMonth, s.selectedYear, i[0]), (t = G.datepicker._get(s, "onSelect")) ? (i = G.datepicker._formatDate(s), t.apply(s.input ? s.input[0] : null, [i, s])) : G.datepicker._hideDatepicker(), !1;

        case 27:
          G.datepicker._hideDatepicker();

          break;

        case 33:
          G.datepicker._adjustDate(e.target, e.ctrlKey ? -G.datepicker._get(s, "stepBigMonths") : -G.datepicker._get(s, "stepMonths"), "M");

          break;

        case 34:
          G.datepicker._adjustDate(e.target, e.ctrlKey ? +G.datepicker._get(s, "stepBigMonths") : +G.datepicker._get(s, "stepMonths"), "M");

          break;

        case 35:
          (e.ctrlKey || e.metaKey) && G.datepicker._clearDate(e.target), a = e.ctrlKey || e.metaKey;
          break;

        case 36:
          (e.ctrlKey || e.metaKey) && G.datepicker._gotoToday(e.target), a = e.ctrlKey || e.metaKey;
          break;

        case 37:
          (e.ctrlKey || e.metaKey) && G.datepicker._adjustDate(e.target, n ? 1 : -1, "D"), a = e.ctrlKey || e.metaKey, e.originalEvent.altKey && G.datepicker._adjustDate(e.target, e.ctrlKey ? -G.datepicker._get(s, "stepBigMonths") : -G.datepicker._get(s, "stepMonths"), "M");
          break;

        case 38:
          (e.ctrlKey || e.metaKey) && G.datepicker._adjustDate(e.target, -7, "D"), a = e.ctrlKey || e.metaKey;
          break;

        case 39:
          (e.ctrlKey || e.metaKey) && G.datepicker._adjustDate(e.target, n ? -1 : 1, "D"), a = e.ctrlKey || e.metaKey, e.originalEvent.altKey && G.datepicker._adjustDate(e.target, e.ctrlKey ? +G.datepicker._get(s, "stepBigMonths") : +G.datepicker._get(s, "stepMonths"), "M");
          break;

        case 40:
          (e.ctrlKey || e.metaKey) && G.datepicker._adjustDate(e.target, 7, "D"), a = e.ctrlKey || e.metaKey;
          break;

        default:
          a = !1;
      } else 36 === e.keyCode && e.ctrlKey ? G.datepicker._showDatepicker(this) : a = !1;
      a && (e.preventDefault(), e.stopPropagation());
    },
    _doKeyPress: function _doKeyPress(e) {
      var t,
          i = G.datepicker._getInst(e.target);

      if (G.datepicker._get(i, "constrainInput")) return t = G.datepicker._possibleChars(G.datepicker._get(i, "dateFormat")), i = String.fromCharCode(null == e.charCode ? e.keyCode : e.charCode), e.ctrlKey || e.metaKey || i < " " || !t || -1 < t.indexOf(i);
    },
    _doKeyUp: function _doKeyUp(e) {
      e = G.datepicker._getInst(e.target);
      if (e.input.val() !== e.lastVal) try {
        G.datepicker.parseDate(G.datepicker._get(e, "dateFormat"), e.input ? e.input.val() : null, G.datepicker._getFormatConfig(e)) && (G.datepicker._setDateFromField(e), G.datepicker._updateAlternate(e), G.datepicker._updateDatepicker(e));
      } catch (e) {}
      return !0;
    },
    _showDatepicker: function _showDatepicker(e) {
      var t, i, s, a;
      "input" !== (e = e.target || e).nodeName.toLowerCase() && (e = G("input", e.parentNode)[0]), G.datepicker._isDisabledDatepicker(e) || G.datepicker._lastInput === e || (a = G.datepicker._getInst(e), G.datepicker._curInst && G.datepicker._curInst !== a && (G.datepicker._curInst.dpDiv.stop(!0, !0), a && G.datepicker._datepickerShowing && G.datepicker._hideDatepicker(G.datepicker._curInst.input[0])), !1 !== (i = (s = G.datepicker._get(a, "beforeShow")) ? s.apply(e, [e, a]) : {}) && (f(a.settings, i), a.lastVal = null, G.datepicker._lastInput = e, G.datepicker._setDateFromField(a), G.datepicker._inDialog && (e.value = ""), G.datepicker._pos || (G.datepicker._pos = G.datepicker._findPos(e), G.datepicker._pos[1] += e.offsetHeight), t = !1, G(e).parents().each(function () {
        return !(t |= "fixed" === G(this).css("position"));
      }), s = {
        left: G.datepicker._pos[0],
        top: G.datepicker._pos[1]
      }, G.datepicker._pos = null, a.dpDiv.empty(), a.dpDiv.css({
        position: "absolute",
        display: "block",
        top: "-1000px"
      }), G.datepicker._updateDatepicker(a), s = G.datepicker._checkOffset(a, s, t), a.dpDiv.css({
        position: G.datepicker._inDialog && G.blockUI ? "static" : t ? "fixed" : "absolute",
        display: "none",
        left: s.left + "px",
        top: s.top + "px"
      }), a.inline || (i = G.datepicker._get(a, "showAnim"), s = G.datepicker._get(a, "duration"), a.dpDiv.css("z-index", function (e) {
        for (var t, i; e.length && e[0] !== document;) {
          if (("absolute" === (t = e.css("position")) || "relative" === t || "fixed" === t) && (i = parseInt(e.css("zIndex"), 10), !isNaN(i) && 0 !== i)) return i;
          e = e.parent();
        }

        return 0;
      }(G(e)) + 1), G.datepicker._datepickerShowing = !0, G.effects && G.effects.effect[i] ? a.dpDiv.show(i, G.datepicker._get(a, "showOptions"), s) : a.dpDiv[i || "show"](i ? s : null), G.datepicker._shouldFocusInput(a) && a.input.trigger("focus"), G.datepicker._curInst = a)));
    },
    _updateDatepicker: function _updateDatepicker(e) {
      this.maxRows = 4, (d = e).dpDiv.empty().append(this._generateHTML(e)), this._attachHandlers(e);

      var t,
          i = this._getNumberOfMonths(e),
          s = i[1],
          a = e.dpDiv.find("." + this._dayOverClass + " a"),
          n = G.datepicker._get(e, "onUpdateDatepicker");

      0 < a.length && g.apply(a.get(0)), e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""), 1 < s && e.dpDiv.addClass("ui-datepicker-multi-" + s).css("width", 17 * s + "em"), e.dpDiv[(1 !== i[0] || 1 !== i[1] ? "add" : "remove") + "Class"]("ui-datepicker-multi"), e.dpDiv[(this._get(e, "isRTL") ? "add" : "remove") + "Class"]("ui-datepicker-rtl"), e === G.datepicker._curInst && G.datepicker._datepickerShowing && G.datepicker._shouldFocusInput(e) && e.input.trigger("focus"), e.yearshtml && (t = e.yearshtml, setTimeout(function () {
        t === e.yearshtml && e.yearshtml && e.dpDiv.find("select.ui-datepicker-year").first().replaceWith(e.yearshtml), t = e.yearshtml = null;
      }, 0)), n && n.apply(e.input ? e.input[0] : null, [e]);
    },
    _shouldFocusInput: function _shouldFocusInput(e) {
      return e.input && e.input.is(":visible") && !e.input.is(":disabled") && !e.input.is(":focus");
    },
    _checkOffset: function _checkOffset(e, t, i) {
      var s = e.dpDiv.outerWidth(),
          a = e.dpDiv.outerHeight(),
          n = e.input ? e.input.outerWidth() : 0,
          r = e.input ? e.input.outerHeight() : 0,
          o = document.documentElement.clientWidth + (i ? 0 : G(document).scrollLeft()),
          l = document.documentElement.clientHeight + (i ? 0 : G(document).scrollTop());
      return t.left -= this._get(e, "isRTL") ? s - n : 0, t.left -= i && t.left === e.input.offset().left ? G(document).scrollLeft() : 0, t.top -= i && t.top === e.input.offset().top + r ? G(document).scrollTop() : 0, t.left -= Math.min(t.left, t.left + s > o && s < o ? Math.abs(t.left + s - o) : 0), t.top -= Math.min(t.top, t.top + a > l && a < l ? Math.abs(a + r) : 0), t;
    },
    _findPos: function _findPos(e) {
      for (var t = this._getInst(e), i = this._get(t, "isRTL"); e && ("hidden" === e.type || 1 !== e.nodeType || G.expr.pseudos.hidden(e));) {
        e = e[i ? "previousSibling" : "nextSibling"];
      }

      return [(t = G(e).offset()).left, t.top];
    },
    _hideDatepicker: function _hideDatepicker(e) {
      var t,
          i,
          s = this._curInst;
      !s || e && s !== G.data(e, "datepicker") || this._datepickerShowing && (t = this._get(s, "showAnim"), i = this._get(s, "duration"), e = function e() {
        G.datepicker._tidyDialog(s);
      }, G.effects && (G.effects.effect[t] || G.effects[t]) ? s.dpDiv.hide(t, G.datepicker._get(s, "showOptions"), i, e) : s.dpDiv["slideDown" === t ? "slideUp" : "fadeIn" === t ? "fadeOut" : "hide"](t ? i : null, e), t || e(), this._datepickerShowing = !1, (e = this._get(s, "onClose")) && e.apply(s.input ? s.input[0] : null, [s.input ? s.input.val() : "", s]), this._lastInput = null, this._inDialog && (this._dialogInput.css({
        position: "absolute",
        left: "0",
        top: "-100px"
      }), G.blockUI && (G.unblockUI(), G("body").append(this.dpDiv))), this._inDialog = !1);
    },
    _tidyDialog: function _tidyDialog(e) {
      e.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar");
    },
    _checkExternalClick: function _checkExternalClick(e) {
      var t;
      G.datepicker._curInst && (t = G(e.target), e = G.datepicker._getInst(t[0]), (t[0].id === G.datepicker._mainDivId || 0 !== t.parents("#" + G.datepicker._mainDivId).length || t.hasClass(G.datepicker.markerClassName) || t.closest("." + G.datepicker._triggerClass).length || !G.datepicker._datepickerShowing || G.datepicker._inDialog && G.blockUI) && (!t.hasClass(G.datepicker.markerClassName) || G.datepicker._curInst === e) || G.datepicker._hideDatepicker());
    },
    _adjustDate: function _adjustDate(e, t, i) {
      var s = G(e),
          e = this._getInst(s[0]);

      this._isDisabledDatepicker(s[0]) || (this._adjustInstDate(e, t, i), this._updateDatepicker(e));
    },
    _gotoToday: function _gotoToday(e) {
      var t = G(e),
          i = this._getInst(t[0]);

      this._get(i, "gotoCurrent") && i.currentDay ? (i.selectedDay = i.currentDay, i.drawMonth = i.selectedMonth = i.currentMonth, i.drawYear = i.selectedYear = i.currentYear) : (e = new Date(), i.selectedDay = e.getDate(), i.drawMonth = i.selectedMonth = e.getMonth(), i.drawYear = i.selectedYear = e.getFullYear()), this._notifyChange(i), this._adjustDate(t);
    },
    _selectMonthYear: function _selectMonthYear(e, t, i) {
      var s = G(e),
          e = this._getInst(s[0]);

      e["selected" + ("M" === i ? "Month" : "Year")] = e["draw" + ("M" === i ? "Month" : "Year")] = parseInt(t.options[t.selectedIndex].value, 10), this._notifyChange(e), this._adjustDate(s);
    },
    _selectDay: function _selectDay(e, t, i, s) {
      var a = G(e);
      G(s).hasClass(this._unselectableClass) || this._isDisabledDatepicker(a[0]) || ((a = this._getInst(a[0])).selectedDay = a.currentDay = parseInt(G("a", s).attr("data-date")), a.selectedMonth = a.currentMonth = t, a.selectedYear = a.currentYear = i, this._selectDate(e, this._formatDate(a, a.currentDay, a.currentMonth, a.currentYear)));
    },
    _clearDate: function _clearDate(e) {
      e = G(e);

      this._selectDate(e, "");
    },
    _selectDate: function _selectDate(e, t) {
      var i = G(e),
          e = this._getInst(i[0]);

      t = null != t ? t : this._formatDate(e), e.input && e.input.val(t), this._updateAlternate(e), (i = this._get(e, "onSelect")) ? i.apply(e.input ? e.input[0] : null, [t, e]) : e.input && e.input.trigger("change"), e.inline ? this._updateDatepicker(e) : (this._hideDatepicker(), this._lastInput = e.input[0], "object" != _typeof(e.input[0]) && e.input.trigger("focus"), this._lastInput = null);
    },
    _updateAlternate: function _updateAlternate(e) {
      var t,
          i,
          s = this._get(e, "altField");

      s && (t = this._get(e, "altFormat") || this._get(e, "dateFormat"), i = this._getDate(e), e = this.formatDate(t, i, this._getFormatConfig(e)), G(document).find(s).val(e));
    },
    noWeekends: function noWeekends(e) {
      e = e.getDay();
      return [0 < e && e < 6, ""];
    },
    iso8601Week: function iso8601Week(e) {
      var t = new Date(e.getTime());
      return t.setDate(t.getDate() + 4 - (t.getDay() || 7)), e = t.getTime(), t.setMonth(0), t.setDate(1), Math.floor(Math.round((e - t) / 864e5) / 7) + 1;
    },
    parseDate: function parseDate(t, a, e) {
      if (null == t || null == a) throw "Invalid arguments";
      if ("" === (a = "object" == _typeof(a) ? a.toString() : a + "")) return null;

      for (var i, s, n, r = 0, o = (e ? e.shortYearCutoff : null) || this._defaults.shortYearCutoff, o = "string" != typeof o ? o : new Date().getFullYear() % 100 + parseInt(o, 10), l = (e ? e.dayNamesShort : null) || this._defaults.dayNamesShort, u = (e ? e.dayNames : null) || this._defaults.dayNames, h = (e ? e.monthNamesShort : null) || this._defaults.monthNamesShort, c = (e ? e.monthNames : null) || this._defaults.monthNames, d = -1, p = -1, g = -1, f = -1, m = !1, _ = function _(e) {
        e = D + 1 < t.length && t.charAt(D + 1) === e;
        return e && D++, e;
      }, v = function v(e) {
        var t = _(e),
            t = "@" === e ? 14 : "!" === e ? 20 : "y" === e && t ? 4 : "o" === e ? 3 : 2,
            t = new RegExp("^\\d{" + ("y" === e ? t : 1) + "," + t + "}"),
            t = a.substring(r).match(t);

        if (!t) throw "Missing number at position " + r;
        return r += t[0].length, parseInt(t[0], 10);
      }, y = function y(e, t, i) {
        var s = -1,
            t = G.map(_(e) ? i : t, function (e, t) {
          return [[t, e]];
        }).sort(function (e, t) {
          return -(e[1].length - t[1].length);
        });
        if (G.each(t, function (e, t) {
          var i = t[1];
          if (a.substr(r, i.length).toLowerCase() === i.toLowerCase()) return s = t[0], r += i.length, !1;
        }), -1 !== s) return s + 1;
        throw "Unknown name at position " + r;
      }, k = function k() {
        if (a.charAt(r) !== t.charAt(D)) throw "Unexpected literal at position " + r;
        r++;
      }, D = 0; D < t.length; D++) {
        if (m) "'" !== t.charAt(D) || _("'") ? k() : m = !1;else switch (t.charAt(D)) {
          case "d":
            g = v("d");
            break;

          case "D":
            y("D", l, u);
            break;

          case "o":
            f = v("o");
            break;

          case "m":
            p = v("m");
            break;

          case "M":
            p = y("M", h, c);
            break;

          case "y":
            d = v("y");
            break;

          case "@":
            d = (n = new Date(v("@"))).getFullYear(), p = n.getMonth() + 1, g = n.getDate();
            break;

          case "!":
            d = (n = new Date((v("!") - this._ticksTo1970) / 1e4)).getFullYear(), p = n.getMonth() + 1, g = n.getDate();
            break;

          case "'":
            _("'") ? k() : m = !0;
            break;

          default:
            k();
        }
      }

      if (r < a.length && (s = a.substr(r), !/^\s+/.test(s))) throw "Extra/unparsed characters found in date: " + s;
      if (-1 === d ? d = new Date().getFullYear() : d < 100 && (d += new Date().getFullYear() - new Date().getFullYear() % 100 + (d <= o ? 0 : -100)), -1 < f) for (p = 1, g = f;;) {
        if (g <= (i = this._getDaysInMonth(d, p - 1))) break;
        p++, g -= i;
      }
      if ((n = this._daylightSavingAdjust(new Date(d, p - 1, g))).getFullYear() !== d || n.getMonth() + 1 !== p || n.getDate() !== g) throw "Invalid date";
      return n;
    },
    ATOM: "yy-mm-dd",
    COOKIE: "D, dd M yy",
    ISO_8601: "yy-mm-dd",
    RFC_822: "D, d M y",
    RFC_850: "DD, dd-M-y",
    RFC_1036: "D, d M y",
    RFC_1123: "D, d M yy",
    RFC_2822: "D, d M yy",
    RSS: "D, d M y",
    TICKS: "!",
    TIMESTAMP: "@",
    W3C: "yy-mm-dd",
    _ticksTo1970: 24 * (718685 + Math.floor(492.5) - Math.floor(19.7) + Math.floor(4.925)) * 60 * 60 * 1e7,
    formatDate: function formatDate(t, e, i) {
      if (!e) return "";

      function s(e, t, i) {
        var s = "" + t;
        if (h(e)) for (; s.length < i;) {
          s = "0" + s;
        }
        return s;
      }

      function a(e, t, i, s) {
        return (h(e) ? s : i)[t];
      }

      var n,
          r = (i ? i.dayNamesShort : null) || this._defaults.dayNamesShort,
          o = (i ? i.dayNames : null) || this._defaults.dayNames,
          l = (i ? i.monthNamesShort : null) || this._defaults.monthNamesShort,
          u = (i ? i.monthNames : null) || this._defaults.monthNames,
          h = function h(e) {
        e = n + 1 < t.length && t.charAt(n + 1) === e;
        return e && n++, e;
      },
          c = "",
          d = !1;

      if (e) for (n = 0; n < t.length; n++) {
        if (d) "'" !== t.charAt(n) || h("'") ? c += t.charAt(n) : d = !1;else switch (t.charAt(n)) {
          case "d":
            c += s("d", e.getDate(), 2);
            break;

          case "D":
            c += a("D", e.getDay(), r, o);
            break;

          case "o":
            c += s("o", Math.round((new Date(e.getFullYear(), e.getMonth(), e.getDate()).getTime() - new Date(e.getFullYear(), 0, 0).getTime()) / 864e5), 3);
            break;

          case "m":
            c += s("m", e.getMonth() + 1, 2);
            break;

          case "M":
            c += a("M", e.getMonth(), l, u);
            break;

          case "y":
            c += h("y") ? e.getFullYear() : (e.getFullYear() % 100 < 10 ? "0" : "") + e.getFullYear() % 100;
            break;

          case "@":
            c += e.getTime();
            break;

          case "!":
            c += 1e4 * e.getTime() + this._ticksTo1970;
            break;

          case "'":
            h("'") ? c += "'" : d = !0;
            break;

          default:
            c += t.charAt(n);
        }
      }
      return c;
    },
    _possibleChars: function _possibleChars(t) {
      for (var e = "", i = !1, s = function s(e) {
        e = a + 1 < t.length && t.charAt(a + 1) === e;
        return e && a++, e;
      }, a = 0; a < t.length; a++) {
        if (i) "'" !== t.charAt(a) || s("'") ? e += t.charAt(a) : i = !1;else switch (t.charAt(a)) {
          case "d":
          case "m":
          case "y":
          case "@":
            e += "0123456789";
            break;

          case "D":
          case "M":
            return null;

          case "'":
            s("'") ? e += "'" : i = !0;
            break;

          default:
            e += t.charAt(a);
        }
      }

      return e;
    },
    _get: function _get(e, t) {
      return (void 0 !== e.settings[t] ? e.settings : this._defaults)[t];
    },
    _setDateFromField: function _setDateFromField(e, t) {
      if (e.input.val() !== e.lastVal) {
        var i = this._get(e, "dateFormat"),
            s = e.lastVal = e.input ? e.input.val() : null,
            a = this._getDefaultDate(e),
            n = a,
            r = this._getFormatConfig(e);

        try {
          n = this.parseDate(i, s, r) || a;
        } catch (e) {
          s = t ? "" : s;
        }

        e.selectedDay = n.getDate(), e.drawMonth = e.selectedMonth = n.getMonth(), e.drawYear = e.selectedYear = n.getFullYear(), e.currentDay = s ? n.getDate() : 0, e.currentMonth = s ? n.getMonth() : 0, e.currentYear = s ? n.getFullYear() : 0, this._adjustInstDate(e);
      }
    },
    _getDefaultDate: function _getDefaultDate(e) {
      return this._restrictMinMax(e, this._determineDate(e, this._get(e, "defaultDate"), new Date()));
    },
    _determineDate: function _determineDate(o, e, t) {
      var i,
          s,
          e = null == e || "" === e ? t : "string" == typeof e ? function (e) {
        try {
          return G.datepicker.parseDate(G.datepicker._get(o, "dateFormat"), e, G.datepicker._getFormatConfig(o));
        } catch (e) {}

        for (var t = (e.toLowerCase().match(/^c/) ? G.datepicker._getDate(o) : null) || new Date(), i = t.getFullYear(), s = t.getMonth(), a = t.getDate(), n = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g, r = n.exec(e); r;) {
          switch (r[2] || "d") {
            case "d":
            case "D":
              a += parseInt(r[1], 10);
              break;

            case "w":
            case "W":
              a += 7 * parseInt(r[1], 10);
              break;

            case "m":
            case "M":
              s += parseInt(r[1], 10), a = Math.min(a, G.datepicker._getDaysInMonth(i, s));
              break;

            case "y":
            case "Y":
              i += parseInt(r[1], 10), a = Math.min(a, G.datepicker._getDaysInMonth(i, s));
          }

          r = n.exec(e);
        }

        return new Date(i, s, a);
      }(e) : "number" == typeof e ? isNaN(e) ? t : (i = e, (s = new Date()).setDate(s.getDate() + i), s) : new Date(e.getTime());
      return (e = e && "Invalid Date" === e.toString() ? t : e) && (e.setHours(0), e.setMinutes(0), e.setSeconds(0), e.setMilliseconds(0)), this._daylightSavingAdjust(e);
    },
    _daylightSavingAdjust: function _daylightSavingAdjust(e) {
      return e ? (e.setHours(12 < e.getHours() ? e.getHours() + 2 : 0), e) : null;
    },
    _setDate: function _setDate(e, t, i) {
      var s = !t,
          a = e.selectedMonth,
          n = e.selectedYear,
          t = this._restrictMinMax(e, this._determineDate(e, t, new Date()));

      e.selectedDay = e.currentDay = t.getDate(), e.drawMonth = e.selectedMonth = e.currentMonth = t.getMonth(), e.drawYear = e.selectedYear = e.currentYear = t.getFullYear(), a === e.selectedMonth && n === e.selectedYear || i || this._notifyChange(e), this._adjustInstDate(e), e.input && e.input.val(s ? "" : this._formatDate(e));
    },
    _getDate: function _getDate(e) {
      return !e.currentYear || e.input && "" === e.input.val() ? null : this._daylightSavingAdjust(new Date(e.currentYear, e.currentMonth, e.currentDay));
    },
    _attachHandlers: function _attachHandlers(e) {
      var t = this._get(e, "stepMonths"),
          i = "#" + e.id.replace(/\\\\/g, "\\");

      e.dpDiv.find("[data-handler]").map(function () {
        var e = {
          prev: function prev() {
            G.datepicker._adjustDate(i, -t, "M");
          },
          next: function next() {
            G.datepicker._adjustDate(i, +t, "M");
          },
          hide: function hide() {
            G.datepicker._hideDatepicker();
          },
          today: function today() {
            G.datepicker._gotoToday(i);
          },
          selectDay: function selectDay() {
            return G.datepicker._selectDay(i, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this), !1;
          },
          selectMonth: function selectMonth() {
            return G.datepicker._selectMonthYear(i, this, "M"), !1;
          },
          selectYear: function selectYear() {
            return G.datepicker._selectMonthYear(i, this, "Y"), !1;
          }
        };
        G(this).on(this.getAttribute("data-event"), e[this.getAttribute("data-handler")]);
      });
    },
    _generateHTML: function _generateHTML(e) {
      var t,
          i,
          s,
          a,
          n,
          r,
          o,
          l,
          u,
          h,
          c,
          d,
          p,
          g,
          f,
          m,
          _,
          v,
          y,
          k,
          D,
          b,
          w,
          M,
          C,
          x,
          I,
          T,
          A,
          N,
          S,
          F,
          E = new Date(),
          Y = this._daylightSavingAdjust(new Date(E.getFullYear(), E.getMonth(), E.getDate())),
          O = this._get(e, "isRTL"),
          W = this._get(e, "showButtonPanel"),
          P = this._get(e, "hideIfNoPrevNext"),
          L = this._get(e, "navigationAsDateFormat"),
          H = this._getNumberOfMonths(e),
          j = this._get(e, "showCurrentAtPos"),
          E = this._get(e, "stepMonths"),
          K = 1 !== H[0] || 1 !== H[1],
          R = this._daylightSavingAdjust(e.currentDay ? new Date(e.currentYear, e.currentMonth, e.currentDay) : new Date(9999, 9, 9)),
          U = this._getMinMaxDate(e, "min"),
          z = this._getMinMaxDate(e, "max"),
          q = e.drawMonth - j,
          B = e.drawYear;

      if (q < 0 && (q += 12, B--), z) for (t = this._daylightSavingAdjust(new Date(z.getFullYear(), z.getMonth() - H[0] * H[1] + 1, z.getDate())), t = U && t < U ? U : t; this._daylightSavingAdjust(new Date(B, q, 1)) > t;) {
        --q < 0 && (q = 11, B--);
      }

      for (e.drawMonth = q, e.drawYear = B, j = this._get(e, "prevText"), j = L ? this.formatDate(j, this._daylightSavingAdjust(new Date(B, q - E, 1)), this._getFormatConfig(e)) : j, i = this._canAdjustMonth(e, -1, B, q) ? G("<a>").attr({
        class: "ui-datepicker-prev ui-corner-all",
        "data-handler": "prev",
        "data-event": "click",
        title: j
      }).append(G("<span>").addClass("ui-icon ui-icon-circle-triangle-" + (O ? "e" : "w")).text(j))[0].outerHTML : P ? "" : G("<a>").attr({
        class: "ui-datepicker-prev ui-corner-all ui-state-disabled",
        title: j
      }).append(G("<span>").addClass("ui-icon ui-icon-circle-triangle-" + (O ? "e" : "w")).text(j))[0].outerHTML, j = this._get(e, "nextText"), j = L ? this.formatDate(j, this._daylightSavingAdjust(new Date(B, q + E, 1)), this._getFormatConfig(e)) : j, s = this._canAdjustMonth(e, 1, B, q) ? G("<a>").attr({
        class: "ui-datepicker-next ui-corner-all",
        "data-handler": "next",
        "data-event": "click",
        title: j
      }).append(G("<span>").addClass("ui-icon ui-icon-circle-triangle-" + (O ? "w" : "e")).text(j))[0].outerHTML : P ? "" : G("<a>").attr({
        class: "ui-datepicker-next ui-corner-all ui-state-disabled",
        title: j
      }).append(G("<span>").attr("class", "ui-icon ui-icon-circle-triangle-" + (O ? "w" : "e")).text(j))[0].outerHTML, E = this._get(e, "currentText"), P = this._get(e, "gotoCurrent") && e.currentDay ? R : Y, E = L ? this.formatDate(E, P, this._getFormatConfig(e)) : E, j = "", e.inline || (j = G("<button>").attr({
        type: "button",
        class: "ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all",
        "data-handler": "hide",
        "data-event": "click"
      }).text(this._get(e, "closeText"))[0].outerHTML), L = "", W && (L = G("<div class='ui-datepicker-buttonpane ui-widget-content'>").append(O ? j : "").append(this._isInRange(e, P) ? G("<button>").attr({
        type: "button",
        class: "ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all",
        "data-handler": "today",
        "data-event": "click"
      }).text(E) : "").append(O ? "" : j)[0].outerHTML), a = parseInt(this._get(e, "firstDay"), 10), a = isNaN(a) ? 0 : a, n = this._get(e, "showWeek"), r = this._get(e, "dayNames"), o = this._get(e, "dayNamesMin"), l = this._get(e, "monthNames"), u = this._get(e, "monthNamesShort"), h = this._get(e, "beforeShowDay"), c = this._get(e, "showOtherMonths"), d = this._get(e, "selectOtherMonths"), p = this._getDefaultDate(e), g = "", m = 0; m < H[0]; m++) {
        for (_ = "", this.maxRows = 4, v = 0; v < H[1]; v++) {
          if (y = this._daylightSavingAdjust(new Date(B, q, e.selectedDay)), k = " ui-corner-all", D = "", K) {
            if (D += "<div class='ui-datepicker-group", 1 < H[1]) switch (v) {
              case 0:
                D += " ui-datepicker-group-first", k = " ui-corner-" + (O ? "right" : "left");
                break;

              case H[1] - 1:
                D += " ui-datepicker-group-last", k = " ui-corner-" + (O ? "left" : "right");
                break;

              default:
                D += " ui-datepicker-group-middle", k = "";
            }
            D += "'>";
          }

          for (D += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + k + "'>" + (/all|left/.test(k) && 0 === m ? O ? s : i : "") + (/all|right/.test(k) && 0 === m ? O ? i : s : "") + this._generateMonthYearHeader(e, q, B, U, z, 0 < m || 0 < v, l, u) + "</div><table class='ui-datepicker-calendar'><thead><tr>", b = n ? "<th class='ui-datepicker-week-col'>" + this._get(e, "weekHeader") + "</th>" : "", f = 0; f < 7; f++) {
            b += "<th scope='col'" + (5 <= (f + a + 6) % 7 ? " class='ui-datepicker-week-end'" : "") + "><span title='" + r[w = (f + a) % 7] + "'>" + o[w] + "</span></th>";
          }

          for (D += b + "</tr></thead><tbody>", C = this._getDaysInMonth(B, q), B === e.selectedYear && q === e.selectedMonth && (e.selectedDay = Math.min(e.selectedDay, C)), M = (this._getFirstDayOfMonth(B, q) - a + 7) % 7, C = Math.ceil((M + C) / 7), x = K && this.maxRows > C ? this.maxRows : C, this.maxRows = x, I = this._daylightSavingAdjust(new Date(B, q, 1 - M)), T = 0; T < x; T++) {
            for (D += "<tr>", A = n ? "<td class='ui-datepicker-week-col'>" + this._get(e, "calculateWeek")(I) + "</td>" : "", f = 0; f < 7; f++) {
              N = h ? h.apply(e.input ? e.input[0] : null, [I]) : [!0, ""], F = (S = I.getMonth() !== q) && !d || !N[0] || U && I < U || z && z < I, A += "<td class='" + (5 <= (f + a + 6) % 7 ? " ui-datepicker-week-end" : "") + (S ? " ui-datepicker-other-month" : "") + (I.getTime() === y.getTime() && q === e.selectedMonth && e._keyEvent || p.getTime() === I.getTime() && p.getTime() === y.getTime() ? " " + this._dayOverClass : "") + (F ? " " + this._unselectableClass + " ui-state-disabled" : "") + (S && !c ? "" : " " + N[1] + (I.getTime() === R.getTime() ? " " + this._currentClass : "") + (I.getTime() === Y.getTime() ? " ui-datepicker-today" : "")) + "'" + (S && !c || !N[2] ? "" : " title='" + N[2].replace(/'/g, "&#39;") + "'") + (F ? "" : " data-handler='selectDay' data-event='click' data-month='" + I.getMonth() + "' data-year='" + I.getFullYear() + "'") + ">" + (S && !c ? "&#xa0;" : F ? "<span class='ui-state-default'>" + I.getDate() + "</span>" : "<a class='ui-state-default" + (I.getTime() === Y.getTime() ? " ui-state-highlight" : "") + (I.getTime() === R.getTime() ? " ui-state-active" : "") + (S ? " ui-priority-secondary" : "") + "' href='#' aria-current='" + (I.getTime() === R.getTime() ? "true" : "false") + "' data-date='" + I.getDate() + "'>" + I.getDate() + "</a>") + "</td>", I.setDate(I.getDate() + 1), I = this._daylightSavingAdjust(I);
            }

            D += A + "</tr>";
          }

          11 < ++q && (q = 0, B++), _ += D += "</tbody></table>" + (K ? "</div>" + (0 < H[0] && v === H[1] - 1 ? "<div class='ui-datepicker-row-break'></div>" : "") : "");
        }

        g += _;
      }

      return g += L, e._keyEvent = !1, g;
    },
    _generateMonthYearHeader: function _generateMonthYearHeader(e, t, i, s, a, n, r, o) {
      var l,
          u,
          h,
          c,
          d,
          p,
          g = this._get(e, "changeMonth"),
          f = this._get(e, "changeYear"),
          m = this._get(e, "showMonthAfterYear"),
          _ = this._get(e, "selectMonthLabel"),
          v = this._get(e, "selectYearLabel"),
          y = "<div class='ui-datepicker-title'>",
          k = "";

      if (n || !g) k += "<span class='ui-datepicker-month'>" + r[t] + "</span>";else {
        for (l = s && s.getFullYear() === i, u = a && a.getFullYear() === i, k += "<select class='ui-datepicker-month' aria-label='" + _ + "' data-handler='selectMonth' data-event='change'>", h = 0; h < 12; h++) {
          (!l || h >= s.getMonth()) && (!u || h <= a.getMonth()) && (k += "<option value='" + h + "'" + (h === t ? " selected='selected'" : "") + ">" + o[h] + "</option>");
        }

        k += "</select>";
      }
      if (m || (y += k + (!n && g && f ? "" : "&#xa0;")), !e.yearshtml) if (e.yearshtml = "", n || !f) y += "<span class='ui-datepicker-year'>" + i + "</span>";else {
        for (r = this._get(e, "yearRange").split(":"), c = new Date().getFullYear(), d = (_ = function _(e) {
          e = e.match(/c[+\-].*/) ? i + parseInt(e.substring(1), 10) : e.match(/[+\-].*/) ? c + parseInt(e, 10) : parseInt(e, 10);
          return isNaN(e) ? c : e;
        })(r[0]), p = Math.max(d, _(r[1] || "")), d = s ? Math.max(d, s.getFullYear()) : d, p = a ? Math.min(p, a.getFullYear()) : p, e.yearshtml += "<select class='ui-datepicker-year' aria-label='" + v + "' data-handler='selectYear' data-event='change'>"; d <= p; d++) {
          e.yearshtml += "<option value='" + d + "'" + (d === i ? " selected='selected'" : "") + ">" + d + "</option>";
        }

        e.yearshtml += "</select>", y += e.yearshtml, e.yearshtml = null;
      }
      return y += this._get(e, "yearSuffix"), m && (y += (!n && g && f ? "" : "&#xa0;") + k), y += "</div>";
    },
    _adjustInstDate: function _adjustInstDate(e, t, i) {
      var s = e.selectedYear + ("Y" === i ? t : 0),
          a = e.selectedMonth + ("M" === i ? t : 0),
          t = Math.min(e.selectedDay, this._getDaysInMonth(s, a)) + ("D" === i ? t : 0),
          t = this._restrictMinMax(e, this._daylightSavingAdjust(new Date(s, a, t)));

      e.selectedDay = t.getDate(), e.drawMonth = e.selectedMonth = t.getMonth(), e.drawYear = e.selectedYear = t.getFullYear(), "M" !== i && "Y" !== i || this._notifyChange(e);
    },
    _restrictMinMax: function _restrictMinMax(e, t) {
      var i = this._getMinMaxDate(e, "min"),
          e = this._getMinMaxDate(e, "max"),
          t = i && t < i ? i : t;

      return e && e < t ? e : t;
    },
    _notifyChange: function _notifyChange(e) {
      var t = this._get(e, "onChangeMonthYear");

      t && t.apply(e.input ? e.input[0] : null, [e.selectedYear, e.selectedMonth + 1, e]);
    },
    _getNumberOfMonths: function _getNumberOfMonths(e) {
      e = this._get(e, "numberOfMonths");
      return null == e ? [1, 1] : "number" == typeof e ? [1, e] : e;
    },
    _getMinMaxDate: function _getMinMaxDate(e, t) {
      return this._determineDate(e, this._get(e, t + "Date"), null);
    },
    _getDaysInMonth: function _getDaysInMonth(e, t) {
      return 32 - this._daylightSavingAdjust(new Date(e, t, 32)).getDate();
    },
    _getFirstDayOfMonth: function _getFirstDayOfMonth(e, t) {
      return new Date(e, t, 1).getDay();
    },
    _canAdjustMonth: function _canAdjustMonth(e, t, i, s) {
      var a = this._getNumberOfMonths(e),
          a = this._daylightSavingAdjust(new Date(i, s + (t < 0 ? t : a[0] * a[1]), 1));

      return t < 0 && a.setDate(this._getDaysInMonth(a.getFullYear(), a.getMonth())), this._isInRange(e, a);
    },
    _isInRange: function _isInRange(e, t) {
      var i = this._getMinMaxDate(e, "min"),
          s = this._getMinMaxDate(e, "max"),
          a = null,
          n = null,
          r = this._get(e, "yearRange");

      return r && (e = r.split(":"), r = new Date().getFullYear(), a = parseInt(e[0], 10), n = parseInt(e[1], 10), e[0].match(/[+\-].*/) && (a += r), e[1].match(/[+\-].*/) && (n += r)), (!i || t.getTime() >= i.getTime()) && (!s || t.getTime() <= s.getTime()) && (!a || t.getFullYear() >= a) && (!n || t.getFullYear() <= n);
    },
    _getFormatConfig: function _getFormatConfig(e) {
      var t = this._get(e, "shortYearCutoff");

      return {
        shortYearCutoff: t = "string" != typeof t ? t : new Date().getFullYear() % 100 + parseInt(t, 10),
        dayNamesShort: this._get(e, "dayNamesShort"),
        dayNames: this._get(e, "dayNames"),
        monthNamesShort: this._get(e, "monthNamesShort"),
        monthNames: this._get(e, "monthNames")
      };
    },
    _formatDate: function _formatDate(e, t, i, s) {
      t || (e.currentDay = e.selectedDay, e.currentMonth = e.selectedMonth, e.currentYear = e.selectedYear);
      t = t ? "object" == _typeof(t) ? t : this._daylightSavingAdjust(new Date(s, i, t)) : this._daylightSavingAdjust(new Date(e.currentYear, e.currentMonth, e.currentDay));
      return this.formatDate(this._get(e, "dateFormat"), t, this._getFormatConfig(e));
    }
  }), G.fn.datepicker = function (e) {
    if (!this.length) return this;
    G.datepicker.initialized || (G(document).on("mousedown", G.datepicker._checkExternalClick), G.datepicker.initialized = !0), 0 === G("#" + G.datepicker._mainDivId).length && G("body").append(G.datepicker.dpDiv);
    var t = Array.prototype.slice.call(arguments, 1);
    return "string" == typeof e && ("isDisabled" === e || "getDate" === e || "widget" === e) || "option" === e && 2 === arguments.length && "string" == typeof arguments[1] ? G.datepicker["_" + e + "Datepicker"].apply(G.datepicker, [this[0]].concat(t)) : this.each(function () {
      "string" == typeof e ? G.datepicker["_" + e + "Datepicker"].apply(G.datepicker, [this].concat(t)) : G.datepicker._attachDatepicker(this, e);
    });
  }, G.datepicker = new t(), G.datepicker.initialized = !1, G.datepicker.uuid = new Date().getTime(), G.datepicker.version = "1.13.0";
  G.datepicker;
});

/***/ }),

/***/ "./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/swiper/css/swiper.min.css":
/*!******************************************************************************************************************!*\
  !*** ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/swiper/css/swiper.min.css ***!
  \******************************************************************************************************************/
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js");
/* harmony import */ var _css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
// Imports


var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
// Module
___CSS_LOADER_EXPORT___.push([module.id, "/**\n * Swiper 5.4.5\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * http://swiperjs.com\n *\n * Copyright 2014-2020 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: June 16, 2020\n */\n\n@font-face{font-family:swiper-icons;src:url(\"data:application/font-woff;charset=utf-8;base64, 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\") format(\"woff\");font-weight:400;font-style:normal}:root{--swiper-theme-color:#007aff}.swiper-container{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1}.swiper-container-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:transform;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{transform:translate3d(0px,0,0)}.swiper-container-multirow>.swiper-wrapper{flex-wrap:wrap}.swiper-container-multirow-column>.swiper-wrapper{flex-wrap:wrap;flex-direction:column}.swiper-container-free-mode>.swiper-wrapper{transition-timing-function:ease-out;margin:0 auto}.swiper-slide{flex-shrink:0;width:100%;height:100%;position:relative;transition-property:transform}.swiper-slide-invisible-blank{visibility:hidden}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-container-3d{perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-right{background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-top{background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-css-mode>.swiper-wrapper{overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.swiper-container-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-container-css-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}.swiper-container-horizontal.swiper-container-css-mode>.swiper-wrapper{scroll-snap-type:x mandatory}.swiper-container-vertical.swiper-container-css-mode>.swiper-wrapper{scroll-snap-type:y mandatory}:root{--swiper-navigation-size:44px}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:calc(var(--swiper-navigation-size)/ 44 * 27);height:var(--swiper-navigation-size);margin-top:calc(-1 * var(--swiper-navigation-size)/ 2);z-index:10;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--swiper-navigation-color,var(--swiper-theme-color))}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-next:after,.swiper-button-prev:after{font-family:swiper-icons;font-size:var(--swiper-navigation-size);text-transform:none!important;letter-spacing:0;text-transform:none;font-variant:initial;line-height:1}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{left:10px;right:auto}.swiper-button-prev:after,.swiper-container-rtl .swiper-button-next:after{content:'prev'}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{right:10px;left:auto}.swiper-button-next:after,.swiper-container-rtl .swiper-button-prev:after{content:'next'}.swiper-button-next.swiper-button-white,.swiper-button-prev.swiper-button-white{--swiper-navigation-color:#ffffff}.swiper-button-next.swiper-button-black,.swiper-button-prev.swiper-button-black{--swiper-navigation-color:#000000}.swiper-button-lock{display:none}.swiper-pagination{position:absolute;text-align:center;transition:.3s opacity;transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{transform:scale(.33)}.swiper-pagination-bullet{width:8px;height:8px;display:inline-block;border-radius:100%;background:#000;opacity:.2}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet-active{opacity:1;background:var(--swiper-pagination-color,var(--swiper-theme-color))}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;transform:translate3d(0px,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:6px 0;display:block}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;transform:translateY(-50%);width:8px}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;transition:.2s transform,.2s top}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 4px}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;transform:translateX(-50%);white-space:nowrap}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s left}.swiper-container-horizontal.swiper-container-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s right}.swiper-pagination-progressbar{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:var(--swiper-pagination-color,var(--swiper-theme-color));position:absolute;left:0;top:0;width:100%;height:100%;transform:scale(0);transform-origin:left top}.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progressbar,.swiper-container-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite{width:100%;height:4px;left:0;top:0}.swiper-container-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-container-vertical>.swiper-pagination-progressbar{width:4px;height:100%;left:0;top:0}.swiper-pagination-white{--swiper-pagination-color:#ffffff}.swiper-pagination-black{--swiper-pagination-color:#000000}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}.swiper-zoom-container{width:100%;height:100%;display:flex;justify-content:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;object-fit:contain}.swiper-slide-zoomed{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;transform-origin:50%;animation:swiper-preloader-spin 1s infinite linear;box-sizing:border-box;border:4px solid var(--swiper-preloader-color,var(--swiper-theme-color));border-radius:50%;border-top-color:transparent}.swiper-lazy-preloader-white{--swiper-preloader-color:#fff}.swiper-lazy-preloader-black{--swiper-preloader-color:#000}@keyframes swiper-preloader-spin{100%{transform:rotate(360deg)}}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-container-fade.swiper-container-free-mode .swiper-slide{transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube{overflow:visible}.swiper-container-cube .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1;visibility:hidden;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube.swiper-container-rtl .swiper-slide{transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0px;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-container-flip{overflow:visible}.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}", "",{"version":3,"sources":["webpack://./node_modules/swiper/css/swiper.min.css"],"names":[],"mappings":"AAAA;;;;;;;;;;EAUE;;AAEF,WAAW,wBAAwB,CAAC,2sEAA2sE,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,4BAA4B,CAAC,kBAAkB,gBAAgB,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,eAAe,CAAC,eAAe,CAAC,SAAS,CAAC,SAAS,CAAC,2CAA2C,qBAAqB,CAAC,gBAAgB,iBAAiB,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,YAAY,CAAC,6BAA6B,CAAC,sBAAsB,CAAC,wDAAwD,8BAA8B,CAAC,2CAA2C,cAAc,CAAC,kDAAkD,cAAc,CAAC,qBAAqB,CAAC,4CAA4C,mCAAmC,CAAC,aAAa,CAAC,cAAc,aAAa,CAAC,UAAU,CAAC,WAAW,CAAC,iBAAiB,CAAC,6BAA6B,CAAC,8BAA8B,iBAAiB,CAAC,wEAAwE,WAAW,CAAC,6CAA6C,sBAAsB,CAAC,oCAAoC,CAAC,qBAAqB,kBAAkB,CAAC,+SAA+S,2BAA2B,CAAC,8LAA8L,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,mBAAmB,CAAC,UAAU,CAAC,+CAA+C,sEAAsE,CAAC,gDAAgD,uEAAuE,CAAC,8CAA8C,qEAAqE,CAAC,iDAAiD,wEAAwE,CAAC,2CAA2C,aAAa,CAAC,oBAAoB,CAAC,uBAAuB,CAAC,8DAA8D,YAAY,CAAC,yDAAyD,6BAA6B,CAAC,uEAAuE,4BAA4B,CAAC,qEAAqE,4BAA4B,CAAC,MAAM,6BAA6B,CAAC,wCAAwC,iBAAiB,CAAC,OAAO,CAAC,kDAAkD,CAAC,oCAAoC,CAAC,sDAAsD,CAAC,UAAU,CAAC,cAAc,CAAC,YAAY,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,8DAA8D,CAAC,sFAAsF,WAAW,CAAC,WAAW,CAAC,mBAAmB,CAAC,oDAAoD,wBAAwB,CAAC,uCAAuC,CAAC,6BAA6B,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,aAAa,CAAC,8DAA8D,SAAS,CAAC,UAAU,CAAC,0EAA0E,cAAc,CAAC,8DAA8D,UAAU,CAAC,SAAS,CAAC,0EAA0E,cAAc,CAAC,gFAAgF,iCAAiC,CAAC,gFAAgF,iCAAiC,CAAC,oBAAoB,YAAY,CAAC,mBAAmB,iBAAiB,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,4BAA4B,CAAC,UAAU,CAAC,4CAA4C,SAAS,CAAC,8GAA8G,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,mCAAmC,eAAe,CAAC,WAAW,CAAC,6DAA6D,oBAAoB,CAAC,iBAAiB,CAAC,oEAAoE,kBAAkB,CAAC,yEAAyE,kBAAkB,CAAC,yEAAyE,oBAAoB,CAAC,8EAA8E,oBAAoB,CAAC,yEAAyE,oBAAoB,CAAC,8EAA8E,oBAAoB,CAAC,0BAA0B,SAAS,CAAC,UAAU,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,eAAe,CAAC,UAAU,CAAC,gCAAgC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,eAAe,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,eAAe,CAAC,uDAAuD,cAAc,CAAC,iCAAiC,SAAS,CAAC,mEAAmE,CAAC,sDAAsD,UAAU,CAAC,OAAO,CAAC,iCAAiC,CAAC,gFAAgF,YAAY,CAAC,aAAa,CAAC,wFAAwF,OAAO,CAAC,0BAA0B,CAAC,SAAS,CAAC,kHAAkH,oBAAoB,CAAC,gCAAgC,CAAC,kFAAkF,YAAY,CAAC,0FAA0F,QAAQ,CAAC,0BAA0B,CAAC,kBAAkB,CAAC,oHAAoH,iCAAiC,CAAC,+GAA+G,kCAAkC,CAAC,+BAA+B,0BAA0B,CAAC,iBAAiB,CAAC,mEAAmE,mEAAmE,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,kBAAkB,CAAC,yBAAyB,CAAC,yFAAyF,0BAA0B,CAAC,6JAA6J,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,6JAA6J,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,iCAAiC,CAAC,yBAAyB,iCAAiC,CAAC,wBAAwB,YAAY,CAAC,kBAAkB,kBAAkB,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,yBAAyB,CAAC,+CAA+C,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,6CAA6C,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,uBAAuB,WAAW,CAAC,UAAU,CAAC,iBAAiB,CAAC,yBAAyB,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,WAAW,CAAC,uBAAuB,YAAY,CAAC,uBAAuB,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,oFAAoF,cAAc,CAAC,eAAe,CAAC,kBAAkB,CAAC,qBAAqB,WAAW,CAAC,uBAAuB,UAAU,CAAC,WAAW,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,UAAU,CAAC,oBAAoB,CAAC,kDAAkD,CAAC,qBAAqB,CAAC,wEAAwE,CAAC,iBAAiB,CAAC,4BAA4B,CAAC,6BAA6B,6BAA6B,CAAC,6BAA6B,6BAA6B,CAAC,iCAAiC,KAAK,wBAAwB,CAAC,CAAC,uCAAuC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,SAAS,CAAC,aAAa,CAAC,gEAAgE,mCAAmC,CAAC,qCAAqC,mBAAmB,CAAC,2BAA2B,CAAC,mDAAmD,mBAAmB,CAAC,6GAA6G,mBAAmB,CAAC,uBAAuB,gBAAgB,CAAC,qCAAqC,mBAAmB,CAAC,kCAAkC,CAAC,0BAA0B,CAAC,SAAS,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,UAAU,CAAC,WAAW,CAAC,mDAAmD,mBAAmB,CAAC,0DAA0D,uBAAuB,CAAC,6GAA6G,mBAAmB,CAAC,wLAAwL,mBAAmB,CAAC,kBAAkB,CAAC,sMAAsM,SAAS,CAAC,kCAAkC,CAAC,0BAA0B,CAAC,2CAA2C,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,SAAS,CAAC,uBAAuB,gBAAgB,CAAC,qCAAqC,mBAAmB,CAAC,kCAAkC,CAAC,0BAA0B,CAAC,SAAS,CAAC,mDAAmD,mBAAmB,CAAC,6GAA6G,mBAAmB,CAAC,sMAAsM,SAAS,CAAC,kCAAkC,CAAC,0BAA0B","sourcesContent":["/**\n * Swiper 5.4.5\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * http://swiperjs.com\n *\n * Copyright 2014-2020 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: June 16, 2020\n */\n\n@font-face{font-family:swiper-icons;src:url(\"data:application/font-woff;charset=utf-8;base64, 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\") format(\"woff\");font-weight:400;font-style:normal}:root{--swiper-theme-color:#007aff}.swiper-container{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1}.swiper-container-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:transform;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{transform:translate3d(0px,0,0)}.swiper-container-multirow>.swiper-wrapper{flex-wrap:wrap}.swiper-container-multirow-column>.swiper-wrapper{flex-wrap:wrap;flex-direction:column}.swiper-container-free-mode>.swiper-wrapper{transition-timing-function:ease-out;margin:0 auto}.swiper-slide{flex-shrink:0;width:100%;height:100%;position:relative;transition-property:transform}.swiper-slide-invisible-blank{visibility:hidden}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-container-3d{perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-right{background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-top{background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-css-mode>.swiper-wrapper{overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.swiper-container-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-container-css-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}.swiper-container-horizontal.swiper-container-css-mode>.swiper-wrapper{scroll-snap-type:x mandatory}.swiper-container-vertical.swiper-container-css-mode>.swiper-wrapper{scroll-snap-type:y mandatory}:root{--swiper-navigation-size:44px}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:calc(var(--swiper-navigation-size)/ 44 * 27);height:var(--swiper-navigation-size);margin-top:calc(-1 * var(--swiper-navigation-size)/ 2);z-index:10;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--swiper-navigation-color,var(--swiper-theme-color))}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-next:after,.swiper-button-prev:after{font-family:swiper-icons;font-size:var(--swiper-navigation-size);text-transform:none!important;letter-spacing:0;text-transform:none;font-variant:initial;line-height:1}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{left:10px;right:auto}.swiper-button-prev:after,.swiper-container-rtl .swiper-button-next:after{content:'prev'}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{right:10px;left:auto}.swiper-button-next:after,.swiper-container-rtl .swiper-button-prev:after{content:'next'}.swiper-button-next.swiper-button-white,.swiper-button-prev.swiper-button-white{--swiper-navigation-color:#ffffff}.swiper-button-next.swiper-button-black,.swiper-button-prev.swiper-button-black{--swiper-navigation-color:#000000}.swiper-button-lock{display:none}.swiper-pagination{position:absolute;text-align:center;transition:.3s opacity;transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{transform:scale(.33)}.swiper-pagination-bullet{width:8px;height:8px;display:inline-block;border-radius:100%;background:#000;opacity:.2}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet-active{opacity:1;background:var(--swiper-pagination-color,var(--swiper-theme-color))}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;transform:translate3d(0px,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:6px 0;display:block}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;transform:translateY(-50%);width:8px}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;transition:.2s transform,.2s top}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 4px}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;transform:translateX(-50%);white-space:nowrap}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s left}.swiper-container-horizontal.swiper-container-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s right}.swiper-pagination-progressbar{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:var(--swiper-pagination-color,var(--swiper-theme-color));position:absolute;left:0;top:0;width:100%;height:100%;transform:scale(0);transform-origin:left top}.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progressbar,.swiper-container-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite{width:100%;height:4px;left:0;top:0}.swiper-container-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-container-vertical>.swiper-pagination-progressbar{width:4px;height:100%;left:0;top:0}.swiper-pagination-white{--swiper-pagination-color:#ffffff}.swiper-pagination-black{--swiper-pagination-color:#000000}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}.swiper-zoom-container{width:100%;height:100%;display:flex;justify-content:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;object-fit:contain}.swiper-slide-zoomed{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;transform-origin:50%;animation:swiper-preloader-spin 1s infinite linear;box-sizing:border-box;border:4px solid var(--swiper-preloader-color,var(--swiper-theme-color));border-radius:50%;border-top-color:transparent}.swiper-lazy-preloader-white{--swiper-preloader-color:#fff}.swiper-lazy-preloader-black{--swiper-preloader-color:#000}@keyframes swiper-preloader-spin{100%{transform:rotate(360deg)}}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-container-fade.swiper-container-free-mode .swiper-slide{transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube{overflow:visible}.swiper-container-cube .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1;visibility:hidden;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube.swiper-container-rtl .swiper-slide{transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0px;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-container-flip{overflow:visible}.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}"],"sourceRoot":""}]);
// Exports
/* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);


/***/ }),

/***/ "./node_modules/moment/locale sync recursive ^\\.\\/.*$":
/*!***************************************************!*\
  !*** ./node_modules/moment/locale/ sync ^\.\/.*$ ***!
  \***************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

var map = {
	"./af": "./node_modules/moment/locale/af.js",
	"./af.js": "./node_modules/moment/locale/af.js",
	"./ar": "./node_modules/moment/locale/ar.js",
	"./ar-dz": "./node_modules/moment/locale/ar-dz.js",
	"./ar-dz.js": "./node_modules/moment/locale/ar-dz.js",
	"./ar-kw": "./node_modules/moment/locale/ar-kw.js",
	"./ar-kw.js": "./node_modules/moment/locale/ar-kw.js",
	"./ar-ly": "./node_modules/moment/locale/ar-ly.js",
	"./ar-ly.js": "./node_modules/moment/locale/ar-ly.js",
	"./ar-ma": "./node_modules/moment/locale/ar-ma.js",
	"./ar-ma.js": "./node_modules/moment/locale/ar-ma.js",
	"./ar-sa": "./node_modules/moment/locale/ar-sa.js",
	"./ar-sa.js": "./node_modules/moment/locale/ar-sa.js",
	"./ar-tn": "./node_modules/moment/locale/ar-tn.js",
	"./ar-tn.js": "./node_modules/moment/locale/ar-tn.js",
	"./ar.js": "./node_modules/moment/locale/ar.js",
	"./az": "./node_modules/moment/locale/az.js",
	"./az.js": "./node_modules/moment/locale/az.js",
	"./be": "./node_modules/moment/locale/be.js",
	"./be.js": "./node_modules/moment/locale/be.js",
	"./bg": "./node_modules/moment/locale/bg.js",
	"./bg.js": "./node_modules/moment/locale/bg.js",
	"./bm": "./node_modules/moment/locale/bm.js",
	"./bm.js": "./node_modules/moment/locale/bm.js",
	"./bn": "./node_modules/moment/locale/bn.js",
	"./bn-bd": "./node_modules/moment/locale/bn-bd.js",
	"./bn-bd.js": "./node_modules/moment/locale/bn-bd.js",
	"./bn.js": "./node_modules/moment/locale/bn.js",
	"./bo": "./node_modules/moment/locale/bo.js",
	"./bo.js": "./node_modules/moment/locale/bo.js",
	"./br": "./node_modules/moment/locale/br.js",
	"./br.js": "./node_modules/moment/locale/br.js",
	"./bs": "./node_modules/moment/locale/bs.js",
	"./bs.js": "./node_modules/moment/locale/bs.js",
	"./ca": "./node_modules/moment/locale/ca.js",
	"./ca.js": "./node_modules/moment/locale/ca.js",
	"./cs": "./node_modules/moment/locale/cs.js",
	"./cs.js": "./node_modules/moment/locale/cs.js",
	"./cv": "./node_modules/moment/locale/cv.js",
	"./cv.js": "./node_modules/moment/locale/cv.js",
	"./cy": "./node_modules/moment/locale/cy.js",
	"./cy.js": "./node_modules/moment/locale/cy.js",
	"./da": "./node_modules/moment/locale/da.js",
	"./da.js": "./node_modules/moment/locale/da.js",
	"./de": "./node_modules/moment/locale/de.js",
	"./de-at": "./node_modules/moment/locale/de-at.js",
	"./de-at.js": "./node_modules/moment/locale/de-at.js",
	"./de-ch": "./node_modules/moment/locale/de-ch.js",
	"./de-ch.js": "./node_modules/moment/locale/de-ch.js",
	"./de.js": "./node_modules/moment/locale/de.js",
	"./dv": "./node_modules/moment/locale/dv.js",
	"./dv.js": "./node_modules/moment/locale/dv.js",
	"./el": "./node_modules/moment/locale/el.js",
	"./el.js": "./node_modules/moment/locale/el.js",
	"./en-au": "./node_modules/moment/locale/en-au.js",
	"./en-au.js": "./node_modules/moment/locale/en-au.js",
	"./en-ca": "./node_modules/moment/locale/en-ca.js",
	"./en-ca.js": "./node_modules/moment/locale/en-ca.js",
	"./en-gb": "./node_modules/moment/locale/en-gb.js",
	"./en-gb.js": "./node_modules/moment/locale/en-gb.js",
	"./en-ie": "./node_modules/moment/locale/en-ie.js",
	"./en-ie.js": "./node_modules/moment/locale/en-ie.js",
	"./en-il": "./node_modules/moment/locale/en-il.js",
	"./en-il.js": "./node_modules/moment/locale/en-il.js",
	"./en-in": "./node_modules/moment/locale/en-in.js",
	"./en-in.js": "./node_modules/moment/locale/en-in.js",
	"./en-nz": "./node_modules/moment/locale/en-nz.js",
	"./en-nz.js": "./node_modules/moment/locale/en-nz.js",
	"./en-sg": "./node_modules/moment/locale/en-sg.js",
	"./en-sg.js": "./node_modules/moment/locale/en-sg.js",
	"./eo": "./node_modules/moment/locale/eo.js",
	"./eo.js": "./node_modules/moment/locale/eo.js",
	"./es": "./node_modules/moment/locale/es.js",
	"./es-do": "./node_modules/moment/locale/es-do.js",
	"./es-do.js": "./node_modules/moment/locale/es-do.js",
	"./es-mx": "./node_modules/moment/locale/es-mx.js",
	"./es-mx.js": "./node_modules/moment/locale/es-mx.js",
	"./es-us": "./node_modules/moment/locale/es-us.js",
	"./es-us.js": "./node_modules/moment/locale/es-us.js",
	"./es.js": "./node_modules/moment/locale/es.js",
	"./et": "./node_modules/moment/locale/et.js",
	"./et.js": "./node_modules/moment/locale/et.js",
	"./eu": "./node_modules/moment/locale/eu.js",
	"./eu.js": "./node_modules/moment/locale/eu.js",
	"./fa": "./node_modules/moment/locale/fa.js",
	"./fa.js": "./node_modules/moment/locale/fa.js",
	"./fi": "./node_modules/moment/locale/fi.js",
	"./fi.js": "./node_modules/moment/locale/fi.js",
	"./fil": "./node_modules/moment/locale/fil.js",
	"./fil.js": "./node_modules/moment/locale/fil.js",
	"./fo": "./node_modules/moment/locale/fo.js",
	"./fo.js": "./node_modules/moment/locale/fo.js",
	"./fr": "./node_modules/moment/locale/fr.js",
	"./fr-ca": "./node_modules/moment/locale/fr-ca.js",
	"./fr-ca.js": "./node_modules/moment/locale/fr-ca.js",
	"./fr-ch": "./node_modules/moment/locale/fr-ch.js",
	"./fr-ch.js": "./node_modules/moment/locale/fr-ch.js",
	"./fr.js": "./node_modules/moment/locale/fr.js",
	"./fy": "./node_modules/moment/locale/fy.js",
	"./fy.js": "./node_modules/moment/locale/fy.js",
	"./ga": "./node_modules/moment/locale/ga.js",
	"./ga.js": "./node_modules/moment/locale/ga.js",
	"./gd": "./node_modules/moment/locale/gd.js",
	"./gd.js": "./node_modules/moment/locale/gd.js",
	"./gl": "./node_modules/moment/locale/gl.js",
	"./gl.js": "./node_modules/moment/locale/gl.js",
	"./gom-deva": "./node_modules/moment/locale/gom-deva.js",
	"./gom-deva.js": "./node_modules/moment/locale/gom-deva.js",
	"./gom-latn": "./node_modules/moment/locale/gom-latn.js",
	"./gom-latn.js": "./node_modules/moment/locale/gom-latn.js",
	"./gu": "./node_modules/moment/locale/gu.js",
	"./gu.js": "./node_modules/moment/locale/gu.js",
	"./he": "./node_modules/moment/locale/he.js",
	"./he.js": "./node_modules/moment/locale/he.js",
	"./hi": "./node_modules/moment/locale/hi.js",
	"./hi.js": "./node_modules/moment/locale/hi.js",
	"./hr": "./node_modules/moment/locale/hr.js",
	"./hr.js": "./node_modules/moment/locale/hr.js",
	"./hu": "./node_modules/moment/locale/hu.js",
	"./hu.js": "./node_modules/moment/locale/hu.js",
	"./hy-am": "./node_modules/moment/locale/hy-am.js",
	"./hy-am.js": "./node_modules/moment/locale/hy-am.js",
	"./id": "./node_modules/moment/locale/id.js",
	"./id.js": "./node_modules/moment/locale/id.js",
	"./is": "./node_modules/moment/locale/is.js",
	"./is.js": "./node_modules/moment/locale/is.js",
	"./it": "./node_modules/moment/locale/it.js",
	"./it-ch": "./node_modules/moment/locale/it-ch.js",
	"./it-ch.js": "./node_modules/moment/locale/it-ch.js",
	"./it.js": "./node_modules/moment/locale/it.js",
	"./ja": "./node_modules/moment/locale/ja.js",
	"./ja.js": "./node_modules/moment/locale/ja.js",
	"./jv": "./node_modules/moment/locale/jv.js",
	"./jv.js": "./node_modules/moment/locale/jv.js",
	"./ka": "./node_modules/moment/locale/ka.js",
	"./ka.js": "./node_modules/moment/locale/ka.js",
	"./kk": "./node_modules/moment/locale/kk.js",
	"./kk.js": "./node_modules/moment/locale/kk.js",
	"./km": "./node_modules/moment/locale/km.js",
	"./km.js": "./node_modules/moment/locale/km.js",
	"./kn": "./node_modules/moment/locale/kn.js",
	"./kn.js": "./node_modules/moment/locale/kn.js",
	"./ko": "./node_modules/moment/locale/ko.js",
	"./ko.js": "./node_modules/moment/locale/ko.js",
	"./ku": "./node_modules/moment/locale/ku.js",
	"./ku.js": "./node_modules/moment/locale/ku.js",
	"./ky": "./node_modules/moment/locale/ky.js",
	"./ky.js": "./node_modules/moment/locale/ky.js",
	"./lb": "./node_modules/moment/locale/lb.js",
	"./lb.js": "./node_modules/moment/locale/lb.js",
	"./lo": "./node_modules/moment/locale/lo.js",
	"./lo.js": "./node_modules/moment/locale/lo.js",
	"./lt": "./node_modules/moment/locale/lt.js",
	"./lt.js": "./node_modules/moment/locale/lt.js",
	"./lv": "./node_modules/moment/locale/lv.js",
	"./lv.js": "./node_modules/moment/locale/lv.js",
	"./me": "./node_modules/moment/locale/me.js",
	"./me.js": "./node_modules/moment/locale/me.js",
	"./mi": "./node_modules/moment/locale/mi.js",
	"./mi.js": "./node_modules/moment/locale/mi.js",
	"./mk": "./node_modules/moment/locale/mk.js",
	"./mk.js": "./node_modules/moment/locale/mk.js",
	"./ml": "./node_modules/moment/locale/ml.js",
	"./ml.js": "./node_modules/moment/locale/ml.js",
	"./mn": "./node_modules/moment/locale/mn.js",
	"./mn.js": "./node_modules/moment/locale/mn.js",
	"./mr": "./node_modules/moment/locale/mr.js",
	"./mr.js": "./node_modules/moment/locale/mr.js",
	"./ms": "./node_modules/moment/locale/ms.js",
	"./ms-my": "./node_modules/moment/locale/ms-my.js",
	"./ms-my.js": "./node_modules/moment/locale/ms-my.js",
	"./ms.js": "./node_modules/moment/locale/ms.js",
	"./mt": "./node_modules/moment/locale/mt.js",
	"./mt.js": "./node_modules/moment/locale/mt.js",
	"./my": "./node_modules/moment/locale/my.js",
	"./my.js": "./node_modules/moment/locale/my.js",
	"./nb": "./node_modules/moment/locale/nb.js",
	"./nb.js": "./node_modules/moment/locale/nb.js",
	"./ne": "./node_modules/moment/locale/ne.js",
	"./ne.js": "./node_modules/moment/locale/ne.js",
	"./nl": "./node_modules/moment/locale/nl.js",
	"./nl-be": "./node_modules/moment/locale/nl-be.js",
	"./nl-be.js": "./node_modules/moment/locale/nl-be.js",
	"./nl.js": "./node_modules/moment/locale/nl.js",
	"./nn": "./node_modules/moment/locale/nn.js",
	"./nn.js": "./node_modules/moment/locale/nn.js",
	"./oc-lnc": "./node_modules/moment/locale/oc-lnc.js",
	"./oc-lnc.js": "./node_modules/moment/locale/oc-lnc.js",
	"./pa-in": "./node_modules/moment/locale/pa-in.js",
	"./pa-in.js": "./node_modules/moment/locale/pa-in.js",
	"./pl": "./node_modules/moment/locale/pl.js",
	"./pl.js": "./node_modules/moment/locale/pl.js",
	"./pt": "./node_modules/moment/locale/pt.js",
	"./pt-br": "./node_modules/moment/locale/pt-br.js",
	"./pt-br.js": "./node_modules/moment/locale/pt-br.js",
	"./pt.js": "./node_modules/moment/locale/pt.js",
	"./ro": "./node_modules/moment/locale/ro.js",
	"./ro.js": "./node_modules/moment/locale/ro.js",
	"./ru": "./node_modules/moment/locale/ru.js",
	"./ru.js": "./node_modules/moment/locale/ru.js",
	"./sd": "./node_modules/moment/locale/sd.js",
	"./sd.js": "./node_modules/moment/locale/sd.js",
	"./se": "./node_modules/moment/locale/se.js",
	"./se.js": "./node_modules/moment/locale/se.js",
	"./si": "./node_modules/moment/locale/si.js",
	"./si.js": "./node_modules/moment/locale/si.js",
	"./sk": "./node_modules/moment/locale/sk.js",
	"./sk.js": "./node_modules/moment/locale/sk.js",
	"./sl": "./node_modules/moment/locale/sl.js",
	"./sl.js": "./node_modules/moment/locale/sl.js",
	"./sq": "./node_modules/moment/locale/sq.js",
	"./sq.js": "./node_modules/moment/locale/sq.js",
	"./sr": "./node_modules/moment/locale/sr.js",
	"./sr-cyrl": "./node_modules/moment/locale/sr-cyrl.js",
	"./sr-cyrl.js": "./node_modules/moment/locale/sr-cyrl.js",
	"./sr.js": "./node_modules/moment/locale/sr.js",
	"./ss": "./node_modules/moment/locale/ss.js",
	"./ss.js": "./node_modules/moment/locale/ss.js",
	"./sv": "./node_modules/moment/locale/sv.js",
	"./sv.js": "./node_modules/moment/locale/sv.js",
	"./sw": "./node_modules/moment/locale/sw.js",
	"./sw.js": "./node_modules/moment/locale/sw.js",
	"./ta": "./node_modules/moment/locale/ta.js",
	"./ta.js": "./node_modules/moment/locale/ta.js",
	"./te": "./node_modules/moment/locale/te.js",
	"./te.js": "./node_modules/moment/locale/te.js",
	"./tet": "./node_modules/moment/locale/tet.js",
	"./tet.js": "./node_modules/moment/locale/tet.js",
	"./tg": "./node_modules/moment/locale/tg.js",
	"./tg.js": "./node_modules/moment/locale/tg.js",
	"./th": "./node_modules/moment/locale/th.js",
	"./th.js": "./node_modules/moment/locale/th.js",
	"./tk": "./node_modules/moment/locale/tk.js",
	"./tk.js": "./node_modules/moment/locale/tk.js",
	"./tl-ph": "./node_modules/moment/locale/tl-ph.js",
	"./tl-ph.js": "./node_modules/moment/locale/tl-ph.js",
	"./tlh": "./node_modules/moment/locale/tlh.js",
	"./tlh.js": "./node_modules/moment/locale/tlh.js",
	"./tr": "./node_modules/moment/locale/tr.js",
	"./tr.js": "./node_modules/moment/locale/tr.js",
	"./tzl": "./node_modules/moment/locale/tzl.js",
	"./tzl.js": "./node_modules/moment/locale/tzl.js",
	"./tzm": "./node_modules/moment/locale/tzm.js",
	"./tzm-latn": "./node_modules/moment/locale/tzm-latn.js",
	"./tzm-latn.js": "./node_modules/moment/locale/tzm-latn.js",
	"./tzm.js": "./node_modules/moment/locale/tzm.js",
	"./ug-cn": "./node_modules/moment/locale/ug-cn.js",
	"./ug-cn.js": "./node_modules/moment/locale/ug-cn.js",
	"./uk": "./node_modules/moment/locale/uk.js",
	"./uk.js": "./node_modules/moment/locale/uk.js",
	"./ur": "./node_modules/moment/locale/ur.js",
	"./ur.js": "./node_modules/moment/locale/ur.js",
	"./uz": "./node_modules/moment/locale/uz.js",
	"./uz-latn": "./node_modules/moment/locale/uz-latn.js",
	"./uz-latn.js": "./node_modules/moment/locale/uz-latn.js",
	"./uz.js": "./node_modules/moment/locale/uz.js",
	"./vi": "./node_modules/moment/locale/vi.js",
	"./vi.js": "./node_modules/moment/locale/vi.js",
	"./x-pseudo": "./node_modules/moment/locale/x-pseudo.js",
	"./x-pseudo.js": "./node_modules/moment/locale/x-pseudo.js",
	"./yo": "./node_modules/moment/locale/yo.js",
	"./yo.js": "./node_modules/moment/locale/yo.js",
	"./zh-cn": "./node_modules/moment/locale/zh-cn.js",
	"./zh-cn.js": "./node_modules/moment/locale/zh-cn.js",
	"./zh-hk": "./node_modules/moment/locale/zh-hk.js",
	"./zh-hk.js": "./node_modules/moment/locale/zh-hk.js",
	"./zh-mo": "./node_modules/moment/locale/zh-mo.js",
	"./zh-mo.js": "./node_modules/moment/locale/zh-mo.js",
	"./zh-tw": "./node_modules/moment/locale/zh-tw.js",
	"./zh-tw.js": "./node_modules/moment/locale/zh-tw.js"
};


function webpackContext(req) {
	var id = webpackContextResolve(req);
	return __webpack_require__(id);
}
function webpackContextResolve(req) {
	if(!__webpack_require__.o(map, req)) {
		var e = new Error("Cannot find module '" + req + "'");
		e.code = 'MODULE_NOT_FOUND';
		throw e;
	}
	return map[req];
}
webpackContext.keys = function webpackContextKeys() {
	return Object.keys(map);
};
webpackContext.resolve = webpackContextResolve;
module.exports = webpackContext;
webpackContext.id = "./node_modules/moment/locale sync recursive ^\\.\\/.*$";

/***/ }),

/***/ "./node_modules/swiper/css/swiper.min.css":
/*!************************************************!*\
  !*** ./node_modules/swiper/css/swiper.min.css ***!
  \************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
/* harmony import */ var _style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
/* harmony import */ var _style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
/* harmony import */ var _style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
/* harmony import */ var _style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
/* harmony import */ var _style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _css_loader_dist_cjs_js_ruleSet_1_rules_1_use_1_swiper_min_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./swiper.min.css */ "./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/swiper/css/swiper.min.css");

      
      
      
      
      
      
      
      
      

var options = {};

options.styleTagTransform = (_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
options.setAttributes = (_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());

      options.insert = _style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
    
options.domAPI = (_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
options.insertStyleElement = (_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());

var update = _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_css_loader_dist_cjs_js_ruleSet_1_rules_1_use_1_swiper_min_css__WEBPACK_IMPORTED_MODULE_6__["default"], options);




       /* harmony default export */ __webpack_exports__["default"] = (_css_loader_dist_cjs_js_ruleSet_1_rules_1_use_1_swiper_min_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _css_loader_dist_cjs_js_ruleSet_1_rules_1_use_1_swiper_min_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _css_loader_dist_cjs_js_ruleSet_1_rules_1_use_1_swiper_min_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);


/***/ }),

/***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js":
/*!****************************************************************************!*\
  !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***!
  \****************************************************************************/
/***/ (function(module) {

"use strict";


var stylesInDOM = [];

function getIndexByIdentifier(identifier) {
  var result = -1;

  for (var i = 0; i < stylesInDOM.length; i++) {
    if (stylesInDOM[i].identifier === identifier) {
      result = i;
      break;
    }
  }

  return result;
}

function modulesToDom(list, options) {
  var idCountMap = {};
  var identifiers = [];

  for (var i = 0; i < list.length; i++) {
    var item = list[i];
    var id = options.base ? item[0] + options.base : item[0];
    var count = idCountMap[id] || 0;
    var identifier = "".concat(id, " ").concat(count);
    idCountMap[id] = count + 1;
    var indexByIdentifier = getIndexByIdentifier(identifier);
    var obj = {
      css: item[1],
      media: item[2],
      sourceMap: item[3],
      supports: item[4],
      layer: item[5]
    };

    if (indexByIdentifier !== -1) {
      stylesInDOM[indexByIdentifier].references++;
      stylesInDOM[indexByIdentifier].updater(obj);
    } else {
      var updater = addElementStyle(obj, options);
      options.byIndex = i;
      stylesInDOM.splice(i, 0, {
        identifier: identifier,
        updater: updater,
        references: 1
      });
    }

    identifiers.push(identifier);
  }

  return identifiers;
}

function addElementStyle(obj, options) {
  var api = options.domAPI(options);
  api.update(obj);

  var updater = function updater(newObj) {
    if (newObj) {
      if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {
        return;
      }

      api.update(obj = newObj);
    } else {
      api.remove();
    }
  };

  return updater;
}

module.exports = function (list, options) {
  options = options || {};
  list = list || [];
  var lastIdentifiers = modulesToDom(list, options);
  return function update(newList) {
    newList = newList || [];

    for (var i = 0; i < lastIdentifiers.length; i++) {
      var identifier = lastIdentifiers[i];
      var index = getIndexByIdentifier(identifier);
      stylesInDOM[index].references--;
    }

    var newLastIdentifiers = modulesToDom(newList, options);

    for (var _i = 0; _i < lastIdentifiers.length; _i++) {
      var _identifier = lastIdentifiers[_i];

      var _index = getIndexByIdentifier(_identifier);

      if (stylesInDOM[_index].references === 0) {
        stylesInDOM[_index].updater();

        stylesInDOM.splice(_index, 1);
      }
    }

    lastIdentifiers = newLastIdentifiers;
  };
};

/***/ }),

/***/ "./node_modules/style-loader/dist/runtime/insertBySelector.js":
/*!********************************************************************!*\
  !*** ./node_modules/style-loader/dist/runtime/insertBySelector.js ***!
  \********************************************************************/
/***/ (function(module) {

"use strict";


var memo = {};
/* istanbul ignore next  */

function getTarget(target) {
  if (typeof memo[target] === "undefined") {
    var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself

    if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {
      try {
        // This will throw an exception if access to iframe is blocked
        // due to cross-origin restrictions
        styleTarget = styleTarget.contentDocument.head;
      } catch (e) {
        // istanbul ignore next
        styleTarget = null;
      }
    }

    memo[target] = styleTarget;
  }

  return memo[target];
}
/* istanbul ignore next  */


function insertBySelector(insert, style) {
  var target = getTarget(insert);

  if (!target) {
    throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");
  }

  target.appendChild(style);
}

module.exports = insertBySelector;

/***/ }),

/***/ "./node_modules/style-loader/dist/runtime/insertStyleElement.js":
/*!**********************************************************************!*\
  !*** ./node_modules/style-loader/dist/runtime/insertStyleElement.js ***!
  \**********************************************************************/
/***/ (function(module) {

"use strict";


/* istanbul ignore next  */
function insertStyleElement(options) {
  var element = document.createElement("style");
  options.setAttributes(element, options.attributes);
  options.insert(element, options.options);
  return element;
}

module.exports = insertStyleElement;

/***/ }),

/***/ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js":
/*!**********************************************************************************!*\
  !*** ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js ***!
  \**********************************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {

"use strict";


/* istanbul ignore next  */
function setAttributesWithoutAttributes(styleElement) {
  var nonce =  true ? __webpack_require__.nc : 0;

  if (nonce) {
    styleElement.setAttribute("nonce", nonce);
  }
}

module.exports = setAttributesWithoutAttributes;

/***/ }),

/***/ "./node_modules/style-loader/dist/runtime/styleDomAPI.js":
/*!***************************************************************!*\
  !*** ./node_modules/style-loader/dist/runtime/styleDomAPI.js ***!
  \***************************************************************/
/***/ (function(module) {

"use strict";


/* istanbul ignore next  */
function apply(styleElement, options, obj) {
  var css = "";

  if (obj.supports) {
    css += "@supports (".concat(obj.supports, ") {");
  }

  if (obj.media) {
    css += "@media ".concat(obj.media, " {");
  }

  var needLayer = typeof obj.layer !== "undefined";

  if (needLayer) {
    css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {");
  }

  css += obj.css;

  if (needLayer) {
    css += "}";
  }

  if (obj.media) {
    css += "}";
  }

  if (obj.supports) {
    css += "}";
  }

  var sourceMap = obj.sourceMap;

  if (sourceMap && typeof btoa !== "undefined") {
    css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");
  } // For old IE

  /* istanbul ignore if  */


  options.styleTagTransform(css, styleElement, options.options);
}

function removeStyleElement(styleElement) {
  // istanbul ignore if
  if (styleElement.parentNode === null) {
    return false;
  }

  styleElement.parentNode.removeChild(styleElement);
}
/* istanbul ignore next  */


function domAPI(options) {
  var styleElement = options.insertStyleElement(options);
  return {
    update: function update(obj) {
      apply(styleElement, options, obj);
    },
    remove: function remove() {
      removeStyleElement(styleElement);
    }
  };
}

module.exports = domAPI;

/***/ }),

/***/ "./node_modules/style-loader/dist/runtime/styleTagTransform.js":
/*!*********************************************************************!*\
  !*** ./node_modules/style-loader/dist/runtime/styleTagTransform.js ***!
  \*********************************************************************/
/***/ (function(module) {

"use strict";


/* istanbul ignore next  */
function styleTagTransform(css, styleElement) {
  if (styleElement.styleSheet) {
    styleElement.styleSheet.cssText = css;
  } else {
    while (styleElement.firstChild) {
      styleElement.removeChild(styleElement.firstChild);
    }

    styleElement.appendChild(document.createTextNode(css));
  }
}

module.exports = styleTagTransform;

/***/ }),

/***/ "jquery":
/*!*************************!*\
  !*** external "jQuery" ***!
  \*************************/
/***/ (function(module) {

"use strict";
module.exports = jQuery;

/***/ }),

/***/ "./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js":
/*!*********************************************************************!*\
  !*** ./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js ***!
  \*********************************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": function() { return /* binding */ _arrayLikeToArray; }
/* harmony export */ });
function _arrayLikeToArray(arr, len) {
  if (len == null || len > arr.length) len = arr.length;

  for (var i = 0, arr2 = new Array(len); i < len; i++) {
    arr2[i] = arr[i];
  }

  return arr2;
}

/***/ }),

/***/ "./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js":
/*!*******************************************************************!*\
  !*** ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js ***!
  \*******************************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": function() { return /* binding */ _arrayWithHoles; }
/* harmony export */ });
function _arrayWithHoles(arr) {
  if (Array.isArray(arr)) return arr;
}

/***/ }),

/***/ "./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js":
/*!**************************************************************************!*\
  !*** ./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js ***!
  \**************************************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": function() { return /* binding */ _assertThisInitialized; }
/* harmony export */ });
function _assertThisInitialized(self) {
  if (self === void 0) {
    throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
  }

  return self;
}

/***/ }),

/***/ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js":
/*!*******************************************************************!*\
  !*** ./node_modules/@babel/runtime/helpers/esm/classCallCheck.js ***!
  \*******************************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": function() { return /* binding */ _classCallCheck; }
/* harmony export */ });
function _classCallCheck(instance, Constructor) {
  if (!(instance instanceof Constructor)) {
    throw new TypeError("Cannot call a class as a function");
  }
}

/***/ }),

/***/ "./node_modules/@babel/runtime/helpers/esm/createClass.js":
/*!****************************************************************!*\
  !*** ./node_modules/@babel/runtime/helpers/esm/createClass.js ***!
  \****************************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": function() { return /* binding */ _createClass; }
/* harmony export */ });
function _defineProperties(target, props) {
  for (var i = 0; i < props.length; i++) {
    var descriptor = props[i];
    descriptor.enumerable = descriptor.enumerable || false;
    descriptor.configurable = true;
    if ("value" in descriptor) descriptor.writable = true;
    Object.defineProperty(target, descriptor.key, descriptor);
  }
}

function _createClass(Constructor, protoProps, staticProps) {
  if (protoProps) _defineProperties(Constructor.prototype, protoProps);
  if (staticProps) _defineProperties(Constructor, staticProps);
  return Constructor;
}

/***/ }),

/***/ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js":
/*!*******************************************************************!*\
  !*** ./node_modules/@babel/runtime/helpers/esm/defineProperty.js ***!
  \*******************************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": function() { return /* binding */ _defineProperty; }
/* harmony export */ });
function _defineProperty(obj, key, value) {
  if (key in obj) {
    Object.defineProperty(obj, key, {
      value: value,
      enumerable: true,
      configurable: true,
      writable: true
    });
  } else {
    obj[key] = value;
  }

  return obj;
}

/***/ }),

/***/ "./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js":
/*!*******************************************************************!*\
  !*** ./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js ***!
  \*******************************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": function() { return /* binding */ _getPrototypeOf; }
/* harmony export */ });
function _getPrototypeOf(o) {
  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
    return o.__proto__ || Object.getPrototypeOf(o);
  };
  return _getPrototypeOf(o);
}

/***/ }),

/***/ "./node_modules/@babel/runtime/helpers/esm/inherits.js":
/*!*************************************************************!*\
  !*** ./node_modules/@babel/runtime/helpers/esm/inherits.js ***!
  \*************************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": function() { return /* binding */ _inherits; }
/* harmony export */ });
/* harmony import */ var _setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./setPrototypeOf.js */ "./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js");

function _inherits(subClass, superClass) {
  if (typeof superClass !== "function" && superClass !== null) {
    throw new TypeError("Super expression must either be null or a function");
  }

  subClass.prototype = Object.create(superClass && superClass.prototype, {
    constructor: {
      value: subClass,
      writable: true,
      configurable: true
    }
  });
  if (superClass) (0,_setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__["default"])(subClass, superClass);
}

/***/ }),

/***/ "./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js":
/*!*************************************************************************!*\
  !*** ./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js ***!
  \*************************************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": function() { return /* binding */ _iterableToArrayLimit; }
/* harmony export */ });
function _iterableToArrayLimit(arr, i) {
  var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];

  if (_i == null) return;
  var _arr = [];
  var _n = true;
  var _d = false;

  var _s, _e;

  try {
    for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {
      _arr.push(_s.value);

      if (i && _arr.length === i) break;
    }
  } catch (err) {
    _d = true;
    _e = err;
  } finally {
    try {
      if (!_n && _i["return"] != null) _i["return"]();
    } finally {
      if (_d) throw _e;
    }
  }

  return _arr;
}

/***/ }),

/***/ "./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js":
/*!********************************************************************!*\
  !*** ./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js ***!
  \********************************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": function() { return /* binding */ _nonIterableRest; }
/* harmony export */ });
function _nonIterableRest() {
  throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}

/***/ }),

/***/ "./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js":
/*!******************************************************************************!*\
  !*** ./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js ***!
  \******************************************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": function() { return /* binding */ _possibleConstructorReturn; }
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/esm/typeof.js");
/* harmony import */ var _assertThisInitialized_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./assertThisInitialized.js */ "./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js");


function _possibleConstructorReturn(self, call) {
  if (call && ((0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__["default"])(call) === "object" || typeof call === "function")) {
    return call;
  } else if (call !== void 0) {
    throw new TypeError("Derived constructors may only return object or undefined");
  }

  return (0,_assertThisInitialized_js__WEBPACK_IMPORTED_MODULE_1__["default"])(self);
}

/***/ }),

/***/ "./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js":
/*!*******************************************************************!*\
  !*** ./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js ***!
  \*******************************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": function() { return /* binding */ _setPrototypeOf; }
/* harmony export */ });
function _setPrototypeOf(o, p) {
  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
    o.__proto__ = p;
    return o;
  };

  return _setPrototypeOf(o, p);
}

/***/ }),

/***/ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js":
/*!******************************************************************!*\
  !*** ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js ***!
  \******************************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": function() { return /* binding */ _slicedToArray; }
/* harmony export */ });
/* harmony import */ var _arrayWithHoles_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayWithHoles.js */ "./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js");
/* harmony import */ var _iterableToArrayLimit_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iterableToArrayLimit.js */ "./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js");
/* harmony import */ var _unsupportedIterableToArray_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./unsupportedIterableToArray.js */ "./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js");
/* harmony import */ var _nonIterableRest_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./nonIterableRest.js */ "./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js");




function _slicedToArray(arr, i) {
  return (0,_arrayWithHoles_js__WEBPACK_IMPORTED_MODULE_0__["default"])(arr) || (0,_iterableToArrayLimit_js__WEBPACK_IMPORTED_MODULE_1__["default"])(arr, i) || (0,_unsupportedIterableToArray_js__WEBPACK_IMPORTED_MODULE_2__["default"])(arr, i) || (0,_nonIterableRest_js__WEBPACK_IMPORTED_MODULE_3__["default"])();
}

/***/ }),

/***/ "./node_modules/@babel/runtime/helpers/esm/typeof.js":
/*!***********************************************************!*\
  !*** ./node_modules/@babel/runtime/helpers/esm/typeof.js ***!
  \***********************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": function() { return /* binding */ _typeof; }
/* harmony export */ });
function _typeof(obj) {
  "@babel/helpers - typeof";

  if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
    _typeof = function _typeof(obj) {
      return typeof obj;
    };
  } else {
    _typeof = function _typeof(obj) {
      return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
    };
  }

  return _typeof(obj);
}

/***/ }),

/***/ "./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js":
/*!*******************************************************************************!*\
  !*** ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js ***!
  \*******************************************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": function() { return /* binding */ _unsupportedIterableToArray; }
/* harmony export */ });
/* harmony import */ var _arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayLikeToArray.js */ "./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js");

function _unsupportedIterableToArray(o, minLen) {
  if (!o) return;
  if (typeof o === "string") return (0,_arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__["default"])(o, minLen);
  var n = Object.prototype.toString.call(o).slice(8, -1);
  if (n === "Object" && o.constructor) n = o.constructor.name;
  if (n === "Map" || n === "Set") return Array.from(o);
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return (0,_arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__["default"])(o, minLen);
}

/***/ })

/******/ 	});
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			id: moduleId,
/******/ 			loaded: false,
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Flag the module as loaded
/******/ 		module.loaded = true;
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/compat get default export */
/******/ 	!function() {
/******/ 		// getDefaultExport function for compatibility with non-harmony modules
/******/ 		__webpack_require__.n = function(module) {
/******/ 			var getter = module && module.__esModule ?
/******/ 				function() { return module['default']; } :
/******/ 				function() { return module; };
/******/ 			__webpack_require__.d(getter, { a: getter });
/******/ 			return getter;
/******/ 		};
/******/ 	}();
/******/ 	
/******/ 	/* webpack/runtime/define property getters */
/******/ 	!function() {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = function(exports, definition) {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	}();
/******/ 	
/******/ 	/* webpack/runtime/global */
/******/ 	!function() {
/******/ 		__webpack_require__.g = (function() {
/******/ 			if (typeof globalThis === 'object') return globalThis;
/******/ 			try {
/******/ 				return this || new Function('return this')();
/******/ 			} catch (e) {
/******/ 				if (typeof window === 'object') return window;
/******/ 			}
/******/ 		})();
/******/ 	}();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	!function() {
/******/ 		__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
/******/ 	}();
/******/ 	
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	!function() {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = function(exports) {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	}();
/******/ 	
/******/ 	/* webpack/runtime/node module decorator */
/******/ 	!function() {
/******/ 		__webpack_require__.nmd = function(module) {
/******/ 			module.paths = [];
/******/ 			if (!module.children) module.children = [];
/******/ 			return module;
/******/ 		};
/******/ 	}();
/******/ 	
/************************************************************************/
var __webpack_exports__ = {};
// This entry need to be wrapped in an IIFE because it need to be in strict mode.
!function() {
"use strict";
/*!*******************************!*\
  !*** ./src/common/js/main.js ***!
  \*******************************/
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var core_js_modules_es_array_find__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.find */ "./node_modules/core-js/modules/es.array.find.js");
/* harmony import */ var core_js_modules_es_array_find__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_find__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_object_assign__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.assign */ "./node_modules/core-js/modules/es.object.assign.js");
/* harmony import */ var core_js_modules_es_object_assign__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_assign__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es_object_entries__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.object.entries */ "./node_modules/core-js/modules/es.object.entries.js");
/* harmony import */ var core_js_modules_es_object_entries__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_entries__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var intersection_observer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! intersection-observer */ "./node_modules/intersection-observer/intersection-observer.js");
/* harmony import */ var intersection_observer__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(intersection_observer__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var element_closest_polyfill__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! element-closest-polyfill */ "./node_modules/element-closest-polyfill/index.js");
/* harmony import */ var element_closest_polyfill__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(element_closest_polyfill__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! jquery */ "jquery");
/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _emitter__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./_emitter */ "./src/common/js/_emitter.js");
/* harmony import */ var _resize__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./_resize */ "./src/common/js/_resize.js");
/* harmony import */ var _scrollManager__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./_scrollManager */ "./src/common/js/_scrollManager.js");
/* harmony import */ var _libs_jquery_ui_min__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./libs/jquery-ui.min */ "./src/common/js/libs/jquery-ui.min.js");
/* harmony import */ var _libs_jquery_ui_min__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_libs_jquery_ui_min__WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var _libs_css_browser_selector__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./libs/css_browser_selector */ "./src/common/js/libs/css_browser_selector.js");
/* harmony import */ var _libs_css_browser_selector__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_libs_css_browser_selector__WEBPACK_IMPORTED_MODULE_10__);
/* harmony import */ var _accordion__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./_accordion */ "./src/common/js/_accordion.js");
/* harmony import */ var _carousel__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./_carousel */ "./src/common/js/_carousel.js");
/* harmony import */ var _modal__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./_modal */ "./src/common/js/_modal.js");
/* harmony import */ var _modal__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_modal__WEBPACK_IMPORTED_MODULE_13__);
/* harmony import */ var _scroll__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./_scroll */ "./src/common/js/_scroll.js");
/* harmony import */ var _scroll__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_scroll__WEBPACK_IMPORTED_MODULE_14__);
/* harmony import */ var _readmore__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./_readmore */ "./src/common/js/_readmore.js");
/* harmony import */ var _readmore__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(_readmore__WEBPACK_IMPORTED_MODULE_15__);
/* harmony import */ var _sns__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./_sns */ "./src/common/js/_sns.js");
/* harmony import */ var _sns__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(_sns__WEBPACK_IMPORTED_MODULE_16__);
/* harmony import */ var _truncate__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./_truncate */ "./src/common/js/_truncate.js");
/* harmony import */ var _float_box__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./_float-box */ "./src/common/js/_float-box.js");
/* harmony import */ var _float_box__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(_float_box__WEBPACK_IMPORTED_MODULE_18__);
/* harmony import */ var _checkbox__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./_checkbox */ "./src/common/js/_checkbox.js");
/* harmony import */ var _checkbox__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(_checkbox__WEBPACK_IMPORTED_MODULE_19__);
/* harmony import */ var _searchmenu__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./_searchmenu */ "./src/common/js/_searchmenu.js");
/* harmony import */ var _searchmenu__WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(_searchmenu__WEBPACK_IMPORTED_MODULE_20__);
/* harmony import */ var _radio__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./_radio */ "./src/common/js/_radio.js");
/* harmony import */ var _radio__WEBPACK_IMPORTED_MODULE_21___default = /*#__PURE__*/__webpack_require__.n(_radio__WEBPACK_IMPORTED_MODULE_21__);
/* harmony import */ var _smothscroll__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./_smothscroll */ "./src/common/js/_smothscroll.js");
/* harmony import */ var _skyscraper__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./_skyscraper */ "./src/common/js/_skyscraper.js");
/* harmony import */ var _skyscraper__WEBPACK_IMPORTED_MODULE_23___default = /*#__PURE__*/__webpack_require__.n(_skyscraper__WEBPACK_IMPORTED_MODULE_23__);
/* harmony import */ var _follow_page_bottom__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./_follow-page-bottom */ "./src/common/js/_follow-page-bottom.js");
/* harmony import */ var _follow_page_bottom__WEBPACK_IMPORTED_MODULE_24___default = /*#__PURE__*/__webpack_require__.n(_follow_page_bottom__WEBPACK_IMPORTED_MODULE_24__);
/* harmony import */ var _validation__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./_validation */ "./src/common/js/_validation.js");
/* harmony import */ var _validation__WEBPACK_IMPORTED_MODULE_25___default = /*#__PURE__*/__webpack_require__.n(_validation__WEBPACK_IMPORTED_MODULE_25__);
/* harmony import */ var _mailaddress__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./_mailaddress */ "./src/common/js/_mailaddress.js");
/* harmony import */ var _mailaddress__WEBPACK_IMPORTED_MODULE_26___default = /*#__PURE__*/__webpack_require__.n(_mailaddress__WEBPACK_IMPORTED_MODULE_26__);
/* harmony import */ var _follow_card__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./_follow-card */ "./src/common/js/_follow-card.js");
/* harmony import */ var _follow_card__WEBPACK_IMPORTED_MODULE_27___default = /*#__PURE__*/__webpack_require__.n(_follow_card__WEBPACK_IMPORTED_MODULE_27__);
/* harmony import */ var _slide_steps__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./_slide-steps */ "./src/common/js/_slide-steps.js");
/* harmony import */ var _slide_steps__WEBPACK_IMPORTED_MODULE_28___default = /*#__PURE__*/__webpack_require__.n(_slide_steps__WEBPACK_IMPORTED_MODULE_28__);
/* harmony import */ var _tagdelete__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./_tagdelete */ "./src/common/js/_tagdelete.js");
/* harmony import */ var _tagdelete__WEBPACK_IMPORTED_MODULE_29___default = /*#__PURE__*/__webpack_require__.n(_tagdelete__WEBPACK_IMPORTED_MODULE_29__);
/* harmony import */ var _date__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./_date */ "./src/common/js/_date.js");
/* harmony import */ var _date__WEBPACK_IMPORTED_MODULE_30___default = /*#__PURE__*/__webpack_require__.n(_date__WEBPACK_IMPORTED_MODULE_30__);
/* harmony import */ var _selectedInserter__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./_selectedInserter */ "./src/common/js/_selectedInserter.js");
/* harmony import */ var _selectedInserter__WEBPACK_IMPORTED_MODULE_31___default = /*#__PURE__*/__webpack_require__.n(_selectedInserter__WEBPACK_IMPORTED_MODULE_31__);
/* harmony import */ var _licenseSelector__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./_licenseSelector */ "./src/common/js/_licenseSelector.js");
/* harmony import */ var _licenseSelector__WEBPACK_IMPORTED_MODULE_32___default = /*#__PURE__*/__webpack_require__.n(_licenseSelector__WEBPACK_IMPORTED_MODULE_32__);
/* harmony import */ var _selectOnce__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./_selectOnce */ "./src/common/js/_selectOnce.js");
/* harmony import */ var _selectOnce__WEBPACK_IMPORTED_MODULE_33___default = /*#__PURE__*/__webpack_require__.n(_selectOnce__WEBPACK_IMPORTED_MODULE_33__);
/* harmony import */ var _favorite__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./_favorite */ "./src/common/js/_favorite.js");
/* harmony import */ var _favorite__WEBPACK_IMPORTED_MODULE_34___default = /*#__PURE__*/__webpack_require__.n(_favorite__WEBPACK_IMPORTED_MODULE_34__);
/* harmony import */ var _tab__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./_tab */ "./src/common/js/_tab.js");
/* harmony import */ var _tab__WEBPACK_IMPORTED_MODULE_35___default = /*#__PURE__*/__webpack_require__.n(_tab__WEBPACK_IMPORTED_MODULE_35__);
/* harmony import */ var _chart__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./_chart */ "./src/common/js/_chart.js");
/* harmony import */ var _set_main_height__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./_set-main-height */ "./src/common/js/_set-main-height.js");
/* harmony import */ var _set_main_height__WEBPACK_IMPORTED_MODULE_37___default = /*#__PURE__*/__webpack_require__.n(_set_main_height__WEBPACK_IMPORTED_MODULE_37__);






window.$ = (jquery__WEBPACK_IMPORTED_MODULE_5___default());

window.emitter = _emitter__WEBPACK_IMPORTED_MODULE_6__["default"];


window.rm = (0,_resize__WEBPACK_IMPORTED_MODULE_7__["default"])();
window.sm = (0,_scrollManager__WEBPACK_IMPORTED_MODULE_8__["default"])();





























}();
/******/ })()
;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEVBQUUsQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLENBQVQsQ0FmSTtBQWdCaEJDLElBQUFBLFNBQVMsRUFBRyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsRUFBVCxDQWhCSTtBQWlCaEJDLElBQUFBLEtBQUssRUFBRyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsRUFBVCxDQWpCUTtBQWtCaEJDLElBQUFBLGNBQWMsRUFBRSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQWxCQTtBQW1CaEJDLElBQUFBLFFBQVEsRUFBRSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQW5CTTtBQW9CaEJDLElBQUFBLE9BQU8sRUFBRyxDQUFDLEdBQUQsRUFBSyxFQUFMLEVBQVEsRUFBUixDQXBCTTtBQXFCaEJDLElBQUFBLElBQUksRUFBRSxDQUFDLENBQUQsRUFBRyxHQUFILEVBQU8sR0FBUCxDQXJCVTtBQXNCaEJDLElBQUFBLFFBQVEsRUFBRSxDQUFDLENBQUQsRUFBRyxDQUFILEVBQUssR0FBTCxDQXRCTTtBQXVCaEJDLElBQUFBLFFBQVEsRUFBRSxDQUFDLENBQUQsRUFBRyxHQUFILEVBQU8sR0FBUCxDQXZCTTtBQXdCaEJDLElBQUFBLGFBQWEsRUFBRyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsRUFBVCxDQXhCQTtBQXlCaEJDLElBQUFBLFFBQVEsRUFBRSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQXpCTTtBQTBCaEJDLElBQUFBLFNBQVMsRUFBRyxDQUFDLENBQUQsRUFBRyxHQUFILEVBQU8sQ0FBUCxDQTFCSTtBQTJCaEJDLElBQUFBLFFBQVEsRUFBRSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQTNCTTtBQTRCaEJDLElBQUFBLFNBQVMsRUFBRyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQTVCSTtBQTZCaEJDLElBQUFBLFdBQVcsRUFBRyxDQUFDLEdBQUQsRUFBSyxDQUFMLEVBQU8sR0FBUCxDQTdCRTtBQThCaEJDLElBQUFBLGNBQWMsRUFBRSxDQUFDLEVBQUQsRUFBSSxHQUFKLEVBQVEsRUFBUixDQTlCQTtBQStCaEJDLElBQUFBLFVBQVUsRUFBRSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsQ0FBVCxDQS9CSTtBQWdDaEJDLElBQUFBLFVBQVUsRUFBRSxDQUFDLEdBQUQsRUFBSyxFQUFMLEVBQVEsR0FBUixDQWhDSTtBQWlDaEJDLElBQUFBLE9BQU8sRUFBRyxDQUFDLEdBQUQsRUFBSyxDQUFMLEVBQU8sQ0FBUCxDQWpDTTtBQWtDaEJDLElBQUFBLFVBQVUsRUFBRSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQWxDSTtBQW1DaEJDLElBQUFBLFlBQVksRUFBRSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQW5DRTtBQW9DaEJDLElBQUFBLGFBQWEsRUFBRyxDQUFDLEVBQUQsRUFBSSxFQUFKLEVBQU8sR0FBUCxDQXBDQTtBQXFDaEJDLElBQUFBLGFBQWEsRUFBRyxDQUFDLEVBQUQsRUFBSSxFQUFKLEVBQU8sRUFBUCxDQXJDQTtBQXNDaEJDLElBQUFBLGFBQWEsRUFBRyxDQUFDLEVBQUQsRUFBSSxFQUFKLEVBQU8sRUFBUCxDQXRDQTtBQXVDaEJDLElBQUFBLGFBQWEsRUFBRyxDQUFDLENBQUQsRUFBRyxHQUFILEVBQU8sR0FBUCxDQXZDQTtBQXdDaEJDLElBQUFBLFVBQVUsRUFBRSxDQUFDLEdBQUQsRUFBSyxDQUFMLEVBQU8sR0FBUCxDQXhDSTtBQXlDaEJDLElBQUFBLFFBQVEsRUFBRSxDQUFDLEdBQUQsRUFBSyxFQUFMLEVBQVEsR0FBUixDQXpDTTtBQTBDaEJDLElBQUFBLFdBQVcsRUFBRyxDQUFDLENBQUQsRUFBRyxHQUFILEVBQU8sR0FBUCxDQTFDRTtBQTJDaEJDLElBQUFBLE9BQU8sRUFBRyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQTNDTTtBQTRDaEJDLElBQUFBLE9BQU8sRUFBRyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQTVDTTtBQTZDaEJDLElBQUFBLFVBQVUsRUFBRSxDQUFDLEVBQUQsRUFBSSxHQUFKLEVBQVEsR0FBUixDQTdDSTtBQThDaEJDLElBQUFBLFNBQVMsRUFBRyxDQUFDLEdBQUQsRUFBSyxFQUFMLEVBQVEsRUFBUixDQTlDSTtBQStDaEJDLElBQUFBLFdBQVcsRUFBRyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQS9DRTtBQWdEaEJDLElBQUFBLFdBQVcsRUFBRyxDQUFDLEVBQUQsRUFBSSxHQUFKLEVBQVEsRUFBUixDQWhERTtBQWlEaEJDLElBQUFBLE9BQU8sRUFBRyxDQUFDLEdBQUQsRUFBSyxDQUFMLEVBQU8sR0FBUCxDQWpETTtBQWtEaEJDLElBQUFBLFNBQVMsRUFBRyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQWxESTtBQW1EaEJDLElBQUFBLFVBQVUsRUFBRSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQW5ESTtBQW9EaEJDLElBQUFBLElBQUksRUFBRSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsQ0FBVCxDQXBEVTtBQXFEaEJDLElBQUFBLFNBQVMsRUFBRyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsRUFBVCxDQXJESTtBQXNEaEJDLElBQUFBLElBQUksRUFBRSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQXREVTtBQXVEaEJDLElBQUFBLEtBQUssRUFBRyxDQUFDLENBQUQsRUFBRyxHQUFILEVBQU8sQ0FBUCxDQXZEUTtBQXdEaEJDLElBQUFBLFdBQVcsRUFBRyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsRUFBVCxDQXhERTtBQXlEaEJDLElBQUFBLElBQUksRUFBRSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQXpEVTtBQTBEaEJDLElBQUFBLFFBQVEsRUFBRSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQTFETTtBQTJEaEJDLElBQUFBLE9BQU8sRUFBRyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQTNETTtBQTREaEJDLElBQUFBLFNBQVMsRUFBRyxDQUFDLEdBQUQsRUFBSyxFQUFMLEVBQVEsRUFBUixDQTVESTtBQTZEaEJDLElBQUFBLE1BQU0sRUFBRSxDQUFDLEVBQUQsRUFBSSxDQUFKLEVBQU0sR0FBTixDQTdEUTtBQThEaEJDLElBQUFBLEtBQUssRUFBRyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQTlEUTtBQStEaEJDLElBQUFBLEtBQUssRUFBRyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQS9EUTtBQWdFaEJDLElBQUFBLFFBQVEsRUFBRSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQWhFTTtBQWlFaEJDLElBQUFBLGFBQWEsRUFBRyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQWpFQTtBQWtFaEJDLElBQUFBLFNBQVMsRUFBRyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsQ0FBVCxDQWxFSTtBQW1FaEJDLElBQUFBLFlBQVksRUFBRSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQW5FRTtBQW9FaEJDLElBQUFBLFNBQVMsRUFBRyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQXBFSTtBQXFFaEJDLElBQUFBLFVBQVUsRUFBRSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQXJFSTtBQXNFaEJDLElBQUFBLFNBQVMsRUFBRyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQXRFSTtBQXVFaEJDLElBQUFBLG9CQUFvQixFQUFFLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBdkVOO0FBd0VoQkMsSUFBQUEsU0FBUyxFQUFHLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBeEVJO0FBeUVoQkMsSUFBQUEsVUFBVSxFQUFFLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBekVJO0FBMEVoQkMsSUFBQUEsU0FBUyxFQUFHLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBMUVJO0FBMkVoQkMsSUFBQUEsU0FBUyxFQUFHLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBM0VJO0FBNEVoQkMsSUFBQUEsV0FBVyxFQUFHLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBNUVFO0FBNkVoQkMsSUFBQUEsYUFBYSxFQUFHLENBQUMsRUFBRCxFQUFJLEdBQUosRUFBUSxHQUFSLENBN0VBO0FBOEVoQkMsSUFBQUEsWUFBWSxFQUFFLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBOUVFO0FBK0VoQkMsSUFBQUEsY0FBYyxFQUFFLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBL0VBO0FBZ0ZoQkMsSUFBQUEsY0FBYyxFQUFFLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBaEZBO0FBaUZoQkMsSUFBQUEsY0FBYyxFQUFFLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBakZBO0FBa0ZoQkMsSUFBQUEsV0FBVyxFQUFHLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBbEZFO0FBbUZoQkMsSUFBQUEsSUFBSSxFQUFFLENBQUMsQ0FBRCxFQUFHLEdBQUgsRUFBTyxDQUFQLENBbkZVO0FBb0ZoQkMsSUFBQUEsU0FBUyxFQUFHLENBQUMsRUFBRCxFQUFJLEdBQUosRUFBUSxFQUFSLENBcEZJO0FBcUZoQkMsSUFBQUEsS0FBSyxFQUFHLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULENBckZRO0FBc0ZoQkMsSUFBQUEsT0FBTyxFQUFHLENBQUMsR0FBRCxFQUFLLENBQUwsRUFBTyxHQUFQLENBdEZNO0FBdUZoQkMsSUFBQUEsTUFBTSxFQUFFLENBQUMsR0FBRCxFQUFLLENBQUwsRUFBTyxDQUFQLENBdkZRO0FBd0ZoQkMsSUFBQUEsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLEdBQVQsQ0F4RkY7QUF5RmhCQyxJQUFBQSxVQUFVLEVBQUUsQ0FBQyxDQUFELEVBQUcsQ0FBSCxFQUFLLEdBQUwsQ0F6Rkk7QUEwRmhCQyxJQUFBQSxZQUFZLEVBQUUsQ0FBQyxHQUFELEVBQUssRUFBTCxFQUFRLEdBQVIsQ0ExRkU7QUEyRmhCQyxJQUFBQSxZQUFZLEVBQUUsQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLEdBQVQsQ0EzRkU7QUE0RmhCQyxJQUFBQSxjQUFjLEVBQUUsQ0FBQyxFQUFELEVBQUksR0FBSixFQUFRLEdBQVIsQ0E1RkE7QUE2RmhCQyxJQUFBQSxlQUFlLEVBQUcsQ0FBQyxHQUFELEVBQUssR0FBTCxFQUFTLEdBQVQsQ0E3RkY7QUE4RmhCQyxJQUFBQSxpQkFBaUIsRUFBRyxDQUFDLENBQUQsRUFBRyxHQUFILEVBQU8sR0FBUCxDQTlGSjtBQStGaEJDLElBQUFBLGVBQWUsRUFBRyxDQUFDLEVBQUQsRUFBSSxHQUFKLEVBQVEsR0FBUixDQS9GRjtBQWdHaEJDLElBQUFBLGVBQWUsRUFBRyxDQUFDLEdBQUQsRUFBSyxFQUFMLEVBQVEsR0FBUixDQWhHRjtBQWlHaEJDLElBQUFBLFlBQVksRUFBRSxDQUFDLEVBQUQsRUFBSSxFQUFKLEVBQU8sR0FBUCxDQWpHRTtBQWtHaEJDLElBQUFBLFNBQVMsRUFBRyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQWxHSTtBQW1HaEJDLElBQUFBLFNBQVMsRUFBRyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQW5HSTtBQW9HaEJDLElBQUFBLFFBQVEsRUFBRSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQXBHTTtBQXFHaEJDLElBQUFBLFdBQVcsRUFBRyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQXJHRTtBQXNHaEJDLElBQUFBLElBQUksRUFBRSxDQUFDLENBQUQsRUFBRyxDQUFILEVBQUssR0FBTCxDQXRHVTtBQXVHaEJDLElBQUFBLE9BQU8sRUFBRyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQXZHTTtBQXdHaEJDLElBQUFBLEtBQUssRUFBRyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsQ0FBVCxDQXhHUTtBQXlHaEJDLElBQUFBLFNBQVMsRUFBRyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsRUFBVCxDQXpHSTtBQTBHaEJDLElBQUFBLE1BQU0sRUFBRSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsQ0FBVCxDQTFHUTtBQTJHaEJDLElBQUFBLFNBQVMsRUFBRyxDQUFDLEdBQUQsRUFBSyxFQUFMLEVBQVEsQ0FBUixDQTNHSTtBQTRHaEJDLElBQUFBLE1BQU0sRUFBRSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQTVHUTtBQTZHaEJDLElBQUFBLGFBQWEsRUFBRyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQTdHQTtBQThHaEJDLElBQUFBLFNBQVMsRUFBRyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQTlHSTtBQStHaEJDLElBQUFBLGFBQWEsRUFBRyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQS9HQTtBQWdIaEJDLElBQUFBLGFBQWEsRUFBRyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQWhIQTtBQWlIaEJDLElBQUFBLFVBQVUsRUFBRSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQWpISTtBQWtIaEJDLElBQUFBLFNBQVMsRUFBRyxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQWxISTtBQW1IaEJDLElBQUFBLElBQUksRUFBRSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsRUFBVCxDQW5IVTtBQW9IaEJDLElBQUFBLElBQUksRUFBRSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQXBIVTtBQXFIaEJDLElBQUFBLElBQUksRUFBRSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQXJIVTtBQXNIaEJDLElBQUFBLFVBQVUsRUFBRSxDQUFDLEdBQUQsRUFBSyxHQUFMLEVBQVMsR0FBVCxDQXRISTtBQXVIaEJDLElBQUFBLE1BQU0sRUFBRSxDQUFDLEdBQUQsRUFBSyxDQUFMLEVBQU8sR0FBUCxDQXZIUTtBQXdIaEJDLElBQUFB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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LEVBQVAsR0FBWXdPLG1EQUFhLEVBQXpCO0FBQ0FuOUcsTUFBTSxDQUFDc2pJLEVBQVAsR0FBWXZsQiwwREFBYSxFQUF6QjtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL2Rpc3QvQ2hhcnQuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24uanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLXJhdy5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1tZXRob2QuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9odG1sLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWNhbGxhYmxlLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1mb3JjZWQuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1wdXJlLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtc3ltYm9sLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9uYXRpdmUtc3ltYm9sLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmF0aXZlLXdlYWstbWFwLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbi5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC10by1hcnJheS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVkZWZpbmUuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtZ2xvYmFsLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC1zdG9yZS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmluZC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5lbnRyaWVzLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL2RvbTcvZGlzdC9kb203Lm1vZHVsYXIuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9lbGVtZW50LWNsb3Nlc3QtcG9seWZpbGwvaW5kZXguanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9lbGxpcHNpcy5qcy9lbGxpcHNpcy5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9pbnRlcnNlY3Rpb24tb2JzZXJ2ZXIvaW50ZXJzZWN0aW9uLW9ic2VydmVyLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hZi5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItZHouanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLWt3LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1seS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItbWEuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLXNhLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci10bi5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXIuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2F6LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iZS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYmcuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JtLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ibi1iZC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYm4uanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JvLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ici5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYnMuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2NhLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jcy5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvY3YuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2N5LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kYS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGUtYXQuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2RlLWNoLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZHYuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VsLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1hdS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tY2EuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWdiLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pZS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4taWwuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWluLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1uei5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tc2cuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VvLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy1kby5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXMtbXguanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VzLXVzLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXQuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2V1LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mYS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZmkuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZpbC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZm8uanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZyLWNhLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mci1jaC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnIuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2Z5LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nYS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ2QuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dsLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nb20tZGV2YS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ29tLWxhdG4uanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2d1LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oZS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaGkuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2hyLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9odS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaHktYW0uanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2lkLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pcy5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaXQtY2guanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2l0LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9qYS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvanYuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2thLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ray5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva20uanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2tuLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rby5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva3UuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2t5LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sYi5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbG8uanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2x0LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sdi5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWUuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21pLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tay5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWwuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21uLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tci5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXMtbXkuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21zLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tdC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXkuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25iLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9uZS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmwtYmUuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25sLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ubi5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvb2MtbG5jLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wYS1pbi5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcGwuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3B0LWJyLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wdC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcm8uanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3J1LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zZC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2UuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NpLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zay5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2wuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NxLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zci1jeXJsLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zci5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3MuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3N2LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zdy5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGEuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RlLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ZXQuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RnLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90aC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGsuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RsLXBoLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90bGguanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RyLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90emwuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3R6bS1sYXRuLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90em0uanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VnLWNuLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ay5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdXIuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3V6LWxhdG4uanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3V6LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS92aS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUveC1wc2V1ZG8uanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3lvLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS96aC1jbi5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtaGsuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLW1vLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS96aC10dy5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9zc3Itd2luZG93L2Rpc3Qvc3NyLXdpbmRvdy5lc20uanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uLi9zcmMvdXRpbHMvZG9tLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi4vc3JjL3V0aWxzL3V0aWxzLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi4vc3JjL3V0aWxzL3N1cHBvcnQuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uLi9zcmMvdXRpbHMvY2xhc3MuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uLi9zcmMvY29tcG9uZW50cy9jb3JlL3VwZGF0ZS91cGRhdGVTaXplLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi4vc3JjL2NvbXBvbmVudHMvY29yZS91cGRhdGUvdXBkYXRlU2xpZGVzLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi4vc3JjL2NvbXBvbmVudHMvY29yZS91cGRhdGUvdXBkYXRlQXV0b0hlaWdodC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2NvcmUvdXBkYXRlL3VwZGF0ZVNsaWRlc09mZnNldC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2NvcmUvdXBkYXRlL3VwZGF0ZVNsaWRlc1Byb2dyZXNzLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi4vc3JjL2NvbXBvbmVudHMvY29yZS91cGRhdGUvdXBkYXRlUHJvZ3Jlc3MuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uLi9zcmMvY29tcG9uZW50cy9jb3JlL3VwZGF0ZS91cGRhdGVTbGlkZXNDbGFzc2VzLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi4vc3JjL2NvbXBvbmVudHMvY29yZS91cGRhdGUvdXBkYXRlQWN0aXZlSW5kZXguanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uLi9zcmMvY29tcG9uZW50cy9jb3JlL3VwZGF0ZS91cGRhdGVDbGlja2VkU2xpZGUuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uLi9zcmMvY29tcG9uZW50cy9jb3JlL3VwZGF0ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2NvcmUvdHJhbnNsYXRlL2dldFRyYW5zbGF0ZS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2NvcmUvdHJhbnNsYXRlL3NldFRyYW5zbGF0ZS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2NvcmUvdHJhbnNsYXRlL21pblRyYW5zbGF0ZS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2NvcmUvdHJhbnNsYXRlL21heFRyYW5zbGF0ZS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2NvcmUvdHJhbnNsYXRlL3RyYW5zbGF0ZVRvLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi4vc3JjL2NvbXBvbmVudHMvY29yZS90cmFuc2xhdGUvaW5kZXguanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uLi9zcmMvY29tcG9uZW50cy9jb3JlL3RyYW5zaXRpb24vc2V0VHJhbnNpdGlvbi5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2NvcmUvdHJhbnNpdGlvbi90cmFuc2l0aW9uU3RhcnQuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uLi9zcmMvY29tcG9uZW50cy9jb3JlL3RyYW5zaXRpb24vdHJhbnNpdGlvbkVuZC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2NvcmUvdHJhbnNpdGlvbi9pbmRleC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2NvcmUvc2xpZGUvc2xpZGVUby5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2NvcmUvc2xpZGUvc2xpZGVUb0xvb3AuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uLi9zcmMvY29tcG9uZW50cy9jb3JlL3NsaWRlL3NsaWRlTmV4dC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2NvcmUvc2xpZGUvc2xpZGVQcmV2LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi4vc3JjL2NvbXBvbmVudHMvY29yZS9zbGlkZS9zbGlkZVJlc2V0LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi4vc3JjL2NvbXBvbmVudHMvY29yZS9zbGlkZS9zbGlkZVRvQ2xvc2VzdC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2NvcmUvc2xpZGUvc2xpZGVUb0NsaWNrZWRTbGlkZS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2NvcmUvc2xpZGUvaW5kZXguanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uLi9zcmMvY29tcG9uZW50cy9jb3JlL2xvb3AvbG9vcENyZWF0ZS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2NvcmUvbG9vcC9sb29wRml4LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi4vc3JjL2NvbXBvbmVudHMvY29yZS9sb29wL2xvb3BEZXN0cm95LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi4vc3JjL2NvbXBvbmVudHMvY29yZS9sb29wL2luZGV4LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi4vc3JjL2NvbXBvbmVudHMvY29yZS9ncmFiLWN1cnNvci9zZXRHcmFiQ3Vyc29yLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi4vc3JjL2NvbXBvbmVudHMvY29yZS9ncmFiLWN1cnNvci91bnNldEdyYWJDdXJzb3IuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uLi9zcmMvY29tcG9uZW50cy9jb3JlL2dyYWItY3Vyc29yL2luZGV4LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi4vc3JjL2NvbXBvbmVudHMvY29yZS9tYW5pcHVsYXRpb24vYXBwZW5kU2xpZGUuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uLi9zcmMvY29tcG9uZW50cy9jb3JlL21hbmlwdWxhdGlvbi9wcmVwZW5kU2xpZGUuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uLi9zcmMvY29tcG9uZW50cy9jb3JlL21hbmlwdWxhdGlvbi9hZGRTbGlkZS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2NvcmUvbWFuaXB1bGF0aW9uL3JlbW92ZVNsaWRlLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi4vc3JjL2NvbXBvbmVudHMvY29yZS9tYW5pcHVsYXRpb24vcmVtb3ZlQWxsU2xpZGVzLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi4vc3JjL2NvbXBvbmVudHMvY29yZS9tYW5pcHVsYXRpb24vaW5kZXguanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uLi9zcmMvdXRpbHMvZGV2aWNlLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi4vc3JjL2NvbXBvbmVudHMvY29yZS9ldmVudHMvb25Ub3VjaFN0YXJ0LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi4vc3JjL2NvbXBvbmVudHMvY29yZS9ldmVudHMvb25Ub3VjaE1vdmUuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uLi9zcmMvY29tcG9uZW50cy9jb3JlL2V2ZW50cy9vblRvdWNoRW5kLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi4vc3JjL2NvbXBvbmVudHMvY29yZS9ldmVudHMvb25SZXNpemUuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uLi9zcmMvY29tcG9uZW50cy9jb3JlL2V2ZW50cy9vbkNsaWNrLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi4vc3JjL2NvbXBvbmVudHMvY29yZS9ldmVudHMvb25TY3JvbGwuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uLi9zcmMvY29tcG9uZW50cy9jb3JlL2V2ZW50cy9pbmRleC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2NvcmUvYnJlYWtwb2ludHMvc2V0QnJlYWtwb2ludC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2NvcmUvYnJlYWtwb2ludHMvZ2V0QnJlYWtwb2ludC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2NvcmUvYnJlYWtwb2ludHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uLi9zcmMvY29tcG9uZW50cy9jb3JlL2NsYXNzZXMvYWRkQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2NvcmUvY2xhc3Nlcy9yZW1vdmVDbGFzc2VzLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi4vc3JjL2NvbXBvbmVudHMvY29yZS9jbGFzc2VzL2luZGV4LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi4vc3JjL2NvbXBvbmVudHMvY29yZS9pbWFnZXMvbG9hZEltYWdlLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi4vc3JjL2NvbXBvbmVudHMvY29yZS9pbWFnZXMvcHJlbG9hZEltYWdlcy5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2NvcmUvaW1hZ2VzL2luZGV4LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi4vc3JjL2NvbXBvbmVudHMvY29yZS9jaGVjay1vdmVyZmxvdy9pbmRleC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2NvcmUvZGVmYXVsdHMuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uLi9zcmMvY29tcG9uZW50cy9jb3JlL2NvcmUtY2xhc3MuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uLi9zcmMvbW9kdWxlcy9kZXZpY2UvZGV2aWNlLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi4vc3JjL21vZHVsZXMvc3VwcG9ydC9zdXBwb3J0LmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi4vc3JjL3V0aWxzL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uLi9zcmMvbW9kdWxlcy9icm93c2VyL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uLi9zcmMvbW9kdWxlcy9yZXNpemUvcmVzaXplLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi4vc3JjL21vZHVsZXMvb2JzZXJ2ZXIvb2JzZXJ2ZXIuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uLi9zcmMvY29tcG9uZW50cy92aXJ0dWFsL3ZpcnR1YWwuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uLi9zcmMvY29tcG9uZW50cy9rZXlib2FyZC9rZXlib2FyZC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL21vdXNld2hlZWwvbW91c2V3aGVlbC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL25hdmlnYXRpb24vbmF2aWdhdGlvbi5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL3Njcm9sbGJhci9zY3JvbGxiYXIuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uLi9zcmMvY29tcG9uZW50cy9wYXJhbGxheC9wYXJhbGxheC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL3pvb20vem9vbS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2xhenkvbGF6eS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2NvbnRyb2xsZXIvY29udHJvbGxlci5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2ExMXkvYTExeS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2hpc3RvcnkvaGlzdG9yeS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2hhc2gtbmF2aWdhdGlvbi9oYXNoLW5hdmlnYXRpb24uanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uLi9zcmMvY29tcG9uZW50cy9hdXRvcGxheS9hdXRvcGxheS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2VmZmVjdC1mYWRlL2VmZmVjdC1mYWRlLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi4vc3JjL2NvbXBvbmVudHMvZWZmZWN0LWN1YmUvZWZmZWN0LWN1YmUuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uLi9zcmMvY29tcG9uZW50cy9lZmZlY3QtZmxpcC9lZmZlY3QtZmxpcC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL2VmZmVjdC1jb3ZlcmZsb3cvZWZmZWN0LWNvdmVyZmxvdy5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4uL3NyYy9jb21wb25lbnRzL3RodW1icy90aHVtYnMuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uLi9zcmMvc3dpcGVyLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9zcmMvY29tbW9uL2pzL19hY2NvcmRpb24uanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL3NyYy9jb21tb24vanMvX2Nhcm91c2VsLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9zcmMvY29tbW9uL2pzL19jaGFydC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vc3JjL2NvbW1vbi9qcy9fY2hlY2tib3guanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL3NyYy9jb21tb24vanMvX2NvbmZpZy5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vc3JjL2NvbW1vbi9qcy9fZGF0ZS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vc3JjL2NvbW1vbi9qcy9fZW1pdHRlci5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vc3JjL2NvbW1vbi9qcy9fZmF2b3JpdGUuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL3NyYy9jb21tb24vanMvX2Zsb2F0LWJveC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vc3JjL2NvbW1vbi9qcy9fZm9sbG93LWNhcmQuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL3NyYy9jb21tb24vanMvX2ZvbGxvdy1wYWdlLWJvdHRvbS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vc3JjL2NvbW1vbi9qcy9fbGljZW5zZVNlbGVjdG9yLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9zcmMvY29tbW9uL2pzL19tYWlsYWRkcmVzcy5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vc3JjL2NvbW1vbi9qcy9fbW9kYWwuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL3NyYy9jb21tb24vanMvX3JhZGlvLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9zcmMvY29tbW9uL2pzL19yZWFkbW9yZS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vc3JjL2NvbW1vbi9qcy9fcmVzaXplLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9zcmMvY29tbW9uL2pzL19zY3JvbGwuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL3NyYy9jb21tb24vanMvX3Njcm9sbE1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL3NyYy9jb21tb24vanMvX3NlYXJjaG1lbnUuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL3NyYy9jb21tb24vanMvX3NlbGVjdE9uY2UuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL3NyYy9jb21tb24vanMvX3NlbGVjdGVkSW5zZXJ0ZXIuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL3NyYy9jb21tb24vanMvX3NldC1tYWluLWhlaWdodC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vc3JjL2NvbW1vbi9qcy9fc2t5c2NyYXBlci5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vc3JjL2NvbW1vbi9qcy9fc2xpZGUtc3RlcHMuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL3NyYy9jb21tb24vanMvX3Ntb3Roc2Nyb2xsLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9zcmMvY29tbW9uL2pzL19zbnMuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL3NyYy9jb21tb24vanMvX3RhYi5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vc3JjL2NvbW1vbi9qcy9fdGFnZGVsZXRlLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9zcmMvY29tbW9uL2pzL190cnVuY2F0ZS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vc3JjL2NvbW1vbi9qcy9fdmFsaWRhdGlvbi5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vc3JjL2NvbW1vbi9qcy9saWJzL2Nzc19icm93c2VyX3NlbGVjdG9yLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9zcmMvY29tbW9uL2pzL2xpYnMvanF1ZXJ5LXVpLm1pbi5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL3N3aXBlci9jc3Mvc3dpcGVyLm1pbi5jc3MiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlfHN5bmN8L14vLiokIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2Nzcy9zd2lwZXIubWluLmNzcz80ZjU2Iiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC9leHRlcm5hbCB2YXIgXCJqUXVlcnlcIiIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheVdpdGhIb2xlcy5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0L3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3Qvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3Qvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9rYWlnby1ybi1wcm9qZWN0L3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8va2FpZ28tcm4tcHJvamVjdC93ZWJwYWNrL3J1bnRpbWUvbm9kZSBtb2R1bGUgZGVjb3JhdG9yIiwid2VicGFjazovL2thaWdvLXJuLXByb2plY3QvLi9zcmMvY29tbW9uL2pzL21haW4uanMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikge1xuICAgIG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgICB9O1xuXG4gICAgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgICB9O1xuXG4gICAgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIF90eXBlb2Yob2JqKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mO1xubW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOyIsIi8qIVxuICogQ2hhcnQuanMgdjIuOC4wXG4gKiBodHRwczovL3d3dy5jaGFydGpzLm9yZ1xuICogKGMpIDIwMTkgQ2hhcnQuanMgQ29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcbiAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbnR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShmdW5jdGlvbigpIHsgdHJ5IHsgcmV0dXJuIHJlcXVpcmUoJ21vbWVudCcpOyB9IGNhdGNoKGUpIHsgfSB9KCkpIDpcbnR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ3JlcXVpcmUnXSwgZnVuY3Rpb24ocmVxdWlyZSkgeyByZXR1cm4gZmFjdG9yeShmdW5jdGlvbigpIHsgdHJ5IHsgcmV0dXJuIHJlcXVpcmUoJ21vbWVudCcpOyB9IGNhdGNoKGUpIHsgfSB9KCkpOyB9KSA6XG4oZ2xvYmFsLkNoYXJ0ID0gZmFjdG9yeShnbG9iYWwubW9tZW50KSk7XG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxubW9tZW50ID0gbW9tZW50ICYmIG1vbWVudC5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdCcpID8gbW9tZW50WydkZWZhdWx0J10gOiBtb21lbnQ7XG5cbi8qIE1JVCBsaWNlbnNlICovXG5cbnZhciBjb252ZXJzaW9ucyA9IHtcbiAgcmdiMmhzbDogcmdiMmhzbCxcbiAgcmdiMmhzdjogcmdiMmhzdixcbiAgcmdiMmh3YjogcmdiMmh3YixcbiAgcmdiMmNteWs6IHJnYjJjbXlrLFxuICByZ2Iya2V5d29yZDogcmdiMmtleXdvcmQsXG4gIHJnYjJ4eXo6IHJnYjJ4eXosXG4gIHJnYjJsYWI6IHJnYjJsYWIsXG4gIHJnYjJsY2g6IHJnYjJsY2gsXG5cbiAgaHNsMnJnYjogaHNsMnJnYixcbiAgaHNsMmhzdjogaHNsMmhzdixcbiAgaHNsMmh3YjogaHNsMmh3YixcbiAgaHNsMmNteWs6IGhzbDJjbXlrLFxuICBoc2wya2V5d29yZDogaHNsMmtleXdvcmQsXG5cbiAgaHN2MnJnYjogaHN2MnJnYixcbiAgaHN2MmhzbDogaHN2MmhzbCxcbiAgaHN2Mmh3YjogaHN2Mmh3YixcbiAgaHN2MmNteWs6IGhzdjJjbXlrLFxuICBoc3Yya2V5d29yZDogaHN2MmtleXdvcmQsXG5cbiAgaHdiMnJnYjogaHdiMnJnYixcbiAgaHdiMmhzbDogaHdiMmhzbCxcbiAgaHdiMmhzdjogaHdiMmhzdixcbiAgaHdiMmNteWs6IGh3YjJjbXlrLFxuICBod2Iya2V5d29yZDogaHdiMmtleXdvcmQsXG5cbiAgY215azJyZ2I6IGNteWsycmdiLFxuICBjbXlrMmhzbDogY215azJoc2wsXG4gIGNteWsyaHN2OiBjbXlrMmhzdixcbiAgY215azJod2I6IGNteWsyaHdiLFxuICBjbXlrMmtleXdvcmQ6IGNteWsya2V5d29yZCxcblxuICBrZXl3b3JkMnJnYjoga2V5d29yZDJyZ2IsXG4gIGtleXdvcmQyaHNsOiBrZXl3b3JkMmhzbCxcbiAga2V5d29yZDJoc3Y6IGtleXdvcmQyaHN2LFxuICBrZXl3b3JkMmh3Yjoga2V5d29yZDJod2IsXG4gIGtleXdvcmQyY215azoga2V5d29yZDJjbXlrLFxuICBrZXl3b3JkMmxhYjoga2V5d29yZDJsYWIsXG4gIGtleXdvcmQyeHl6OiBrZXl3b3JkMnh5eixcblxuICB4eXoycmdiOiB4eXoycmdiLFxuICB4eXoybGFiOiB4eXoybGFiLFxuICB4eXoybGNoOiB4eXoybGNoLFxuXG4gIGxhYjJ4eXo6IGxhYjJ4eXosXG4gIGxhYjJyZ2I6IGxhYjJyZ2IsXG4gIGxhYjJsY2g6IGxhYjJsY2gsXG5cbiAgbGNoMmxhYjogbGNoMmxhYixcbiAgbGNoMnh5ejogbGNoMnh5eixcbiAgbGNoMnJnYjogbGNoMnJnYlxufTtcblxuXG5mdW5jdGlvbiByZ2IyaHNsKHJnYikge1xuICB2YXIgciA9IHJnYlswXS8yNTUsXG4gICAgICBnID0gcmdiWzFdLzI1NSxcbiAgICAgIGIgPSByZ2JbMl0vMjU1LFxuICAgICAgbWluID0gTWF0aC5taW4ociwgZywgYiksXG4gICAgICBtYXggPSBNYXRoLm1heChyLCBnLCBiKSxcbiAgICAgIGRlbHRhID0gbWF4IC0gbWluLFxuICAgICAgaCwgcywgbDtcblxuICBpZiAobWF4ID09IG1pbilcbiAgICBoID0gMDtcbiAgZWxzZSBpZiAociA9PSBtYXgpXG4gICAgaCA9IChnIC0gYikgLyBkZWx0YTtcbiAgZWxzZSBpZiAoZyA9PSBtYXgpXG4gICAgaCA9IDIgKyAoYiAtIHIpIC8gZGVsdGE7XG4gIGVsc2UgaWYgKGIgPT0gbWF4KVxuICAgIGggPSA0ICsgKHIgLSBnKS8gZGVsdGE7XG5cbiAgaCA9IE1hdGgubWluKGggKiA2MCwgMzYwKTtcblxuICBpZiAoaCA8IDApXG4gICAgaCArPSAzNjA7XG5cbiAgbCA9IChtaW4gKyBtYXgpIC8gMjtcblxuICBpZiAobWF4ID09IG1pbilcbiAgICBzID0gMDtcbiAgZWxzZSBpZiAobCA8PSAwLjUpXG4gICAgcyA9IGRlbHRhIC8gKG1heCArIG1pbik7XG4gIGVsc2VcbiAgICBzID0gZGVsdGEgLyAoMiAtIG1heCAtIG1pbik7XG5cbiAgcmV0dXJuIFtoLCBzICogMTAwLCBsICogMTAwXTtcbn1cblxuZnVuY3Rpb24gcmdiMmhzdihyZ2IpIHtcbiAgdmFyIHIgPSByZ2JbMF0sXG4gICAgICBnID0gcmdiWzFdLFxuICAgICAgYiA9IHJnYlsyXSxcbiAgICAgIG1pbiA9IE1hdGgubWluKHIsIGcsIGIpLFxuICAgICAgbWF4ID0gTWF0aC5tYXgociwgZywgYiksXG4gICAgICBkZWx0YSA9IG1heCAtIG1pbixcbiAgICAgIGgsIHMsIHY7XG5cbiAgaWYgKG1heCA9PSAwKVxuICAgIHMgPSAwO1xuICBlbHNlXG4gICAgcyA9IChkZWx0YS9tYXggKiAxMDAwKS8xMDtcblxuICBpZiAobWF4ID09IG1pbilcbiAgICBoID0gMDtcbiAgZWxzZSBpZiAociA9PSBtYXgpXG4gICAgaCA9IChnIC0gYikgLyBkZWx0YTtcbiAgZWxzZSBpZiAoZyA9PSBtYXgpXG4gICAgaCA9IDIgKyAoYiAtIHIpIC8gZGVsdGE7XG4gIGVsc2UgaWYgKGIgPT0gbWF4KVxuICAgIGggPSA0ICsgKHIgLSBnKSAvIGRlbHRhO1xuXG4gIGggPSBNYXRoLm1pbihoICogNjAsIDM2MCk7XG5cbiAgaWYgKGggPCAwKVxuICAgIGggKz0gMzYwO1xuXG4gIHYgPSAoKG1heCAvIDI1NSkgKiAxMDAwKSAvIDEwO1xuXG4gIHJldHVybiBbaCwgcywgdl07XG59XG5cbmZ1bmN0aW9uIHJnYjJod2IocmdiKSB7XG4gIHZhciByID0gcmdiWzBdLFxuICAgICAgZyA9IHJnYlsxXSxcbiAgICAgIGIgPSByZ2JbMl0sXG4gICAgICBoID0gcmdiMmhzbChyZ2IpWzBdLFxuICAgICAgdyA9IDEvMjU1ICogTWF0aC5taW4ociwgTWF0aC5taW4oZywgYikpLFxuICAgICAgYiA9IDEgLSAxLzI1NSAqIE1hdGgubWF4KHIsIE1hdGgubWF4KGcsIGIpKTtcblxuICByZXR1cm4gW2gsIHcgKiAxMDAsIGIgKiAxMDBdO1xufVxuXG5mdW5jdGlvbiByZ2IyY215ayhyZ2IpIHtcbiAgdmFyIHIgPSByZ2JbMF0gLyAyNTUsXG4gICAgICBnID0gcmdiWzFdIC8gMjU1LFxuICAgICAgYiA9IHJnYlsyXSAvIDI1NSxcbiAgICAgIGMsIG0sIHksIGs7XG5cbiAgayA9IE1hdGgubWluKDEgLSByLCAxIC0gZywgMSAtIGIpO1xuICBjID0gKDEgLSByIC0gaykgLyAoMSAtIGspIHx8IDA7XG4gIG0gPSAoMSAtIGcgLSBrKSAvICgxIC0gaykgfHwgMDtcbiAgeSA9ICgxIC0gYiAtIGspIC8gKDEgLSBrKSB8fCAwO1xuICByZXR1cm4gW2MgKiAxMDAsIG0gKiAxMDAsIHkgKiAxMDAsIGsgKiAxMDBdO1xufVxuXG5mdW5jdGlvbiByZ2Iya2V5d29yZChyZ2IpIHtcbiAgcmV0dXJuIHJldmVyc2VLZXl3b3Jkc1tKU09OLnN0cmluZ2lmeShyZ2IpXTtcbn1cblxuZnVuY3Rpb24gcmdiMnh5eihyZ2IpIHtcbiAgdmFyIHIgPSByZ2JbMF0gLyAyNTUsXG4gICAgICBnID0gcmdiWzFdIC8gMjU1LFxuICAgICAgYiA9IHJnYlsyXSAvIDI1NTtcblxuICAvLyBhc3N1bWUgc1JHQlxuICByID0gciA+IDAuMDQwNDUgPyBNYXRoLnBvdygoKHIgKyAwLjA1NSkgLyAxLjA1NSksIDIuNCkgOiAociAvIDEyLjkyKTtcbiAgZyA9IGcgPiAwLjA0MDQ1ID8gTWF0aC5wb3coKChnICsgMC4wNTUpIC8gMS4wNTUpLCAyLjQpIDogKGcgLyAxMi45Mik7XG4gIGIgPSBiID4gMC4wNDA0NSA/IE1hdGgucG93KCgoYiArIDAuMDU1KSAvIDEuMDU1KSwgMi40KSA6IChiIC8gMTIuOTIpO1xuXG4gIHZhciB4ID0gKHIgKiAwLjQxMjQpICsgKGcgKiAwLjM1NzYpICsgKGIgKiAwLjE4MDUpO1xuICB2YXIgeSA9IChyICogMC4yMTI2KSArIChnICogMC43MTUyKSArIChiICogMC4wNzIyKTtcbiAgdmFyIHogPSAociAqIDAuMDE5MykgKyAoZyAqIDAuMTE5MikgKyAoYiAqIDAuOTUwNSk7XG5cbiAgcmV0dXJuIFt4ICogMTAwLCB5ICoxMDAsIHogKiAxMDBdO1xufVxuXG5mdW5jdGlvbiByZ2IybGFiKHJnYikge1xuICB2YXIgeHl6ID0gcmdiMnh5eihyZ2IpLFxuICAgICAgICB4ID0geHl6WzBdLFxuICAgICAgICB5ID0geHl6WzFdLFxuICAgICAgICB6ID0geHl6WzJdLFxuICAgICAgICBsLCBhLCBiO1xuXG4gIHggLz0gOTUuMDQ3O1xuICB5IC89IDEwMDtcbiAgeiAvPSAxMDguODgzO1xuXG4gIHggPSB4ID4gMC4wMDg4NTYgPyBNYXRoLnBvdyh4LCAxLzMpIDogKDcuNzg3ICogeCkgKyAoMTYgLyAxMTYpO1xuICB5ID0geSA+IDAuMDA4ODU2ID8gTWF0aC5wb3coeSwgMS8zKSA6ICg3Ljc4NyAqIHkpICsgKDE2IC8gMTE2KTtcbiAgeiA9IHogPiAwLjAwODg1NiA/IE1hdGgucG93KHosIDEvMykgOiAoNy43ODcgKiB6KSArICgxNiAvIDExNik7XG5cbiAgbCA9ICgxMTYgKiB5KSAtIDE2O1xuICBhID0gNTAwICogKHggLSB5KTtcbiAgYiA9IDIwMCAqICh5IC0geik7XG5cbiAgcmV0dXJuIFtsLCBhLCBiXTtcbn1cblxuZnVuY3Rpb24gcmdiMmxjaChhcmdzKSB7XG4gIHJldHVybiBsYWIybGNoKHJnYjJsYWIoYXJncykpO1xufVxuXG5mdW5jdGlvbiBoc2wycmdiKGhzbCkge1xuICB2YXIgaCA9IGhzbFswXSAvIDM2MCxcbiAgICAgIHMgPSBoc2xbMV0gLyAxMDAsXG4gICAgICBsID0gaHNsWzJdIC8gMTAwLFxuICAgICAgdDEsIHQyLCB0MywgcmdiLCB2YWw7XG5cbiAgaWYgKHMgPT0gMCkge1xuICAgIHZhbCA9IGwgKiAyNTU7XG4gICAgcmV0dXJuIFt2YWwsIHZhbCwgdmFsXTtcbiAgfVxuXG4gIGlmIChsIDwgMC41KVxuICAgIHQyID0gbCAqICgxICsgcyk7XG4gIGVsc2VcbiAgICB0MiA9IGwgKyBzIC0gbCAqIHM7XG4gIHQxID0gMiAqIGwgLSB0MjtcblxuICByZ2IgPSBbMCwgMCwgMF07XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgdDMgPSBoICsgMSAvIDMgKiAtIChpIC0gMSk7XG4gICAgdDMgPCAwICYmIHQzKys7XG4gICAgdDMgPiAxICYmIHQzLS07XG5cbiAgICBpZiAoNiAqIHQzIDwgMSlcbiAgICAgIHZhbCA9IHQxICsgKHQyIC0gdDEpICogNiAqIHQzO1xuICAgIGVsc2UgaWYgKDIgKiB0MyA8IDEpXG4gICAgICB2YWwgPSB0MjtcbiAgICBlbHNlIGlmICgzICogdDMgPCAyKVxuICAgICAgdmFsID0gdDEgKyAodDIgLSB0MSkgKiAoMiAvIDMgLSB0MykgKiA2O1xuICAgIGVsc2VcbiAgICAgIHZhbCA9IHQxO1xuXG4gICAgcmdiW2ldID0gdmFsICogMjU1O1xuICB9XG5cbiAgcmV0dXJuIHJnYjtcbn1cblxuZnVuY3Rpb24gaHNsMmhzdihoc2wpIHtcbiAgdmFyIGggPSBoc2xbMF0sXG4gICAgICBzID0gaHNsWzFdIC8gMTAwLFxuICAgICAgbCA9IGhzbFsyXSAvIDEwMCxcbiAgICAgIHN2LCB2O1xuXG4gIGlmKGwgPT09IDApIHtcbiAgICAgIC8vIG5vIG5lZWQgdG8gZG8gY2FsYyBvbiBibGFja1xuICAgICAgLy8gYWxzbyBhdm9pZHMgZGl2aWRlIGJ5IDAgZXJyb3JcbiAgICAgIHJldHVybiBbMCwgMCwgMF07XG4gIH1cblxuICBsICo9IDI7XG4gIHMgKj0gKGwgPD0gMSkgPyBsIDogMiAtIGw7XG4gIHYgPSAobCArIHMpIC8gMjtcbiAgc3YgPSAoMiAqIHMpIC8gKGwgKyBzKTtcbiAgcmV0dXJuIFtoLCBzdiAqIDEwMCwgdiAqIDEwMF07XG59XG5cbmZ1bmN0aW9uIGhzbDJod2IoYXJncykge1xuICByZXR1cm4gcmdiMmh3Yihoc2wycmdiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gaHNsMmNteWsoYXJncykge1xuICByZXR1cm4gcmdiMmNteWsoaHNsMnJnYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGhzbDJrZXl3b3JkKGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJrZXl3b3JkKGhzbDJyZ2IoYXJncykpO1xufVxuXG5cbmZ1bmN0aW9uIGhzdjJyZ2IoaHN2KSB7XG4gIHZhciBoID0gaHN2WzBdIC8gNjAsXG4gICAgICBzID0gaHN2WzFdIC8gMTAwLFxuICAgICAgdiA9IGhzdlsyXSAvIDEwMCxcbiAgICAgIGhpID0gTWF0aC5mbG9vcihoKSAlIDY7XG5cbiAgdmFyIGYgPSBoIC0gTWF0aC5mbG9vcihoKSxcbiAgICAgIHAgPSAyNTUgKiB2ICogKDEgLSBzKSxcbiAgICAgIHEgPSAyNTUgKiB2ICogKDEgLSAocyAqIGYpKSxcbiAgICAgIHQgPSAyNTUgKiB2ICogKDEgLSAocyAqICgxIC0gZikpKSxcbiAgICAgIHYgPSAyNTUgKiB2O1xuXG4gIHN3aXRjaChoaSkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiBbdiwgdCwgcF07XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIFtxLCB2LCBwXTtcbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4gW3AsIHYsIHRdO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBbcCwgcSwgdl07XG4gICAgY2FzZSA0OlxuICAgICAgcmV0dXJuIFt0LCBwLCB2XTtcbiAgICBjYXNlIDU6XG4gICAgICByZXR1cm4gW3YsIHAsIHFdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhzdjJoc2woaHN2KSB7XG4gIHZhciBoID0gaHN2WzBdLFxuICAgICAgcyA9IGhzdlsxXSAvIDEwMCxcbiAgICAgIHYgPSBoc3ZbMl0gLyAxMDAsXG4gICAgICBzbCwgbDtcblxuICBsID0gKDIgLSBzKSAqIHY7XG4gIHNsID0gcyAqIHY7XG4gIHNsIC89IChsIDw9IDEpID8gbCA6IDIgLSBsO1xuICBzbCA9IHNsIHx8IDA7XG4gIGwgLz0gMjtcbiAgcmV0dXJuIFtoLCBzbCAqIDEwMCwgbCAqIDEwMF07XG59XG5cbmZ1bmN0aW9uIGhzdjJod2IoYXJncykge1xuICByZXR1cm4gcmdiMmh3Yihoc3YycmdiKGFyZ3MpKVxufVxuXG5mdW5jdGlvbiBoc3YyY215ayhhcmdzKSB7XG4gIHJldHVybiByZ2IyY215ayhoc3YycmdiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gaHN2MmtleXdvcmQoYXJncykge1xuICByZXR1cm4gcmdiMmtleXdvcmQoaHN2MnJnYihhcmdzKSk7XG59XG5cbi8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzcy1jb2xvci8jaHdiLXRvLXJnYlxuZnVuY3Rpb24gaHdiMnJnYihod2IpIHtcbiAgdmFyIGggPSBod2JbMF0gLyAzNjAsXG4gICAgICB3aCA9IGh3YlsxXSAvIDEwMCxcbiAgICAgIGJsID0gaHdiWzJdIC8gMTAwLFxuICAgICAgcmF0aW8gPSB3aCArIGJsLFxuICAgICAgaSwgdiwgZiwgbjtcblxuICAvLyB3aCArIGJsIGNhbnQgYmUgPiAxXG4gIGlmIChyYXRpbyA+IDEpIHtcbiAgICB3aCAvPSByYXRpbztcbiAgICBibCAvPSByYXRpbztcbiAgfVxuXG4gIGkgPSBNYXRoLmZsb29yKDYgKiBoKTtcbiAgdiA9IDEgLSBibDtcbiAgZiA9IDYgKiBoIC0gaTtcbiAgaWYgKChpICYgMHgwMSkgIT0gMCkge1xuICAgIGYgPSAxIC0gZjtcbiAgfVxuICBuID0gd2ggKyBmICogKHYgLSB3aCk7ICAvLyBsaW5lYXIgaW50ZXJwb2xhdGlvblxuXG4gIHN3aXRjaCAoaSkge1xuICAgIGRlZmF1bHQ6XG4gICAgY2FzZSA2OlxuICAgIGNhc2UgMDogciA9IHY7IGcgPSBuOyBiID0gd2g7IGJyZWFrO1xuICAgIGNhc2UgMTogciA9IG47IGcgPSB2OyBiID0gd2g7IGJyZWFrO1xuICAgIGNhc2UgMjogciA9IHdoOyBnID0gdjsgYiA9IG47IGJyZWFrO1xuICAgIGNhc2UgMzogciA9IHdoOyBnID0gbjsgYiA9IHY7IGJyZWFrO1xuICAgIGNhc2UgNDogciA9IG47IGcgPSB3aDsgYiA9IHY7IGJyZWFrO1xuICAgIGNhc2UgNTogciA9IHY7IGcgPSB3aDsgYiA9IG47IGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIFtyICogMjU1LCBnICogMjU1LCBiICogMjU1XTtcbn1cblxuZnVuY3Rpb24gaHdiMmhzbChhcmdzKSB7XG4gIHJldHVybiByZ2IyaHNsKGh3YjJyZ2IoYXJncykpO1xufVxuXG5mdW5jdGlvbiBod2IyaHN2KGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJoc3YoaHdiMnJnYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGh3YjJjbXlrKGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJjbXlrKGh3YjJyZ2IoYXJncykpO1xufVxuXG5mdW5jdGlvbiBod2Iya2V5d29yZChhcmdzKSB7XG4gIHJldHVybiByZ2Iya2V5d29yZChod2IycmdiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gY215azJyZ2IoY215aykge1xuICB2YXIgYyA9IGNteWtbMF0gLyAxMDAsXG4gICAgICBtID0gY215a1sxXSAvIDEwMCxcbiAgICAgIHkgPSBjbXlrWzJdIC8gMTAwLFxuICAgICAgayA9IGNteWtbM10gLyAxMDAsXG4gICAgICByLCBnLCBiO1xuXG4gIHIgPSAxIC0gTWF0aC5taW4oMSwgYyAqICgxIC0gaykgKyBrKTtcbiAgZyA9IDEgLSBNYXRoLm1pbigxLCBtICogKDEgLSBrKSArIGspO1xuICBiID0gMSAtIE1hdGgubWluKDEsIHkgKiAoMSAtIGspICsgayk7XG4gIHJldHVybiBbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NV07XG59XG5cbmZ1bmN0aW9uIGNteWsyaHNsKGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJoc2woY215azJyZ2IoYXJncykpO1xufVxuXG5mdW5jdGlvbiBjbXlrMmhzdihhcmdzKSB7XG4gIHJldHVybiByZ2IyaHN2KGNteWsycmdiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gY215azJod2IoYXJncykge1xuICByZXR1cm4gcmdiMmh3YihjbXlrMnJnYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGNteWsya2V5d29yZChhcmdzKSB7XG4gIHJldHVybiByZ2Iya2V5d29yZChjbXlrMnJnYihhcmdzKSk7XG59XG5cblxuZnVuY3Rpb24geHl6MnJnYih4eXopIHtcbiAgdmFyIHggPSB4eXpbMF0gLyAxMDAsXG4gICAgICB5ID0geHl6WzFdIC8gMTAwLFxuICAgICAgeiA9IHh5elsyXSAvIDEwMCxcbiAgICAgIHIsIGcsIGI7XG5cbiAgciA9ICh4ICogMy4yNDA2KSArICh5ICogLTEuNTM3MikgKyAoeiAqIC0wLjQ5ODYpO1xuICBnID0gKHggKiAtMC45Njg5KSArICh5ICogMS44NzU4KSArICh6ICogMC4wNDE1KTtcbiAgYiA9ICh4ICogMC4wNTU3KSArICh5ICogLTAuMjA0MCkgKyAoeiAqIDEuMDU3MCk7XG5cbiAgLy8gYXNzdW1lIHNSR0JcbiAgciA9IHIgPiAwLjAwMzEzMDggPyAoKDEuMDU1ICogTWF0aC5wb3cociwgMS4wIC8gMi40KSkgLSAwLjA1NSlcbiAgICA6IHIgPSAociAqIDEyLjkyKTtcblxuICBnID0gZyA+IDAuMDAzMTMwOCA/ICgoMS4wNTUgKiBNYXRoLnBvdyhnLCAxLjAgLyAyLjQpKSAtIDAuMDU1KVxuICAgIDogZyA9IChnICogMTIuOTIpO1xuXG4gIGIgPSBiID4gMC4wMDMxMzA4ID8gKCgxLjA1NSAqIE1hdGgucG93KGIsIDEuMCAvIDIuNCkpIC0gMC4wNTUpXG4gICAgOiBiID0gKGIgKiAxMi45Mik7XG5cbiAgciA9IE1hdGgubWluKE1hdGgubWF4KDAsIHIpLCAxKTtcbiAgZyA9IE1hdGgubWluKE1hdGgubWF4KDAsIGcpLCAxKTtcbiAgYiA9IE1hdGgubWluKE1hdGgubWF4KDAsIGIpLCAxKTtcblxuICByZXR1cm4gW3IgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTVdO1xufVxuXG5mdW5jdGlvbiB4eXoybGFiKHh5eikge1xuICB2YXIgeCA9IHh5elswXSxcbiAgICAgIHkgPSB4eXpbMV0sXG4gICAgICB6ID0geHl6WzJdLFxuICAgICAgbCwgYSwgYjtcblxuICB4IC89IDk1LjA0NztcbiAgeSAvPSAxMDA7XG4gIHogLz0gMTA4Ljg4MztcblxuICB4ID0geCA+IDAuMDA4ODU2ID8gTWF0aC5wb3coeCwgMS8zKSA6ICg3Ljc4NyAqIHgpICsgKDE2IC8gMTE2KTtcbiAgeSA9IHkgPiAwLjAwODg1NiA/IE1hdGgucG93KHksIDEvMykgOiAoNy43ODcgKiB5KSArICgxNiAvIDExNik7XG4gIHogPSB6ID4gMC4wMDg4NTYgPyBNYXRoLnBvdyh6LCAxLzMpIDogKDcuNzg3ICogeikgKyAoMTYgLyAxMTYpO1xuXG4gIGwgPSAoMTE2ICogeSkgLSAxNjtcbiAgYSA9IDUwMCAqICh4IC0geSk7XG4gIGIgPSAyMDAgKiAoeSAtIHopO1xuXG4gIHJldHVybiBbbCwgYSwgYl07XG59XG5cbmZ1bmN0aW9uIHh5ejJsY2goYXJncykge1xuICByZXR1cm4gbGFiMmxjaCh4eXoybGFiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gbGFiMnh5eihsYWIpIHtcbiAgdmFyIGwgPSBsYWJbMF0sXG4gICAgICBhID0gbGFiWzFdLFxuICAgICAgYiA9IGxhYlsyXSxcbiAgICAgIHgsIHksIHosIHkyO1xuXG4gIGlmIChsIDw9IDgpIHtcbiAgICB5ID0gKGwgKiAxMDApIC8gOTAzLjM7XG4gICAgeTIgPSAoNy43ODcgKiAoeSAvIDEwMCkpICsgKDE2IC8gMTE2KTtcbiAgfSBlbHNlIHtcbiAgICB5ID0gMTAwICogTWF0aC5wb3coKGwgKyAxNikgLyAxMTYsIDMpO1xuICAgIHkyID0gTWF0aC5wb3coeSAvIDEwMCwgMS8zKTtcbiAgfVxuXG4gIHggPSB4IC8gOTUuMDQ3IDw9IDAuMDA4ODU2ID8geCA9ICg5NS4wNDcgKiAoKGEgLyA1MDApICsgeTIgLSAoMTYgLyAxMTYpKSkgLyA3Ljc4NyA6IDk1LjA0NyAqIE1hdGgucG93KChhIC8gNTAwKSArIHkyLCAzKTtcblxuICB6ID0geiAvIDEwOC44ODMgPD0gMC4wMDg4NTkgPyB6ID0gKDEwOC44ODMgKiAoeTIgLSAoYiAvIDIwMCkgLSAoMTYgLyAxMTYpKSkgLyA3Ljc4NyA6IDEwOC44ODMgKiBNYXRoLnBvdyh5MiAtIChiIC8gMjAwKSwgMyk7XG5cbiAgcmV0dXJuIFt4LCB5LCB6XTtcbn1cblxuZnVuY3Rpb24gbGFiMmxjaChsYWIpIHtcbiAgdmFyIGwgPSBsYWJbMF0sXG4gICAgICBhID0gbGFiWzFdLFxuICAgICAgYiA9IGxhYlsyXSxcbiAgICAgIGhyLCBoLCBjO1xuXG4gIGhyID0gTWF0aC5hdGFuMihiLCBhKTtcbiAgaCA9IGhyICogMzYwIC8gMiAvIE1hdGguUEk7XG4gIGlmIChoIDwgMCkge1xuICAgIGggKz0gMzYwO1xuICB9XG4gIGMgPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYik7XG4gIHJldHVybiBbbCwgYywgaF07XG59XG5cbmZ1bmN0aW9uIGxhYjJyZ2IoYXJncykge1xuICByZXR1cm4geHl6MnJnYihsYWIyeHl6KGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gbGNoMmxhYihsY2gpIHtcbiAgdmFyIGwgPSBsY2hbMF0sXG4gICAgICBjID0gbGNoWzFdLFxuICAgICAgaCA9IGxjaFsyXSxcbiAgICAgIGEsIGIsIGhyO1xuXG4gIGhyID0gaCAvIDM2MCAqIDIgKiBNYXRoLlBJO1xuICBhID0gYyAqIE1hdGguY29zKGhyKTtcbiAgYiA9IGMgKiBNYXRoLnNpbihocik7XG4gIHJldHVybiBbbCwgYSwgYl07XG59XG5cbmZ1bmN0aW9uIGxjaDJ4eXooYXJncykge1xuICByZXR1cm4gbGFiMnh5eihsY2gybGFiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gbGNoMnJnYihhcmdzKSB7XG4gIHJldHVybiBsYWIycmdiKGxjaDJsYWIoYXJncykpO1xufVxuXG5mdW5jdGlvbiBrZXl3b3JkMnJnYihrZXl3b3JkKSB7XG4gIHJldHVybiBjc3NLZXl3b3Jkc1trZXl3b3JkXTtcbn1cblxuZnVuY3Rpb24ga2V5d29yZDJoc2woYXJncykge1xuICByZXR1cm4gcmdiMmhzbChrZXl3b3JkMnJnYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGtleXdvcmQyaHN2KGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJoc3Yoa2V5d29yZDJyZ2IoYXJncykpO1xufVxuXG5mdW5jdGlvbiBrZXl3b3JkMmh3YihhcmdzKSB7XG4gIHJldHVybiByZ2IyaHdiKGtleXdvcmQycmdiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24ga2V5d29yZDJjbXlrKGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJjbXlrKGtleXdvcmQycmdiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24ga2V5d29yZDJsYWIoYXJncykge1xuICByZXR1cm4gcmdiMmxhYihrZXl3b3JkMnJnYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGtleXdvcmQyeHl6KGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJ4eXooa2V5d29yZDJyZ2IoYXJncykpO1xufVxuXG52YXIgY3NzS2V5d29yZHMgPSB7XG4gIGFsaWNlYmx1ZTogIFsyNDAsMjQ4LDI1NV0sXG4gIGFudGlxdWV3aGl0ZTogWzI1MCwyMzUsMjE1XSxcbiAgYXF1YTogWzAsMjU1LDI1NV0sXG4gIGFxdWFtYXJpbmU6IFsxMjcsMjU1LDIxMl0sXG4gIGF6dXJlOiAgWzI0MCwyNTUsMjU1XSxcbiAgYmVpZ2U6ICBbMjQ1LDI0NSwyMjBdLFxuICBiaXNxdWU6IFsyNTUsMjI4LDE5Nl0sXG4gIGJsYWNrOiAgWzAsMCwwXSxcbiAgYmxhbmNoZWRhbG1vbmQ6IFsyNTUsMjM1LDIwNV0sXG4gIGJsdWU6IFswLDAsMjU1XSxcbiAgYmx1ZXZpb2xldDogWzEzOCw0MywyMjZdLFxuICBicm93bjogIFsxNjUsNDIsNDJdLFxuICBidXJseXdvb2Q6ICBbMjIyLDE4NCwxMzVdLFxuICBjYWRldGJsdWU6ICBbOTUsMTU4LDE2MF0sXG4gIGNoYXJ0cmV1c2U6IFsxMjcsMjU1LDBdLFxuICBjaG9jb2xhdGU6ICBbMjEwLDEwNSwzMF0sXG4gIGNvcmFsOiAgWzI1NSwxMjcsODBdLFxuICBjb3JuZmxvd2VyYmx1ZTogWzEwMCwxNDksMjM3XSxcbiAgY29ybnNpbGs6IFsyNTUsMjQ4LDIyMF0sXG4gIGNyaW1zb246ICBbMjIwLDIwLDYwXSxcbiAgY3lhbjogWzAsMjU1LDI1NV0sXG4gIGRhcmtibHVlOiBbMCwwLDEzOV0sXG4gIGRhcmtjeWFuOiBbMCwxMzksMTM5XSxcbiAgZGFya2dvbGRlbnJvZDogIFsxODQsMTM0LDExXSxcbiAgZGFya2dyYXk6IFsxNjksMTY5LDE2OV0sXG4gIGRhcmtncmVlbjogIFswLDEwMCwwXSxcbiAgZGFya2dyZXk6IFsxNjksMTY5LDE2OV0sXG4gIGRhcmtraGFraTogIFsxODksMTgzLDEwN10sXG4gIGRhcmttYWdlbnRhOiAgWzEzOSwwLDEzOV0sXG4gIGRhcmtvbGl2ZWdyZWVuOiBbODUsMTA3LDQ3XSxcbiAgZGFya29yYW5nZTogWzI1NSwxNDAsMF0sXG4gIGRhcmtvcmNoaWQ6IFsxNTMsNTAsMjA0XSxcbiAgZGFya3JlZDogIFsxMzksMCwwXSxcbiAgZGFya3NhbG1vbjogWzIzMywxNTAsMTIyXSxcbiAgZGFya3NlYWdyZWVuOiBbMTQzLDE4OCwxNDNdLFxuICBkYXJrc2xhdGVibHVlOiAgWzcyLDYxLDEzOV0sXG4gIGRhcmtzbGF0ZWdyYXk6ICBbNDcsNzksNzldLFxuICBkYXJrc2xhdGVncmV5OiAgWzQ3LDc5LDc5XSxcbiAgZGFya3R1cnF1b2lzZTogIFswLDIwNiwyMDldLFxuICBkYXJrdmlvbGV0OiBbMTQ4LDAsMjExXSxcbiAgZGVlcHBpbms6IFsyNTUsMjAsMTQ3XSxcbiAgZGVlcHNreWJsdWU6ICBbMCwxOTEsMjU1XSxcbiAgZGltZ3JheTogIFsxMDUsMTA1LDEwNV0sXG4gIGRpbWdyZXk6ICBbMTA1LDEwNSwxMDVdLFxuICBkb2RnZXJibHVlOiBbMzAsMTQ0LDI1NV0sXG4gIGZpcmVicmljazogIFsxNzgsMzQsMzRdLFxuICBmbG9yYWx3aGl0ZTogIFsyNTUsMjUwLDI0MF0sXG4gIGZvcmVzdGdyZWVuOiAgWzM0LDEzOSwzNF0sXG4gIGZ1Y2hzaWE6ICBbMjU1LDAsMjU1XSxcbiAgZ2FpbnNib3JvOiAgWzIyMCwyMjAsMjIwXSxcbiAgZ2hvc3R3aGl0ZTogWzI0OCwyNDgsMjU1XSxcbiAgZ29sZDogWzI1NSwyMTUsMF0sXG4gIGdvbGRlbnJvZDogIFsyMTgsMTY1LDMyXSxcbiAgZ3JheTogWzEyOCwxMjgsMTI4XSxcbiAgZ3JlZW46ICBbMCwxMjgsMF0sXG4gIGdyZWVueWVsbG93OiAgWzE3MywyNTUsNDddLFxuICBncmV5OiBbMTI4LDEyOCwxMjhdLFxuICBob25leWRldzogWzI0MCwyNTUsMjQwXSxcbiAgaG90cGluazogIFsyNTUsMTA1LDE4MF0sXG4gIGluZGlhbnJlZDogIFsyMDUsOTIsOTJdLFxuICBpbmRpZ286IFs3NSwwLDEzMF0sXG4gIGl2b3J5OiAgWzI1NSwyNTUsMjQwXSxcbiAga2hha2k6ICBbMjQwLDIzMCwxNDBdLFxuICBsYXZlbmRlcjogWzIzMCwyMzAsMjUwXSxcbiAgbGF2ZW5kZXJibHVzaDogIFsyNTUsMjQwLDI0NV0sXG4gIGxhd25ncmVlbjogIFsxMjQsMjUyLDBdLFxuICBsZW1vbmNoaWZmb246IFsyNTUsMjUwLDIwNV0sXG4gIGxpZ2h0Ymx1ZTogIFsxNzMsMjE2LDIzMF0sXG4gIGxpZ2h0Y29yYWw6IFsyNDAsMTI4LDEyOF0sXG4gIGxpZ2h0Y3lhbjogIFsyMjQsMjU1LDI1NV0sXG4gIGxpZ2h0Z29sZGVucm9keWVsbG93OiBbMjUwLDI1MCwyMTBdLFxuICBsaWdodGdyYXk6ICBbMjExLDIxMSwyMTFdLFxuICBsaWdodGdyZWVuOiBbMTQ0LDIzOCwxNDRdLFxuICBsaWdodGdyZXk6ICBbMjExLDIxMSwyMTFdLFxuICBsaWdodHBpbms6ICBbMjU1LDE4MiwxOTNdLFxuICBsaWdodHNhbG1vbjogIFsyNTUsMTYwLDEyMl0sXG4gIGxpZ2h0c2VhZ3JlZW46ICBbMzIsMTc4LDE3MF0sXG4gIGxpZ2h0c2t5Ymx1ZTogWzEzNSwyMDYsMjUwXSxcbiAgbGlnaHRzbGF0ZWdyYXk6IFsxMTksMTM2LDE1M10sXG4gIGxpZ2h0c2xhdGVncmV5OiBbMTE5LDEzNiwxNTNdLFxuICBsaWdodHN0ZWVsYmx1ZTogWzE3NiwxOTYsMjIyXSxcbiAgbGlnaHR5ZWxsb3c6ICBbMjU1LDI1NSwyMjRdLFxuICBsaW1lOiBbMCwyNTUsMF0sXG4gIGxpbWVncmVlbjogIFs1MCwyMDUsNTBdLFxuICBsaW5lbjogIFsyNTAsMjQwLDIzMF0sXG4gIG1hZ2VudGE6ICBbMjU1LDAsMjU1XSxcbiAgbWFyb29uOiBbMTI4LDAsMF0sXG4gIG1lZGl1bWFxdWFtYXJpbmU6IFsxMDIsMjA1LDE3MF0sXG4gIG1lZGl1bWJsdWU6IFswLDAsMjA1XSxcbiAgbWVkaXVtb3JjaGlkOiBbMTg2LDg1LDIxMV0sXG4gIG1lZGl1bXB1cnBsZTogWzE0NywxMTIsMjE5XSxcbiAgbWVkaXVtc2VhZ3JlZW46IFs2MCwxNzksMTEzXSxcbiAgbWVkaXVtc2xhdGVibHVlOiAgWzEyMywxMDQsMjM4XSxcbiAgbWVkaXVtc3ByaW5nZ3JlZW46ICBbMCwyNTAsMTU0XSxcbiAgbWVkaXVtdHVycXVvaXNlOiAgWzcyLDIwOSwyMDRdLFxuICBtZWRpdW12aW9sZXRyZWQ6ICBbMTk5LDIxLDEzM10sXG4gIG1pZG5pZ2h0Ymx1ZTogWzI1LDI1LDExMl0sXG4gIG1pbnRjcmVhbTogIFsyNDUsMjU1LDI1MF0sXG4gIG1pc3R5cm9zZTogIFsyNTUsMjI4LDIyNV0sXG4gIG1vY2Nhc2luOiBbMjU1LDIyOCwxODFdLFxuICBuYXZham93aGl0ZTogIFsyNTUsMjIyLDE3M10sXG4gIG5hdnk6IFswLDAsMTI4XSxcbiAgb2xkbGFjZTogIFsyNTMsMjQ1LDIzMF0sXG4gIG9saXZlOiAgWzEyOCwxMjgsMF0sXG4gIG9saXZlZHJhYjogIFsxMDcsMTQyLDM1XSxcbiAgb3JhbmdlOiBbMjU1LDE2NSwwXSxcbiAgb3JhbmdlcmVkOiAgWzI1NSw2OSwwXSxcbiAgb3JjaGlkOiBbMjE4LDExMiwyMTRdLFxuICBwYWxlZ29sZGVucm9kOiAgWzIzOCwyMzIsMTcwXSxcbiAgcGFsZWdyZWVuOiAgWzE1MiwyNTEsMTUyXSxcbiAgcGFsZXR1cnF1b2lzZTogIFsxNzUsMjM4LDIzOF0sXG4gIHBhbGV2aW9sZXRyZWQ6ICBbMjE5LDExMiwxNDddLFxuICBwYXBheWF3aGlwOiBbMjU1LDIzOSwyMTNdLFxuICBwZWFjaHB1ZmY6ICBbMjU1LDIxOCwxODVdLFxuICBwZXJ1OiBbMjA1LDEzMyw2M10sXG4gIHBpbms6IFsyNTUsMTkyLDIwM10sXG4gIHBsdW06IFsyMjEsMTYwLDIyMV0sXG4gIHBvd2RlcmJsdWU6IFsxNzYsMjI0LDIzMF0sXG4gIHB1cnBsZTogWzEyOCwwLDEyOF0sXG4gIHJlYmVjY2FwdXJwbGU6IFsxMDIsIDUxLCAxNTNdLFxuICByZWQ6ICBbMjU1LDAsMF0sXG4gIHJvc3licm93bjogIFsxODgsMTQzLDE0M10sXG4gIHJveWFsYmx1ZTogIFs2NSwxMDUsMjI1XSxcbiAgc2FkZGxlYnJvd246ICBbMTM5LDY5LDE5XSxcbiAgc2FsbW9uOiBbMjUwLDEyOCwxMTRdLFxuICBzYW5keWJyb3duOiBbMjQ0LDE2NCw5Nl0sXG4gIHNlYWdyZWVuOiBbNDYsMTM5LDg3XSxcbiAgc2Vhc2hlbGw6IFsyNTUsMjQ1LDIzOF0sXG4gIHNpZW5uYTogWzE2MCw4Miw0NV0sXG4gIHNpbHZlcjogWzE5MiwxOTIsMTkyXSxcbiAgc2t5Ymx1ZTogIFsxMzUsMjA2LDIzNV0sXG4gIHNsYXRlYmx1ZTogIFsxMDYsOTAsMjA1XSxcbiAgc2xhdGVncmF5OiAgWzExMiwxMjgsMTQ0XSxcbiAgc2xhdGVncmV5OiAgWzExMiwxMjgsMTQ0XSxcbiAgc25vdzogWzI1NSwyNTAsMjUwXSxcbiAgc3ByaW5nZ3JlZW46ICBbMCwyNTUsMTI3XSxcbiAgc3RlZWxibHVlOiAgWzcwLDEzMCwxODBdLFxuICB0YW46ICBbMjEwLDE4MCwxNDBdLFxuICB0ZWFsOiBbMCwxMjgsMTI4XSxcbiAgdGhpc3RsZTogIFsyMTYsMTkxLDIxNl0sXG4gIHRvbWF0bzogWzI1NSw5OSw3MV0sXG4gIHR1cnF1b2lzZTogIFs2NCwyMjQsMjA4XSxcbiAgdmlvbGV0OiBbMjM4LDEzMCwyMzhdLFxuICB3aGVhdDogIFsyNDUsMjIyLDE3OV0sXG4gIHdoaXRlOiAgWzI1NSwyNTUsMjU1XSxcbiAgd2hpdGVzbW9rZTogWzI0NSwyNDUsMjQ1XSxcbiAgeWVsbG93OiBbMjU1LDI1NSwwXSxcbiAgeWVsbG93Z3JlZW46ICBbMTU0LDIwNSw1MF1cbn07XG5cbnZhciByZXZlcnNlS2V5d29yZHMgPSB7fTtcbmZvciAodmFyIGtleSBpbiBjc3NLZXl3b3Jkcykge1xuICByZXZlcnNlS2V5d29yZHNbSlNPTi5zdHJpbmdpZnkoY3NzS2V5d29yZHNba2V5XSldID0ga2V5O1xufVxuXG52YXIgY29udmVydCA9IGZ1bmN0aW9uKCkge1xuICAgcmV0dXJuIG5ldyBDb252ZXJ0ZXIoKTtcbn07XG5cbmZvciAodmFyIGZ1bmMgaW4gY29udmVyc2lvbnMpIHtcbiAgLy8gZXhwb3J0IFJhdyB2ZXJzaW9uc1xuICBjb252ZXJ0W2Z1bmMgKyBcIlJhd1wiXSA9ICAoZnVuY3Rpb24oZnVuYykge1xuICAgIC8vIGFjY2VwdCBhcnJheSBvciBwbGFpbiBhcmdzXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgICAgaWYgKHR5cGVvZiBhcmcgPT0gXCJudW1iZXJcIilcbiAgICAgICAgYXJnID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgIHJldHVybiBjb252ZXJzaW9uc1tmdW5jXShhcmcpO1xuICAgIH1cbiAgfSkoZnVuYyk7XG5cbiAgdmFyIHBhaXIgPSAvKFxcdyspMihcXHcrKS8uZXhlYyhmdW5jKSxcbiAgICAgIGZyb20gPSBwYWlyWzFdLFxuICAgICAgdG8gPSBwYWlyWzJdO1xuXG4gIC8vIGV4cG9ydCByZ2IyaHNsIGFuZCBbXCJyZ2JcIl1bXCJoc2xcIl1cbiAgY29udmVydFtmcm9tXSA9IGNvbnZlcnRbZnJvbV0gfHwge307XG5cbiAgY29udmVydFtmcm9tXVt0b10gPSBjb252ZXJ0W2Z1bmNdID0gKGZ1bmN0aW9uKGZ1bmMpIHsgXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgICAgaWYgKHR5cGVvZiBhcmcgPT0gXCJudW1iZXJcIilcbiAgICAgICAgYXJnID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgIFxuICAgICAgdmFyIHZhbCA9IGNvbnZlcnNpb25zW2Z1bmNdKGFyZyk7XG4gICAgICBpZiAodHlwZW9mIHZhbCA9PSBcInN0cmluZ1wiIHx8IHZhbCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdmFsOyAvLyBrZXl3b3JkXG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKVxuICAgICAgICB2YWxbaV0gPSBNYXRoLnJvdW5kKHZhbFtpXSk7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgfSkoZnVuYyk7XG59XG5cblxuLyogQ29udmVydGVyIGRvZXMgbGF6eSBjb252ZXJzaW9uIGFuZCBjYWNoaW5nICovXG52YXIgQ29udmVydGVyID0gZnVuY3Rpb24oKSB7XG4gICB0aGlzLmNvbnZzID0ge307XG59O1xuXG4vKiBFaXRoZXIgZ2V0IHRoZSB2YWx1ZXMgZm9yIGEgc3BhY2Ugb3JcbiAgc2V0IHRoZSB2YWx1ZXMgZm9yIGEgc3BhY2UsIGRlcGVuZGluZyBvbiBhcmdzICovXG5Db252ZXJ0ZXIucHJvdG90eXBlLnJvdXRlU3BhY2UgPSBmdW5jdGlvbihzcGFjZSwgYXJncykge1xuICAgdmFyIHZhbHVlcyA9IGFyZ3NbMF07XG4gICBpZiAodmFsdWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGNvbG9yLnJnYigpXG4gICAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZXMoc3BhY2UpO1xuICAgfVxuICAgLy8gY29sb3IucmdiKDEwLCAxMCwgMTApXG4gICBpZiAodHlwZW9mIHZhbHVlcyA9PSBcIm51bWJlclwiKSB7XG4gICAgICB2YWx1ZXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKTsgICAgICAgIFxuICAgfVxuXG4gICByZXR1cm4gdGhpcy5zZXRWYWx1ZXMoc3BhY2UsIHZhbHVlcyk7XG59O1xuICBcbi8qIFNldCB0aGUgdmFsdWVzIGZvciBhIHNwYWNlLCBpbnZhbGlkYXRpbmcgY2FjaGUgKi9cbkNvbnZlcnRlci5wcm90b3R5cGUuc2V0VmFsdWVzID0gZnVuY3Rpb24oc3BhY2UsIHZhbHVlcykge1xuICAgdGhpcy5zcGFjZSA9IHNwYWNlO1xuICAgdGhpcy5jb252cyA9IHt9O1xuICAgdGhpcy5jb252c1tzcGFjZV0gPSB2YWx1ZXM7XG4gICByZXR1cm4gdGhpcztcbn07XG5cbi8qIEdldCB0aGUgdmFsdWVzIGZvciBhIHNwYWNlLiBJZiB0aGVyZSdzIGFscmVhZHlcbiAgYSBjb252ZXJzaW9uIGZvciB0aGUgc3BhY2UsIGZldGNoIGl0LCBvdGhlcndpc2VcbiAgY29tcHV0ZSBpdCAqL1xuQ29udmVydGVyLnByb3RvdHlwZS5nZXRWYWx1ZXMgPSBmdW5jdGlvbihzcGFjZSkge1xuICAgdmFyIHZhbHMgPSB0aGlzLmNvbnZzW3NwYWNlXTtcbiAgIGlmICghdmFscykge1xuICAgICAgdmFyIGZzcGFjZSA9IHRoaXMuc3BhY2UsXG4gICAgICAgICAgZnJvbSA9IHRoaXMuY29udnNbZnNwYWNlXTtcbiAgICAgIHZhbHMgPSBjb252ZXJ0W2ZzcGFjZV1bc3BhY2VdKGZyb20pO1xuXG4gICAgICB0aGlzLmNvbnZzW3NwYWNlXSA9IHZhbHM7XG4gICB9XG4gIHJldHVybiB2YWxzO1xufTtcblxuW1wicmdiXCIsIFwiaHNsXCIsIFwiaHN2XCIsIFwiY215a1wiLCBcImtleXdvcmRcIl0uZm9yRWFjaChmdW5jdGlvbihzcGFjZSkge1xuICAgQ29udmVydGVyLnByb3RvdHlwZVtzcGFjZV0gPSBmdW5jdGlvbih2YWxzKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZVNwYWNlKHNwYWNlLCBhcmd1bWVudHMpO1xuICAgfTtcbn0pO1xuXG52YXIgY29sb3JDb252ZXJ0ID0gY29udmVydDtcblxudmFyIGNvbG9yTmFtZSA9IHtcclxuXHRcImFsaWNlYmx1ZVwiOiBbMjQwLCAyNDgsIDI1NV0sXHJcblx0XCJhbnRpcXVld2hpdGVcIjogWzI1MCwgMjM1LCAyMTVdLFxyXG5cdFwiYXF1YVwiOiBbMCwgMjU1LCAyNTVdLFxyXG5cdFwiYXF1YW1hcmluZVwiOiBbMTI3LCAyNTUsIDIxMl0sXHJcblx0XCJhenVyZVwiOiBbMjQwLCAyNTUsIDI1NV0sXHJcblx0XCJiZWlnZVwiOiBbMjQ1LCAyNDUsIDIyMF0sXHJcblx0XCJiaXNxdWVcIjogWzI1NSwgMjI4LCAxOTZdLFxyXG5cdFwiYmxhY2tcIjogWzAsIDAsIDBdLFxyXG5cdFwiYmxhbmNoZWRhbG1vbmRcIjogWzI1NSwgMjM1LCAyMDVdLFxyXG5cdFwiYmx1ZVwiOiBbMCwgMCwgMjU1XSxcclxuXHRcImJsdWV2aW9sZXRcIjogWzEzOCwgNDMsIDIyNl0sXHJcblx0XCJicm93blwiOiBbMTY1LCA0MiwgNDJdLFxyXG5cdFwiYnVybHl3b29kXCI6IFsyMjIsIDE4NCwgMTM1XSxcclxuXHRcImNhZGV0Ymx1ZVwiOiBbOTUsIDE1OCwgMTYwXSxcclxuXHRcImNoYXJ0cmV1c2VcIjogWzEyNywgMjU1LCAwXSxcclxuXHRcImNob2NvbGF0ZVwiOiBbMjEwLCAxMDUsIDMwXSxcclxuXHRcImNvcmFsXCI6IFsyNTUsIDEyNywgODBdLFxyXG5cdFwiY29ybmZsb3dlcmJsdWVcIjogWzEwMCwgMTQ5LCAyMzddLFxyXG5cdFwiY29ybnNpbGtcIjogWzI1NSwgMjQ4LCAyMjBdLFxyXG5cdFwiY3JpbXNvblwiOiBbMjIwLCAyMCwgNjBdLFxyXG5cdFwiY3lhblwiOiBbMCwgMjU1LCAyNTVdLFxyXG5cdFwiZGFya2JsdWVcIjogWzAsIDAsIDEzOV0sXHJcblx0XCJkYXJrY3lhblwiOiBbMCwgMTM5LCAxMzldLFxyXG5cdFwiZGFya2dvbGRlbnJvZFwiOiBbMTg0LCAxMzQsIDExXSxcclxuXHRcImRhcmtncmF5XCI6IFsxNjksIDE2OSwgMTY5XSxcclxuXHRcImRhcmtncmVlblwiOiBbMCwgMTAwLCAwXSxcclxuXHRcImRhcmtncmV5XCI6IFsxNjksIDE2OSwgMTY5XSxcclxuXHRcImRhcmtraGFraVwiOiBbMTg5LCAxODMsIDEwN10sXHJcblx0XCJkYXJrbWFnZW50YVwiOiBbMTM5LCAwLCAxMzldLFxyXG5cdFwiZGFya29saXZlZ3JlZW5cIjogWzg1LCAxMDcsIDQ3XSxcclxuXHRcImRhcmtvcmFuZ2VcIjogWzI1NSwgMTQwLCAwXSxcclxuXHRcImRhcmtvcmNoaWRcIjogWzE1MywgNTAsIDIwNF0sXHJcblx0XCJkYXJrcmVkXCI6IFsxMzksIDAsIDBdLFxyXG5cdFwiZGFya3NhbG1vblwiOiBbMjMzLCAxNTAsIDEyMl0sXHJcblx0XCJkYXJrc2VhZ3JlZW5cIjogWzE0MywgMTg4LCAxNDNdLFxyXG5cdFwiZGFya3NsYXRlYmx1ZVwiOiBbNzIsIDYxLCAxMzldLFxyXG5cdFwiZGFya3NsYXRlZ3JheVwiOiBbNDcsIDc5LCA3OV0sXHJcblx0XCJkYXJrc2xhdGVncmV5XCI6IFs0NywgNzksIDc5XSxcclxuXHRcImRhcmt0dXJxdW9pc2VcIjogWzAsIDIwNiwgMjA5XSxcclxuXHRcImRhcmt2aW9sZXRcIjogWzE0OCwgMCwgMjExXSxcclxuXHRcImRlZXBwaW5rXCI6IFsyNTUsIDIwLCAxNDddLFxyXG5cdFwiZGVlcHNreWJsdWVcIjogWzAsIDE5MSwgMjU1XSxcclxuXHRcImRpbWdyYXlcIjogWzEwNSwgMTA1LCAxMDVdLFxyXG5cdFwiZGltZ3JleVwiOiBbMTA1LCAxMDUsIDEwNV0sXHJcblx0XCJkb2RnZXJibHVlXCI6IFszMCwgMTQ0LCAyNTVdLFxyXG5cdFwiZmlyZWJyaWNrXCI6IFsxNzgsIDM0LCAzNF0sXHJcblx0XCJmbG9yYWx3aGl0ZVwiOiBbMjU1LCAyNTAsIDI0MF0sXHJcblx0XCJmb3Jlc3RncmVlblwiOiBbMzQsIDEzOSwgMzRdLFxyXG5cdFwiZnVjaHNpYVwiOiBbMjU1LCAwLCAyNTVdLFxyXG5cdFwiZ2FpbnNib3JvXCI6IFsyMjAsIDIyMCwgMjIwXSxcclxuXHRcImdob3N0d2hpdGVcIjogWzI0OCwgMjQ4LCAyNTVdLFxyXG5cdFwiZ29sZFwiOiBbMjU1LCAyMTUsIDBdLFxyXG5cdFwiZ29sZGVucm9kXCI6IFsyMTgsIDE2NSwgMzJdLFxyXG5cdFwiZ3JheVwiOiBbMTI4LCAxMjgsIDEyOF0sXHJcblx0XCJncmVlblwiOiBbMCwgMTI4LCAwXSxcclxuXHRcImdyZWVueWVsbG93XCI6IFsxNzMsIDI1NSwgNDddLFxyXG5cdFwiZ3JleVwiOiBbMTI4LCAxMjgsIDEyOF0sXHJcblx0XCJob25leWRld1wiOiBbMjQwLCAyNTUsIDI0MF0sXHJcblx0XCJob3RwaW5rXCI6IFsyNTUsIDEwNSwgMTgwXSxcclxuXHRcImluZGlhbnJlZFwiOiBbMjA1LCA5MiwgOTJdLFxyXG5cdFwiaW5kaWdvXCI6IFs3NSwgMCwgMTMwXSxcclxuXHRcIml2b3J5XCI6IFsyNTUsIDI1NSwgMjQwXSxcclxuXHRcImtoYWtpXCI6IFsyNDAsIDIzMCwgMTQwXSxcclxuXHRcImxhdmVuZGVyXCI6IFsyMzAsIDIzMCwgMjUwXSxcclxuXHRcImxhdmVuZGVyYmx1c2hcIjogWzI1NSwgMjQwLCAyNDVdLFxyXG5cdFwibGF3bmdyZWVuXCI6IFsxMjQsIDI1MiwgMF0sXHJcblx0XCJsZW1vbmNoaWZmb25cIjogWzI1NSwgMjUwLCAyMDVdLFxyXG5cdFwibGlnaHRibHVlXCI6IFsxNzMsIDIxNiwgMjMwXSxcclxuXHRcImxpZ2h0Y29yYWxcIjogWzI0MCwgMTI4LCAxMjhdLFxyXG5cdFwibGlnaHRjeWFuXCI6IFsyMjQsIDI1NSwgMjU1XSxcclxuXHRcImxpZ2h0Z29sZGVucm9keWVsbG93XCI6IFsyNTAsIDI1MCwgMjEwXSxcclxuXHRcImxpZ2h0Z3JheVwiOiBbMjExLCAyMTEsIDIxMV0sXHJcblx0XCJsaWdodGdyZWVuXCI6IFsxNDQsIDIzOCwgMTQ0XSxcclxuXHRcImxpZ2h0Z3JleVwiOiBbMjExLCAyMTEsIDIxMV0sXHJcblx0XCJsaWdodHBpbmtcIjogWzI1NSwgMTgyLCAxOTNdLFxyXG5cdFwibGlnaHRzYWxtb25cIjogWzI1NSwgMTYwLCAxMjJdLFxyXG5cdFwibGlnaHRzZWFncmVlblwiOiBbMzIsIDE3OCwgMTcwXSxcclxuXHRcImxpZ2h0c2t5Ymx1ZVwiOiBbMTM1LCAyMDYsIDI1MF0sXHJcblx0XCJsaWdodHNsYXRlZ3JheVwiOiBbMTE5LCAxMzYsIDE1M10sXHJcblx0XCJsaWdodHNsYXRlZ3JleVwiOiBbMTE5LCAxMzYsIDE1M10sXHJcblx0XCJsaWdodHN0ZWVsYmx1ZVwiOiBbMTc2LCAxOTYsIDIyMl0sXHJcblx0XCJsaWdodHllbGxvd1wiOiBbMjU1LCAyNTUsIDIyNF0sXHJcblx0XCJsaW1lXCI6IFswLCAyNTUsIDBdLFxyXG5cdFwibGltZWdyZWVuXCI6IFs1MCwgMjA1LCA1MF0sXHJcblx0XCJsaW5lblwiOiBbMjUwLCAyNDAsIDIzMF0sXHJcblx0XCJtYWdlbnRhXCI6IFsyNTUsIDAsIDI1NV0sXHJcblx0XCJtYXJvb25cIjogWzEyOCwgMCwgMF0sXHJcblx0XCJtZWRpdW1hcXVhbWFyaW5lXCI6IFsxMDIsIDIwNSwgMTcwXSxcclxuXHRcIm1lZGl1bWJsdWVcIjogWzAsIDAsIDIwNV0sXHJcblx0XCJtZWRpdW1vcmNoaWRcIjogWzE4NiwgODUsIDIxMV0sXHJcblx0XCJtZWRpdW1wdXJwbGVcIjogWzE0NywgMTEyLCAyMTldLFxyXG5cdFwibWVkaXVtc2VhZ3JlZW5cIjogWzYwLCAxNzksIDExM10sXHJcblx0XCJtZWRpdW1zbGF0ZWJsdWVcIjogWzEyMywgMTA0LCAyMzhdLFxyXG5cdFwibWVkaXVtc3ByaW5nZ3JlZW5cIjogWzAsIDI1MCwgMTU0XSxcclxuXHRcIm1lZGl1bXR1cnF1b2lzZVwiOiBbNzIsIDIwOSwgMjA0XSxcclxuXHRcIm1lZGl1bXZpb2xldHJlZFwiOiBbMTk5LCAyMSwgMTMzXSxcclxuXHRcIm1pZG5pZ2h0Ymx1ZVwiOiBbMjUsIDI1LCAxMTJdLFxyXG5cdFwibWludGNyZWFtXCI6IFsyNDUsIDI1NSwgMjUwXSxcclxuXHRcIm1pc3R5cm9zZVwiOiBbMjU1LCAyMjgsIDIyNV0sXHJcblx0XCJtb2NjYXNpblwiOiBbMjU1LCAyMjgsIDE4MV0sXHJcblx0XCJuYXZham93aGl0ZVwiOiBbMjU1LCAyMjIsIDE3M10sXHJcblx0XCJuYXZ5XCI6IFswLCAwLCAxMjhdLFxyXG5cdFwib2xkbGFjZVwiOiBbMjUzLCAyNDUsIDIzMF0sXHJcblx0XCJvbGl2ZVwiOiBbMTI4LCAxMjgsIDBdLFxyXG5cdFwib2xpdmVkcmFiXCI6IFsxMDcsIDE0MiwgMzVdLFxyXG5cdFwib3JhbmdlXCI6IFsyNTUsIDE2NSwgMF0sXHJcblx0XCJvcmFuZ2VyZWRcIjogWzI1NSwgNjksIDBdLFxyXG5cdFwib3JjaGlkXCI6IFsyMTgsIDExMiwgMjE0XSxcclxuXHRcInBhbGVnb2xkZW5yb2RcIjogWzIzOCwgMjMyLCAxNzBdLFxyXG5cdFwicGFsZWdyZWVuXCI6IFsxNTIsIDI1MSwgMTUyXSxcclxuXHRcInBhbGV0dXJxdW9pc2VcIjogWzE3NSwgMjM4LCAyMzhdLFxyXG5cdFwicGFsZXZpb2xldHJlZFwiOiBbMjE5LCAxMTIsIDE0N10sXHJcblx0XCJwYXBheWF3aGlwXCI6IFsyNTUsIDIzOSwgMjEzXSxcclxuXHRcInBlYWNocHVmZlwiOiBbMjU1LCAyMTgsIDE4NV0sXHJcblx0XCJwZXJ1XCI6IFsyMDUsIDEzMywgNjNdLFxyXG5cdFwicGlua1wiOiBbMjU1LCAxOTIsIDIwM10sXHJcblx0XCJwbHVtXCI6IFsyMjEsIDE2MCwgMjIxXSxcclxuXHRcInBvd2RlcmJsdWVcIjogWzE3NiwgMjI0LCAyMzBdLFxyXG5cdFwicHVycGxlXCI6IFsxMjgsIDAsIDEyOF0sXHJcblx0XCJyZWJlY2NhcHVycGxlXCI6IFsxMDIsIDUxLCAxNTNdLFxyXG5cdFwicmVkXCI6IFsyNTUsIDAsIDBdLFxyXG5cdFwicm9zeWJyb3duXCI6IFsxODgsIDE0MywgMTQzXSxcclxuXHRcInJveWFsYmx1ZVwiOiBbNjUsIDEwNSwgMjI1XSxcclxuXHRcInNhZGRsZWJyb3duXCI6IFsxMzksIDY5LCAxOV0sXHJcblx0XCJzYWxtb25cIjogWzI1MCwgMTI4LCAxMTRdLFxyXG5cdFwic2FuZHlicm93blwiOiBbMjQ0LCAxNjQsIDk2XSxcclxuXHRcInNlYWdyZWVuXCI6IFs0NiwgMTM5LCA4N10sXHJcblx0XCJzZWFzaGVsbFwiOiBbMjU1LCAyNDUsIDIzOF0sXHJcblx0XCJzaWVubmFcIjogWzE2MCwgODIsIDQ1XSxcclxuXHRcInNpbHZlclwiOiBbMTkyLCAxOTIsIDE5Ml0sXHJcblx0XCJza3libHVlXCI6IFsxMzUsIDIwNiwgMjM1XSxcclxuXHRcInNsYXRlYmx1ZVwiOiBbMTA2LCA5MCwgMjA1XSxcclxuXHRcInNsYXRlZ3JheVwiOiBbMTEyLCAxMjgsIDE0NF0sXHJcblx0XCJzbGF0ZWdyZXlcIjogWzExMiwgMTI4LCAxNDRdLFxyXG5cdFwic25vd1wiOiBbMjU1LCAyNTAsIDI1MF0sXHJcblx0XCJzcHJpbmdncmVlblwiOiBbMCwgMjU1LCAxMjddLFxyXG5cdFwic3RlZWxibHVlXCI6IFs3MCwgMTMwLCAxODBdLFxyXG5cdFwidGFuXCI6IFsyMTAsIDE4MCwgMTQwXSxcclxuXHRcInRlYWxcIjogWzAsIDEyOCwgMTI4XSxcclxuXHRcInRoaXN0bGVcIjogWzIxNiwgMTkxLCAyMTZdLFxyXG5cdFwidG9tYXRvXCI6IFsyNTUsIDk5LCA3MV0sXHJcblx0XCJ0dXJxdW9pc2VcIjogWzY0LCAyMjQsIDIwOF0sXHJcblx0XCJ2aW9sZXRcIjogWzIzOCwgMTMwLCAyMzhdLFxyXG5cdFwid2hlYXRcIjogWzI0NSwgMjIyLCAxNzldLFxyXG5cdFwid2hpdGVcIjogWzI1NSwgMjU1LCAyNTVdLFxyXG5cdFwid2hpdGVzbW9rZVwiOiBbMjQ1LCAyNDUsIDI0NV0sXHJcblx0XCJ5ZWxsb3dcIjogWzI1NSwgMjU1LCAwXSxcclxuXHRcInllbGxvd2dyZWVuXCI6IFsxNTQsIDIwNSwgNTBdXHJcbn07XG5cbi8qIE1JVCBsaWNlbnNlICovXG5cblxudmFyIGNvbG9yU3RyaW5nID0ge1xuICAgZ2V0UmdiYTogZ2V0UmdiYSxcbiAgIGdldEhzbGE6IGdldEhzbGEsXG4gICBnZXRSZ2I6IGdldFJnYixcbiAgIGdldEhzbDogZ2V0SHNsLFxuICAgZ2V0SHdiOiBnZXRId2IsXG4gICBnZXRBbHBoYTogZ2V0QWxwaGEsXG5cbiAgIGhleFN0cmluZzogaGV4U3RyaW5nLFxuICAgcmdiU3RyaW5nOiByZ2JTdHJpbmcsXG4gICByZ2JhU3RyaW5nOiByZ2JhU3RyaW5nLFxuICAgcGVyY2VudFN0cmluZzogcGVyY2VudFN0cmluZyxcbiAgIHBlcmNlbnRhU3RyaW5nOiBwZXJjZW50YVN0cmluZyxcbiAgIGhzbFN0cmluZzogaHNsU3RyaW5nLFxuICAgaHNsYVN0cmluZzogaHNsYVN0cmluZyxcbiAgIGh3YlN0cmluZzogaHdiU3RyaW5nLFxuICAga2V5d29yZDoga2V5d29yZFxufTtcblxuZnVuY3Rpb24gZ2V0UmdiYShzdHJpbmcpIHtcbiAgIGlmICghc3RyaW5nKSB7XG4gICAgICByZXR1cm47XG4gICB9XG4gICB2YXIgYWJiciA9ICAvXiMoW2EtZkEtRjAtOV17Myw0fSkkL2ksXG4gICAgICAgaGV4ID0gIC9eIyhbYS1mQS1GMC05XXs2fShbYS1mQS1GMC05XXsyfSk/KSQvaSxcbiAgICAgICByZ2JhID0gL15yZ2JhP1xcKFxccyooWystXT9cXGQrKVxccyosXFxzKihbKy1dP1xcZCspXFxzKixcXHMqKFsrLV0/XFxkKylcXHMqKD86LFxccyooWystXT9bXFxkXFwuXSspXFxzKik/XFwpJC9pLFxuICAgICAgIHBlciA9IC9ecmdiYT9cXChcXHMqKFsrLV0/W1xcZFxcLl0rKVxcJVxccyosXFxzKihbKy1dP1tcXGRcXC5dKylcXCVcXHMqLFxccyooWystXT9bXFxkXFwuXSspXFwlXFxzKig/OixcXHMqKFsrLV0/W1xcZFxcLl0rKVxccyopP1xcKSQvaSxcbiAgICAgICBrZXl3b3JkID0gLyhcXHcrKS87XG5cbiAgIHZhciByZ2IgPSBbMCwgMCwgMF0sXG4gICAgICAgYSA9IDEsXG4gICAgICAgbWF0Y2ggPSBzdHJpbmcubWF0Y2goYWJiciksXG4gICAgICAgaGV4QWxwaGEgPSBcIlwiO1xuICAgaWYgKG1hdGNoKSB7XG4gICAgICBtYXRjaCA9IG1hdGNoWzFdO1xuICAgICAgaGV4QWxwaGEgPSBtYXRjaFszXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmdiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICByZ2JbaV0gPSBwYXJzZUludChtYXRjaFtpXSArIG1hdGNoW2ldLCAxNik7XG4gICAgICB9XG4gICAgICBpZiAoaGV4QWxwaGEpIHtcbiAgICAgICAgIGEgPSBNYXRoLnJvdW5kKChwYXJzZUludChoZXhBbHBoYSArIGhleEFscGhhLCAxNikgLyAyNTUpICogMTAwKSAvIDEwMDtcbiAgICAgIH1cbiAgIH1cbiAgIGVsc2UgaWYgKG1hdGNoID0gc3RyaW5nLm1hdGNoKGhleCkpIHtcbiAgICAgIGhleEFscGhhID0gbWF0Y2hbMl07XG4gICAgICBtYXRjaCA9IG1hdGNoWzFdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZ2IubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgIHJnYltpXSA9IHBhcnNlSW50KG1hdGNoLnNsaWNlKGkgKiAyLCBpICogMiArIDIpLCAxNik7XG4gICAgICB9XG4gICAgICBpZiAoaGV4QWxwaGEpIHtcbiAgICAgICAgIGEgPSBNYXRoLnJvdW5kKChwYXJzZUludChoZXhBbHBoYSwgMTYpIC8gMjU1KSAqIDEwMCkgLyAxMDA7XG4gICAgICB9XG4gICB9XG4gICBlbHNlIGlmIChtYXRjaCA9IHN0cmluZy5tYXRjaChyZ2JhKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZ2IubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgIHJnYltpXSA9IHBhcnNlSW50KG1hdGNoW2kgKyAxXSk7XG4gICAgICB9XG4gICAgICBhID0gcGFyc2VGbG9hdChtYXRjaFs0XSk7XG4gICB9XG4gICBlbHNlIGlmIChtYXRjaCA9IHN0cmluZy5tYXRjaChwZXIpKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJnYi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgcmdiW2ldID0gTWF0aC5yb3VuZChwYXJzZUZsb2F0KG1hdGNoW2kgKyAxXSkgKiAyLjU1KTtcbiAgICAgIH1cbiAgICAgIGEgPSBwYXJzZUZsb2F0KG1hdGNoWzRdKTtcbiAgIH1cbiAgIGVsc2UgaWYgKG1hdGNoID0gc3RyaW5nLm1hdGNoKGtleXdvcmQpKSB7XG4gICAgICBpZiAobWF0Y2hbMV0gPT0gXCJ0cmFuc3BhcmVudFwiKSB7XG4gICAgICAgICByZXR1cm4gWzAsIDAsIDAsIDBdO1xuICAgICAgfVxuICAgICAgcmdiID0gY29sb3JOYW1lW21hdGNoWzFdXTtcbiAgICAgIGlmICghcmdiKSB7XG4gICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICB9XG5cbiAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmdiLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZ2JbaV0gPSBzY2FsZShyZ2JbaV0sIDAsIDI1NSk7XG4gICB9XG4gICBpZiAoIWEgJiYgYSAhPSAwKSB7XG4gICAgICBhID0gMTtcbiAgIH1cbiAgIGVsc2Uge1xuICAgICAgYSA9IHNjYWxlKGEsIDAsIDEpO1xuICAgfVxuICAgcmdiWzNdID0gYTtcbiAgIHJldHVybiByZ2I7XG59XG5cbmZ1bmN0aW9uIGdldEhzbGEoc3RyaW5nKSB7XG4gICBpZiAoIXN0cmluZykge1xuICAgICAgcmV0dXJuO1xuICAgfVxuICAgdmFyIGhzbCA9IC9eaHNsYT9cXChcXHMqKFsrLV0/XFxkKykoPzpkZWcpP1xccyosXFxzKihbKy1dP1tcXGRcXC5dKyklXFxzKixcXHMqKFsrLV0/W1xcZFxcLl0rKSVcXHMqKD86LFxccyooWystXT9bXFxkXFwuXSspXFxzKik/XFwpLztcbiAgIHZhciBtYXRjaCA9IHN0cmluZy5tYXRjaChoc2wpO1xuICAgaWYgKG1hdGNoKSB7XG4gICAgICB2YXIgYWxwaGEgPSBwYXJzZUZsb2F0KG1hdGNoWzRdKTtcbiAgICAgIHZhciBoID0gc2NhbGUocGFyc2VJbnQobWF0Y2hbMV0pLCAwLCAzNjApLFxuICAgICAgICAgIHMgPSBzY2FsZShwYXJzZUZsb2F0KG1hdGNoWzJdKSwgMCwgMTAwKSxcbiAgICAgICAgICBsID0gc2NhbGUocGFyc2VGbG9hdChtYXRjaFszXSksIDAsIDEwMCksXG4gICAgICAgICAgYSA9IHNjYWxlKGlzTmFOKGFscGhhKSA/IDEgOiBhbHBoYSwgMCwgMSk7XG4gICAgICByZXR1cm4gW2gsIHMsIGwsIGFdO1xuICAgfVxufVxuXG5mdW5jdGlvbiBnZXRId2Ioc3RyaW5nKSB7XG4gICBpZiAoIXN0cmluZykge1xuICAgICAgcmV0dXJuO1xuICAgfVxuICAgdmFyIGh3YiA9IC9eaHdiXFwoXFxzKihbKy1dP1xcZCspKD86ZGVnKT9cXHMqLFxccyooWystXT9bXFxkXFwuXSspJVxccyosXFxzKihbKy1dP1tcXGRcXC5dKyklXFxzKig/OixcXHMqKFsrLV0/W1xcZFxcLl0rKVxccyopP1xcKS87XG4gICB2YXIgbWF0Y2ggPSBzdHJpbmcubWF0Y2goaHdiKTtcbiAgIGlmIChtYXRjaCkge1xuICAgIHZhciBhbHBoYSA9IHBhcnNlRmxvYXQobWF0Y2hbNF0pO1xuICAgICAgdmFyIGggPSBzY2FsZShwYXJzZUludChtYXRjaFsxXSksIDAsIDM2MCksXG4gICAgICAgICAgdyA9IHNjYWxlKHBhcnNlRmxvYXQobWF0Y2hbMl0pLCAwLCAxMDApLFxuICAgICAgICAgIGIgPSBzY2FsZShwYXJzZUZsb2F0KG1hdGNoWzNdKSwgMCwgMTAwKSxcbiAgICAgICAgICBhID0gc2NhbGUoaXNOYU4oYWxwaGEpID8gMSA6IGFscGhhLCAwLCAxKTtcbiAgICAgIHJldHVybiBbaCwgdywgYiwgYV07XG4gICB9XG59XG5cbmZ1bmN0aW9uIGdldFJnYihzdHJpbmcpIHtcbiAgIHZhciByZ2JhID0gZ2V0UmdiYShzdHJpbmcpO1xuICAgcmV0dXJuIHJnYmEgJiYgcmdiYS5zbGljZSgwLCAzKTtcbn1cblxuZnVuY3Rpb24gZ2V0SHNsKHN0cmluZykge1xuICB2YXIgaHNsYSA9IGdldEhzbGEoc3RyaW5nKTtcbiAgcmV0dXJuIGhzbGEgJiYgaHNsYS5zbGljZSgwLCAzKTtcbn1cblxuZnVuY3Rpb24gZ2V0QWxwaGEoc3RyaW5nKSB7XG4gICB2YXIgdmFscyA9IGdldFJnYmEoc3RyaW5nKTtcbiAgIGlmICh2YWxzKSB7XG4gICAgICByZXR1cm4gdmFsc1szXTtcbiAgIH1cbiAgIGVsc2UgaWYgKHZhbHMgPSBnZXRIc2xhKHN0cmluZykpIHtcbiAgICAgIHJldHVybiB2YWxzWzNdO1xuICAgfVxuICAgZWxzZSBpZiAodmFscyA9IGdldEh3YihzdHJpbmcpKSB7XG4gICAgICByZXR1cm4gdmFsc1szXTtcbiAgIH1cbn1cblxuLy8gZ2VuZXJhdG9yc1xuZnVuY3Rpb24gaGV4U3RyaW5nKHJnYmEsIGEpIHtcbiAgIHZhciBhID0gKGEgIT09IHVuZGVmaW5lZCAmJiByZ2JhLmxlbmd0aCA9PT0gMykgPyBhIDogcmdiYVszXTtcbiAgIHJldHVybiBcIiNcIiArIGhleERvdWJsZShyZ2JhWzBdKSBcbiAgICAgICAgICAgICAgKyBoZXhEb3VibGUocmdiYVsxXSlcbiAgICAgICAgICAgICAgKyBoZXhEb3VibGUocmdiYVsyXSlcbiAgICAgICAgICAgICAgKyAoXG4gICAgICAgICAgICAgICAgIChhID49IDAgJiYgYSA8IDEpXG4gICAgICAgICAgICAgICAgID8gaGV4RG91YmxlKE1hdGgucm91bmQoYSAqIDI1NSkpXG4gICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICApO1xufVxuXG5mdW5jdGlvbiByZ2JTdHJpbmcocmdiYSwgYWxwaGEpIHtcbiAgIGlmIChhbHBoYSA8IDEgfHwgKHJnYmFbM10gJiYgcmdiYVszXSA8IDEpKSB7XG4gICAgICByZXR1cm4gcmdiYVN0cmluZyhyZ2JhLCBhbHBoYSk7XG4gICB9XG4gICByZXR1cm4gXCJyZ2IoXCIgKyByZ2JhWzBdICsgXCIsIFwiICsgcmdiYVsxXSArIFwiLCBcIiArIHJnYmFbMl0gKyBcIilcIjtcbn1cblxuZnVuY3Rpb24gcmdiYVN0cmluZyhyZ2JhLCBhbHBoYSkge1xuICAgaWYgKGFscGhhID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGFscGhhID0gKHJnYmFbM10gIT09IHVuZGVmaW5lZCA/IHJnYmFbM10gOiAxKTtcbiAgIH1cbiAgIHJldHVybiBcInJnYmEoXCIgKyByZ2JhWzBdICsgXCIsIFwiICsgcmdiYVsxXSArIFwiLCBcIiArIHJnYmFbMl1cbiAgICAgICAgICAgKyBcIiwgXCIgKyBhbHBoYSArIFwiKVwiO1xufVxuXG5mdW5jdGlvbiBwZXJjZW50U3RyaW5nKHJnYmEsIGFscGhhKSB7XG4gICBpZiAoYWxwaGEgPCAxIHx8IChyZ2JhWzNdICYmIHJnYmFbM10gPCAxKSkge1xuICAgICAgcmV0dXJuIHBlcmNlbnRhU3RyaW5nKHJnYmEsIGFscGhhKTtcbiAgIH1cbiAgIHZhciByID0gTWF0aC5yb3VuZChyZ2JhWzBdLzI1NSAqIDEwMCksXG4gICAgICAgZyA9IE1hdGgucm91bmQocmdiYVsxXS8yNTUgKiAxMDApLFxuICAgICAgIGIgPSBNYXRoLnJvdW5kKHJnYmFbMl0vMjU1ICogMTAwKTtcblxuICAgcmV0dXJuIFwicmdiKFwiICsgciArIFwiJSwgXCIgKyBnICsgXCIlLCBcIiArIGIgKyBcIiUpXCI7XG59XG5cbmZ1bmN0aW9uIHBlcmNlbnRhU3RyaW5nKHJnYmEsIGFscGhhKSB7XG4gICB2YXIgciA9IE1hdGgucm91bmQocmdiYVswXS8yNTUgKiAxMDApLFxuICAgICAgIGcgPSBNYXRoLnJvdW5kKHJnYmFbMV0vMjU1ICogMTAwKSxcbiAgICAgICBiID0gTWF0aC5yb3VuZChyZ2JhWzJdLzI1NSAqIDEwMCk7XG4gICByZXR1cm4gXCJyZ2JhKFwiICsgciArIFwiJSwgXCIgKyBnICsgXCIlLCBcIiArIGIgKyBcIiUsIFwiICsgKGFscGhhIHx8IHJnYmFbM10gfHwgMSkgKyBcIilcIjtcbn1cblxuZnVuY3Rpb24gaHNsU3RyaW5nKGhzbGEsIGFscGhhKSB7XG4gICBpZiAoYWxwaGEgPCAxIHx8IChoc2xhWzNdICYmIGhzbGFbM10gPCAxKSkge1xuICAgICAgcmV0dXJuIGhzbGFTdHJpbmcoaHNsYSwgYWxwaGEpO1xuICAgfVxuICAgcmV0dXJuIFwiaHNsKFwiICsgaHNsYVswXSArIFwiLCBcIiArIGhzbGFbMV0gKyBcIiUsIFwiICsgaHNsYVsyXSArIFwiJSlcIjtcbn1cblxuZnVuY3Rpb24gaHNsYVN0cmluZyhoc2xhLCBhbHBoYSkge1xuICAgaWYgKGFscGhhID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGFscGhhID0gKGhzbGFbM10gIT09IHVuZGVmaW5lZCA/IGhzbGFbM10gOiAxKTtcbiAgIH1cbiAgIHJldHVybiBcImhzbGEoXCIgKyBoc2xhWzBdICsgXCIsIFwiICsgaHNsYVsxXSArIFwiJSwgXCIgKyBoc2xhWzJdICsgXCIlLCBcIlxuICAgICAgICAgICArIGFscGhhICsgXCIpXCI7XG59XG5cbi8vIGh3YiBpcyBhIGJpdCBkaWZmZXJlbnQgdGhhbiByZ2IoYSkgJiBoc2woYSkgc2luY2UgdGhlcmUgaXMgbm8gYWxwaGEgc3BlY2lmaWMgc3ludGF4XG4vLyAoaHdiIGhhdmUgYWxwaGEgb3B0aW9uYWwgJiAxIGlzIGRlZmF1bHQgdmFsdWUpXG5mdW5jdGlvbiBod2JTdHJpbmcoaHdiLCBhbHBoYSkge1xuICAgaWYgKGFscGhhID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGFscGhhID0gKGh3YlszXSAhPT0gdW5kZWZpbmVkID8gaHdiWzNdIDogMSk7XG4gICB9XG4gICByZXR1cm4gXCJod2IoXCIgKyBod2JbMF0gKyBcIiwgXCIgKyBod2JbMV0gKyBcIiUsIFwiICsgaHdiWzJdICsgXCIlXCJcbiAgICAgICAgICAgKyAoYWxwaGEgIT09IHVuZGVmaW5lZCAmJiBhbHBoYSAhPT0gMSA/IFwiLCBcIiArIGFscGhhIDogXCJcIikgKyBcIilcIjtcbn1cblxuZnVuY3Rpb24ga2V5d29yZChyZ2IpIHtcbiAgcmV0dXJuIHJldmVyc2VOYW1lc1tyZ2Iuc2xpY2UoMCwgMyldO1xufVxuXG4vLyBoZWxwZXJzXG5mdW5jdGlvbiBzY2FsZShudW0sIG1pbiwgbWF4KSB7XG4gICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgobWluLCBudW0pLCBtYXgpO1xufVxuXG5mdW5jdGlvbiBoZXhEb3VibGUobnVtKSB7XG4gIHZhciBzdHIgPSBudW0udG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG4gIHJldHVybiAoc3RyLmxlbmd0aCA8IDIpID8gXCIwXCIgKyBzdHIgOiBzdHI7XG59XG5cblxuLy9jcmVhdGUgYSBsaXN0IG9mIHJldmVyc2UgY29sb3IgbmFtZXNcbnZhciByZXZlcnNlTmFtZXMgPSB7fTtcbmZvciAodmFyIG5hbWUgaW4gY29sb3JOYW1lKSB7XG4gICByZXZlcnNlTmFtZXNbY29sb3JOYW1lW25hbWVdXSA9IG5hbWU7XG59XG5cbi8qIE1JVCBsaWNlbnNlICovXG5cblxuXG52YXIgQ29sb3IgPSBmdW5jdGlvbiAob2JqKSB7XG5cdGlmIChvYmogaW5zdGFuY2VvZiBDb2xvcikge1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblx0aWYgKCEodGhpcyBpbnN0YW5jZW9mIENvbG9yKSkge1xuXHRcdHJldHVybiBuZXcgQ29sb3Iob2JqKTtcblx0fVxuXG5cdHRoaXMudmFsaWQgPSBmYWxzZTtcblx0dGhpcy52YWx1ZXMgPSB7XG5cdFx0cmdiOiBbMCwgMCwgMF0sXG5cdFx0aHNsOiBbMCwgMCwgMF0sXG5cdFx0aHN2OiBbMCwgMCwgMF0sXG5cdFx0aHdiOiBbMCwgMCwgMF0sXG5cdFx0Y215azogWzAsIDAsIDAsIDBdLFxuXHRcdGFscGhhOiAxXG5cdH07XG5cblx0Ly8gcGFyc2UgQ29sb3IoKSBhcmd1bWVudFxuXHR2YXIgdmFscztcblx0aWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG5cdFx0dmFscyA9IGNvbG9yU3RyaW5nLmdldFJnYmEob2JqKTtcblx0XHRpZiAodmFscykge1xuXHRcdFx0dGhpcy5zZXRWYWx1ZXMoJ3JnYicsIHZhbHMpO1xuXHRcdH0gZWxzZSBpZiAodmFscyA9IGNvbG9yU3RyaW5nLmdldEhzbGEob2JqKSkge1xuXHRcdFx0dGhpcy5zZXRWYWx1ZXMoJ2hzbCcsIHZhbHMpO1xuXHRcdH0gZWxzZSBpZiAodmFscyA9IGNvbG9yU3RyaW5nLmdldEh3YihvYmopKSB7XG5cdFx0XHR0aGlzLnNldFZhbHVlcygnaHdiJywgdmFscyk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG5cdFx0dmFscyA9IG9iajtcblx0XHRpZiAodmFscy5yICE9PSB1bmRlZmluZWQgfHwgdmFscy5yZWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5zZXRWYWx1ZXMoJ3JnYicsIHZhbHMpO1xuXHRcdH0gZWxzZSBpZiAodmFscy5sICE9PSB1bmRlZmluZWQgfHwgdmFscy5saWdodG5lc3MgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5zZXRWYWx1ZXMoJ2hzbCcsIHZhbHMpO1xuXHRcdH0gZWxzZSBpZiAodmFscy52ICE9PSB1bmRlZmluZWQgfHwgdmFscy52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLnNldFZhbHVlcygnaHN2JywgdmFscyk7XG5cdFx0fSBlbHNlIGlmICh2YWxzLncgIT09IHVuZGVmaW5lZCB8fCB2YWxzLndoaXRlbmVzcyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLnNldFZhbHVlcygnaHdiJywgdmFscyk7XG5cdFx0fSBlbHNlIGlmICh2YWxzLmMgIT09IHVuZGVmaW5lZCB8fCB2YWxzLmN5YW4gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5zZXRWYWx1ZXMoJ2NteWsnLCB2YWxzKTtcblx0XHR9XG5cdH1cbn07XG5cbkNvbG9yLnByb3RvdHlwZSA9IHtcblx0aXNWYWxpZDogZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiB0aGlzLnZhbGlkO1xuXHR9LFxuXHRyZ2I6IGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gdGhpcy5zZXRTcGFjZSgncmdiJywgYXJndW1lbnRzKTtcblx0fSxcblx0aHNsOiBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIHRoaXMuc2V0U3BhY2UoJ2hzbCcsIGFyZ3VtZW50cyk7XG5cdH0sXG5cdGhzdjogZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiB0aGlzLnNldFNwYWNlKCdoc3YnLCBhcmd1bWVudHMpO1xuXHR9LFxuXHRod2I6IGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gdGhpcy5zZXRTcGFjZSgnaHdiJywgYXJndW1lbnRzKTtcblx0fSxcblx0Y215azogZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiB0aGlzLnNldFNwYWNlKCdjbXlrJywgYXJndW1lbnRzKTtcblx0fSxcblxuXHRyZ2JBcnJheTogZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiB0aGlzLnZhbHVlcy5yZ2I7XG5cdH0sXG5cdGhzbEFycmF5OiBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIHRoaXMudmFsdWVzLmhzbDtcblx0fSxcblx0aHN2QXJyYXk6IGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gdGhpcy52YWx1ZXMuaHN2O1xuXHR9LFxuXHRod2JBcnJheTogZnVuY3Rpb24gKCkge1xuXHRcdHZhciB2YWx1ZXMgPSB0aGlzLnZhbHVlcztcblx0XHRpZiAodmFsdWVzLmFscGhhICE9PSAxKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWVzLmh3Yi5jb25jYXQoW3ZhbHVlcy5hbHBoYV0pO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWVzLmh3Yjtcblx0fSxcblx0Y215a0FycmF5OiBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIHRoaXMudmFsdWVzLmNteWs7XG5cdH0sXG5cdHJnYmFBcnJheTogZnVuY3Rpb24gKCkge1xuXHRcdHZhciB2YWx1ZXMgPSB0aGlzLnZhbHVlcztcblx0XHRyZXR1cm4gdmFsdWVzLnJnYi5jb25jYXQoW3ZhbHVlcy5hbHBoYV0pO1xuXHR9LFxuXHRoc2xhQXJyYXk6IGZ1bmN0aW9uICgpIHtcblx0XHR2YXIgdmFsdWVzID0gdGhpcy52YWx1ZXM7XG5cdFx0cmV0dXJuIHZhbHVlcy5oc2wuY29uY2F0KFt2YWx1ZXMuYWxwaGFdKTtcblx0fSxcblx0YWxwaGE6IGZ1bmN0aW9uICh2YWwpIHtcblx0XHRpZiAodmFsID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiB0aGlzLnZhbHVlcy5hbHBoYTtcblx0XHR9XG5cdFx0dGhpcy5zZXRWYWx1ZXMoJ2FscGhhJywgdmFsKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZWQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0XHRyZXR1cm4gdGhpcy5zZXRDaGFubmVsKCdyZ2InLCAwLCB2YWwpO1xuXHR9LFxuXHRncmVlbjogZnVuY3Rpb24gKHZhbCkge1xuXHRcdHJldHVybiB0aGlzLnNldENoYW5uZWwoJ3JnYicsIDEsIHZhbCk7XG5cdH0sXG5cdGJsdWU6IGZ1bmN0aW9uICh2YWwpIHtcblx0XHRyZXR1cm4gdGhpcy5zZXRDaGFubmVsKCdyZ2InLCAyLCB2YWwpO1xuXHR9LFxuXHRodWU6IGZ1bmN0aW9uICh2YWwpIHtcblx0XHRpZiAodmFsKSB7XG5cdFx0XHR2YWwgJT0gMzYwO1xuXHRcdFx0dmFsID0gdmFsIDwgMCA/IDM2MCArIHZhbCA6IHZhbDtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuc2V0Q2hhbm5lbCgnaHNsJywgMCwgdmFsKTtcblx0fSxcblx0c2F0dXJhdGlvbjogZnVuY3Rpb24gKHZhbCkge1xuXHRcdHJldHVybiB0aGlzLnNldENoYW5uZWwoJ2hzbCcsIDEsIHZhbCk7XG5cdH0sXG5cdGxpZ2h0bmVzczogZnVuY3Rpb24gKHZhbCkge1xuXHRcdHJldHVybiB0aGlzLnNldENoYW5uZWwoJ2hzbCcsIDIsIHZhbCk7XG5cdH0sXG5cdHNhdHVyYXRpb252OiBmdW5jdGlvbiAodmFsKSB7XG5cdFx0cmV0dXJuIHRoaXMuc2V0Q2hhbm5lbCgnaHN2JywgMSwgdmFsKTtcblx0fSxcblx0d2hpdGVuZXNzOiBmdW5jdGlvbiAodmFsKSB7XG5cdFx0cmV0dXJuIHRoaXMuc2V0Q2hhbm5lbCgnaHdiJywgMSwgdmFsKTtcblx0fSxcblx0YmxhY2tuZXNzOiBmdW5jdGlvbiAodmFsKSB7XG5cdFx0cmV0dXJuIHRoaXMuc2V0Q2hhbm5lbCgnaHdiJywgMiwgdmFsKTtcblx0fSxcblx0dmFsdWU6IGZ1bmN0aW9uICh2YWwpIHtcblx0XHRyZXR1cm4gdGhpcy5zZXRDaGFubmVsKCdoc3YnLCAyLCB2YWwpO1xuXHR9LFxuXHRjeWFuOiBmdW5jdGlvbiAodmFsKSB7XG5cdFx0cmV0dXJuIHRoaXMuc2V0Q2hhbm5lbCgnY215aycsIDAsIHZhbCk7XG5cdH0sXG5cdG1hZ2VudGE6IGZ1bmN0aW9uICh2YWwpIHtcblx0XHRyZXR1cm4gdGhpcy5zZXRDaGFubmVsKCdjbXlrJywgMSwgdmFsKTtcblx0fSxcblx0eWVsbG93OiBmdW5jdGlvbiAodmFsKSB7XG5cdFx0cmV0dXJuIHRoaXMuc2V0Q2hhbm5lbCgnY215aycsIDIsIHZhbCk7XG5cdH0sXG5cdGJsYWNrOiBmdW5jdGlvbiAodmFsKSB7XG5cdFx0cmV0dXJuIHRoaXMuc2V0Q2hhbm5lbCgnY215aycsIDMsIHZhbCk7XG5cdH0sXG5cblx0aGV4U3RyaW5nOiBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIGNvbG9yU3RyaW5nLmhleFN0cmluZyh0aGlzLnZhbHVlcy5yZ2IpO1xuXHR9LFxuXHRyZ2JTdHJpbmc6IGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gY29sb3JTdHJpbmcucmdiU3RyaW5nKHRoaXMudmFsdWVzLnJnYiwgdGhpcy52YWx1ZXMuYWxwaGEpO1xuXHR9LFxuXHRyZ2JhU3RyaW5nOiBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIGNvbG9yU3RyaW5nLnJnYmFTdHJpbmcodGhpcy52YWx1ZXMucmdiLCB0aGlzLnZhbHVlcy5hbHBoYSk7XG5cdH0sXG5cdHBlcmNlbnRTdHJpbmc6IGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gY29sb3JTdHJpbmcucGVyY2VudFN0cmluZyh0aGlzLnZhbHVlcy5yZ2IsIHRoaXMudmFsdWVzLmFscGhhKTtcblx0fSxcblx0aHNsU3RyaW5nOiBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIGNvbG9yU3RyaW5nLmhzbFN0cmluZyh0aGlzLnZhbHVlcy5oc2wsIHRoaXMudmFsdWVzLmFscGhhKTtcblx0fSxcblx0aHNsYVN0cmluZzogZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBjb2xvclN0cmluZy5oc2xhU3RyaW5nKHRoaXMudmFsdWVzLmhzbCwgdGhpcy52YWx1ZXMuYWxwaGEpO1xuXHR9LFxuXHRod2JTdHJpbmc6IGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gY29sb3JTdHJpbmcuaHdiU3RyaW5nKHRoaXMudmFsdWVzLmh3YiwgdGhpcy52YWx1ZXMuYWxwaGEpO1xuXHR9LFxuXHRrZXl3b3JkOiBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIGNvbG9yU3RyaW5nLmtleXdvcmQodGhpcy52YWx1ZXMucmdiLCB0aGlzLnZhbHVlcy5hbHBoYSk7XG5cdH0sXG5cblx0cmdiTnVtYmVyOiBmdW5jdGlvbiAoKSB7XG5cdFx0dmFyIHJnYiA9IHRoaXMudmFsdWVzLnJnYjtcblx0XHRyZXR1cm4gKHJnYlswXSA8PCAxNikgfCAocmdiWzFdIDw8IDgpIHwgcmdiWzJdO1xuXHR9LFxuXG5cdGx1bWlub3NpdHk6IGZ1bmN0aW9uICgpIHtcblx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAvI3JlbGF0aXZlbHVtaW5hbmNlZGVmXG5cdFx0dmFyIHJnYiA9IHRoaXMudmFsdWVzLnJnYjtcblx0XHR2YXIgbHVtID0gW107XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCByZ2IubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBjaGFuID0gcmdiW2ldIC8gMjU1O1xuXHRcdFx0bHVtW2ldID0gKGNoYW4gPD0gMC4wMzkyOCkgPyBjaGFuIC8gMTIuOTIgOiBNYXRoLnBvdygoKGNoYW4gKyAwLjA1NSkgLyAxLjA1NSksIDIuNCk7XG5cdFx0fVxuXHRcdHJldHVybiAwLjIxMjYgKiBsdW1bMF0gKyAwLjcxNTIgKiBsdW1bMV0gKyAwLjA3MjIgKiBsdW1bMl07XG5cdH0sXG5cblx0Y29udHJhc3Q6IGZ1bmN0aW9uIChjb2xvcjIpIHtcblx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAvI2NvbnRyYXN0LXJhdGlvZGVmXG5cdFx0dmFyIGx1bTEgPSB0aGlzLmx1bWlub3NpdHkoKTtcblx0XHR2YXIgbHVtMiA9IGNvbG9yMi5sdW1pbm9zaXR5KCk7XG5cdFx0aWYgKGx1bTEgPiBsdW0yKSB7XG5cdFx0XHRyZXR1cm4gKGx1bTEgKyAwLjA1KSAvIChsdW0yICsgMC4wNSk7XG5cdFx0fVxuXHRcdHJldHVybiAobHVtMiArIDAuMDUpIC8gKGx1bTEgKyAwLjA1KTtcblx0fSxcblxuXHRsZXZlbDogZnVuY3Rpb24gKGNvbG9yMikge1xuXHRcdHZhciBjb250cmFzdFJhdGlvID0gdGhpcy5jb250cmFzdChjb2xvcjIpO1xuXHRcdGlmIChjb250cmFzdFJhdGlvID49IDcuMSkge1xuXHRcdFx0cmV0dXJuICdBQUEnO1xuXHRcdH1cblxuXHRcdHJldHVybiAoY29udHJhc3RSYXRpbyA+PSA0LjUpID8gJ0FBJyA6ICcnO1xuXHR9LFxuXG5cdGRhcms6IGZ1bmN0aW9uICgpIHtcblx0XHQvLyBZSVEgZXF1YXRpb24gZnJvbSBodHRwOi8vMjR3YXlzLm9yZy8yMDEwL2NhbGN1bGF0aW5nLWNvbG9yLWNvbnRyYXN0XG5cdFx0dmFyIHJnYiA9IHRoaXMudmFsdWVzLnJnYjtcblx0XHR2YXIgeWlxID0gKHJnYlswXSAqIDI5OSArIHJnYlsxXSAqIDU4NyArIHJnYlsyXSAqIDExNCkgLyAxMDAwO1xuXHRcdHJldHVybiB5aXEgPCAxMjg7XG5cdH0sXG5cblx0bGlnaHQ6IGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gIXRoaXMuZGFyaygpO1xuXHR9LFxuXG5cdG5lZ2F0ZTogZnVuY3Rpb24gKCkge1xuXHRcdHZhciByZ2IgPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xuXHRcdFx0cmdiW2ldID0gMjU1IC0gdGhpcy52YWx1ZXMucmdiW2ldO1xuXHRcdH1cblx0XHR0aGlzLnNldFZhbHVlcygncmdiJywgcmdiKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRsaWdodGVuOiBmdW5jdGlvbiAocmF0aW8pIHtcblx0XHR2YXIgaHNsID0gdGhpcy52YWx1ZXMuaHNsO1xuXHRcdGhzbFsyXSArPSBoc2xbMl0gKiByYXRpbztcblx0XHR0aGlzLnNldFZhbHVlcygnaHNsJywgaHNsKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRkYXJrZW46IGZ1bmN0aW9uIChyYXRpbykge1xuXHRcdHZhciBoc2wgPSB0aGlzLnZhbHVlcy5oc2w7XG5cdFx0aHNsWzJdIC09IGhzbFsyXSAqIHJhdGlvO1xuXHRcdHRoaXMuc2V0VmFsdWVzKCdoc2wnLCBoc2wpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHNhdHVyYXRlOiBmdW5jdGlvbiAocmF0aW8pIHtcblx0XHR2YXIgaHNsID0gdGhpcy52YWx1ZXMuaHNsO1xuXHRcdGhzbFsxXSArPSBoc2xbMV0gKiByYXRpbztcblx0XHR0aGlzLnNldFZhbHVlcygnaHNsJywgaHNsKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRkZXNhdHVyYXRlOiBmdW5jdGlvbiAocmF0aW8pIHtcblx0XHR2YXIgaHNsID0gdGhpcy52YWx1ZXMuaHNsO1xuXHRcdGhzbFsxXSAtPSBoc2xbMV0gKiByYXRpbztcblx0XHR0aGlzLnNldFZhbHVlcygnaHNsJywgaHNsKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR3aGl0ZW46IGZ1bmN0aW9uIChyYXRpbykge1xuXHRcdHZhciBod2IgPSB0aGlzLnZhbHVlcy5od2I7XG5cdFx0aHdiWzFdICs9IGh3YlsxXSAqIHJhdGlvO1xuXHRcdHRoaXMuc2V0VmFsdWVzKCdod2InLCBod2IpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGJsYWNrZW46IGZ1bmN0aW9uIChyYXRpbykge1xuXHRcdHZhciBod2IgPSB0aGlzLnZhbHVlcy5od2I7XG5cdFx0aHdiWzJdICs9IGh3YlsyXSAqIHJhdGlvO1xuXHRcdHRoaXMuc2V0VmFsdWVzKCdod2InLCBod2IpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGdyZXlzY2FsZTogZnVuY3Rpb24gKCkge1xuXHRcdHZhciByZ2IgPSB0aGlzLnZhbHVlcy5yZ2I7XG5cdFx0Ly8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HcmF5c2NhbGUjQ29udmVydGluZ19jb2xvcl90b19ncmF5c2NhbGVcblx0XHR2YXIgdmFsID0gcmdiWzBdICogMC4zICsgcmdiWzFdICogMC41OSArIHJnYlsyXSAqIDAuMTE7XG5cdFx0dGhpcy5zZXRWYWx1ZXMoJ3JnYicsIFt2YWwsIHZhbCwgdmFsXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2xlYXJlcjogZnVuY3Rpb24gKHJhdGlvKSB7XG5cdFx0dmFyIGFscGhhID0gdGhpcy52YWx1ZXMuYWxwaGE7XG5cdFx0dGhpcy5zZXRWYWx1ZXMoJ2FscGhhJywgYWxwaGEgLSAoYWxwaGEgKiByYXRpbykpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdG9wYXF1ZXI6IGZ1bmN0aW9uIChyYXRpbykge1xuXHRcdHZhciBhbHBoYSA9IHRoaXMudmFsdWVzLmFscGhhO1xuXHRcdHRoaXMuc2V0VmFsdWVzKCdhbHBoYScsIGFscGhhICsgKGFscGhhICogcmF0aW8pKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyb3RhdGU6IGZ1bmN0aW9uIChkZWdyZWVzKSB7XG5cdFx0dmFyIGhzbCA9IHRoaXMudmFsdWVzLmhzbDtcblx0XHR2YXIgaHVlID0gKGhzbFswXSArIGRlZ3JlZXMpICUgMzYwO1xuXHRcdGhzbFswXSA9IGh1ZSA8IDAgPyAzNjAgKyBodWUgOiBodWU7XG5cdFx0dGhpcy5zZXRWYWx1ZXMoJ2hzbCcsIGhzbCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFBvcnRlZCBmcm9tIHNhc3MgaW1wbGVtZW50YXRpb24gaW4gQ1xuXHQgKiBodHRwczovL2dpdGh1Yi5jb20vc2Fzcy9saWJzYXNzL2Jsb2IvMGU2YjRhMjg1MDA5MjM1NmFhM2VjZTA3YzZiMjQ5ZjAyMjFjYWNlZC9mdW5jdGlvbnMuY3BwI0wyMDlcblx0ICovXG5cdG1peDogZnVuY3Rpb24gKG1peGluQ29sb3IsIHdlaWdodCkge1xuXHRcdHZhciBjb2xvcjEgPSB0aGlzO1xuXHRcdHZhciBjb2xvcjIgPSBtaXhpbkNvbG9yO1xuXHRcdHZhciBwID0gd2VpZ2h0ID09PSB1bmRlZmluZWQgPyAwLjUgOiB3ZWlnaHQ7XG5cblx0XHR2YXIgdyA9IDIgKiBwIC0gMTtcblx0XHR2YXIgYSA9IGNvbG9yMS5hbHBoYSgpIC0gY29sb3IyLmFscGhhKCk7XG5cblx0XHR2YXIgdzEgPSAoKCh3ICogYSA9PT0gLTEpID8gdyA6ICh3ICsgYSkgLyAoMSArIHcgKiBhKSkgKyAxKSAvIDIuMDtcblx0XHR2YXIgdzIgPSAxIC0gdzE7XG5cblx0XHRyZXR1cm4gdGhpc1xuXHRcdFx0LnJnYihcblx0XHRcdFx0dzEgKiBjb2xvcjEucmVkKCkgKyB3MiAqIGNvbG9yMi5yZWQoKSxcblx0XHRcdFx0dzEgKiBjb2xvcjEuZ3JlZW4oKSArIHcyICogY29sb3IyLmdyZWVuKCksXG5cdFx0XHRcdHcxICogY29sb3IxLmJsdWUoKSArIHcyICogY29sb3IyLmJsdWUoKVxuXHRcdFx0KVxuXHRcdFx0LmFscGhhKGNvbG9yMS5hbHBoYSgpICogcCArIGNvbG9yMi5hbHBoYSgpICogKDEgLSBwKSk7XG5cdH0sXG5cblx0dG9KU09OOiBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIHRoaXMucmdiKCk7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0XHQvLyBOT1RFKFNCKTogdXNpbmcgbm9kZS1jbG9uZSBjcmVhdGVzIGEgZGVwZW5kZW5jeSB0byBCdWZmZXIgd2hlbiB1c2luZyBicm93c2VyaWZ5LFxuXHRcdC8vIG1ha2luZyB0aGUgZmluYWwgYnVpbGQgd2F5IHRvIGJpZyB0byBlbWJlZCBpbiBDaGFydC5qcy4gU28gbGV0J3MgZG8gaXQgbWFudWFsbHksXG5cdFx0Ly8gYXNzdW1pbmcgdGhhdCB2YWx1ZXMgdG8gY2xvbmUgYXJlIDEgZGltZW5zaW9uIGFycmF5cyBjb250YWluaW5nIG9ubHkgbnVtYmVycyxcblx0XHQvLyBleGNlcHQgJ2FscGhhJyB3aGljaCBpcyBhIG51bWJlci5cblx0XHR2YXIgcmVzdWx0ID0gbmV3IENvbG9yKCk7XG5cdFx0dmFyIHNvdXJjZSA9IHRoaXMudmFsdWVzO1xuXHRcdHZhciB0YXJnZXQgPSByZXN1bHQudmFsdWVzO1xuXHRcdHZhciB2YWx1ZSwgdHlwZTtcblxuXHRcdGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7XG5cdFx0XHRpZiAoc291cmNlLmhhc093blByb3BlcnR5KHByb3ApKSB7XG5cdFx0XHRcdHZhbHVlID0gc291cmNlW3Byb3BdO1xuXHRcdFx0XHR0eXBlID0gKHt9KS50b1N0cmluZy5jYWxsKHZhbHVlKTtcblx0XHRcdFx0aWYgKHR5cGUgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcblx0XHRcdFx0XHR0YXJnZXRbcHJvcF0gPSB2YWx1ZS5zbGljZSgwKTtcblx0XHRcdFx0fSBlbHNlIGlmICh0eXBlID09PSAnW29iamVjdCBOdW1iZXJdJykge1xuXHRcdFx0XHRcdHRhcmdldFtwcm9wXSA9IHZhbHVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgY29sb3IgdmFsdWU6JywgdmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufTtcblxuQ29sb3IucHJvdG90eXBlLnNwYWNlcyA9IHtcblx0cmdiOiBbJ3JlZCcsICdncmVlbicsICdibHVlJ10sXG5cdGhzbDogWydodWUnLCAnc2F0dXJhdGlvbicsICdsaWdodG5lc3MnXSxcblx0aHN2OiBbJ2h1ZScsICdzYXR1cmF0aW9uJywgJ3ZhbHVlJ10sXG5cdGh3YjogWydodWUnLCAnd2hpdGVuZXNzJywgJ2JsYWNrbmVzcyddLFxuXHRjbXlrOiBbJ2N5YW4nLCAnbWFnZW50YScsICd5ZWxsb3cnLCAnYmxhY2snXVxufTtcblxuQ29sb3IucHJvdG90eXBlLm1heGVzID0ge1xuXHRyZ2I6IFsyNTUsIDI1NSwgMjU1XSxcblx0aHNsOiBbMzYwLCAxMDAsIDEwMF0sXG5cdGhzdjogWzM2MCwgMTAwLCAxMDBdLFxuXHRod2I6IFszNjAsIDEwMCwgMTAwXSxcblx0Y215azogWzEwMCwgMTAwLCAxMDAsIDEwMF1cbn07XG5cbkNvbG9yLnByb3RvdHlwZS5nZXRWYWx1ZXMgPSBmdW5jdGlvbiAoc3BhY2UpIHtcblx0dmFyIHZhbHVlcyA9IHRoaXMudmFsdWVzO1xuXHR2YXIgdmFscyA9IHt9O1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgc3BhY2UubGVuZ3RoOyBpKyspIHtcblx0XHR2YWxzW3NwYWNlLmNoYXJBdChpKV0gPSB2YWx1ZXNbc3BhY2VdW2ldO1xuXHR9XG5cblx0aWYgKHZhbHVlcy5hbHBoYSAhPT0gMSkge1xuXHRcdHZhbHMuYSA9IHZhbHVlcy5hbHBoYTtcblx0fVxuXG5cdC8vIHtyOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhOiAwLjR9XG5cdHJldHVybiB2YWxzO1xufTtcblxuQ29sb3IucHJvdG90eXBlLnNldFZhbHVlcyA9IGZ1bmN0aW9uIChzcGFjZSwgdmFscykge1xuXHR2YXIgdmFsdWVzID0gdGhpcy52YWx1ZXM7XG5cdHZhciBzcGFjZXMgPSB0aGlzLnNwYWNlcztcblx0dmFyIG1heGVzID0gdGhpcy5tYXhlcztcblx0dmFyIGFscGhhID0gMTtcblx0dmFyIGk7XG5cblx0dGhpcy52YWxpZCA9IHRydWU7XG5cblx0aWYgKHNwYWNlID09PSAnYWxwaGEnKSB7XG5cdFx0YWxwaGEgPSB2YWxzO1xuXHR9IGVsc2UgaWYgKHZhbHMubGVuZ3RoKSB7XG5cdFx0Ly8gWzEwLCAxMCwgMTBdXG5cdFx0dmFsdWVzW3NwYWNlXSA9IHZhbHMuc2xpY2UoMCwgc3BhY2UubGVuZ3RoKTtcblx0XHRhbHBoYSA9IHZhbHNbc3BhY2UubGVuZ3RoXTtcblx0fSBlbHNlIGlmICh2YWxzW3NwYWNlLmNoYXJBdCgwKV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdC8vIHtyOiAxMCwgZzogMTAsIGI6IDEwfVxuXHRcdGZvciAoaSA9IDA7IGkgPCBzcGFjZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFsdWVzW3NwYWNlXVtpXSA9IHZhbHNbc3BhY2UuY2hhckF0KGkpXTtcblx0XHR9XG5cblx0XHRhbHBoYSA9IHZhbHMuYTtcblx0fSBlbHNlIGlmICh2YWxzW3NwYWNlc1tzcGFjZV1bMF1dICE9PSB1bmRlZmluZWQpIHtcblx0XHQvLyB7cmVkOiAxMCwgZ3JlZW46IDEwLCBibHVlOiAxMH1cblx0XHR2YXIgY2hhbnMgPSBzcGFjZXNbc3BhY2VdO1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IHNwYWNlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YWx1ZXNbc3BhY2VdW2ldID0gdmFsc1tjaGFuc1tpXV07XG5cdFx0fVxuXG5cdFx0YWxwaGEgPSB2YWxzLmFscGhhO1xuXHR9XG5cblx0dmFsdWVzLmFscGhhID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgKGFscGhhID09PSB1bmRlZmluZWQgPyB2YWx1ZXMuYWxwaGEgOiBhbHBoYSkpKTtcblxuXHRpZiAoc3BhY2UgPT09ICdhbHBoYScpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHR2YXIgY2FwcGVkO1xuXG5cdC8vIGNhcCB2YWx1ZXMgb2YgdGhlIHNwYWNlIHByaW9yIGNvbnZlcnRpbmcgYWxsIHZhbHVlc1xuXHRmb3IgKGkgPSAwOyBpIDwgc3BhY2UubGVuZ3RoOyBpKyspIHtcblx0XHRjYXBwZWQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihtYXhlc1tzcGFjZV1baV0sIHZhbHVlc1tzcGFjZV1baV0pKTtcblx0XHR2YWx1ZXNbc3BhY2VdW2ldID0gTWF0aC5yb3VuZChjYXBwZWQpO1xuXHR9XG5cblx0Ly8gY29udmVydCB0byBhbGwgdGhlIG90aGVyIGNvbG9yIHNwYWNlc1xuXHRmb3IgKHZhciBzbmFtZSBpbiBzcGFjZXMpIHtcblx0XHRpZiAoc25hbWUgIT09IHNwYWNlKSB7XG5cdFx0XHR2YWx1ZXNbc25hbWVdID0gY29sb3JDb252ZXJ0W3NwYWNlXVtzbmFtZV0odmFsdWVzW3NwYWNlXSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRydWU7XG59O1xuXG5Db2xvci5wcm90b3R5cGUuc2V0U3BhY2UgPSBmdW5jdGlvbiAoc3BhY2UsIGFyZ3MpIHtcblx0dmFyIHZhbHMgPSBhcmdzWzBdO1xuXG5cdGlmICh2YWxzID09PSB1bmRlZmluZWQpIHtcblx0XHQvLyBjb2xvci5yZ2IoKVxuXHRcdHJldHVybiB0aGlzLmdldFZhbHVlcyhzcGFjZSk7XG5cdH1cblxuXHQvLyBjb2xvci5yZ2IoMTAsIDEwLCAxMClcblx0aWYgKHR5cGVvZiB2YWxzID09PSAnbnVtYmVyJykge1xuXHRcdHZhbHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKTtcblx0fVxuXG5cdHRoaXMuc2V0VmFsdWVzKHNwYWNlLCB2YWxzKTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5Db2xvci5wcm90b3R5cGUuc2V0Q2hhbm5lbCA9IGZ1bmN0aW9uIChzcGFjZSwgaW5kZXgsIHZhbCkge1xuXHR2YXIgc3ZhbHVlcyA9IHRoaXMudmFsdWVzW3NwYWNlXTtcblx0aWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gY29sb3IucmVkKClcblx0XHRyZXR1cm4gc3ZhbHVlc1tpbmRleF07XG5cdH0gZWxzZSBpZiAodmFsID09PSBzdmFsdWVzW2luZGV4XSkge1xuXHRcdC8vIGNvbG9yLnJlZChjb2xvci5yZWQoKSlcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8vIGNvbG9yLnJlZCgxMDApXG5cdHN2YWx1ZXNbaW5kZXhdID0gdmFsO1xuXHR0aGlzLnNldFZhbHVlcyhzcGFjZSwgc3ZhbHVlcyk7XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0d2luZG93LkNvbG9yID0gQ29sb3I7XG59XG5cbnZhciBjaGFydGpzQ29sb3IgPSBDb2xvcjtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIENoYXJ0LmhlbHBlcnNcbiAqL1xudmFyIGhlbHBlcnMgPSB7XG5cdC8qKlxuXHQgKiBBbiBlbXB0eSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkLCBmb3IgZXhhbXBsZSwgZm9yIG9wdGlvbmFsIGNhbGxiYWNrLlxuXHQgKi9cblx0bm9vcDogZnVuY3Rpb24oKSB7fSxcblxuXHQvKipcblx0ICogUmV0dXJucyBhIHVuaXF1ZSBpZCwgc2VxdWVudGlhbGx5IGdlbmVyYXRlZCBmcm9tIGEgZ2xvYmFsIHZhcmlhYmxlLlxuXHQgKiBAcmV0dXJucyB7bnVtYmVyfVxuXHQgKiBAZnVuY3Rpb25cblx0ICovXG5cdHVpZDogKGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpZCA9IDA7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGlkKys7XG5cdFx0fTtcblx0fSgpKSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIGB2YWx1ZWAgaXMgbmVpdGhlciBudWxsIG5vciB1bmRlZmluZWQsIGVsc2UgcmV0dXJucyBmYWxzZS5cblx0ICogQHBhcmFtIHsqfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB0ZXN0LlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICogQHNpbmNlIDIuNy4wXG5cdCAqL1xuXHRpc051bGxPclVuZGVmOiBmdW5jdGlvbih2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRydWUgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSAoaW5jbHVkaW5nIHR5cGVkIGFycmF5cyksIGVsc2UgcmV0dXJucyBmYWxzZS5cblx0ICogQHBhcmFtIHsqfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB0ZXN0LlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICogQGZ1bmN0aW9uXG5cdCAqL1xuXHRpc0FycmF5OiBmdW5jdGlvbih2YWx1ZSkge1xuXHRcdGlmIChBcnJheS5pc0FycmF5ICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0dmFyIHR5cGUgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpO1xuXHRcdGlmICh0eXBlLnN1YnN0cigwLCA3KSA9PT0gJ1tvYmplY3QnICYmIHR5cGUuc3Vic3RyKC02KSA9PT0gJ0FycmF5XScpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdHJ1ZSBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCAoZXhjbHVkaW5nIG51bGwpLCBlbHNlIHJldHVybnMgZmFsc2UuXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gdGVzdC5cblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqIEBzaW5jZSAyLjcuMFxuXHQgKi9cblx0aXNPYmplY3Q6IGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlICE9PSBudWxsICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IE9iamVjdF0nO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRydWUgaWYgYHZhbHVlYCBpcyBhIGZpbml0ZSBudW1iZXIsIGVsc2UgcmV0dXJucyBmYWxzZVxuXHQgKiBAcGFyYW0geyp9IHZhbHVlICAtIFRoZSB2YWx1ZSB0byB0ZXN0LlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGlzRmluaXRlOiBmdW5jdGlvbih2YWx1ZSkge1xuXHRcdHJldHVybiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIE51bWJlcikgJiYgaXNGaW5pdGUodmFsdWUpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGB2YWx1ZWAgaWYgZGVmaW5lZCwgZWxzZSByZXR1cm5zIGBkZWZhdWx0VmFsdWVgLlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIHJldHVybiBpZiBkZWZpbmVkLlxuXHQgKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1ZSAtIFRoZSB2YWx1ZSB0byByZXR1cm4gaWYgYHZhbHVlYCBpcyB1bmRlZmluZWQuXG5cdCAqIEByZXR1cm5zIHsqfVxuXHQgKi9cblx0dmFsdWVPckRlZmF1bHQ6IGZ1bmN0aW9uKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcblx0XHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyA/IGRlZmF1bHRWYWx1ZSA6IHZhbHVlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHZhbHVlIGF0IHRoZSBnaXZlbiBgaW5kZXhgIGluIGFycmF5IGlmIGRlZmluZWQsIGVsc2UgcmV0dXJucyBgZGVmYXVsdFZhbHVlYC5cblx0ICogQHBhcmFtIHtBcnJheX0gdmFsdWUgLSBUaGUgYXJyYXkgdG8gbG9va3VwIGZvciB2YWx1ZSBhdCBgaW5kZXhgLlxuXHQgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBUaGUgaW5kZXggaW4gYHZhbHVlYCB0byBsb29rdXAgZm9yIHZhbHVlLlxuXHQgKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1ZSAtIFRoZSB2YWx1ZSB0byByZXR1cm4gaWYgYHZhbHVlW2luZGV4XWAgaXMgdW5kZWZpbmVkLlxuXHQgKiBAcmV0dXJucyB7Kn1cblx0ICovXG5cdHZhbHVlQXRJbmRleE9yRGVmYXVsdDogZnVuY3Rpb24odmFsdWUsIGluZGV4LCBkZWZhdWx0VmFsdWUpIHtcblx0XHRyZXR1cm4gaGVscGVycy52YWx1ZU9yRGVmYXVsdChoZWxwZXJzLmlzQXJyYXkodmFsdWUpID8gdmFsdWVbaW5kZXhdIDogdmFsdWUsIGRlZmF1bHRWYWx1ZSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENhbGxzIGBmbmAgd2l0aCB0aGUgZ2l2ZW4gYGFyZ3NgIGluIHRoZSBzY29wZSBkZWZpbmVkIGJ5IGB0aGlzQXJnYCBhbmQgcmV0dXJucyB0aGVcblx0ICogdmFsdWUgcmV0dXJuZWQgYnkgYGZuYC4gSWYgYGZuYCBpcyBub3QgYSBmdW5jdGlvbiwgdGhpcyBtZXRob2QgcmV0dXJucyB1bmRlZmluZWQuXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwuXG5cdCAqIEBwYXJhbSB7QXJyYXl8dW5kZWZpbmVkfG51bGx9IGFyZ3MgLSBUaGUgYXJndW1lbnRzIHdpdGggd2hpY2ggYGZuYCBzaG91bGQgYmUgY2FsbGVkLlxuXHQgKiBAcGFyYW0ge29iamVjdH0gW3RoaXNBcmddIC0gVGhlIHZhbHVlIG9mIGB0aGlzYCBwcm92aWRlZCBmb3IgdGhlIGNhbGwgdG8gYGZuYC5cblx0ICogQHJldHVybnMgeyp9XG5cdCAqL1xuXHRjYWxsYmFjazogZnVuY3Rpb24oZm4sIGFyZ3MsIHRoaXNBcmcpIHtcblx0XHRpZiAoZm4gJiYgdHlwZW9mIGZuLmNhbGwgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmdzKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIE5vdGUoU0IpIGZvciBwZXJmb3JtYW5jZSBzYWtlLCB0aGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSB1c2VkIHdoZW4gbG9vcGFibGUgdHlwZVxuXHQgKiBpcyB1bmtub3duIG9yIGluIG5vbmUgaW50ZW5zaXZlIGNvZGUgKG5vdCBjYWxsZWQgb2Z0ZW4gYW5kIHNtYWxsIGxvb3BhYmxlKS4gRWxzZVxuXHQgKiBpdCdzIHByZWZlcmFibGUgdG8gdXNlIGEgcmVndWxhciBmb3IoKSBsb29wIGFuZCBzYXZlIGV4dHJhIGZ1bmN0aW9uIGNhbGxzLlxuXHQgKiBAcGFyYW0ge29iamVjdHxBcnJheX0gbG9vcGFibGUgLSBUaGUgb2JqZWN0IG9yIGFycmF5IHRvIGJlIGl0ZXJhdGVkLlxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGl0ZW0uXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBbdGhpc0FyZ10gLSBUaGUgdmFsdWUgb2YgYHRoaXNgIHByb3ZpZGVkIGZvciB0aGUgY2FsbCB0byBgZm5gLlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXZlcnNlXSAtIElmIHRydWUsIGl0ZXJhdGVzIGJhY2t3YXJkIG9uIHRoZSBsb29wYWJsZS5cblx0ICovXG5cdGVhY2g6IGZ1bmN0aW9uKGxvb3BhYmxlLCBmbiwgdGhpc0FyZywgcmV2ZXJzZSkge1xuXHRcdHZhciBpLCBsZW4sIGtleXM7XG5cdFx0aWYgKGhlbHBlcnMuaXNBcnJheShsb29wYWJsZSkpIHtcblx0XHRcdGxlbiA9IGxvb3BhYmxlLmxlbmd0aDtcblx0XHRcdGlmIChyZXZlcnNlKSB7XG5cdFx0XHRcdGZvciAoaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRcdFx0Zm4uY2FsbCh0aGlzQXJnLCBsb29wYWJsZVtpXSwgaSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0XHRcdGZuLmNhbGwodGhpc0FyZywgbG9vcGFibGVbaV0sIGkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChoZWxwZXJzLmlzT2JqZWN0KGxvb3BhYmxlKSkge1xuXHRcdFx0a2V5cyA9IE9iamVjdC5rZXlzKGxvb3BhYmxlKTtcblx0XHRcdGxlbiA9IGtleXMubGVuZ3RoO1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRcdGZuLmNhbGwodGhpc0FyZywgbG9vcGFibGVba2V5c1tpXV0sIGtleXNbaV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBgYTBgIGFuZCBgYTFgIGFycmF5cyBoYXZlIHRoZSBzYW1lIGNvbnRlbnQsIGVsc2UgcmV0dXJucyBmYWxzZS5cblx0ICogQHNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTQ4NTM5NzRcblx0ICogQHBhcmFtIHtBcnJheX0gYTAgLSBUaGUgYXJyYXkgdG8gY29tcGFyZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhMSAtIFRoZSBhcnJheSB0byBjb21wYXJlXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0YXJyYXlFcXVhbHM6IGZ1bmN0aW9uKGEwLCBhMSkge1xuXHRcdHZhciBpLCBpbGVuLCB2MCwgdjE7XG5cblx0XHRpZiAoIWEwIHx8ICFhMSB8fCBhMC5sZW5ndGggIT09IGExLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGZvciAoaSA9IDAsIGlsZW4gPSBhMC5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcblx0XHRcdHYwID0gYTBbaV07XG5cdFx0XHR2MSA9IGExW2ldO1xuXG5cdFx0XHRpZiAodjAgaW5zdGFuY2VvZiBBcnJheSAmJiB2MSBpbnN0YW5jZW9mIEFycmF5KSB7XG5cdFx0XHRcdGlmICghaGVscGVycy5hcnJheUVxdWFscyh2MCwgdjEpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHYwICE9PSB2MSkge1xuXHRcdFx0XHQvLyBOT1RFOiB0d28gZGlmZmVyZW50IG9iamVjdCBpbnN0YW5jZXMgd2lsbCBuZXZlciBiZSBlcXVhbDoge3g6MjB9ICE9IHt4OjIwfVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBkZWVwIGNvcHkgb2YgYHNvdXJjZWAgd2l0aG91dCBrZWVwaW5nIHJlZmVyZW5jZXMgb24gb2JqZWN0cyBhbmQgYXJyYXlzLlxuXHQgKiBAcGFyYW0geyp9IHNvdXJjZSAtIFRoZSB2YWx1ZSB0byBjbG9uZS5cblx0ICogQHJldHVybnMgeyp9XG5cdCAqL1xuXHRjbG9uZTogZnVuY3Rpb24oc291cmNlKSB7XG5cdFx0aWYgKGhlbHBlcnMuaXNBcnJheShzb3VyY2UpKSB7XG5cdFx0XHRyZXR1cm4gc291cmNlLm1hcChoZWxwZXJzLmNsb25lKTtcblx0XHR9XG5cblx0XHRpZiAoaGVscGVycy5pc09iamVjdChzb3VyY2UpKSB7XG5cdFx0XHR2YXIgdGFyZ2V0ID0ge307XG5cdFx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG5cdFx0XHR2YXIga2xlbiA9IGtleXMubGVuZ3RoO1xuXHRcdFx0dmFyIGsgPSAwO1xuXG5cdFx0XHRmb3IgKDsgayA8IGtsZW47ICsraykge1xuXHRcdFx0XHR0YXJnZXRba2V5c1trXV0gPSBoZWxwZXJzLmNsb25lKHNvdXJjZVtrZXlzW2tdXSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0YXJnZXQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNvdXJjZTtcblx0fSxcblxuXHQvKipcblx0ICogVGhlIGRlZmF1bHQgbWVyZ2VyIHdoZW4gQ2hhcnQuaGVscGVycy5tZXJnZSBpcyBjYWxsZWQgd2l0aG91dCBtZXJnZXIgb3B0aW9uLlxuXHQgKiBOb3RlKFNCKTogYWxzbyB1c2VkIGJ5IG1lcmdlQ29uZmlnIGFuZCBtZXJnZVNjYWxlQ29uZmlnIGFzIGZhbGxiYWNrLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X21lcmdlcjogZnVuY3Rpb24oa2V5LCB0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucykge1xuXHRcdHZhciB0dmFsID0gdGFyZ2V0W2tleV07XG5cdFx0dmFyIHN2YWwgPSBzb3VyY2Vba2V5XTtcblxuXHRcdGlmIChoZWxwZXJzLmlzT2JqZWN0KHR2YWwpICYmIGhlbHBlcnMuaXNPYmplY3Qoc3ZhbCkpIHtcblx0XHRcdGhlbHBlcnMubWVyZ2UodHZhbCwgc3ZhbCwgb3B0aW9ucyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRhcmdldFtrZXldID0gaGVscGVycy5jbG9uZShzdmFsKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1lcmdlcyBzb3VyY2Vba2V5XSBpbiB0YXJnZXRba2V5XSBvbmx5IGlmIHRhcmdldFtrZXldIGlzIHVuZGVmaW5lZC5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9tZXJnZXJJZjogZnVuY3Rpb24oa2V5LCB0YXJnZXQsIHNvdXJjZSkge1xuXHRcdHZhciB0dmFsID0gdGFyZ2V0W2tleV07XG5cdFx0dmFyIHN2YWwgPSBzb3VyY2Vba2V5XTtcblxuXHRcdGlmIChoZWxwZXJzLmlzT2JqZWN0KHR2YWwpICYmIGhlbHBlcnMuaXNPYmplY3Qoc3ZhbCkpIHtcblx0XHRcdGhlbHBlcnMubWVyZ2VJZih0dmFsLCBzdmFsKTtcblx0XHR9IGVsc2UgaWYgKCF0YXJnZXQuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0dGFyZ2V0W2tleV0gPSBoZWxwZXJzLmNsb25lKHN2YWwpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogUmVjdXJzaXZlbHkgZGVlcCBjb3BpZXMgYHNvdXJjZWAgcHJvcGVydGllcyBpbnRvIGB0YXJnZXRgIHdpdGggdGhlIGdpdmVuIGBvcHRpb25zYC5cblx0ICogSU1QT1JUQU5UOiBgdGFyZ2V0YCBpcyBub3QgY2xvbmVkIGFuZCB3aWxsIGJlIHVwZGF0ZWQgd2l0aCBgc291cmNlYCBwcm9wZXJ0aWVzLlxuXHQgKiBAcGFyYW0ge29iamVjdH0gdGFyZ2V0IC0gVGhlIHRhcmdldCBvYmplY3QgaW4gd2hpY2ggYWxsIHNvdXJjZXMgYXJlIG1lcmdlZCBpbnRvLlxuXHQgKiBAcGFyYW0ge29iamVjdHxvYmplY3RbXX0gc291cmNlIC0gT2JqZWN0KHMpIHRvIG1lcmdlIGludG8gYHRhcmdldGAuXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBNZXJnaW5nIG9wdGlvbnM6XG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IFtvcHRpb25zLm1lcmdlcl0gLSBUaGUgbWVyZ2UgbWV0aG9kIChrZXksIHRhcmdldCwgc291cmNlLCBvcHRpb25zKVxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgYHRhcmdldGAgb2JqZWN0LlxuXHQgKi9cblx0bWVyZ2U6IGZ1bmN0aW9uKHRhcmdldCwgc291cmNlLCBvcHRpb25zKSB7XG5cdFx0dmFyIHNvdXJjZXMgPSBoZWxwZXJzLmlzQXJyYXkoc291cmNlKSA/IHNvdXJjZSA6IFtzb3VyY2VdO1xuXHRcdHZhciBpbGVuID0gc291cmNlcy5sZW5ndGg7XG5cdFx0dmFyIG1lcmdlLCBpLCBrZXlzLCBrbGVuLCBrO1xuXG5cdFx0aWYgKCFoZWxwZXJzLmlzT2JqZWN0KHRhcmdldCkpIHtcblx0XHRcdHJldHVybiB0YXJnZXQ7XG5cdFx0fVxuXG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cdFx0bWVyZ2UgPSBvcHRpb25zLm1lcmdlciB8fCBoZWxwZXJzLl9tZXJnZXI7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgaWxlbjsgKytpKSB7XG5cdFx0XHRzb3VyY2UgPSBzb3VyY2VzW2ldO1xuXHRcdFx0aWYgKCFoZWxwZXJzLmlzT2JqZWN0KHNvdXJjZSkpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuXHRcdFx0Zm9yIChrID0gMCwga2xlbiA9IGtleXMubGVuZ3RoOyBrIDwga2xlbjsgKytrKSB7XG5cdFx0XHRcdG1lcmdlKGtleXNba10sIHRhcmdldCwgc291cmNlLCBvcHRpb25zKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGFyZ2V0O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZWN1cnNpdmVseSBkZWVwIGNvcGllcyBgc291cmNlYCBwcm9wZXJ0aWVzIGludG8gYHRhcmdldGAgKm9ubHkqIGlmIG5vdCBkZWZpbmVkIGluIHRhcmdldC5cblx0ICogSU1QT1JUQU5UOiBgdGFyZ2V0YCBpcyBub3QgY2xvbmVkIGFuZCB3aWxsIGJlIHVwZGF0ZWQgd2l0aCBgc291cmNlYCBwcm9wZXJ0aWVzLlxuXHQgKiBAcGFyYW0ge29iamVjdH0gdGFyZ2V0IC0gVGhlIHRhcmdldCBvYmplY3QgaW4gd2hpY2ggYWxsIHNvdXJjZXMgYXJlIG1lcmdlZCBpbnRvLlxuXHQgKiBAcGFyYW0ge29iamVjdHxvYmplY3RbXX0gc291cmNlIC0gT2JqZWN0KHMpIHRvIG1lcmdlIGludG8gYHRhcmdldGAuXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSBgdGFyZ2V0YCBvYmplY3QuXG5cdCAqL1xuXHRtZXJnZUlmOiBmdW5jdGlvbih0YXJnZXQsIHNvdXJjZSkge1xuXHRcdHJldHVybiBoZWxwZXJzLm1lcmdlKHRhcmdldCwgc291cmNlLCB7bWVyZ2VyOiBoZWxwZXJzLl9tZXJnZXJJZn0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBBcHBsaWVzIHRoZSBjb250ZW50cyBvZiB0d28gb3IgbW9yZSBvYmplY3RzIHRvZ2V0aGVyIGludG8gdGhlIGZpcnN0IG9iamVjdC5cblx0ICogQHBhcmFtIHtvYmplY3R9IHRhcmdldCAtIFRoZSB0YXJnZXQgb2JqZWN0IGluIHdoaWNoIGFsbCBvYmplY3RzIGFyZSBtZXJnZWQgaW50by5cblx0ICogQHBhcmFtIHtvYmplY3R9IGFyZzEgLSBPYmplY3QgY29udGFpbmluZyBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gbWVyZ2UgaW4gdGFyZ2V0LlxuXHQgKiBAcGFyYW0ge29iamVjdH0gYXJnTiAtIEFkZGl0aW9uYWwgb2JqZWN0cyBjb250YWluaW5nIHByb3BlcnRpZXMgdG8gbWVyZ2UgaW4gdGFyZ2V0LlxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgYHRhcmdldGAgb2JqZWN0LlxuXHQgKi9cblx0ZXh0ZW5kOiBmdW5jdGlvbih0YXJnZXQpIHtcblx0XHR2YXIgc2V0Rm4gPSBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG5cdFx0XHR0YXJnZXRba2V5XSA9IHZhbHVlO1xuXHRcdH07XG5cdFx0Zm9yICh2YXIgaSA9IDEsIGlsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XG5cdFx0XHRoZWxwZXJzLmVhY2goYXJndW1lbnRzW2ldLCBzZXRGbik7XG5cdFx0fVxuXHRcdHJldHVybiB0YXJnZXQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEJhc2ljIGphdmFzY3JpcHQgaW5oZXJpdGFuY2UgYmFzZWQgb24gdGhlIG1vZGVsIGNyZWF0ZWQgaW4gQmFja2JvbmUuanNcblx0ICovXG5cdGluaGVyaXRzOiBmdW5jdGlvbihleHRlbnNpb25zKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgQ2hhcnRFbGVtZW50ID0gKGV4dGVuc2lvbnMgJiYgZXh0ZW5zaW9ucy5oYXNPd25Qcm9wZXJ0eSgnY29uc3RydWN0b3InKSkgPyBleHRlbnNpb25zLmNvbnN0cnVjdG9yIDogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gbWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0XHR9O1xuXG5cdFx0dmFyIFN1cnJvZ2F0ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy5jb25zdHJ1Y3RvciA9IENoYXJ0RWxlbWVudDtcblx0XHR9O1xuXG5cdFx0U3Vycm9nYXRlLnByb3RvdHlwZSA9IG1lLnByb3RvdHlwZTtcblx0XHRDaGFydEVsZW1lbnQucHJvdG90eXBlID0gbmV3IFN1cnJvZ2F0ZSgpO1xuXHRcdENoYXJ0RWxlbWVudC5leHRlbmQgPSBoZWxwZXJzLmluaGVyaXRzO1xuXG5cdFx0aWYgKGV4dGVuc2lvbnMpIHtcblx0XHRcdGhlbHBlcnMuZXh0ZW5kKENoYXJ0RWxlbWVudC5wcm90b3R5cGUsIGV4dGVuc2lvbnMpO1xuXHRcdH1cblxuXHRcdENoYXJ0RWxlbWVudC5fX3N1cGVyX18gPSBtZS5wcm90b3R5cGU7XG5cdFx0cmV0dXJuIENoYXJ0RWxlbWVudDtcblx0fVxufTtcblxudmFyIGhlbHBlcnNfY29yZSA9IGhlbHBlcnM7XG5cbi8vIERFUFJFQ0FUSU9OU1xuXG4vKipcbiAqIFByb3ZpZGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB1c2UgQ2hhcnQuaGVscGVycy5jYWxsYmFjayBpbnN0ZWFkLlxuICogQGZ1bmN0aW9uIENoYXJ0LmhlbHBlcnMuY2FsbENhbGxiYWNrXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDIuNi4wXG4gKiBAdG9kbyByZW1vdmUgYXQgdmVyc2lvbiAzXG4gKiBAcHJpdmF0ZVxuICovXG5oZWxwZXJzLmNhbGxDYWxsYmFjayA9IGhlbHBlcnMuY2FsbGJhY2s7XG5cbi8qKlxuICogUHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHVzZSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZiBpbnN0ZWFkLlxuICogQXJyYXkucHJvdG90eXBlLmluZGV4T2YgY29tcGF0aWJpbGl0eTogQ2hyb21lLCBPcGVyYSwgU2FmYXJpLCBGRjEuNSssIElFOStcbiAqIEBmdW5jdGlvbiBDaGFydC5oZWxwZXJzLmluZGV4T2ZcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMi43LjBcbiAqIEB0b2RvIHJlbW92ZSBhdCB2ZXJzaW9uIDNcbiAqIEBwcml2YXRlXG4gKi9cbmhlbHBlcnMuaW5kZXhPZiA9IGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBmcm9tSW5kZXgpIHtcblx0cmV0dXJuIEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYXJyYXksIGl0ZW0sIGZyb21JbmRleCk7XG59O1xuXG4vKipcbiAqIFByb3ZpZGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB1c2UgQ2hhcnQuaGVscGVycy52YWx1ZU9yRGVmYXVsdCBpbnN0ZWFkLlxuICogQGZ1bmN0aW9uIENoYXJ0LmhlbHBlcnMuZ2V0VmFsdWVPckRlZmF1bHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMi43LjBcbiAqIEB0b2RvIHJlbW92ZSBhdCB2ZXJzaW9uIDNcbiAqIEBwcml2YXRlXG4gKi9cbmhlbHBlcnMuZ2V0VmFsdWVPckRlZmF1bHQgPSBoZWxwZXJzLnZhbHVlT3JEZWZhdWx0O1xuXG4vKipcbiAqIFByb3ZpZGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB1c2UgQ2hhcnQuaGVscGVycy52YWx1ZUF0SW5kZXhPckRlZmF1bHQgaW5zdGVhZC5cbiAqIEBmdW5jdGlvbiBDaGFydC5oZWxwZXJzLmdldFZhbHVlQXRJbmRleE9yRGVmYXVsdFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAyLjcuMFxuICogQHRvZG8gcmVtb3ZlIGF0IHZlcnNpb24gM1xuICogQHByaXZhdGVcbiAqL1xuaGVscGVycy5nZXRWYWx1ZUF0SW5kZXhPckRlZmF1bHQgPSBoZWxwZXJzLnZhbHVlQXRJbmRleE9yRGVmYXVsdDtcblxuLyoqXG4gKiBFYXNpbmcgZnVuY3Rpb25zIGFkYXB0ZWQgZnJvbSBSb2JlcnQgUGVubmVyJ3MgZWFzaW5nIGVxdWF0aW9ucy5cbiAqIEBuYW1lc3BhY2UgQ2hhcnQuaGVscGVycy5lYXNpbmdFZmZlY3RzXG4gKiBAc2VlIGh0dHA6Ly93d3cucm9iZXJ0cGVubmVyLmNvbS9lYXNpbmcvXG4gKi9cbnZhciBlZmZlY3RzID0ge1xuXHRsaW5lYXI6IGZ1bmN0aW9uKHQpIHtcblx0XHRyZXR1cm4gdDtcblx0fSxcblxuXHRlYXNlSW5RdWFkOiBmdW5jdGlvbih0KSB7XG5cdFx0cmV0dXJuIHQgKiB0O1xuXHR9LFxuXG5cdGVhc2VPdXRRdWFkOiBmdW5jdGlvbih0KSB7XG5cdFx0cmV0dXJuIC10ICogKHQgLSAyKTtcblx0fSxcblxuXHRlYXNlSW5PdXRRdWFkOiBmdW5jdGlvbih0KSB7XG5cdFx0aWYgKCh0IC89IDAuNSkgPCAxKSB7XG5cdFx0XHRyZXR1cm4gMC41ICogdCAqIHQ7XG5cdFx0fVxuXHRcdHJldHVybiAtMC41ICogKCgtLXQpICogKHQgLSAyKSAtIDEpO1xuXHR9LFxuXG5cdGVhc2VJbkN1YmljOiBmdW5jdGlvbih0KSB7XG5cdFx0cmV0dXJuIHQgKiB0ICogdDtcblx0fSxcblxuXHRlYXNlT3V0Q3ViaWM6IGZ1bmN0aW9uKHQpIHtcblx0XHRyZXR1cm4gKHQgPSB0IC0gMSkgKiB0ICogdCArIDE7XG5cdH0sXG5cblx0ZWFzZUluT3V0Q3ViaWM6IGZ1bmN0aW9uKHQpIHtcblx0XHRpZiAoKHQgLz0gMC41KSA8IDEpIHtcblx0XHRcdHJldHVybiAwLjUgKiB0ICogdCAqIHQ7XG5cdFx0fVxuXHRcdHJldHVybiAwLjUgKiAoKHQgLT0gMikgKiB0ICogdCArIDIpO1xuXHR9LFxuXG5cdGVhc2VJblF1YXJ0OiBmdW5jdGlvbih0KSB7XG5cdFx0cmV0dXJuIHQgKiB0ICogdCAqIHQ7XG5cdH0sXG5cblx0ZWFzZU91dFF1YXJ0OiBmdW5jdGlvbih0KSB7XG5cdFx0cmV0dXJuIC0oKHQgPSB0IC0gMSkgKiB0ICogdCAqIHQgLSAxKTtcblx0fSxcblxuXHRlYXNlSW5PdXRRdWFydDogZnVuY3Rpb24odCkge1xuXHRcdGlmICgodCAvPSAwLjUpIDwgMSkge1xuXHRcdFx0cmV0dXJuIDAuNSAqIHQgKiB0ICogdCAqIHQ7XG5cdFx0fVxuXHRcdHJldHVybiAtMC41ICogKCh0IC09IDIpICogdCAqIHQgKiB0IC0gMik7XG5cdH0sXG5cblx0ZWFzZUluUXVpbnQ6IGZ1bmN0aW9uKHQpIHtcblx0XHRyZXR1cm4gdCAqIHQgKiB0ICogdCAqIHQ7XG5cdH0sXG5cblx0ZWFzZU91dFF1aW50OiBmdW5jdGlvbih0KSB7XG5cdFx0cmV0dXJuICh0ID0gdCAtIDEpICogdCAqIHQgKiB0ICogdCArIDE7XG5cdH0sXG5cblx0ZWFzZUluT3V0UXVpbnQ6IGZ1bmN0aW9uKHQpIHtcblx0XHRpZiAoKHQgLz0gMC41KSA8IDEpIHtcblx0XHRcdHJldHVybiAwLjUgKiB0ICogdCAqIHQgKiB0ICogdDtcblx0XHR9XG5cdFx0cmV0dXJuIDAuNSAqICgodCAtPSAyKSAqIHQgKiB0ICogdCAqIHQgKyAyKTtcblx0fSxcblxuXHRlYXNlSW5TaW5lOiBmdW5jdGlvbih0KSB7XG5cdFx0cmV0dXJuIC1NYXRoLmNvcyh0ICogKE1hdGguUEkgLyAyKSkgKyAxO1xuXHR9LFxuXG5cdGVhc2VPdXRTaW5lOiBmdW5jdGlvbih0KSB7XG5cdFx0cmV0dXJuIE1hdGguc2luKHQgKiAoTWF0aC5QSSAvIDIpKTtcblx0fSxcblxuXHRlYXNlSW5PdXRTaW5lOiBmdW5jdGlvbih0KSB7XG5cdFx0cmV0dXJuIC0wLjUgKiAoTWF0aC5jb3MoTWF0aC5QSSAqIHQpIC0gMSk7XG5cdH0sXG5cblx0ZWFzZUluRXhwbzogZnVuY3Rpb24odCkge1xuXHRcdHJldHVybiAodCA9PT0gMCkgPyAwIDogTWF0aC5wb3coMiwgMTAgKiAodCAtIDEpKTtcblx0fSxcblxuXHRlYXNlT3V0RXhwbzogZnVuY3Rpb24odCkge1xuXHRcdHJldHVybiAodCA9PT0gMSkgPyAxIDogLU1hdGgucG93KDIsIC0xMCAqIHQpICsgMTtcblx0fSxcblxuXHRlYXNlSW5PdXRFeHBvOiBmdW5jdGlvbih0KSB7XG5cdFx0aWYgKHQgPT09IDApIHtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblx0XHRpZiAodCA9PT0gMSkge1xuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXHRcdGlmICgodCAvPSAwLjUpIDwgMSkge1xuXHRcdFx0cmV0dXJuIDAuNSAqIE1hdGgucG93KDIsIDEwICogKHQgLSAxKSk7XG5cdFx0fVxuXHRcdHJldHVybiAwLjUgKiAoLU1hdGgucG93KDIsIC0xMCAqIC0tdCkgKyAyKTtcblx0fSxcblxuXHRlYXNlSW5DaXJjOiBmdW5jdGlvbih0KSB7XG5cdFx0aWYgKHQgPj0gMSkge1xuXHRcdFx0cmV0dXJuIHQ7XG5cdFx0fVxuXHRcdHJldHVybiAtKE1hdGguc3FydCgxIC0gdCAqIHQpIC0gMSk7XG5cdH0sXG5cblx0ZWFzZU91dENpcmM6IGZ1bmN0aW9uKHQpIHtcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KDEgLSAodCA9IHQgLSAxKSAqIHQpO1xuXHR9LFxuXG5cdGVhc2VJbk91dENpcmM6IGZ1bmN0aW9uKHQpIHtcblx0XHRpZiAoKHQgLz0gMC41KSA8IDEpIHtcblx0XHRcdHJldHVybiAtMC41ICogKE1hdGguc3FydCgxIC0gdCAqIHQpIC0gMSk7XG5cdFx0fVxuXHRcdHJldHVybiAwLjUgKiAoTWF0aC5zcXJ0KDEgLSAodCAtPSAyKSAqIHQpICsgMSk7XG5cdH0sXG5cblx0ZWFzZUluRWxhc3RpYzogZnVuY3Rpb24odCkge1xuXHRcdHZhciBzID0gMS43MDE1ODtcblx0XHR2YXIgcCA9IDA7XG5cdFx0dmFyIGEgPSAxO1xuXHRcdGlmICh0ID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cdFx0aWYgKHQgPT09IDEpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblx0XHRpZiAoIXApIHtcblx0XHRcdHAgPSAwLjM7XG5cdFx0fVxuXHRcdGlmIChhIDwgMSkge1xuXHRcdFx0YSA9IDE7XG5cdFx0XHRzID0gcCAvIDQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHMgPSBwIC8gKDIgKiBNYXRoLlBJKSAqIE1hdGguYXNpbigxIC8gYSk7XG5cdFx0fVxuXHRcdHJldHVybiAtKGEgKiBNYXRoLnBvdygyLCAxMCAqICh0IC09IDEpKSAqIE1hdGguc2luKCh0IC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcCkpO1xuXHR9LFxuXG5cdGVhc2VPdXRFbGFzdGljOiBmdW5jdGlvbih0KSB7XG5cdFx0dmFyIHMgPSAxLjcwMTU4O1xuXHRcdHZhciBwID0gMDtcblx0XHR2YXIgYSA9IDE7XG5cdFx0aWYgKHQgPT09IDApIHtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblx0XHRpZiAodCA9PT0gMSkge1xuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXHRcdGlmICghcCkge1xuXHRcdFx0cCA9IDAuMztcblx0XHR9XG5cdFx0aWYgKGEgPCAxKSB7XG5cdFx0XHRhID0gMTtcblx0XHRcdHMgPSBwIC8gNDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cyA9IHAgLyAoMiAqIE1hdGguUEkpICogTWF0aC5hc2luKDEgLyBhKTtcblx0XHR9XG5cdFx0cmV0dXJuIGEgKiBNYXRoLnBvdygyLCAtMTAgKiB0KSAqIE1hdGguc2luKCh0IC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcCkgKyAxO1xuXHR9LFxuXG5cdGVhc2VJbk91dEVsYXN0aWM6IGZ1bmN0aW9uKHQpIHtcblx0XHR2YXIgcyA9IDEuNzAxNTg7XG5cdFx0dmFyIHAgPSAwO1xuXHRcdHZhciBhID0gMTtcblx0XHRpZiAodCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXHRcdGlmICgodCAvPSAwLjUpID09PSAyKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cdFx0aWYgKCFwKSB7XG5cdFx0XHRwID0gMC40NTtcblx0XHR9XG5cdFx0aWYgKGEgPCAxKSB7XG5cdFx0XHRhID0gMTtcblx0XHRcdHMgPSBwIC8gNDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cyA9IHAgLyAoMiAqIE1hdGguUEkpICogTWF0aC5hc2luKDEgLyBhKTtcblx0XHR9XG5cdFx0aWYgKHQgPCAxKSB7XG5cdFx0XHRyZXR1cm4gLTAuNSAqIChhICogTWF0aC5wb3coMiwgMTAgKiAodCAtPSAxKSkgKiBNYXRoLnNpbigodCAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApKTtcblx0XHR9XG5cdFx0cmV0dXJuIGEgKiBNYXRoLnBvdygyLCAtMTAgKiAodCAtPSAxKSkgKiBNYXRoLnNpbigodCAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApICogMC41ICsgMTtcblx0fSxcblx0ZWFzZUluQmFjazogZnVuY3Rpb24odCkge1xuXHRcdHZhciBzID0gMS43MDE1ODtcblx0XHRyZXR1cm4gdCAqIHQgKiAoKHMgKyAxKSAqIHQgLSBzKTtcblx0fSxcblxuXHRlYXNlT3V0QmFjazogZnVuY3Rpb24odCkge1xuXHRcdHZhciBzID0gMS43MDE1ODtcblx0XHRyZXR1cm4gKHQgPSB0IC0gMSkgKiB0ICogKChzICsgMSkgKiB0ICsgcykgKyAxO1xuXHR9LFxuXG5cdGVhc2VJbk91dEJhY2s6IGZ1bmN0aW9uKHQpIHtcblx0XHR2YXIgcyA9IDEuNzAxNTg7XG5cdFx0aWYgKCh0IC89IDAuNSkgPCAxKSB7XG5cdFx0XHRyZXR1cm4gMC41ICogKHQgKiB0ICogKCgocyAqPSAoMS41MjUpKSArIDEpICogdCAtIHMpKTtcblx0XHR9XG5cdFx0cmV0dXJuIDAuNSAqICgodCAtPSAyKSAqIHQgKiAoKChzICo9ICgxLjUyNSkpICsgMSkgKiB0ICsgcykgKyAyKTtcblx0fSxcblxuXHRlYXNlSW5Cb3VuY2U6IGZ1bmN0aW9uKHQpIHtcblx0XHRyZXR1cm4gMSAtIGVmZmVjdHMuZWFzZU91dEJvdW5jZSgxIC0gdCk7XG5cdH0sXG5cblx0ZWFzZU91dEJvdW5jZTogZnVuY3Rpb24odCkge1xuXHRcdGlmICh0IDwgKDEgLyAyLjc1KSkge1xuXHRcdFx0cmV0dXJuIDcuNTYyNSAqIHQgKiB0O1xuXHRcdH1cblx0XHRpZiAodCA8ICgyIC8gMi43NSkpIHtcblx0XHRcdHJldHVybiA3LjU2MjUgKiAodCAtPSAoMS41IC8gMi43NSkpICogdCArIDAuNzU7XG5cdFx0fVxuXHRcdGlmICh0IDwgKDIuNSAvIDIuNzUpKSB7XG5cdFx0XHRyZXR1cm4gNy41NjI1ICogKHQgLT0gKDIuMjUgLyAyLjc1KSkgKiB0ICsgMC45Mzc1O1xuXHRcdH1cblx0XHRyZXR1cm4gNy41NjI1ICogKHQgLT0gKDIuNjI1IC8gMi43NSkpICogdCArIDAuOTg0Mzc1O1xuXHR9LFxuXG5cdGVhc2VJbk91dEJvdW5jZTogZnVuY3Rpb24odCkge1xuXHRcdGlmICh0IDwgMC41KSB7XG5cdFx0XHRyZXR1cm4gZWZmZWN0cy5lYXNlSW5Cb3VuY2UodCAqIDIpICogMC41O1xuXHRcdH1cblx0XHRyZXR1cm4gZWZmZWN0cy5lYXNlT3V0Qm91bmNlKHQgKiAyIC0gMSkgKiAwLjUgKyAwLjU7XG5cdH1cbn07XG5cbnZhciBoZWxwZXJzX2Vhc2luZyA9IHtcblx0ZWZmZWN0czogZWZmZWN0c1xufTtcblxuLy8gREVQUkVDQVRJT05TXG5cbi8qKlxuICogUHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHVzZSBDaGFydC5oZWxwZXJzLmVhc2luZy5lZmZlY3RzIGluc3RlYWQuXG4gKiBAZnVuY3Rpb24gQ2hhcnQuaGVscGVycy5lYXNpbmdFZmZlY3RzXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDIuNy4wXG4gKiBAdG9kbyByZW1vdmUgYXQgdmVyc2lvbiAzXG4gKiBAcHJpdmF0ZVxuICovXG5oZWxwZXJzX2NvcmUuZWFzaW5nRWZmZWN0cyA9IGVmZmVjdHM7XG5cbnZhciBQSSA9IE1hdGguUEk7XG52YXIgUkFEX1BFUl9ERUcgPSBQSSAvIDE4MDtcbnZhciBET1VCTEVfUEkgPSBQSSAqIDI7XG52YXIgSEFMRl9QSSA9IFBJIC8gMjtcbnZhciBRVUFSVEVSX1BJID0gUEkgLyA0O1xudmFyIFRXT19USElSRFNfUEkgPSBQSSAqIDIgLyAzO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgQ2hhcnQuaGVscGVycy5jYW52YXNcbiAqL1xudmFyIGV4cG9ydHMkMSA9IHtcblx0LyoqXG5cdCAqIENsZWFycyB0aGUgZW50aXJlIGNhbnZhcyBhc3NvY2lhdGVkIHRvIHRoZSBnaXZlbiBgY2hhcnRgLlxuXHQgKiBAcGFyYW0ge0NoYXJ0fSBjaGFydCAtIFRoZSBjaGFydCBmb3Igd2hpY2ggdG8gY2xlYXIgdGhlIGNhbnZhcy5cblx0ICovXG5cdGNsZWFyOiBmdW5jdGlvbihjaGFydCkge1xuXHRcdGNoYXJ0LmN0eC5jbGVhclJlY3QoMCwgMCwgY2hhcnQud2lkdGgsIGNoYXJ0LmhlaWdodCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBcInBhdGhcIiBmb3IgYSByZWN0YW5nbGUgd2l0aCByb3VuZGVkIGNvcm5lcnMgYXQgcG9zaXRpb24gKHgsIHkpIHdpdGggYVxuXHQgKiBnaXZlbiBzaXplICh3aWR0aCwgaGVpZ2h0KSBhbmQgdGhlIHNhbWUgYHJhZGl1c2AgZm9yIGFsbCBjb3JuZXJzLlxuXHQgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4IC0gVGhlIGNhbnZhcyAyRCBDb250ZXh0LlxuXHQgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSB4IGF4aXMgb2YgdGhlIGNvb3JkaW5hdGUgZm9yIHRoZSByZWN0YW5nbGUgc3RhcnRpbmcgcG9pbnQuXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIHkgYXhpcyBvZiB0aGUgY29vcmRpbmF0ZSBmb3IgdGhlIHJlY3RhbmdsZSBzdGFydGluZyBwb2ludC5cblx0ICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIHJlY3RhbmdsZSdzIHdpZHRoLlxuXHQgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIHJlY3RhbmdsZSdzIGhlaWdodC5cblx0ICogQHBhcmFtIHtudW1iZXJ9IHJhZGl1cyAtIFRoZSByb3VuZGVkIGFtb3VudCAoaW4gcGl4ZWxzKSBmb3IgdGhlIGZvdXIgY29ybmVycy5cblx0ICogQHRvZG8gaGFuZGxlIGByYWRpdXNgIGFzIHRvcC1sZWZ0LCB0b3AtcmlnaHQsIGJvdHRvbS1yaWdodCwgYm90dG9tLWxlZnQgYXJyYXkvb2JqZWN0P1xuXHQgKi9cblx0cm91bmRlZFJlY3Q6IGZ1bmN0aW9uKGN0eCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKSB7XG5cdFx0aWYgKHJhZGl1cykge1xuXHRcdFx0dmFyIHIgPSBNYXRoLm1pbihyYWRpdXMsIGhlaWdodCAvIDIsIHdpZHRoIC8gMik7XG5cdFx0XHR2YXIgbGVmdCA9IHggKyByO1xuXHRcdFx0dmFyIHRvcCA9IHkgKyByO1xuXHRcdFx0dmFyIHJpZ2h0ID0geCArIHdpZHRoIC0gcjtcblx0XHRcdHZhciBib3R0b20gPSB5ICsgaGVpZ2h0IC0gcjtcblxuXHRcdFx0Y3R4Lm1vdmVUbyh4LCB0b3ApO1xuXHRcdFx0aWYgKGxlZnQgPCByaWdodCAmJiB0b3AgPCBib3R0b20pIHtcblx0XHRcdFx0Y3R4LmFyYyhsZWZ0LCB0b3AsIHIsIC1QSSwgLUhBTEZfUEkpO1xuXHRcdFx0XHRjdHguYXJjKHJpZ2h0LCB0b3AsIHIsIC1IQUxGX1BJLCAwKTtcblx0XHRcdFx0Y3R4LmFyYyhyaWdodCwgYm90dG9tLCByLCAwLCBIQUxGX1BJKTtcblx0XHRcdFx0Y3R4LmFyYyhsZWZ0LCBib3R0b20sIHIsIEhBTEZfUEksIFBJKTtcblx0XHRcdH0gZWxzZSBpZiAobGVmdCA8IHJpZ2h0KSB7XG5cdFx0XHRcdGN0eC5tb3ZlVG8obGVmdCwgeSk7XG5cdFx0XHRcdGN0eC5hcmMocmlnaHQsIHRvcCwgciwgLUhBTEZfUEksIEhBTEZfUEkpO1xuXHRcdFx0XHRjdHguYXJjKGxlZnQsIHRvcCwgciwgSEFMRl9QSSwgUEkgKyBIQUxGX1BJKTtcblx0XHRcdH0gZWxzZSBpZiAodG9wIDwgYm90dG9tKSB7XG5cdFx0XHRcdGN0eC5hcmMobGVmdCwgdG9wLCByLCAtUEksIDApO1xuXHRcdFx0XHRjdHguYXJjKGxlZnQsIGJvdHRvbSwgciwgMCwgUEkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3R4LmFyYyhsZWZ0LCB0b3AsIHIsIC1QSSwgUEkpO1xuXHRcdFx0fVxuXHRcdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXHRcdFx0Y3R4Lm1vdmVUbyh4LCB5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3R4LnJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7XG5cdFx0fVxuXHR9LFxuXG5cdGRyYXdQb2ludDogZnVuY3Rpb24oY3R4LCBzdHlsZSwgcmFkaXVzLCB4LCB5LCByb3RhdGlvbikge1xuXHRcdHZhciB0eXBlLCB4T2Zmc2V0LCB5T2Zmc2V0LCBzaXplLCBjb3JuZXJSYWRpdXM7XG5cdFx0dmFyIHJhZCA9IChyb3RhdGlvbiB8fCAwKSAqIFJBRF9QRVJfREVHO1xuXG5cdFx0aWYgKHN0eWxlICYmIHR5cGVvZiBzdHlsZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdHR5cGUgPSBzdHlsZS50b1N0cmluZygpO1xuXHRcdFx0aWYgKHR5cGUgPT09ICdbb2JqZWN0IEhUTUxJbWFnZUVsZW1lbnRdJyB8fCB0eXBlID09PSAnW29iamVjdCBIVE1MQ2FudmFzRWxlbWVudF0nKSB7XG5cdFx0XHRcdGN0eC5kcmF3SW1hZ2Uoc3R5bGUsIHggLSBzdHlsZS53aWR0aCAvIDIsIHkgLSBzdHlsZS5oZWlnaHQgLyAyLCBzdHlsZS53aWR0aCwgc3R5bGUuaGVpZ2h0KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChpc05hTihyYWRpdXMpIHx8IHJhZGl1cyA8PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXG5cdFx0c3dpdGNoIChzdHlsZSkge1xuXHRcdC8vIERlZmF1bHQgaW5jbHVkZXMgY2lyY2xlXG5cdFx0ZGVmYXVsdDpcblx0XHRcdGN0eC5hcmMoeCwgeSwgcmFkaXVzLCAwLCBET1VCTEVfUEkpO1xuXHRcdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAndHJpYW5nbGUnOlxuXHRcdFx0Y3R4Lm1vdmVUbyh4ICsgTWF0aC5zaW4ocmFkKSAqIHJhZGl1cywgeSAtIE1hdGguY29zKHJhZCkgKiByYWRpdXMpO1xuXHRcdFx0cmFkICs9IFRXT19USElSRFNfUEk7XG5cdFx0XHRjdHgubGluZVRvKHggKyBNYXRoLnNpbihyYWQpICogcmFkaXVzLCB5IC0gTWF0aC5jb3MocmFkKSAqIHJhZGl1cyk7XG5cdFx0XHRyYWQgKz0gVFdPX1RISVJEU19QSTtcblx0XHRcdGN0eC5saW5lVG8oeCArIE1hdGguc2luKHJhZCkgKiByYWRpdXMsIHkgLSBNYXRoLmNvcyhyYWQpICogcmFkaXVzKTtcblx0XHRcdGN0eC5jbG9zZVBhdGgoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ3JlY3RSb3VuZGVkJzpcblx0XHRcdC8vIE5PVEU6IHRoZSByb3VuZGVkIHJlY3QgaW1wbGVtZW50YXRpb24gY2hhbmdlZCB0byB1c2UgYGFyY2AgaW5zdGVhZCBvZlxuXHRcdFx0Ly8gYHF1YWRyYXRpY0N1cnZlVG9gIHNpbmNlIGl0IGdlbmVyYXRlcyBiZXR0ZXIgcmVzdWx0cyB3aGVuIHJlY3QgaXNcblx0XHRcdC8vIGFsbW9zdCBhIGNpcmNsZS4gMC41MTYgKGluc3RlYWQgb2YgMC41KSBwcm9kdWNlcyByZXN1bHRzIHdpdGggdmlzdWFsbHlcblx0XHRcdC8vIGNsb3NlciBwcm9wb3J0aW9uIHRvIHRoZSBwcmV2aW91cyBpbXBsIGFuZCBpdCBpcyBpbnNjcmliZWQgaW4gdGhlXG5cdFx0XHQvLyBjaXJjbGUgd2l0aCBgcmFkaXVzYC4gRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZSBmb2xsb3dpbmcgUFJzOlxuXHRcdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL2NoYXJ0anMvQ2hhcnQuanMvaXNzdWVzLzU1OTdcblx0XHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFydGpzL0NoYXJ0LmpzL2lzc3Vlcy81ODU4XG5cdFx0XHRjb3JuZXJSYWRpdXMgPSByYWRpdXMgKiAwLjUxNjtcblx0XHRcdHNpemUgPSByYWRpdXMgLSBjb3JuZXJSYWRpdXM7XG5cdFx0XHR4T2Zmc2V0ID0gTWF0aC5jb3MocmFkICsgUVVBUlRFUl9QSSkgKiBzaXplO1xuXHRcdFx0eU9mZnNldCA9IE1hdGguc2luKHJhZCArIFFVQVJURVJfUEkpICogc2l6ZTtcblx0XHRcdGN0eC5hcmMoeCAtIHhPZmZzZXQsIHkgLSB5T2Zmc2V0LCBjb3JuZXJSYWRpdXMsIHJhZCAtIFBJLCByYWQgLSBIQUxGX1BJKTtcblx0XHRcdGN0eC5hcmMoeCArIHlPZmZzZXQsIHkgLSB4T2Zmc2V0LCBjb3JuZXJSYWRpdXMsIHJhZCAtIEhBTEZfUEksIHJhZCk7XG5cdFx0XHRjdHguYXJjKHggKyB4T2Zmc2V0LCB5ICsgeU9mZnNldCwgY29ybmVyUmFkaXVzLCByYWQsIHJhZCArIEhBTEZfUEkpO1xuXHRcdFx0Y3R4LmFyYyh4IC0geU9mZnNldCwgeSArIHhPZmZzZXQsIGNvcm5lclJhZGl1cywgcmFkICsgSEFMRl9QSSwgcmFkICsgUEkpO1xuXHRcdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAncmVjdCc6XG5cdFx0XHRpZiAoIXJvdGF0aW9uKSB7XG5cdFx0XHRcdHNpemUgPSBNYXRoLlNRUlQxXzIgKiByYWRpdXM7XG5cdFx0XHRcdGN0eC5yZWN0KHggLSBzaXplLCB5IC0gc2l6ZSwgMiAqIHNpemUsIDIgKiBzaXplKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRyYWQgKz0gUVVBUlRFUl9QSTtcblx0XHRcdC8qIGZhbGxzIHRocm91Z2ggKi9cblx0XHRjYXNlICdyZWN0Um90Jzpcblx0XHRcdHhPZmZzZXQgPSBNYXRoLmNvcyhyYWQpICogcmFkaXVzO1xuXHRcdFx0eU9mZnNldCA9IE1hdGguc2luKHJhZCkgKiByYWRpdXM7XG5cdFx0XHRjdHgubW92ZVRvKHggLSB4T2Zmc2V0LCB5IC0geU9mZnNldCk7XG5cdFx0XHRjdHgubGluZVRvKHggKyB5T2Zmc2V0LCB5IC0geE9mZnNldCk7XG5cdFx0XHRjdHgubGluZVRvKHggKyB4T2Zmc2V0LCB5ICsgeU9mZnNldCk7XG5cdFx0XHRjdHgubGluZVRvKHggLSB5T2Zmc2V0LCB5ICsgeE9mZnNldCk7XG5cdFx0XHRjdHguY2xvc2VQYXRoKCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdjcm9zc1JvdCc6XG5cdFx0XHRyYWQgKz0gUVVBUlRFUl9QSTtcblx0XHRcdC8qIGZhbGxzIHRocm91Z2ggKi9cblx0XHRjYXNlICdjcm9zcyc6XG5cdFx0XHR4T2Zmc2V0ID0gTWF0aC5jb3MocmFkKSAqIHJhZGl1cztcblx0XHRcdHlPZmZzZXQgPSBNYXRoLnNpbihyYWQpICogcmFkaXVzO1xuXHRcdFx0Y3R4Lm1vdmVUbyh4IC0geE9mZnNldCwgeSAtIHlPZmZzZXQpO1xuXHRcdFx0Y3R4LmxpbmVUbyh4ICsgeE9mZnNldCwgeSArIHlPZmZzZXQpO1xuXHRcdFx0Y3R4Lm1vdmVUbyh4ICsgeU9mZnNldCwgeSAtIHhPZmZzZXQpO1xuXHRcdFx0Y3R4LmxpbmVUbyh4IC0geU9mZnNldCwgeSArIHhPZmZzZXQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnc3Rhcic6XG5cdFx0XHR4T2Zmc2V0ID0gTWF0aC5jb3MocmFkKSAqIHJhZGl1cztcblx0XHRcdHlPZmZzZXQgPSBNYXRoLnNpbihyYWQpICogcmFkaXVzO1xuXHRcdFx0Y3R4Lm1vdmVUbyh4IC0geE9mZnNldCwgeSAtIHlPZmZzZXQpO1xuXHRcdFx0Y3R4LmxpbmVUbyh4ICsgeE9mZnNldCwgeSArIHlPZmZzZXQpO1xuXHRcdFx0Y3R4Lm1vdmVUbyh4ICsgeU9mZnNldCwgeSAtIHhPZmZzZXQpO1xuXHRcdFx0Y3R4LmxpbmVUbyh4IC0geU9mZnNldCwgeSArIHhPZmZzZXQpO1xuXHRcdFx0cmFkICs9IFFVQVJURVJfUEk7XG5cdFx0XHR4T2Zmc2V0ID0gTWF0aC5jb3MocmFkKSAqIHJhZGl1cztcblx0XHRcdHlPZmZzZXQgPSBNYXRoLnNpbihyYWQpICogcmFkaXVzO1xuXHRcdFx0Y3R4Lm1vdmVUbyh4IC0geE9mZnNldCwgeSAtIHlPZmZzZXQpO1xuXHRcdFx0Y3R4LmxpbmVUbyh4ICsgeE9mZnNldCwgeSArIHlPZmZzZXQpO1xuXHRcdFx0Y3R4Lm1vdmVUbyh4ICsgeU9mZnNldCwgeSAtIHhPZmZzZXQpO1xuXHRcdFx0Y3R4LmxpbmVUbyh4IC0geU9mZnNldCwgeSArIHhPZmZzZXQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnbGluZSc6XG5cdFx0XHR4T2Zmc2V0ID0gTWF0aC5jb3MocmFkKSAqIHJhZGl1cztcblx0XHRcdHlPZmZzZXQgPSBNYXRoLnNpbihyYWQpICogcmFkaXVzO1xuXHRcdFx0Y3R4Lm1vdmVUbyh4IC0geE9mZnNldCwgeSAtIHlPZmZzZXQpO1xuXHRcdFx0Y3R4LmxpbmVUbyh4ICsgeE9mZnNldCwgeSArIHlPZmZzZXQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnZGFzaCc6XG5cdFx0XHRjdHgubW92ZVRvKHgsIHkpO1xuXHRcdFx0Y3R4LmxpbmVUbyh4ICsgTWF0aC5jb3MocmFkKSAqIHJhZGl1cywgeSArIE1hdGguc2luKHJhZCkgKiByYWRpdXMpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0Y3R4LmZpbGwoKTtcblx0XHRjdHguc3Ryb2tlKCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcG9pbnQgaXMgaW5zaWRlIHRoZSByZWN0YW5nbGVcblx0ICogQHBhcmFtIHtvYmplY3R9IHBvaW50IC0gVGhlIHBvaW50IHRvIHRlc3Rcblx0ICogQHBhcmFtIHtvYmplY3R9IGFyZWEgLSBUaGUgcmVjdGFuZ2xlXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2lzUG9pbnRJbkFyZWE6IGZ1bmN0aW9uKHBvaW50LCBhcmVhKSB7XG5cdFx0dmFyIGVwc2lsb24gPSAxZS02OyAvLyAxZS02IGlzIG1hcmdpbiBpbiBwaXhlbHMgZm9yIGFjY3VtdWxhdGVkIGVycm9yLlxuXG5cdFx0cmV0dXJuIHBvaW50LnggPiBhcmVhLmxlZnQgLSBlcHNpbG9uICYmIHBvaW50LnggPCBhcmVhLnJpZ2h0ICsgZXBzaWxvbiAmJlxuXHRcdFx0cG9pbnQueSA+IGFyZWEudG9wIC0gZXBzaWxvbiAmJiBwb2ludC55IDwgYXJlYS5ib3R0b20gKyBlcHNpbG9uO1xuXHR9LFxuXG5cdGNsaXBBcmVhOiBmdW5jdGlvbihjdHgsIGFyZWEpIHtcblx0XHRjdHguc2F2ZSgpO1xuXHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRjdHgucmVjdChhcmVhLmxlZnQsIGFyZWEudG9wLCBhcmVhLnJpZ2h0IC0gYXJlYS5sZWZ0LCBhcmVhLmJvdHRvbSAtIGFyZWEudG9wKTtcblx0XHRjdHguY2xpcCgpO1xuXHR9LFxuXG5cdHVuY2xpcEFyZWE6IGZ1bmN0aW9uKGN0eCkge1xuXHRcdGN0eC5yZXN0b3JlKCk7XG5cdH0sXG5cblx0bGluZVRvOiBmdW5jdGlvbihjdHgsIHByZXZpb3VzLCB0YXJnZXQsIGZsaXApIHtcblx0XHR2YXIgc3RlcHBlZCA9IHRhcmdldC5zdGVwcGVkTGluZTtcblx0XHRpZiAoc3RlcHBlZCkge1xuXHRcdFx0aWYgKHN0ZXBwZWQgPT09ICdtaWRkbGUnKSB7XG5cdFx0XHRcdHZhciBtaWRwb2ludCA9IChwcmV2aW91cy54ICsgdGFyZ2V0LngpIC8gMi4wO1xuXHRcdFx0XHRjdHgubGluZVRvKG1pZHBvaW50LCBmbGlwID8gdGFyZ2V0LnkgOiBwcmV2aW91cy55KTtcblx0XHRcdFx0Y3R4LmxpbmVUbyhtaWRwb2ludCwgZmxpcCA/IHByZXZpb3VzLnkgOiB0YXJnZXQueSk7XG5cdFx0XHR9IGVsc2UgaWYgKChzdGVwcGVkID09PSAnYWZ0ZXInICYmICFmbGlwKSB8fCAoc3RlcHBlZCAhPT0gJ2FmdGVyJyAmJiBmbGlwKSkge1xuXHRcdFx0XHRjdHgubGluZVRvKHByZXZpb3VzLngsIHRhcmdldC55KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGN0eC5saW5lVG8odGFyZ2V0LngsIHByZXZpb3VzLnkpO1xuXHRcdFx0fVxuXHRcdFx0Y3R4LmxpbmVUbyh0YXJnZXQueCwgdGFyZ2V0LnkpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICghdGFyZ2V0LnRlbnNpb24pIHtcblx0XHRcdGN0eC5saW5lVG8odGFyZ2V0LngsIHRhcmdldC55KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjdHguYmV6aWVyQ3VydmVUbyhcblx0XHRcdGZsaXAgPyBwcmV2aW91cy5jb250cm9sUG9pbnRQcmV2aW91c1ggOiBwcmV2aW91cy5jb250cm9sUG9pbnROZXh0WCxcblx0XHRcdGZsaXAgPyBwcmV2aW91cy5jb250cm9sUG9pbnRQcmV2aW91c1kgOiBwcmV2aW91cy5jb250cm9sUG9pbnROZXh0WSxcblx0XHRcdGZsaXAgPyB0YXJnZXQuY29udHJvbFBvaW50TmV4dFggOiB0YXJnZXQuY29udHJvbFBvaW50UHJldmlvdXNYLFxuXHRcdFx0ZmxpcCA/IHRhcmdldC5jb250cm9sUG9pbnROZXh0WSA6IHRhcmdldC5jb250cm9sUG9pbnRQcmV2aW91c1ksXG5cdFx0XHR0YXJnZXQueCxcblx0XHRcdHRhcmdldC55KTtcblx0fVxufTtcblxudmFyIGhlbHBlcnNfY2FudmFzID0gZXhwb3J0cyQxO1xuXG4vLyBERVBSRUNBVElPTlNcblxuLyoqXG4gKiBQcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdXNlIENoYXJ0LmhlbHBlcnMuY2FudmFzLmNsZWFyIGluc3RlYWQuXG4gKiBAbmFtZXNwYWNlIENoYXJ0LmhlbHBlcnMuY2xlYXJcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMi43LjBcbiAqIEB0b2RvIHJlbW92ZSBhdCB2ZXJzaW9uIDNcbiAqIEBwcml2YXRlXG4gKi9cbmhlbHBlcnNfY29yZS5jbGVhciA9IGV4cG9ydHMkMS5jbGVhcjtcblxuLyoqXG4gKiBQcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdXNlIENoYXJ0LmhlbHBlcnMuY2FudmFzLnJvdW5kZWRSZWN0IGluc3RlYWQuXG4gKiBAbmFtZXNwYWNlIENoYXJ0LmhlbHBlcnMuZHJhd1JvdW5kZWRSZWN0YW5nbGVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMi43LjBcbiAqIEB0b2RvIHJlbW92ZSBhdCB2ZXJzaW9uIDNcbiAqIEBwcml2YXRlXG4gKi9cbmhlbHBlcnNfY29yZS5kcmF3Um91bmRlZFJlY3RhbmdsZSA9IGZ1bmN0aW9uKGN0eCkge1xuXHRjdHguYmVnaW5QYXRoKCk7XG5cdGV4cG9ydHMkMS5yb3VuZGVkUmVjdC5hcHBseShleHBvcnRzJDEsIGFyZ3VtZW50cyk7XG59O1xuXG52YXIgZGVmYXVsdHMgPSB7XG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X3NldDogZnVuY3Rpb24oc2NvcGUsIHZhbHVlcykge1xuXHRcdHJldHVybiBoZWxwZXJzX2NvcmUubWVyZ2UodGhpc1tzY29wZV0gfHwgKHRoaXNbc2NvcGVdID0ge30pLCB2YWx1ZXMpO1xuXHR9XG59O1xuXG5kZWZhdWx0cy5fc2V0KCdnbG9iYWwnLCB7XG5cdGRlZmF1bHRDb2xvcjogJ3JnYmEoMCwwLDAsMC4xKScsXG5cdGRlZmF1bHRGb250Q29sb3I6ICcjNjY2Jyxcblx0ZGVmYXVsdEZvbnRGYW1pbHk6IFwiJ0hlbHZldGljYSBOZXVlJywgJ0hlbHZldGljYScsICdBcmlhbCcsIHNhbnMtc2VyaWZcIixcblx0ZGVmYXVsdEZvbnRTaXplOiAxMixcblx0ZGVmYXVsdEZvbnRTdHlsZTogJ25vcm1hbCcsXG5cdGRlZmF1bHRMaW5lSGVpZ2h0OiAxLjIsXG5cdHNob3dMaW5lczogdHJ1ZVxufSk7XG5cbnZhciBjb3JlX2RlZmF1bHRzID0gZGVmYXVsdHM7XG5cbnZhciB2YWx1ZU9yRGVmYXVsdCA9IGhlbHBlcnNfY29yZS52YWx1ZU9yRGVmYXVsdDtcblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gZm9udCBvYmplY3QgaW50byBhIENTUyBmb250IHN0cmluZy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBmb250IC0gQSBmb250IG9iamVjdC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIENTUyBmb250IHN0cmluZy4gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9mb250XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB0b0ZvbnRTdHJpbmcoZm9udCkge1xuXHRpZiAoIWZvbnQgfHwgaGVscGVyc19jb3JlLmlzTnVsbE9yVW5kZWYoZm9udC5zaXplKSB8fCBoZWxwZXJzX2NvcmUuaXNOdWxsT3JVbmRlZihmb250LmZhbWlseSkpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHJldHVybiAoZm9udC5zdHlsZSA/IGZvbnQuc3R5bGUgKyAnICcgOiAnJylcblx0XHQrIChmb250LndlaWdodCA/IGZvbnQud2VpZ2h0ICsgJyAnIDogJycpXG5cdFx0KyBmb250LnNpemUgKyAncHggJ1xuXHRcdCsgZm9udC5mYW1pbHk7XG59XG5cbi8qKlxuICogQGFsaWFzIENoYXJ0LmhlbHBlcnMub3B0aW9uc1xuICogQG5hbWVzcGFjZVxuICovXG52YXIgaGVscGVyc19vcHRpb25zID0ge1xuXHQvKipcblx0ICogQ29udmVydHMgdGhlIGdpdmVuIGxpbmUgaGVpZ2h0IGB2YWx1ZWAgaW4gcGl4ZWxzIGZvciBhIHNwZWNpZmljIGZvbnQgYHNpemVgLlxuXHQgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHZhbHVlIC0gVGhlIGxpbmVIZWlnaHQgdG8gcGFyc2UgKGVnLiAxLjYsICcxNHB4JywgJzc1JScsICcxLjZlbScpLlxuXHQgKiBAcGFyYW0ge251bWJlcn0gc2l6ZSAtIFRoZSBmb250IHNpemUgKGluIHBpeGVscykgdXNlZCB0byByZXNvbHZlIHJlbGF0aXZlIGB2YWx1ZWAuXG5cdCAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBlZmZlY3RpdmUgbGluZSBoZWlnaHQgaW4gcGl4ZWxzIChzaXplICogMS4yIGlmIHZhbHVlIGlzIGludmFsaWQpLlxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9saW5lLWhlaWdodFxuXHQgKiBAc2luY2UgMi43LjBcblx0ICovXG5cdHRvTGluZUhlaWdodDogZnVuY3Rpb24odmFsdWUsIHNpemUpIHtcblx0XHR2YXIgbWF0Y2hlcyA9ICgnJyArIHZhbHVlKS5tYXRjaCgvXihub3JtYWx8KFxcZCsoPzpcXC5cXGQrKT8pKHB4fGVtfCUpPykkLyk7XG5cdFx0aWYgKCFtYXRjaGVzIHx8IG1hdGNoZXNbMV0gPT09ICdub3JtYWwnKSB7XG5cdFx0XHRyZXR1cm4gc2l6ZSAqIDEuMjtcblx0XHR9XG5cblx0XHR2YWx1ZSA9ICttYXRjaGVzWzJdO1xuXG5cdFx0c3dpdGNoIChtYXRjaGVzWzNdKSB7XG5cdFx0Y2FzZSAncHgnOlxuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdGNhc2UgJyUnOlxuXHRcdFx0dmFsdWUgLz0gMTAwO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdHJldHVybiBzaXplICogdmFsdWU7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIHRoZSBnaXZlbiB2YWx1ZSBpbnRvIGEgcGFkZGluZyBvYmplY3Qgd2l0aCBwcmUtY29tcHV0ZWQgd2lkdGgvaGVpZ2h0LlxuXHQgKiBAcGFyYW0ge251bWJlcnxvYmplY3R9IHZhbHVlIC0gSWYgYSBudW1iZXIsIHNldCB0aGUgdmFsdWUgdG8gYWxsIFRSQkwgY29tcG9uZW50LFxuXHQgKiAgZWxzZSwgaWYgYW5kIG9iamVjdCwgdXNlIGRlZmluZWQgcHJvcGVydGllcyBhbmQgc2V0cyB1bmRlZmluZWQgb25lcyB0byAwLlxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgcGFkZGluZyB2YWx1ZXMgKHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgd2lkdGgsIGhlaWdodClcblx0ICogQHNpbmNlIDIuNy4wXG5cdCAqL1xuXHR0b1BhZGRpbmc6IGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0dmFyIHQsIHIsIGIsIGw7XG5cblx0XHRpZiAoaGVscGVyc19jb3JlLmlzT2JqZWN0KHZhbHVlKSkge1xuXHRcdFx0dCA9ICt2YWx1ZS50b3AgfHwgMDtcblx0XHRcdHIgPSArdmFsdWUucmlnaHQgfHwgMDtcblx0XHRcdGIgPSArdmFsdWUuYm90dG9tIHx8IDA7XG5cdFx0XHRsID0gK3ZhbHVlLmxlZnQgfHwgMDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dCA9IHIgPSBiID0gbCA9ICt2YWx1ZSB8fCAwO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IHQsXG5cdFx0XHRyaWdodDogcixcblx0XHRcdGJvdHRvbTogYixcblx0XHRcdGxlZnQ6IGwsXG5cdFx0XHRoZWlnaHQ6IHQgKyBiLFxuXHRcdFx0d2lkdGg6IGwgKyByXG5cdFx0fTtcblx0fSxcblxuXHQvKipcblx0ICogUGFyc2VzIGZvbnQgb3B0aW9ucyBhbmQgcmV0dXJucyB0aGUgZm9udCBvYmplY3QuXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gQSBvYmplY3QgdGhhdCBjb250YWlucyBmb250IG9wdGlvbnMgdG8gYmUgcGFyc2VkLlxuXHQgKiBAcmV0dXJuIHtvYmplY3R9IFRoZSBmb250IG9iamVjdC5cblx0ICogQHRvZG8gU3VwcG9ydCBmb250Liogb3B0aW9ucyBhbmQgcmVuYW1lZCB0byB0b0ZvbnQoKS5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9wYXJzZUZvbnQ6IGZ1bmN0aW9uKG9wdGlvbnMpIHtcblx0XHR2YXIgZ2xvYmFsRGVmYXVsdHMgPSBjb3JlX2RlZmF1bHRzLmdsb2JhbDtcblx0XHR2YXIgc2l6ZSA9IHZhbHVlT3JEZWZhdWx0KG9wdGlvbnMuZm9udFNpemUsIGdsb2JhbERlZmF1bHRzLmRlZmF1bHRGb250U2l6ZSk7XG5cdFx0dmFyIGZvbnQgPSB7XG5cdFx0XHRmYW1pbHk6IHZhbHVlT3JEZWZhdWx0KG9wdGlvbnMuZm9udEZhbWlseSwgZ2xvYmFsRGVmYXVsdHMuZGVmYXVsdEZvbnRGYW1pbHkpLFxuXHRcdFx0bGluZUhlaWdodDogaGVscGVyc19jb3JlLm9wdGlvbnMudG9MaW5lSGVpZ2h0KHZhbHVlT3JEZWZhdWx0KG9wdGlvbnMubGluZUhlaWdodCwgZ2xvYmFsRGVmYXVsdHMuZGVmYXVsdExpbmVIZWlnaHQpLCBzaXplKSxcblx0XHRcdHNpemU6IHNpemUsXG5cdFx0XHRzdHlsZTogdmFsdWVPckRlZmF1bHQob3B0aW9ucy5mb250U3R5bGUsIGdsb2JhbERlZmF1bHRzLmRlZmF1bHRGb250U3R5bGUpLFxuXHRcdFx0d2VpZ2h0OiBudWxsLFxuXHRcdFx0c3RyaW5nOiAnJ1xuXHRcdH07XG5cblx0XHRmb250LnN0cmluZyA9IHRvRm9udFN0cmluZyhmb250KTtcblx0XHRyZXR1cm4gZm9udDtcblx0fSxcblxuXHQvKipcblx0ICogRXZhbHVhdGVzIHRoZSBnaXZlbiBgaW5wdXRzYCBzZXF1ZW50aWFsbHkgYW5kIHJldHVybnMgdGhlIGZpcnN0IGRlZmluZWQgdmFsdWUuXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGlucHV0cyAtIEFuIGFycmF5IG9mIHZhbHVlcywgZmFsbGluZyBiYWNrIHRvIHRoZSBsYXN0IHZhbHVlLlxuXHQgKiBAcGFyYW0ge29iamVjdH0gW2NvbnRleHRdIC0gSWYgZGVmaW5lZCBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgaXMgYSBmdW5jdGlvbiwgdGhlIHZhbHVlXG5cdCAqIGlzIGNhbGxlZCB3aXRoIGBjb250ZXh0YCBhcyBmaXJzdCBhcmd1bWVudCBhbmQgdGhlIHJlc3VsdCBiZWNvbWVzIHRoZSBuZXcgaW5wdXQuXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBbaW5kZXhdIC0gSWYgZGVmaW5lZCBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgaXMgYW4gYXJyYXksIHRoZSB2YWx1ZVxuXHQgKiBhdCBgaW5kZXhgIGJlY29tZSB0aGUgbmV3IGlucHV0LlxuXHQgKiBAc2luY2UgMi43LjBcblx0ICovXG5cdHJlc29sdmU6IGZ1bmN0aW9uKGlucHV0cywgY29udGV4dCwgaW5kZXgpIHtcblx0XHR2YXIgaSwgaWxlbiwgdmFsdWU7XG5cblx0XHRmb3IgKGkgPSAwLCBpbGVuID0gaW5wdXRzLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xuXHRcdFx0dmFsdWUgPSBpbnB1dHNbaV07XG5cdFx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGlmIChjb250ZXh0ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUoY29udGV4dCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoaW5kZXggIT09IHVuZGVmaW5lZCAmJiBoZWxwZXJzX2NvcmUuaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZVtpbmRleF07XG5cdFx0XHR9XG5cdFx0XHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgaGVscGVycyQxID0gaGVscGVyc19jb3JlO1xudmFyIGVhc2luZyA9IGhlbHBlcnNfZWFzaW5nO1xudmFyIGNhbnZhcyA9IGhlbHBlcnNfY2FudmFzO1xudmFyIG9wdGlvbnMgPSBoZWxwZXJzX29wdGlvbnM7XG5oZWxwZXJzJDEuZWFzaW5nID0gZWFzaW5nO1xuaGVscGVycyQxLmNhbnZhcyA9IGNhbnZhcztcbmhlbHBlcnMkMS5vcHRpb25zID0gb3B0aW9ucztcblxuZnVuY3Rpb24gaW50ZXJwb2xhdGUoc3RhcnQsIHZpZXcsIG1vZGVsLCBlYXNlKSB7XG5cdHZhciBrZXlzID0gT2JqZWN0LmtleXMobW9kZWwpO1xuXHR2YXIgaSwgaWxlbiwga2V5LCBhY3R1YWwsIG9yaWdpbiwgdGFyZ2V0LCB0eXBlLCBjMCwgYzE7XG5cblx0Zm9yIChpID0gMCwgaWxlbiA9IGtleXMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XG5cdFx0a2V5ID0ga2V5c1tpXTtcblxuXHRcdHRhcmdldCA9IG1vZGVsW2tleV07XG5cblx0XHQvLyBpZiBhIHZhbHVlIGlzIGFkZGVkIHRvIHRoZSBtb2RlbCBhZnRlciBwaXZvdCgpIGhhcyBiZWVuIGNhbGxlZCwgdGhlIHZpZXdcblx0XHQvLyBkb2Vzbid0IGNvbnRhaW4gaXQsIHNvIGxldCdzIGluaXRpYWxpemUgdGhlIHZpZXcgdG8gdGhlIHRhcmdldCB2YWx1ZS5cblx0XHRpZiAoIXZpZXcuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0dmlld1trZXldID0gdGFyZ2V0O1xuXHRcdH1cblxuXHRcdGFjdHVhbCA9IHZpZXdba2V5XTtcblxuXHRcdGlmIChhY3R1YWwgPT09IHRhcmdldCB8fCBrZXlbMF0gPT09ICdfJykge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKCFzdGFydC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRzdGFydFtrZXldID0gYWN0dWFsO1xuXHRcdH1cblxuXHRcdG9yaWdpbiA9IHN0YXJ0W2tleV07XG5cblx0XHR0eXBlID0gdHlwZW9mIHRhcmdldDtcblxuXHRcdGlmICh0eXBlID09PSB0eXBlb2Ygb3JpZ2luKSB7XG5cdFx0XHRpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0YzAgPSBjaGFydGpzQ29sb3Iob3JpZ2luKTtcblx0XHRcdFx0aWYgKGMwLnZhbGlkKSB7XG5cdFx0XHRcdFx0YzEgPSBjaGFydGpzQ29sb3IodGFyZ2V0KTtcblx0XHRcdFx0XHRpZiAoYzEudmFsaWQpIHtcblx0XHRcdFx0XHRcdHZpZXdba2V5XSA9IGMxLm1peChjMCwgZWFzZSkucmdiU3RyaW5nKCk7XG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoaGVscGVycyQxLmlzRmluaXRlKG9yaWdpbikgJiYgaGVscGVycyQxLmlzRmluaXRlKHRhcmdldCkpIHtcblx0XHRcdFx0dmlld1trZXldID0gb3JpZ2luICsgKHRhcmdldCAtIG9yaWdpbikgKiBlYXNlO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2aWV3W2tleV0gPSB0YXJnZXQ7XG5cdH1cbn1cblxudmFyIEVsZW1lbnQgPSBmdW5jdGlvbihjb25maWd1cmF0aW9uKSB7XG5cdGhlbHBlcnMkMS5leHRlbmQodGhpcywgY29uZmlndXJhdGlvbik7XG5cdHRoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcblxuaGVscGVycyQxLmV4dGVuZChFbGVtZW50LnByb3RvdHlwZSwge1xuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuaGlkZGVuID0gZmFsc2U7XG5cdH0sXG5cblx0cGl2b3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0aWYgKCFtZS5fdmlldykge1xuXHRcdFx0bWUuX3ZpZXcgPSBoZWxwZXJzJDEuY2xvbmUobWUuX21vZGVsKTtcblx0XHR9XG5cdFx0bWUuX3N0YXJ0ID0ge307XG5cdFx0cmV0dXJuIG1lO1xuXHR9LFxuXG5cdHRyYW5zaXRpb246IGZ1bmN0aW9uKGVhc2UpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciBtb2RlbCA9IG1lLl9tb2RlbDtcblx0XHR2YXIgc3RhcnQgPSBtZS5fc3RhcnQ7XG5cdFx0dmFyIHZpZXcgPSBtZS5fdmlldztcblxuXHRcdC8vIE5vIGFuaW1hdGlvbiAtPiBObyBUcmFuc2l0aW9uXG5cdFx0aWYgKCFtb2RlbCB8fCBlYXNlID09PSAxKSB7XG5cdFx0XHRtZS5fdmlldyA9IG1vZGVsO1xuXHRcdFx0bWUuX3N0YXJ0ID0gbnVsbDtcblx0XHRcdHJldHVybiBtZTtcblx0XHR9XG5cblx0XHRpZiAoIXZpZXcpIHtcblx0XHRcdHZpZXcgPSBtZS5fdmlldyA9IHt9O1xuXHRcdH1cblxuXHRcdGlmICghc3RhcnQpIHtcblx0XHRcdHN0YXJ0ID0gbWUuX3N0YXJ0ID0ge307XG5cdFx0fVxuXG5cdFx0aW50ZXJwb2xhdGUoc3RhcnQsIHZpZXcsIG1vZGVsLCBlYXNlKTtcblxuXHRcdHJldHVybiBtZTtcblx0fSxcblxuXHR0b29sdGlwUG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHR4OiB0aGlzLl9tb2RlbC54LFxuXHRcdFx0eTogdGhpcy5fbW9kZWwueVxuXHRcdH07XG5cdH0sXG5cblx0aGFzVmFsdWU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBoZWxwZXJzJDEuaXNOdW1iZXIodGhpcy5fbW9kZWwueCkgJiYgaGVscGVycyQxLmlzTnVtYmVyKHRoaXMuX21vZGVsLnkpO1xuXHR9XG59KTtcblxuRWxlbWVudC5leHRlbmQgPSBoZWxwZXJzJDEuaW5oZXJpdHM7XG5cbnZhciBjb3JlX2VsZW1lbnQgPSBFbGVtZW50O1xuXG52YXIgZXhwb3J0cyQyID0gY29yZV9lbGVtZW50LmV4dGVuZCh7XG5cdGNoYXJ0OiBudWxsLCAvLyB0aGUgYW5pbWF0aW9uIGFzc29jaWF0ZWQgY2hhcnQgaW5zdGFuY2Vcblx0Y3VycmVudFN0ZXA6IDAsIC8vIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBzdGVwXG5cdG51bVN0ZXBzOiA2MCwgLy8gZGVmYXVsdCBudW1iZXIgb2Ygc3RlcHNcblx0ZWFzaW5nOiAnJywgLy8gdGhlIGVhc2luZyB0byB1c2UgZm9yIHRoaXMgYW5pbWF0aW9uXG5cdHJlbmRlcjogbnVsbCwgLy8gcmVuZGVyIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIGFuaW1hdGlvbiBzZXJ2aWNlXG5cblx0b25BbmltYXRpb25Qcm9ncmVzczogbnVsbCwgLy8gdXNlciBzcGVjaWZpZWQgY2FsbGJhY2sgdG8gZmlyZSBvbiBlYWNoIHN0ZXAgb2YgdGhlIGFuaW1hdGlvblxuXHRvbkFuaW1hdGlvbkNvbXBsZXRlOiBudWxsLCAvLyB1c2VyIHNwZWNpZmllZCBjYWxsYmFjayB0byBmaXJlIHdoZW4gdGhlIGFuaW1hdGlvbiBmaW5pc2hlc1xufSk7XG5cbnZhciBjb3JlX2FuaW1hdGlvbiA9IGV4cG9ydHMkMjtcblxuLy8gREVQUkVDQVRJT05TXG5cbi8qKlxuICogUHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHVzZSBDaGFydC5BbmltYXRpb24gaW5zdGVhZFxuICogQHByb3AgQ2hhcnQuQW5pbWF0aW9uI2FuaW1hdGlvbk9iamVjdFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAyLjYuMFxuICogQHRvZG8gcmVtb3ZlIGF0IHZlcnNpb24gM1xuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cyQyLnByb3RvdHlwZSwgJ2FuaW1hdGlvbk9iamVjdCcsIHtcblx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufSk7XG5cbi8qKlxuICogUHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHVzZSBDaGFydC5BbmltYXRpb24jY2hhcnQgaW5zdGVhZFxuICogQHByb3AgQ2hhcnQuQW5pbWF0aW9uI2NoYXJ0SW5zdGFuY2VcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMi42LjBcbiAqIEB0b2RvIHJlbW92ZSBhdCB2ZXJzaW9uIDNcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMkMi5wcm90b3R5cGUsICdjaGFydEluc3RhbmNlJywge1xuXHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmNoYXJ0O1xuXHR9LFxuXHRzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0dGhpcy5jaGFydCA9IHZhbHVlO1xuXHR9XG59KTtcblxuY29yZV9kZWZhdWx0cy5fc2V0KCdnbG9iYWwnLCB7XG5cdGFuaW1hdGlvbjoge1xuXHRcdGR1cmF0aW9uOiAxMDAwLFxuXHRcdGVhc2luZzogJ2Vhc2VPdXRRdWFydCcsXG5cdFx0b25Qcm9ncmVzczogaGVscGVycyQxLm5vb3AsXG5cdFx0b25Db21wbGV0ZTogaGVscGVycyQxLm5vb3Bcblx0fVxufSk7XG5cbnZhciBjb3JlX2FuaW1hdGlvbnMgPSB7XG5cdGFuaW1hdGlvbnM6IFtdLFxuXHRyZXF1ZXN0OiBudWxsLFxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0NoYXJ0fSBjaGFydCAtIFRoZSBjaGFydCB0byBhbmltYXRlLlxuXHQgKiBAcGFyYW0ge0NoYXJ0LkFuaW1hdGlvbn0gYW5pbWF0aW9uIC0gVGhlIGFuaW1hdGlvbiB0aGF0IHdlIHdpbGwgYW5pbWF0ZS5cblx0ICogQHBhcmFtIHtudW1iZXJ9IGR1cmF0aW9uIC0gVGhlIGFuaW1hdGlvbiBkdXJhdGlvbiBpbiBtcy5cblx0ICogQHBhcmFtIHtib29sZWFufSBsYXp5IC0gaWYgdHJ1ZSwgdGhlIGNoYXJ0IGlzIG5vdCBtYXJrZWQgYXMgYW5pbWF0aW5nIHRvIGVuYWJsZSBtb3JlIHJlc3BvbnNpdmUgaW50ZXJhY3Rpb25zXG5cdCAqL1xuXHRhZGRBbmltYXRpb246IGZ1bmN0aW9uKGNoYXJ0LCBhbmltYXRpb24sIGR1cmF0aW9uLCBsYXp5KSB7XG5cdFx0dmFyIGFuaW1hdGlvbnMgPSB0aGlzLmFuaW1hdGlvbnM7XG5cdFx0dmFyIGksIGlsZW47XG5cblx0XHRhbmltYXRpb24uY2hhcnQgPSBjaGFydDtcblx0XHRhbmltYXRpb24uc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblx0XHRhbmltYXRpb24uZHVyYXRpb24gPSBkdXJhdGlvbjtcblxuXHRcdGlmICghbGF6eSkge1xuXHRcdFx0Y2hhcnQuYW5pbWF0aW5nID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwLCBpbGVuID0gYW5pbWF0aW9ucy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcblx0XHRcdGlmIChhbmltYXRpb25zW2ldLmNoYXJ0ID09PSBjaGFydCkge1xuXHRcdFx0XHRhbmltYXRpb25zW2ldID0gYW5pbWF0aW9uO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0YW5pbWF0aW9ucy5wdXNoKGFuaW1hdGlvbik7XG5cblx0XHQvLyBJZiB0aGVyZSBhcmUgbm8gYW5pbWF0aW9ucyBxdWV1ZWQsIG1hbnVhbGx5IGtpY2tzdGFydCBhIGRpZ2VzdCwgZm9yIGxhY2sgb2YgYSBiZXR0ZXIgd29yZFxuXHRcdGlmIChhbmltYXRpb25zLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0dGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTtcblx0XHR9XG5cdH0sXG5cblx0Y2FuY2VsQW5pbWF0aW9uOiBmdW5jdGlvbihjaGFydCkge1xuXHRcdHZhciBpbmRleCA9IGhlbHBlcnMkMS5maW5kSW5kZXgodGhpcy5hbmltYXRpb25zLCBmdW5jdGlvbihhbmltYXRpb24pIHtcblx0XHRcdHJldHVybiBhbmltYXRpb24uY2hhcnQgPT09IGNoYXJ0O1xuXHRcdH0pO1xuXG5cdFx0aWYgKGluZGV4ICE9PSAtMSkge1xuXHRcdFx0dGhpcy5hbmltYXRpb25zLnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHRjaGFydC5hbmltYXRpbmcgPSBmYWxzZTtcblx0XHR9XG5cdH0sXG5cblx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdGlmIChtZS5yZXF1ZXN0ID09PSBudWxsKSB7XG5cdFx0XHQvLyBTa2lwIGFuaW1hdGlvbiBmcmFtZSByZXF1ZXN0cyB1bnRpbCB0aGUgYWN0aXZlIG9uZSBpcyBleGVjdXRlZC5cblx0XHRcdC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHByb2Nlc3NpbmcgbW91c2UgZXZlbnRzLCBlLmcuICdtb3VzZW1vdmUnXG5cdFx0XHQvLyBhbmQgJ21vdXNlb3V0JyBldmVudHMgd2lsbCB0cmlnZ2VyIG11bHRpcGxlIHJlbmRlcnMuXG5cdFx0XHRtZS5yZXF1ZXN0ID0gaGVscGVycyQxLnJlcXVlc3RBbmltRnJhbWUuY2FsbCh3aW5kb3csIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRtZS5yZXF1ZXN0ID0gbnVsbDtcblx0XHRcdFx0bWUuc3RhcnREaWdlc3QoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHN0YXJ0RGlnZXN0OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXG5cdFx0bWUuYWR2YW5jZSgpO1xuXG5cdFx0Ly8gRG8gd2UgaGF2ZSBtb3JlIHN0dWZmIHRvIGFuaW1hdGU/XG5cdFx0aWYgKG1lLmFuaW1hdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0bWUucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0YWR2YW5jZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGFuaW1hdGlvbnMgPSB0aGlzLmFuaW1hdGlvbnM7XG5cdFx0dmFyIGFuaW1hdGlvbiwgY2hhcnQsIG51bVN0ZXBzLCBuZXh0U3RlcDtcblx0XHR2YXIgaSA9IDA7XG5cblx0XHQvLyAxIGFuaW1hdGlvbiBwZXIgY2hhcnQsIHNvIHdlIGFyZSBsb29waW5nIGNoYXJ0cyBoZXJlXG5cdFx0d2hpbGUgKGkgPCBhbmltYXRpb25zLmxlbmd0aCkge1xuXHRcdFx0YW5pbWF0aW9uID0gYW5pbWF0aW9uc1tpXTtcblx0XHRcdGNoYXJ0ID0gYW5pbWF0aW9uLmNoYXJ0O1xuXHRcdFx0bnVtU3RlcHMgPSBhbmltYXRpb24ubnVtU3RlcHM7XG5cblx0XHRcdC8vIE1ha2Ugc3VyZSB0aGF0IGN1cnJlbnRTdGVwIHN0YXJ0cyBhdCAxXG5cdFx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9pc3N1ZXMvNjEwNFxuXHRcdFx0bmV4dFN0ZXAgPSBNYXRoLmZsb29yKChEYXRlLm5vdygpIC0gYW5pbWF0aW9uLnN0YXJ0VGltZSkgLyBhbmltYXRpb24uZHVyYXRpb24gKiBudW1TdGVwcykgKyAxO1xuXHRcdFx0YW5pbWF0aW9uLmN1cnJlbnRTdGVwID0gTWF0aC5taW4obmV4dFN0ZXAsIG51bVN0ZXBzKTtcblxuXHRcdFx0aGVscGVycyQxLmNhbGxiYWNrKGFuaW1hdGlvbi5yZW5kZXIsIFtjaGFydCwgYW5pbWF0aW9uXSwgY2hhcnQpO1xuXHRcdFx0aGVscGVycyQxLmNhbGxiYWNrKGFuaW1hdGlvbi5vbkFuaW1hdGlvblByb2dyZXNzLCBbYW5pbWF0aW9uXSwgY2hhcnQpO1xuXG5cdFx0XHRpZiAoYW5pbWF0aW9uLmN1cnJlbnRTdGVwID49IG51bVN0ZXBzKSB7XG5cdFx0XHRcdGhlbHBlcnMkMS5jYWxsYmFjayhhbmltYXRpb24ub25BbmltYXRpb25Db21wbGV0ZSwgW2FuaW1hdGlvbl0sIGNoYXJ0KTtcblx0XHRcdFx0Y2hhcnQuYW5pbWF0aW5nID0gZmFsc2U7XG5cdFx0XHRcdGFuaW1hdGlvbnMuc3BsaWNlKGksIDEpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0KytpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxudmFyIHJlc29sdmUgPSBoZWxwZXJzJDEub3B0aW9ucy5yZXNvbHZlO1xuXG52YXIgYXJyYXlFdmVudHMgPSBbJ3B1c2gnLCAncG9wJywgJ3NoaWZ0JywgJ3NwbGljZScsICd1bnNoaWZ0J107XG5cbi8qKlxuICogSG9va3MgdGhlIGFycmF5IG1ldGhvZHMgdGhhdCBhZGQgb3IgcmVtb3ZlIHZhbHVlcyAoJ3B1c2gnLCBwb3AnLCAnc2hpZnQnLCAnc3BsaWNlJyxcbiAqICd1bnNoaWZ0JykgYW5kIG5vdGlmeSB0aGUgbGlzdGVuZXIgQUZURVIgdGhlIGFycmF5IGhhcyBiZWVuIGFsdGVyZWQuIExpc3RlbmVycyBhcmVcbiAqIGNhbGxlZCBvbiB0aGUgJ29uRGF0YSonIGNhbGxiYWNrcyAoZS5nLiBvbkRhdGFQdXNoLCBldGMuKSB3aXRoIHNhbWUgYXJndW1lbnRzLlxuICovXG5mdW5jdGlvbiBsaXN0ZW5BcnJheUV2ZW50cyhhcnJheSwgbGlzdGVuZXIpIHtcblx0aWYgKGFycmF5Ll9jaGFydGpzKSB7XG5cdFx0YXJyYXkuX2NoYXJ0anMubGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhcnJheSwgJ19jaGFydGpzJywge1xuXHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR2YWx1ZToge1xuXHRcdFx0bGlzdGVuZXJzOiBbbGlzdGVuZXJdXG5cdFx0fVxuXHR9KTtcblxuXHRhcnJheUV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuXHRcdHZhciBtZXRob2QgPSAnb25EYXRhJyArIGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKTtcblx0XHR2YXIgYmFzZSA9IGFycmF5W2tleV07XG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoYXJyYXksIGtleSwge1xuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0XHRcdFx0dmFyIHJlcyA9IGJhc2UuYXBwbHkodGhpcywgYXJncyk7XG5cblx0XHRcdFx0aGVscGVycyQxLmVhY2goYXJyYXkuX2NoYXJ0anMubGlzdGVuZXJzLCBmdW5jdGlvbihvYmplY3QpIHtcblx0XHRcdFx0XHRpZiAodHlwZW9mIG9iamVjdFttZXRob2RdID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHRvYmplY3RbbWV0aG9kXS5hcHBseShvYmplY3QsIGFyZ3MpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cmV0dXJuIHJlcztcblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG59XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgZ2l2ZW4gYXJyYXkgZXZlbnQgbGlzdGVuZXIgYW5kIGNsZWFudXAgZXh0cmEgYXR0YWNoZWQgcHJvcGVydGllcyAoc3VjaCBhc1xuICogdGhlIF9jaGFydGpzIHN0dWIgYW5kIG92ZXJyaWRkZW4gbWV0aG9kcykgaWYgYXJyYXkgZG9lc24ndCBoYXZlIGFueSBtb3JlIGxpc3RlbmVycy5cbiAqL1xuZnVuY3Rpb24gdW5saXN0ZW5BcnJheUV2ZW50cyhhcnJheSwgbGlzdGVuZXIpIHtcblx0dmFyIHN0dWIgPSBhcnJheS5fY2hhcnRqcztcblx0aWYgKCFzdHViKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dmFyIGxpc3RlbmVycyA9IHN0dWIubGlzdGVuZXJzO1xuXHR2YXIgaW5kZXggPSBsaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG5cdGlmIChpbmRleCAhPT0gLTEpIHtcblx0XHRsaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcblx0fVxuXG5cdGlmIChsaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGFycmF5RXZlbnRzLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG5cdFx0ZGVsZXRlIGFycmF5W2tleV07XG5cdH0pO1xuXG5cdGRlbGV0ZSBhcnJheS5fY2hhcnRqcztcbn1cblxuLy8gQmFzZSBjbGFzcyBmb3IgYWxsIGRhdGFzZXQgY29udHJvbGxlcnMgKGxpbmUsIGJhciwgZXRjKVxudmFyIERhdGFzZXRDb250cm9sbGVyID0gZnVuY3Rpb24oY2hhcnQsIGRhdGFzZXRJbmRleCkge1xuXHR0aGlzLmluaXRpYWxpemUoY2hhcnQsIGRhdGFzZXRJbmRleCk7XG59O1xuXG5oZWxwZXJzJDEuZXh0ZW5kKERhdGFzZXRDb250cm9sbGVyLnByb3RvdHlwZSwge1xuXG5cdC8qKlxuXHQgKiBFbGVtZW50IHR5cGUgdXNlZCB0byBnZW5lcmF0ZSBhIG1ldGEgZGF0YXNldCAoZS5nLiBDaGFydC5lbGVtZW50LkxpbmUpLlxuXHQgKiBAdHlwZSB7Q2hhcnQuY29yZS5lbGVtZW50fVxuXHQgKi9cblx0ZGF0YXNldEVsZW1lbnRUeXBlOiBudWxsLFxuXG5cdC8qKlxuXHQgKiBFbGVtZW50IHR5cGUgdXNlZCB0byBnZW5lcmF0ZSBhIG1ldGEgZGF0YSAoZS5nLiBDaGFydC5lbGVtZW50LlBvaW50KS5cblx0ICogQHR5cGUge0NoYXJ0LmNvcmUuZWxlbWVudH1cblx0ICovXG5cdGRhdGFFbGVtZW50VHlwZTogbnVsbCxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihjaGFydCwgZGF0YXNldEluZGV4KSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHRtZS5jaGFydCA9IGNoYXJ0O1xuXHRcdG1lLmluZGV4ID0gZGF0YXNldEluZGV4O1xuXHRcdG1lLmxpbmtTY2FsZXMoKTtcblx0XHRtZS5hZGRFbGVtZW50cygpO1xuXHR9LFxuXG5cdHVwZGF0ZUluZGV4OiBmdW5jdGlvbihkYXRhc2V0SW5kZXgpIHtcblx0XHR0aGlzLmluZGV4ID0gZGF0YXNldEluZGV4O1xuXHR9LFxuXG5cdGxpbmtTY2FsZXM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIG1ldGEgPSBtZS5nZXRNZXRhKCk7XG5cdFx0dmFyIGRhdGFzZXQgPSBtZS5nZXREYXRhc2V0KCk7XG5cblx0XHRpZiAobWV0YS54QXhpc0lEID09PSBudWxsIHx8ICEobWV0YS54QXhpc0lEIGluIG1lLmNoYXJ0LnNjYWxlcykpIHtcblx0XHRcdG1ldGEueEF4aXNJRCA9IGRhdGFzZXQueEF4aXNJRCB8fCBtZS5jaGFydC5vcHRpb25zLnNjYWxlcy54QXhlc1swXS5pZDtcblx0XHR9XG5cdFx0aWYgKG1ldGEueUF4aXNJRCA9PT0gbnVsbCB8fCAhKG1ldGEueUF4aXNJRCBpbiBtZS5jaGFydC5zY2FsZXMpKSB7XG5cdFx0XHRtZXRhLnlBeGlzSUQgPSBkYXRhc2V0LnlBeGlzSUQgfHwgbWUuY2hhcnQub3B0aW9ucy5zY2FsZXMueUF4ZXNbMF0uaWQ7XG5cdFx0fVxuXHR9LFxuXG5cdGdldERhdGFzZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHNbdGhpcy5pbmRleF07XG5cdH0sXG5cblx0Z2V0TWV0YTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuY2hhcnQuZ2V0RGF0YXNldE1ldGEodGhpcy5pbmRleCk7XG5cdH0sXG5cblx0Z2V0U2NhbGVGb3JJZDogZnVuY3Rpb24oc2NhbGVJRCkge1xuXHRcdHJldHVybiB0aGlzLmNoYXJ0LnNjYWxlc1tzY2FsZUlEXTtcblx0fSxcblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9nZXRWYWx1ZVNjYWxlSWQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE1ldGEoKS55QXhpc0lEO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2dldEluZGV4U2NhbGVJZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TWV0YSgpLnhBeGlzSUQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0VmFsdWVTY2FsZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2NhbGVGb3JJZCh0aGlzLl9nZXRWYWx1ZVNjYWxlSWQoKSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0SW5kZXhTY2FsZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2NhbGVGb3JJZCh0aGlzLl9nZXRJbmRleFNjYWxlSWQoKSk7XG5cdH0sXG5cblx0cmVzZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMudXBkYXRlKHRydWUpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0ZGVzdHJveTogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKHRoaXMuX2RhdGEpIHtcblx0XHRcdHVubGlzdGVuQXJyYXlFdmVudHModGhpcy5fZGF0YSwgdGhpcyk7XG5cdFx0fVxuXHR9LFxuXG5cdGNyZWF0ZU1ldGFEYXRhc2V0OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciB0eXBlID0gbWUuZGF0YXNldEVsZW1lbnRUeXBlO1xuXHRcdHJldHVybiB0eXBlICYmIG5ldyB0eXBlKHtcblx0XHRcdF9jaGFydDogbWUuY2hhcnQsXG5cdFx0XHRfZGF0YXNldEluZGV4OiBtZS5pbmRleFxuXHRcdH0pO1xuXHR9LFxuXG5cdGNyZWF0ZU1ldGFEYXRhOiBmdW5jdGlvbihpbmRleCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIHR5cGUgPSBtZS5kYXRhRWxlbWVudFR5cGU7XG5cdFx0cmV0dXJuIHR5cGUgJiYgbmV3IHR5cGUoe1xuXHRcdFx0X2NoYXJ0OiBtZS5jaGFydCxcblx0XHRcdF9kYXRhc2V0SW5kZXg6IG1lLmluZGV4LFxuXHRcdFx0X2luZGV4OiBpbmRleFxuXHRcdH0pO1xuXHR9LFxuXG5cdGFkZEVsZW1lbnRzOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciBtZXRhID0gbWUuZ2V0TWV0YSgpO1xuXHRcdHZhciBkYXRhID0gbWUuZ2V0RGF0YXNldCgpLmRhdGEgfHwgW107XG5cdFx0dmFyIG1ldGFEYXRhID0gbWV0YS5kYXRhO1xuXHRcdHZhciBpLCBpbGVuO1xuXG5cdFx0Zm9yIChpID0gMCwgaWxlbiA9IGRhdGEubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XG5cdFx0XHRtZXRhRGF0YVtpXSA9IG1ldGFEYXRhW2ldIHx8IG1lLmNyZWF0ZU1ldGFEYXRhKGkpO1xuXHRcdH1cblxuXHRcdG1ldGEuZGF0YXNldCA9IG1ldGEuZGF0YXNldCB8fCBtZS5jcmVhdGVNZXRhRGF0YXNldCgpO1xuXHR9LFxuXG5cdGFkZEVsZW1lbnRBbmRSZXNldDogZnVuY3Rpb24oaW5kZXgpIHtcblx0XHR2YXIgZWxlbWVudCA9IHRoaXMuY3JlYXRlTWV0YURhdGEoaW5kZXgpO1xuXHRcdHRoaXMuZ2V0TWV0YSgpLmRhdGEuc3BsaWNlKGluZGV4LCAwLCBlbGVtZW50KTtcblx0XHR0aGlzLnVwZGF0ZUVsZW1lbnQoZWxlbWVudCwgaW5kZXgsIHRydWUpO1xuXHR9LFxuXG5cdGJ1aWxkT3JVcGRhdGVFbGVtZW50czogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgZGF0YXNldCA9IG1lLmdldERhdGFzZXQoKTtcblx0XHR2YXIgZGF0YSA9IGRhdGFzZXQuZGF0YSB8fCAoZGF0YXNldC5kYXRhID0gW10pO1xuXG5cdFx0Ly8gSW4gb3JkZXIgdG8gY29ycmVjdGx5IGhhbmRsZSBkYXRhIGFkZGl0aW9uL2RlbGV0aW9uIGFuaW1hdGlvbiAoYW4gdGh1cyBzaW11bGF0ZVxuXHRcdC8vIHJlYWwtdGltZSBjaGFydHMpLCB3ZSBuZWVkIHRvIG1vbml0b3IgdGhlc2UgZGF0YSBtb2RpZmljYXRpb25zIGFuZCBzeW5jaHJvbml6ZVxuXHRcdC8vIHRoZSBpbnRlcm5hbCBtZXRhIGRhdGEgYWNjb3JkaW5nbHkuXG5cdFx0aWYgKG1lLl9kYXRhICE9PSBkYXRhKSB7XG5cdFx0XHRpZiAobWUuX2RhdGEpIHtcblx0XHRcdFx0Ly8gVGhpcyBjYXNlIGhhcHBlbnMgd2hlbiB0aGUgdXNlciByZXBsYWNlZCB0aGUgZGF0YSBhcnJheSBpbnN0YW5jZS5cblx0XHRcdFx0dW5saXN0ZW5BcnJheUV2ZW50cyhtZS5fZGF0YSwgbWUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZGF0YSAmJiBPYmplY3QuaXNFeHRlbnNpYmxlKGRhdGEpKSB7XG5cdFx0XHRcdGxpc3RlbkFycmF5RXZlbnRzKGRhdGEsIG1lKTtcblx0XHRcdH1cblx0XHRcdG1lLl9kYXRhID0gZGF0YTtcblx0XHR9XG5cblx0XHQvLyBSZS1zeW5jIG1ldGEgZGF0YSBpbiBjYXNlIHRoZSB1c2VyIHJlcGxhY2VkIHRoZSBkYXRhIGFycmF5IG9yIGlmIHdlIG1pc3NlZFxuXHRcdC8vIGFueSB1cGRhdGVzIGFuZCBzbyBtYWtlIHN1cmUgdGhhdCB3ZSBoYW5kbGUgbnVtYmVyIG9mIGRhdGFwb2ludHMgY2hhbmdpbmcuXG5cdFx0bWUucmVzeW5jRWxlbWVudHMoKTtcblx0fSxcblxuXHR1cGRhdGU6IGhlbHBlcnMkMS5ub29wLFxuXG5cdHRyYW5zaXRpb246IGZ1bmN0aW9uKGVhc2luZ1ZhbHVlKSB7XG5cdFx0dmFyIG1ldGEgPSB0aGlzLmdldE1ldGEoKTtcblx0XHR2YXIgZWxlbWVudHMgPSBtZXRhLmRhdGEgfHwgW107XG5cdFx0dmFyIGlsZW4gPSBlbGVtZW50cy5sZW5ndGg7XG5cdFx0dmFyIGkgPSAwO1xuXG5cdFx0Zm9yICg7IGkgPCBpbGVuOyArK2kpIHtcblx0XHRcdGVsZW1lbnRzW2ldLnRyYW5zaXRpb24oZWFzaW5nVmFsdWUpO1xuXHRcdH1cblxuXHRcdGlmIChtZXRhLmRhdGFzZXQpIHtcblx0XHRcdG1ldGEuZGF0YXNldC50cmFuc2l0aW9uKGVhc2luZ1ZhbHVlKTtcblx0XHR9XG5cdH0sXG5cblx0ZHJhdzogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG1ldGEgPSB0aGlzLmdldE1ldGEoKTtcblx0XHR2YXIgZWxlbWVudHMgPSBtZXRhLmRhdGEgfHwgW107XG5cdFx0dmFyIGlsZW4gPSBlbGVtZW50cy5sZW5ndGg7XG5cdFx0dmFyIGkgPSAwO1xuXG5cdFx0aWYgKG1ldGEuZGF0YXNldCkge1xuXHRcdFx0bWV0YS5kYXRhc2V0LmRyYXcoKTtcblx0XHR9XG5cblx0XHRmb3IgKDsgaSA8IGlsZW47ICsraSkge1xuXHRcdFx0ZWxlbWVudHNbaV0uZHJhdygpO1xuXHRcdH1cblx0fSxcblxuXHRyZW1vdmVIb3ZlclN0eWxlOiBmdW5jdGlvbihlbGVtZW50KSB7XG5cdFx0aGVscGVycyQxLm1lcmdlKGVsZW1lbnQuX21vZGVsLCBlbGVtZW50LiRwcmV2aW91c1N0eWxlIHx8IHt9KTtcblx0XHRkZWxldGUgZWxlbWVudC4kcHJldmlvdXNTdHlsZTtcblx0fSxcblxuXHRzZXRIb3ZlclN0eWxlOiBmdW5jdGlvbihlbGVtZW50KSB7XG5cdFx0dmFyIGRhdGFzZXQgPSB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHNbZWxlbWVudC5fZGF0YXNldEluZGV4XTtcblx0XHR2YXIgaW5kZXggPSBlbGVtZW50Ll9pbmRleDtcblx0XHR2YXIgY3VzdG9tID0gZWxlbWVudC5jdXN0b20gfHwge307XG5cdFx0dmFyIG1vZGVsID0gZWxlbWVudC5fbW9kZWw7XG5cdFx0dmFyIGdldEhvdmVyQ29sb3IgPSBoZWxwZXJzJDEuZ2V0SG92ZXJDb2xvcjtcblxuXHRcdGVsZW1lbnQuJHByZXZpb3VzU3R5bGUgPSB7XG5cdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IG1vZGVsLmJhY2tncm91bmRDb2xvcixcblx0XHRcdGJvcmRlckNvbG9yOiBtb2RlbC5ib3JkZXJDb2xvcixcblx0XHRcdGJvcmRlcldpZHRoOiBtb2RlbC5ib3JkZXJXaWR0aFxuXHRcdH07XG5cblx0XHRtb2RlbC5iYWNrZ3JvdW5kQ29sb3IgPSByZXNvbHZlKFtjdXN0b20uaG92ZXJCYWNrZ3JvdW5kQ29sb3IsIGRhdGFzZXQuaG92ZXJCYWNrZ3JvdW5kQ29sb3IsIGdldEhvdmVyQ29sb3IobW9kZWwuYmFja2dyb3VuZENvbG9yKV0sIHVuZGVmaW5lZCwgaW5kZXgpO1xuXHRcdG1vZGVsLmJvcmRlckNvbG9yID0gcmVzb2x2ZShbY3VzdG9tLmhvdmVyQm9yZGVyQ29sb3IsIGRhdGFzZXQuaG92ZXJCb3JkZXJDb2xvciwgZ2V0SG92ZXJDb2xvcihtb2RlbC5ib3JkZXJDb2xvcildLCB1bmRlZmluZWQsIGluZGV4KTtcblx0XHRtb2RlbC5ib3JkZXJXaWR0aCA9IHJlc29sdmUoW2N1c3RvbS5ob3ZlckJvcmRlcldpZHRoLCBkYXRhc2V0LmhvdmVyQm9yZGVyV2lkdGgsIG1vZGVsLmJvcmRlcldpZHRoXSwgdW5kZWZpbmVkLCBpbmRleCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRyZXN5bmNFbGVtZW50czogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgbWV0YSA9IG1lLmdldE1ldGEoKTtcblx0XHR2YXIgZGF0YSA9IG1lLmdldERhdGFzZXQoKS5kYXRhO1xuXHRcdHZhciBudW1NZXRhID0gbWV0YS5kYXRhLmxlbmd0aDtcblx0XHR2YXIgbnVtRGF0YSA9IGRhdGEubGVuZ3RoO1xuXG5cdFx0aWYgKG51bURhdGEgPCBudW1NZXRhKSB7XG5cdFx0XHRtZXRhLmRhdGEuc3BsaWNlKG51bURhdGEsIG51bU1ldGEgLSBudW1EYXRhKTtcblx0XHR9IGVsc2UgaWYgKG51bURhdGEgPiBudW1NZXRhKSB7XG5cdFx0XHRtZS5pbnNlcnRFbGVtZW50cyhudW1NZXRhLCBudW1EYXRhIC0gbnVtTWV0YSk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0aW5zZXJ0RWxlbWVudHM6IGZ1bmN0aW9uKHN0YXJ0LCBjb3VudCkge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkge1xuXHRcdFx0dGhpcy5hZGRFbGVtZW50QW5kUmVzZXQoc3RhcnQgKyBpKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRvbkRhdGFQdXNoOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgY291bnQgPSBhcmd1bWVudHMubGVuZ3RoO1xuXHRcdHRoaXMuaW5zZXJ0RWxlbWVudHModGhpcy5nZXREYXRhc2V0KCkuZGF0YS5sZW5ndGggLSBjb3VudCwgY291bnQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0b25EYXRhUG9wOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmdldE1ldGEoKS5kYXRhLnBvcCgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0b25EYXRhU2hpZnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuZ2V0TWV0YSgpLmRhdGEuc2hpZnQoKTtcblx0fSxcblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICovXG5cdG9uRGF0YVNwbGljZTogZnVuY3Rpb24oc3RhcnQsIGNvdW50KSB7XG5cdFx0dGhpcy5nZXRNZXRhKCkuZGF0YS5zcGxpY2Uoc3RhcnQsIGNvdW50KTtcblx0XHR0aGlzLmluc2VydEVsZW1lbnRzKHN0YXJ0LCBhcmd1bWVudHMubGVuZ3RoIC0gMik7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRvbkRhdGFVbnNoaWZ0OiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmluc2VydEVsZW1lbnRzKDAsIGFyZ3VtZW50cy5sZW5ndGgpO1xuXHR9XG59KTtcblxuRGF0YXNldENvbnRyb2xsZXIuZXh0ZW5kID0gaGVscGVycyQxLmluaGVyaXRzO1xuXG52YXIgY29yZV9kYXRhc2V0Q29udHJvbGxlciA9IERhdGFzZXRDb250cm9sbGVyO1xuXG5jb3JlX2RlZmF1bHRzLl9zZXQoJ2dsb2JhbCcsIHtcblx0ZWxlbWVudHM6IHtcblx0XHRhcmM6IHtcblx0XHRcdGJhY2tncm91bmRDb2xvcjogY29yZV9kZWZhdWx0cy5nbG9iYWwuZGVmYXVsdENvbG9yLFxuXHRcdFx0Ym9yZGVyQ29sb3I6ICcjZmZmJyxcblx0XHRcdGJvcmRlcldpZHRoOiAyLFxuXHRcdFx0Ym9yZGVyQWxpZ246ICdjZW50ZXInXG5cdFx0fVxuXHR9XG59KTtcblxudmFyIGVsZW1lbnRfYXJjID0gY29yZV9lbGVtZW50LmV4dGVuZCh7XG5cdGluTGFiZWxSYW5nZTogZnVuY3Rpb24obW91c2VYKSB7XG5cdFx0dmFyIHZtID0gdGhpcy5fdmlldztcblxuXHRcdGlmICh2bSkge1xuXHRcdFx0cmV0dXJuIChNYXRoLnBvdyhtb3VzZVggLSB2bS54LCAyKSA8IE1hdGgucG93KHZtLnJhZGl1cyArIHZtLmhvdmVyUmFkaXVzLCAyKSk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHRpblJhbmdlOiBmdW5jdGlvbihjaGFydFgsIGNoYXJ0WSkge1xuXHRcdHZhciB2bSA9IHRoaXMuX3ZpZXc7XG5cblx0XHRpZiAodm0pIHtcblx0XHRcdHZhciBwb2ludFJlbGF0aXZlUG9zaXRpb24gPSBoZWxwZXJzJDEuZ2V0QW5nbGVGcm9tUG9pbnQodm0sIHt4OiBjaGFydFgsIHk6IGNoYXJ0WX0pO1xuXHRcdFx0dmFyXHRhbmdsZSA9IHBvaW50UmVsYXRpdmVQb3NpdGlvbi5hbmdsZTtcblx0XHRcdHZhciBkaXN0YW5jZSA9IHBvaW50UmVsYXRpdmVQb3NpdGlvbi5kaXN0YW5jZTtcblxuXHRcdFx0Ly8gU2FuaXRpc2UgYW5nbGUgcmFuZ2Vcblx0XHRcdHZhciBzdGFydEFuZ2xlID0gdm0uc3RhcnRBbmdsZTtcblx0XHRcdHZhciBlbmRBbmdsZSA9IHZtLmVuZEFuZ2xlO1xuXHRcdFx0d2hpbGUgKGVuZEFuZ2xlIDwgc3RhcnRBbmdsZSkge1xuXHRcdFx0XHRlbmRBbmdsZSArPSAyLjAgKiBNYXRoLlBJO1xuXHRcdFx0fVxuXHRcdFx0d2hpbGUgKGFuZ2xlID4gZW5kQW5nbGUpIHtcblx0XHRcdFx0YW5nbGUgLT0gMi4wICogTWF0aC5QSTtcblx0XHRcdH1cblx0XHRcdHdoaWxlIChhbmdsZSA8IHN0YXJ0QW5nbGUpIHtcblx0XHRcdFx0YW5nbGUgKz0gMi4wICogTWF0aC5QSTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2hlY2sgaWYgd2l0aGluIHRoZSByYW5nZSBvZiB0aGUgb3Blbi9jbG9zZSBhbmdsZVxuXHRcdFx0dmFyIGJldHdlZW5BbmdsZXMgPSAoYW5nbGUgPj0gc3RhcnRBbmdsZSAmJiBhbmdsZSA8PSBlbmRBbmdsZSk7XG5cdFx0XHR2YXIgd2l0aGluUmFkaXVzID0gKGRpc3RhbmNlID49IHZtLmlubmVyUmFkaXVzICYmIGRpc3RhbmNlIDw9IHZtLm91dGVyUmFkaXVzKTtcblxuXHRcdFx0cmV0dXJuIChiZXR3ZWVuQW5nbGVzICYmIHdpdGhpblJhZGl1cyk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHRnZXRDZW50ZXJQb2ludDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHZtID0gdGhpcy5fdmlldztcblx0XHR2YXIgaGFsZkFuZ2xlID0gKHZtLnN0YXJ0QW5nbGUgKyB2bS5lbmRBbmdsZSkgLyAyO1xuXHRcdHZhciBoYWxmUmFkaXVzID0gKHZtLmlubmVyUmFkaXVzICsgdm0ub3V0ZXJSYWRpdXMpIC8gMjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0eDogdm0ueCArIE1hdGguY29zKGhhbGZBbmdsZSkgKiBoYWxmUmFkaXVzLFxuXHRcdFx0eTogdm0ueSArIE1hdGguc2luKGhhbGZBbmdsZSkgKiBoYWxmUmFkaXVzXG5cdFx0fTtcblx0fSxcblxuXHRnZXRBcmVhOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgdm0gPSB0aGlzLl92aWV3O1xuXHRcdHJldHVybiBNYXRoLlBJICogKCh2bS5lbmRBbmdsZSAtIHZtLnN0YXJ0QW5nbGUpIC8gKDIgKiBNYXRoLlBJKSkgKiAoTWF0aC5wb3codm0ub3V0ZXJSYWRpdXMsIDIpIC0gTWF0aC5wb3codm0uaW5uZXJSYWRpdXMsIDIpKTtcblx0fSxcblxuXHR0b29sdGlwUG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB2bSA9IHRoaXMuX3ZpZXc7XG5cdFx0dmFyIGNlbnRyZUFuZ2xlID0gdm0uc3RhcnRBbmdsZSArICgodm0uZW5kQW5nbGUgLSB2bS5zdGFydEFuZ2xlKSAvIDIpO1xuXHRcdHZhciByYW5nZUZyb21DZW50cmUgPSAodm0ub3V0ZXJSYWRpdXMgLSB2bS5pbm5lclJhZGl1cykgLyAyICsgdm0uaW5uZXJSYWRpdXM7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0eDogdm0ueCArIChNYXRoLmNvcyhjZW50cmVBbmdsZSkgKiByYW5nZUZyb21DZW50cmUpLFxuXHRcdFx0eTogdm0ueSArIChNYXRoLnNpbihjZW50cmVBbmdsZSkgKiByYW5nZUZyb21DZW50cmUpXG5cdFx0fTtcblx0fSxcblxuXHRkcmF3OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgY3R4ID0gdGhpcy5fY2hhcnQuY3R4O1xuXHRcdHZhciB2bSA9IHRoaXMuX3ZpZXc7XG5cdFx0dmFyIHNBID0gdm0uc3RhcnRBbmdsZTtcblx0XHR2YXIgZUEgPSB2bS5lbmRBbmdsZTtcblx0XHR2YXIgcGl4ZWxNYXJnaW4gPSAodm0uYm9yZGVyQWxpZ24gPT09ICdpbm5lcicpID8gMC4zMyA6IDA7XG5cdFx0dmFyIGFuZ2xlTWFyZ2luO1xuXG5cdFx0Y3R4LnNhdmUoKTtcblxuXHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRjdHguYXJjKHZtLngsIHZtLnksIE1hdGgubWF4KHZtLm91dGVyUmFkaXVzIC0gcGl4ZWxNYXJnaW4sIDApLCBzQSwgZUEpO1xuXHRcdGN0eC5hcmModm0ueCwgdm0ueSwgdm0uaW5uZXJSYWRpdXMsIGVBLCBzQSwgdHJ1ZSk7XG5cdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXG5cdFx0Y3R4LmZpbGxTdHlsZSA9IHZtLmJhY2tncm91bmRDb2xvcjtcblx0XHRjdHguZmlsbCgpO1xuXG5cdFx0aWYgKHZtLmJvcmRlcldpZHRoKSB7XG5cdFx0XHRpZiAodm0uYm9yZGVyQWxpZ24gPT09ICdpbm5lcicpIHtcblx0XHRcdFx0Ly8gRHJhdyBhbiBpbm5lciBib3JkZXIgYnkgY2xpcGluZyB0aGUgYXJjIGFuZCBkcmF3aW5nIGEgZG91YmxlLXdpZHRoIGJvcmRlclxuXHRcdFx0XHQvLyBFbmxhcmdlIHRoZSBjbGlwcGluZyBhcmMgYnkgMC4zMyBwaXhlbHMgdG8gZWxpbWluYXRlIGdsaXRjaGVzIGJldHdlZW4gYm9yZGVyc1xuXHRcdFx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0XHRcdGFuZ2xlTWFyZ2luID0gcGl4ZWxNYXJnaW4gLyB2bS5vdXRlclJhZGl1cztcblx0XHRcdFx0Y3R4LmFyYyh2bS54LCB2bS55LCB2bS5vdXRlclJhZGl1cywgc0EgLSBhbmdsZU1hcmdpbiwgZUEgKyBhbmdsZU1hcmdpbik7XG5cdFx0XHRcdGlmICh2bS5pbm5lclJhZGl1cyA+IHBpeGVsTWFyZ2luKSB7XG5cdFx0XHRcdFx0YW5nbGVNYXJnaW4gPSBwaXhlbE1hcmdpbiAvIHZtLmlubmVyUmFkaXVzO1xuXHRcdFx0XHRcdGN0eC5hcmModm0ueCwgdm0ueSwgdm0uaW5uZXJSYWRpdXMgLSBwaXhlbE1hcmdpbiwgZUEgKyBhbmdsZU1hcmdpbiwgc0EgLSBhbmdsZU1hcmdpbiwgdHJ1ZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y3R4LmFyYyh2bS54LCB2bS55LCBwaXhlbE1hcmdpbiwgZUEgKyBNYXRoLlBJIC8gMiwgc0EgLSBNYXRoLlBJIC8gMik7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXHRcdFx0XHRjdHguY2xpcCgpO1xuXG5cdFx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0Y3R4LmFyYyh2bS54LCB2bS55LCB2bS5vdXRlclJhZGl1cywgc0EsIGVBKTtcblx0XHRcdFx0Y3R4LmFyYyh2bS54LCB2bS55LCB2bS5pbm5lclJhZGl1cywgZUEsIHNBLCB0cnVlKTtcblx0XHRcdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXG5cdFx0XHRcdGN0eC5saW5lV2lkdGggPSB2bS5ib3JkZXJXaWR0aCAqIDI7XG5cdFx0XHRcdGN0eC5saW5lSm9pbiA9ICdyb3VuZCc7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjdHgubGluZVdpZHRoID0gdm0uYm9yZGVyV2lkdGg7XG5cdFx0XHRcdGN0eC5saW5lSm9pbiA9ICdiZXZlbCc7XG5cdFx0XHR9XG5cblx0XHRcdGN0eC5zdHJva2VTdHlsZSA9IHZtLmJvcmRlckNvbG9yO1xuXHRcdFx0Y3R4LnN0cm9rZSgpO1xuXHRcdH1cblxuXHRcdGN0eC5yZXN0b3JlKCk7XG5cdH1cbn0pO1xuXG52YXIgdmFsdWVPckRlZmF1bHQkMSA9IGhlbHBlcnMkMS52YWx1ZU9yRGVmYXVsdDtcblxudmFyIGRlZmF1bHRDb2xvciA9IGNvcmVfZGVmYXVsdHMuZ2xvYmFsLmRlZmF1bHRDb2xvcjtcblxuY29yZV9kZWZhdWx0cy5fc2V0KCdnbG9iYWwnLCB7XG5cdGVsZW1lbnRzOiB7XG5cdFx0bGluZToge1xuXHRcdFx0dGVuc2lvbjogMC40LFxuXHRcdFx0YmFja2dyb3VuZENvbG9yOiBkZWZhdWx0Q29sb3IsXG5cdFx0XHRib3JkZXJXaWR0aDogMyxcblx0XHRcdGJvcmRlckNvbG9yOiBkZWZhdWx0Q29sb3IsXG5cdFx0XHRib3JkZXJDYXBTdHlsZTogJ2J1dHQnLFxuXHRcdFx0Ym9yZGVyRGFzaDogW10sXG5cdFx0XHRib3JkZXJEYXNoT2Zmc2V0OiAwLjAsXG5cdFx0XHRib3JkZXJKb2luU3R5bGU6ICdtaXRlcicsXG5cdFx0XHRjYXBCZXppZXJQb2ludHM6IHRydWUsXG5cdFx0XHRmaWxsOiB0cnVlLCAvLyBkbyB3ZSBmaWxsIGluIHRoZSBhcmVhIGJldHdlZW4gdGhlIGxpbmUgYW5kIGl0cyBiYXNlIGF4aXNcblx0XHR9XG5cdH1cbn0pO1xuXG52YXIgZWxlbWVudF9saW5lID0gY29yZV9lbGVtZW50LmV4dGVuZCh7XG5cdGRyYXc6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIHZtID0gbWUuX3ZpZXc7XG5cdFx0dmFyIGN0eCA9IG1lLl9jaGFydC5jdHg7XG5cdFx0dmFyIHNwYW5HYXBzID0gdm0uc3BhbkdhcHM7XG5cdFx0dmFyIHBvaW50cyA9IG1lLl9jaGlsZHJlbi5zbGljZSgpOyAvLyBjbG9uZSBhcnJheVxuXHRcdHZhciBnbG9iYWxEZWZhdWx0cyA9IGNvcmVfZGVmYXVsdHMuZ2xvYmFsO1xuXHRcdHZhciBnbG9iYWxPcHRpb25MaW5lRWxlbWVudHMgPSBnbG9iYWxEZWZhdWx0cy5lbGVtZW50cy5saW5lO1xuXHRcdHZhciBsYXN0RHJhd25JbmRleCA9IC0xO1xuXHRcdHZhciBpbmRleCwgY3VycmVudCwgcHJldmlvdXMsIGN1cnJlbnRWTTtcblxuXHRcdC8vIElmIHdlIGFyZSBsb29waW5nLCBhZGRpbmcgdGhlIGZpcnN0IHBvaW50IGFnYWluXG5cdFx0aWYgKG1lLl9sb29wICYmIHBvaW50cy5sZW5ndGgpIHtcblx0XHRcdHBvaW50cy5wdXNoKHBvaW50c1swXSk7XG5cdFx0fVxuXG5cdFx0Y3R4LnNhdmUoKTtcblxuXHRcdC8vIFN0cm9rZSBMaW5lIE9wdGlvbnNcblx0XHRjdHgubGluZUNhcCA9IHZtLmJvcmRlckNhcFN0eWxlIHx8IGdsb2JhbE9wdGlvbkxpbmVFbGVtZW50cy5ib3JkZXJDYXBTdHlsZTtcblxuXHRcdC8vIElFIDkgYW5kIDEwIGRvIG5vdCBzdXBwb3J0IGxpbmUgZGFzaFxuXHRcdGlmIChjdHguc2V0TGluZURhc2gpIHtcblx0XHRcdGN0eC5zZXRMaW5lRGFzaCh2bS5ib3JkZXJEYXNoIHx8IGdsb2JhbE9wdGlvbkxpbmVFbGVtZW50cy5ib3JkZXJEYXNoKTtcblx0XHR9XG5cblx0XHRjdHgubGluZURhc2hPZmZzZXQgPSB2YWx1ZU9yRGVmYXVsdCQxKHZtLmJvcmRlckRhc2hPZmZzZXQsIGdsb2JhbE9wdGlvbkxpbmVFbGVtZW50cy5ib3JkZXJEYXNoT2Zmc2V0KTtcblx0XHRjdHgubGluZUpvaW4gPSB2bS5ib3JkZXJKb2luU3R5bGUgfHwgZ2xvYmFsT3B0aW9uTGluZUVsZW1lbnRzLmJvcmRlckpvaW5TdHlsZTtcblx0XHRjdHgubGluZVdpZHRoID0gdmFsdWVPckRlZmF1bHQkMSh2bS5ib3JkZXJXaWR0aCwgZ2xvYmFsT3B0aW9uTGluZUVsZW1lbnRzLmJvcmRlcldpZHRoKTtcblx0XHRjdHguc3Ryb2tlU3R5bGUgPSB2bS5ib3JkZXJDb2xvciB8fCBnbG9iYWxEZWZhdWx0cy5kZWZhdWx0Q29sb3I7XG5cblx0XHQvLyBTdHJva2UgTGluZVxuXHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRsYXN0RHJhd25JbmRleCA9IC0xO1xuXG5cdFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IDwgcG9pbnRzLmxlbmd0aDsgKytpbmRleCkge1xuXHRcdFx0Y3VycmVudCA9IHBvaW50c1tpbmRleF07XG5cdFx0XHRwcmV2aW91cyA9IGhlbHBlcnMkMS5wcmV2aW91c0l0ZW0ocG9pbnRzLCBpbmRleCk7XG5cdFx0XHRjdXJyZW50Vk0gPSBjdXJyZW50Ll92aWV3O1xuXG5cdFx0XHQvLyBGaXJzdCBwb2ludCBtb3ZlcyB0byBpdCdzIHN0YXJ0aW5nIHBvc2l0aW9uIG5vIG1hdHRlciB3aGF0XG5cdFx0XHRpZiAoaW5kZXggPT09IDApIHtcblx0XHRcdFx0aWYgKCFjdXJyZW50Vk0uc2tpcCkge1xuXHRcdFx0XHRcdGN0eC5tb3ZlVG8oY3VycmVudFZNLngsIGN1cnJlbnRWTS55KTtcblx0XHRcdFx0XHRsYXN0RHJhd25JbmRleCA9IGluZGV4O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwcmV2aW91cyA9IGxhc3REcmF3bkluZGV4ID09PSAtMSA/IHByZXZpb3VzIDogcG9pbnRzW2xhc3REcmF3bkluZGV4XTtcblxuXHRcdFx0XHRpZiAoIWN1cnJlbnRWTS5za2lwKSB7XG5cdFx0XHRcdFx0aWYgKChsYXN0RHJhd25JbmRleCAhPT0gKGluZGV4IC0gMSkgJiYgIXNwYW5HYXBzKSB8fCBsYXN0RHJhd25JbmRleCA9PT0gLTEpIHtcblx0XHRcdFx0XHRcdC8vIFRoZXJlIHdhcyBhIGdhcCBhbmQgdGhpcyBpcyB0aGUgZmlyc3QgcG9pbnQgYWZ0ZXIgdGhlIGdhcFxuXHRcdFx0XHRcdFx0Y3R4Lm1vdmVUbyhjdXJyZW50Vk0ueCwgY3VycmVudFZNLnkpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBMaW5lIHRvIG5leHQgcG9pbnRcblx0XHRcdFx0XHRcdGhlbHBlcnMkMS5jYW52YXMubGluZVRvKGN0eCwgcHJldmlvdXMuX3ZpZXcsIGN1cnJlbnQuX3ZpZXcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRsYXN0RHJhd25JbmRleCA9IGluZGV4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y3R4LnN0cm9rZSgpO1xuXHRcdGN0eC5yZXN0b3JlKCk7XG5cdH1cbn0pO1xuXG52YXIgdmFsdWVPckRlZmF1bHQkMiA9IGhlbHBlcnMkMS52YWx1ZU9yRGVmYXVsdDtcblxudmFyIGRlZmF1bHRDb2xvciQxID0gY29yZV9kZWZhdWx0cy5nbG9iYWwuZGVmYXVsdENvbG9yO1xuXG5jb3JlX2RlZmF1bHRzLl9zZXQoJ2dsb2JhbCcsIHtcblx0ZWxlbWVudHM6IHtcblx0XHRwb2ludDoge1xuXHRcdFx0cmFkaXVzOiAzLFxuXHRcdFx0cG9pbnRTdHlsZTogJ2NpcmNsZScsXG5cdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IGRlZmF1bHRDb2xvciQxLFxuXHRcdFx0Ym9yZGVyQ29sb3I6IGRlZmF1bHRDb2xvciQxLFxuXHRcdFx0Ym9yZGVyV2lkdGg6IDEsXG5cdFx0XHQvLyBIb3ZlclxuXHRcdFx0aGl0UmFkaXVzOiAxLFxuXHRcdFx0aG92ZXJSYWRpdXM6IDQsXG5cdFx0XHRob3ZlckJvcmRlcldpZHRoOiAxXG5cdFx0fVxuXHR9XG59KTtcblxuZnVuY3Rpb24geFJhbmdlKG1vdXNlWCkge1xuXHR2YXIgdm0gPSB0aGlzLl92aWV3O1xuXHRyZXR1cm4gdm0gPyAoTWF0aC5hYnMobW91c2VYIC0gdm0ueCkgPCB2bS5yYWRpdXMgKyB2bS5oaXRSYWRpdXMpIDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHlSYW5nZShtb3VzZVkpIHtcblx0dmFyIHZtID0gdGhpcy5fdmlldztcblx0cmV0dXJuIHZtID8gKE1hdGguYWJzKG1vdXNlWSAtIHZtLnkpIDwgdm0ucmFkaXVzICsgdm0uaGl0UmFkaXVzKSA6IGZhbHNlO1xufVxuXG52YXIgZWxlbWVudF9wb2ludCA9IGNvcmVfZWxlbWVudC5leHRlbmQoe1xuXHRpblJhbmdlOiBmdW5jdGlvbihtb3VzZVgsIG1vdXNlWSkge1xuXHRcdHZhciB2bSA9IHRoaXMuX3ZpZXc7XG5cdFx0cmV0dXJuIHZtID8gKChNYXRoLnBvdyhtb3VzZVggLSB2bS54LCAyKSArIE1hdGgucG93KG1vdXNlWSAtIHZtLnksIDIpKSA8IE1hdGgucG93KHZtLmhpdFJhZGl1cyArIHZtLnJhZGl1cywgMikpIDogZmFsc2U7XG5cdH0sXG5cblx0aW5MYWJlbFJhbmdlOiB4UmFuZ2UsXG5cdGluWFJhbmdlOiB4UmFuZ2UsXG5cdGluWVJhbmdlOiB5UmFuZ2UsXG5cblx0Z2V0Q2VudGVyUG9pbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB2bSA9IHRoaXMuX3ZpZXc7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHg6IHZtLngsXG5cdFx0XHR5OiB2bS55XG5cdFx0fTtcblx0fSxcblxuXHRnZXRBcmVhOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gTWF0aC5QSSAqIE1hdGgucG93KHRoaXMuX3ZpZXcucmFkaXVzLCAyKTtcblx0fSxcblxuXHR0b29sdGlwUG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB2bSA9IHRoaXMuX3ZpZXc7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHg6IHZtLngsXG5cdFx0XHR5OiB2bS55LFxuXHRcdFx0cGFkZGluZzogdm0ucmFkaXVzICsgdm0uYm9yZGVyV2lkdGhcblx0XHR9O1xuXHR9LFxuXG5cdGRyYXc6IGZ1bmN0aW9uKGNoYXJ0QXJlYSkge1xuXHRcdHZhciB2bSA9IHRoaXMuX3ZpZXc7XG5cdFx0dmFyIGN0eCA9IHRoaXMuX2NoYXJ0LmN0eDtcblx0XHR2YXIgcG9pbnRTdHlsZSA9IHZtLnBvaW50U3R5bGU7XG5cdFx0dmFyIHJvdGF0aW9uID0gdm0ucm90YXRpb247XG5cdFx0dmFyIHJhZGl1cyA9IHZtLnJhZGl1cztcblx0XHR2YXIgeCA9IHZtLng7XG5cdFx0dmFyIHkgPSB2bS55O1xuXHRcdHZhciBnbG9iYWxEZWZhdWx0cyA9IGNvcmVfZGVmYXVsdHMuZ2xvYmFsO1xuXHRcdHZhciBkZWZhdWx0Q29sb3IgPSBnbG9iYWxEZWZhdWx0cy5kZWZhdWx0Q29sb3I7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2hhZG93XG5cblx0XHRpZiAodm0uc2tpcCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENsaXBwaW5nIGZvciBQb2ludHMuXG5cdFx0aWYgKGNoYXJ0QXJlYSA9PT0gdW5kZWZpbmVkIHx8IGhlbHBlcnMkMS5jYW52YXMuX2lzUG9pbnRJbkFyZWEodm0sIGNoYXJ0QXJlYSkpIHtcblx0XHRcdGN0eC5zdHJva2VTdHlsZSA9IHZtLmJvcmRlckNvbG9yIHx8IGRlZmF1bHRDb2xvcjtcblx0XHRcdGN0eC5saW5lV2lkdGggPSB2YWx1ZU9yRGVmYXVsdCQyKHZtLmJvcmRlcldpZHRoLCBnbG9iYWxEZWZhdWx0cy5lbGVtZW50cy5wb2ludC5ib3JkZXJXaWR0aCk7XG5cdFx0XHRjdHguZmlsbFN0eWxlID0gdm0uYmFja2dyb3VuZENvbG9yIHx8IGRlZmF1bHRDb2xvcjtcblx0XHRcdGhlbHBlcnMkMS5jYW52YXMuZHJhd1BvaW50KGN0eCwgcG9pbnRTdHlsZSwgcmFkaXVzLCB4LCB5LCByb3RhdGlvbik7XG5cdFx0fVxuXHR9XG59KTtcblxudmFyIGRlZmF1bHRDb2xvciQyID0gY29yZV9kZWZhdWx0cy5nbG9iYWwuZGVmYXVsdENvbG9yO1xuXG5jb3JlX2RlZmF1bHRzLl9zZXQoJ2dsb2JhbCcsIHtcblx0ZWxlbWVudHM6IHtcblx0XHRyZWN0YW5nbGU6IHtcblx0XHRcdGJhY2tncm91bmRDb2xvcjogZGVmYXVsdENvbG9yJDIsXG5cdFx0XHRib3JkZXJDb2xvcjogZGVmYXVsdENvbG9yJDIsXG5cdFx0XHRib3JkZXJTa2lwcGVkOiAnYm90dG9tJyxcblx0XHRcdGJvcmRlcldpZHRoOiAwXG5cdFx0fVxuXHR9XG59KTtcblxuZnVuY3Rpb24gaXNWZXJ0aWNhbCh2bSkge1xuXHRyZXR1cm4gdm0gJiYgdm0ud2lkdGggIT09IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBib3VuZHMgb2YgdGhlIGJhciByZWdhcmRsZXNzIG9mIHRoZSBvcmllbnRhdGlvblxuICogQHBhcmFtIGJhciB7Q2hhcnQuRWxlbWVudC5SZWN0YW5nbGV9IHRoZSBiYXJcbiAqIEByZXR1cm4ge0JvdW5kc30gYm91bmRzIG9mIHRoZSBiYXJcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGdldEJhckJvdW5kcyh2bSkge1xuXHR2YXIgeDEsIHgyLCB5MSwgeTIsIGhhbGY7XG5cblx0aWYgKGlzVmVydGljYWwodm0pKSB7XG5cdFx0aGFsZiA9IHZtLndpZHRoIC8gMjtcblx0XHR4MSA9IHZtLnggLSBoYWxmO1xuXHRcdHgyID0gdm0ueCArIGhhbGY7XG5cdFx0eTEgPSBNYXRoLm1pbih2bS55LCB2bS5iYXNlKTtcblx0XHR5MiA9IE1hdGgubWF4KHZtLnksIHZtLmJhc2UpO1xuXHR9IGVsc2Uge1xuXHRcdGhhbGYgPSB2bS5oZWlnaHQgLyAyO1xuXHRcdHgxID0gTWF0aC5taW4odm0ueCwgdm0uYmFzZSk7XG5cdFx0eDIgPSBNYXRoLm1heCh2bS54LCB2bS5iYXNlKTtcblx0XHR5MSA9IHZtLnkgLSBoYWxmO1xuXHRcdHkyID0gdm0ueSArIGhhbGY7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGxlZnQ6IHgxLFxuXHRcdHRvcDogeTEsXG5cdFx0cmlnaHQ6IHgyLFxuXHRcdGJvdHRvbTogeTJcblx0fTtcbn1cblxuZnVuY3Rpb24gc3dhcChvcmlnLCB2MSwgdjIpIHtcblx0cmV0dXJuIG9yaWcgPT09IHYxID8gdjIgOiBvcmlnID09PSB2MiA/IHYxIDogb3JpZztcbn1cblxuZnVuY3Rpb24gcGFyc2VCb3JkZXJTa2lwcGVkKHZtKSB7XG5cdHZhciBlZGdlID0gdm0uYm9yZGVyU2tpcHBlZDtcblx0dmFyIHJlcyA9IHt9O1xuXG5cdGlmICghZWRnZSkge1xuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXHRpZiAodm0uaG9yaXpvbnRhbCkge1xuXHRcdGlmICh2bS5iYXNlID4gdm0ueCkge1xuXHRcdFx0ZWRnZSA9IHN3YXAoZWRnZSwgJ2xlZnQnLCAncmlnaHQnKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAodm0uYmFzZSA8IHZtLnkpIHtcblx0XHRlZGdlID0gc3dhcChlZGdlLCAnYm90dG9tJywgJ3RvcCcpO1xuXHR9XG5cblx0cmVzW2VkZ2VdID0gdHJ1ZTtcblx0cmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gcGFyc2VCb3JkZXJXaWR0aCh2bSwgbWF4VywgbWF4SCkge1xuXHR2YXIgdmFsdWUgPSB2bS5ib3JkZXJXaWR0aDtcblx0dmFyIHNraXAgPSBwYXJzZUJvcmRlclNraXBwZWQodm0pO1xuXHR2YXIgdCwgciwgYiwgbDtcblxuXHRpZiAoaGVscGVycyQxLmlzT2JqZWN0KHZhbHVlKSkge1xuXHRcdHQgPSArdmFsdWUudG9wIHx8IDA7XG5cdFx0ciA9ICt2YWx1ZS5yaWdodCB8fCAwO1xuXHRcdGIgPSArdmFsdWUuYm90dG9tIHx8IDA7XG5cdFx0bCA9ICt2YWx1ZS5sZWZ0IHx8IDA7XG5cdH0gZWxzZSB7XG5cdFx0dCA9IHIgPSBiID0gbCA9ICt2YWx1ZSB8fCAwO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHR0OiBza2lwLnRvcCB8fCAodCA8IDApID8gMCA6IHQgPiBtYXhIID8gbWF4SCA6IHQsXG5cdFx0cjogc2tpcC5yaWdodCB8fCAociA8IDApID8gMCA6IHIgPiBtYXhXID8gbWF4VyA6IHIsXG5cdFx0Yjogc2tpcC5ib3R0b20gfHwgKGIgPCAwKSA/IDAgOiBiID4gbWF4SCA/IG1heEggOiBiLFxuXHRcdGw6IHNraXAubGVmdCB8fCAobCA8IDApID8gMCA6IGwgPiBtYXhXID8gbWF4VyA6IGxcblx0fTtcbn1cblxuZnVuY3Rpb24gYm91bmRpbmdSZWN0cyh2bSkge1xuXHR2YXIgYm91bmRzID0gZ2V0QmFyQm91bmRzKHZtKTtcblx0dmFyIHdpZHRoID0gYm91bmRzLnJpZ2h0IC0gYm91bmRzLmxlZnQ7XG5cdHZhciBoZWlnaHQgPSBib3VuZHMuYm90dG9tIC0gYm91bmRzLnRvcDtcblx0dmFyIGJvcmRlciA9IHBhcnNlQm9yZGVyV2lkdGgodm0sIHdpZHRoIC8gMiwgaGVpZ2h0IC8gMik7XG5cblx0cmV0dXJuIHtcblx0XHRvdXRlcjoge1xuXHRcdFx0eDogYm91bmRzLmxlZnQsXG5cdFx0XHR5OiBib3VuZHMudG9wLFxuXHRcdFx0dzogd2lkdGgsXG5cdFx0XHRoOiBoZWlnaHRcblx0XHR9LFxuXHRcdGlubmVyOiB7XG5cdFx0XHR4OiBib3VuZHMubGVmdCArIGJvcmRlci5sLFxuXHRcdFx0eTogYm91bmRzLnRvcCArIGJvcmRlci50LFxuXHRcdFx0dzogd2lkdGggLSBib3JkZXIubCAtIGJvcmRlci5yLFxuXHRcdFx0aDogaGVpZ2h0IC0gYm9yZGVyLnQgLSBib3JkZXIuYlxuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gaW5SYW5nZSh2bSwgeCwgeSkge1xuXHR2YXIgc2tpcFggPSB4ID09PSBudWxsO1xuXHR2YXIgc2tpcFkgPSB5ID09PSBudWxsO1xuXHR2YXIgYm91bmRzID0gIXZtIHx8IChza2lwWCAmJiBza2lwWSkgPyBmYWxzZSA6IGdldEJhckJvdW5kcyh2bSk7XG5cblx0cmV0dXJuIGJvdW5kc1xuXHRcdCYmIChza2lwWCB8fCB4ID49IGJvdW5kcy5sZWZ0ICYmIHggPD0gYm91bmRzLnJpZ2h0KVxuXHRcdCYmIChza2lwWSB8fCB5ID49IGJvdW5kcy50b3AgJiYgeSA8PSBib3VuZHMuYm90dG9tKTtcbn1cblxudmFyIGVsZW1lbnRfcmVjdGFuZ2xlID0gY29yZV9lbGVtZW50LmV4dGVuZCh7XG5cdGRyYXc6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBjdHggPSB0aGlzLl9jaGFydC5jdHg7XG5cdFx0dmFyIHZtID0gdGhpcy5fdmlldztcblx0XHR2YXIgcmVjdHMgPSBib3VuZGluZ1JlY3RzKHZtKTtcblx0XHR2YXIgb3V0ZXIgPSByZWN0cy5vdXRlcjtcblx0XHR2YXIgaW5uZXIgPSByZWN0cy5pbm5lcjtcblxuXHRcdGN0eC5maWxsU3R5bGUgPSB2bS5iYWNrZ3JvdW5kQ29sb3I7XG5cdFx0Y3R4LmZpbGxSZWN0KG91dGVyLngsIG91dGVyLnksIG91dGVyLncsIG91dGVyLmgpO1xuXG5cdFx0aWYgKG91dGVyLncgPT09IGlubmVyLncgJiYgb3V0ZXIuaCA9PT0gaW5uZXIuaCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGN0eC5zYXZlKCk7XG5cdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdGN0eC5yZWN0KG91dGVyLngsIG91dGVyLnksIG91dGVyLncsIG91dGVyLmgpO1xuXHRcdGN0eC5jbGlwKCk7XG5cdFx0Y3R4LmZpbGxTdHlsZSA9IHZtLmJvcmRlckNvbG9yO1xuXHRcdGN0eC5yZWN0KGlubmVyLngsIGlubmVyLnksIGlubmVyLncsIGlubmVyLmgpO1xuXHRcdGN0eC5maWxsKCdldmVub2RkJyk7XG5cdFx0Y3R4LnJlc3RvcmUoKTtcblx0fSxcblxuXHRoZWlnaHQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB2bSA9IHRoaXMuX3ZpZXc7XG5cdFx0cmV0dXJuIHZtLmJhc2UgLSB2bS55O1xuXHR9LFxuXG5cdGluUmFuZ2U6IGZ1bmN0aW9uKG1vdXNlWCwgbW91c2VZKSB7XG5cdFx0cmV0dXJuIGluUmFuZ2UodGhpcy5fdmlldywgbW91c2VYLCBtb3VzZVkpO1xuXHR9LFxuXG5cdGluTGFiZWxSYW5nZTogZnVuY3Rpb24obW91c2VYLCBtb3VzZVkpIHtcblx0XHR2YXIgdm0gPSB0aGlzLl92aWV3O1xuXHRcdHJldHVybiBpc1ZlcnRpY2FsKHZtKVxuXHRcdFx0PyBpblJhbmdlKHZtLCBtb3VzZVgsIG51bGwpXG5cdFx0XHQ6IGluUmFuZ2Uodm0sIG51bGwsIG1vdXNlWSk7XG5cdH0sXG5cblx0aW5YUmFuZ2U6IGZ1bmN0aW9uKG1vdXNlWCkge1xuXHRcdHJldHVybiBpblJhbmdlKHRoaXMuX3ZpZXcsIG1vdXNlWCwgbnVsbCk7XG5cdH0sXG5cblx0aW5ZUmFuZ2U6IGZ1bmN0aW9uKG1vdXNlWSkge1xuXHRcdHJldHVybiBpblJhbmdlKHRoaXMuX3ZpZXcsIG51bGwsIG1vdXNlWSk7XG5cdH0sXG5cblx0Z2V0Q2VudGVyUG9pbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB2bSA9IHRoaXMuX3ZpZXc7XG5cdFx0dmFyIHgsIHk7XG5cdFx0aWYgKGlzVmVydGljYWwodm0pKSB7XG5cdFx0XHR4ID0gdm0ueDtcblx0XHRcdHkgPSAodm0ueSArIHZtLmJhc2UpIC8gMjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0eCA9ICh2bS54ICsgdm0uYmFzZSkgLyAyO1xuXHRcdFx0eSA9IHZtLnk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHt4OiB4LCB5OiB5fTtcblx0fSxcblxuXHRnZXRBcmVhOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgdm0gPSB0aGlzLl92aWV3O1xuXG5cdFx0cmV0dXJuIGlzVmVydGljYWwodm0pXG5cdFx0XHQ/IHZtLndpZHRoICogTWF0aC5hYnModm0ueSAtIHZtLmJhc2UpXG5cdFx0XHQ6IHZtLmhlaWdodCAqIE1hdGguYWJzKHZtLnggLSB2bS5iYXNlKTtcblx0fSxcblxuXHR0b29sdGlwUG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB2bSA9IHRoaXMuX3ZpZXc7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHg6IHZtLngsXG5cdFx0XHR5OiB2bS55XG5cdFx0fTtcblx0fVxufSk7XG5cbnZhciBlbGVtZW50cyA9IHt9O1xudmFyIEFyYyA9IGVsZW1lbnRfYXJjO1xudmFyIExpbmUgPSBlbGVtZW50X2xpbmU7XG52YXIgUG9pbnQgPSBlbGVtZW50X3BvaW50O1xudmFyIFJlY3RhbmdsZSA9IGVsZW1lbnRfcmVjdGFuZ2xlO1xuZWxlbWVudHMuQXJjID0gQXJjO1xuZWxlbWVudHMuTGluZSA9IExpbmU7XG5lbGVtZW50cy5Qb2ludCA9IFBvaW50O1xuZWxlbWVudHMuUmVjdGFuZ2xlID0gUmVjdGFuZ2xlO1xuXG52YXIgcmVzb2x2ZSQxID0gaGVscGVycyQxLm9wdGlvbnMucmVzb2x2ZTtcblxuY29yZV9kZWZhdWx0cy5fc2V0KCdiYXInLCB7XG5cdGhvdmVyOiB7XG5cdFx0bW9kZTogJ2xhYmVsJ1xuXHR9LFxuXG5cdHNjYWxlczoge1xuXHRcdHhBeGVzOiBbe1xuXHRcdFx0dHlwZTogJ2NhdGVnb3J5Jyxcblx0XHRcdGNhdGVnb3J5UGVyY2VudGFnZTogMC44LFxuXHRcdFx0YmFyUGVyY2VudGFnZTogMC45LFxuXHRcdFx0b2Zmc2V0OiB0cnVlLFxuXHRcdFx0Z3JpZExpbmVzOiB7XG5cdFx0XHRcdG9mZnNldEdyaWRMaW5lczogdHJ1ZVxuXHRcdFx0fVxuXHRcdH1dLFxuXG5cdFx0eUF4ZXM6IFt7XG5cdFx0XHR0eXBlOiAnbGluZWFyJ1xuXHRcdH1dXG5cdH1cbn0pO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBcIm9wdGltYWxcIiBzYW1wbGUgc2l6ZSB0byBtYWludGFpbiBiYXJzIGVxdWFsbHkgc2l6ZWQgd2hpbGUgcHJldmVudGluZyBvdmVybGFwLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY29tcHV0ZU1pblNhbXBsZVNpemUoc2NhbGUsIHBpeGVscykge1xuXHR2YXIgbWluID0gc2NhbGUuaXNIb3Jpem9udGFsKCkgPyBzY2FsZS53aWR0aCA6IHNjYWxlLmhlaWdodDtcblx0dmFyIHRpY2tzID0gc2NhbGUuZ2V0VGlja3MoKTtcblx0dmFyIHByZXYsIGN1cnIsIGksIGlsZW47XG5cblx0Zm9yIChpID0gMSwgaWxlbiA9IHBpeGVscy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcblx0XHRtaW4gPSBNYXRoLm1pbihtaW4sIE1hdGguYWJzKHBpeGVsc1tpXSAtIHBpeGVsc1tpIC0gMV0pKTtcblx0fVxuXG5cdGZvciAoaSA9IDAsIGlsZW4gPSB0aWNrcy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcblx0XHRjdXJyID0gc2NhbGUuZ2V0UGl4ZWxGb3JUaWNrKGkpO1xuXHRcdG1pbiA9IGkgPiAwID8gTWF0aC5taW4obWluLCBjdXJyIC0gcHJldikgOiBtaW47XG5cdFx0cHJldiA9IGN1cnI7XG5cdH1cblxuXHRyZXR1cm4gbWluO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIGFuIFwiaWRlYWxcIiBjYXRlZ29yeSBiYXNlZCBvbiB0aGUgYWJzb2x1dGUgYmFyIHRoaWNrbmVzcyBvciwgaWYgdW5kZWZpbmVkIG9yIG51bGwsXG4gKiB1c2VzIHRoZSBzbWFsbGVzdCBpbnRlcnZhbCAoc2VlIGNvbXB1dGVNaW5TYW1wbGVTaXplKSB0aGF0IHByZXZlbnRzIGJhciBvdmVybGFwcGluZy4gVGhpc1xuICogbW9kZSBjdXJyZW50bHkgYWx3YXlzIGdlbmVyYXRlcyBiYXJzIGVxdWFsbHkgc2l6ZWQgKHVudGlsIHdlIGludHJvZHVjZSBzY3JpcHRhYmxlIG9wdGlvbnM/KS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVGaXRDYXRlZ29yeVRyYWl0cyhpbmRleCwgcnVsZXIsIG9wdGlvbnMpIHtcblx0dmFyIHRoaWNrbmVzcyA9IG9wdGlvbnMuYmFyVGhpY2tuZXNzO1xuXHR2YXIgY291bnQgPSBydWxlci5zdGFja0NvdW50O1xuXHR2YXIgY3VyciA9IHJ1bGVyLnBpeGVsc1tpbmRleF07XG5cdHZhciBzaXplLCByYXRpbztcblxuXHRpZiAoaGVscGVycyQxLmlzTnVsbE9yVW5kZWYodGhpY2tuZXNzKSkge1xuXHRcdHNpemUgPSBydWxlci5taW4gKiBvcHRpb25zLmNhdGVnb3J5UGVyY2VudGFnZTtcblx0XHRyYXRpbyA9IG9wdGlvbnMuYmFyUGVyY2VudGFnZTtcblx0fSBlbHNlIHtcblx0XHQvLyBXaGVuIGJhciB0aGlja25lc3MgaXMgZW5mb3JjZWQsIGNhdGVnb3J5IGFuZCBiYXIgcGVyY2VudGFnZXMgYXJlIGlnbm9yZWQuXG5cdFx0Ly8gTm90ZShTQik6IHdlIGNvdWxkIGFkZCBzdXBwb3J0IGZvciByZWxhdGl2ZSBiYXIgdGhpY2tuZXNzIChlLmcuIGJhclRoaWNrbmVzczogJzUwJScpXG5cdFx0Ly8gYW5kIGRlcHJlY2F0ZSBiYXJQZXJjZW50YWdlIHNpbmNlIHRoaXMgdmFsdWUgaXMgaWdub3JlZCB3aGVuIHRoaWNrbmVzcyBpcyBhYnNvbHV0ZS5cblx0XHRzaXplID0gdGhpY2tuZXNzICogY291bnQ7XG5cdFx0cmF0aW8gPSAxO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRjaHVuazogc2l6ZSAvIGNvdW50LFxuXHRcdHJhdGlvOiByYXRpbyxcblx0XHRzdGFydDogY3VyciAtIChzaXplIC8gMilcblx0fTtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyBhbiBcIm9wdGltYWxcIiBjYXRlZ29yeSB0aGF0IGdsb2JhbGx5IGFycmFuZ2VzIGJhcnMgc2lkZSBieSBzaWRlIChubyBnYXAgd2hlblxuICogcGVyY2VudGFnZSBvcHRpb25zIGFyZSAxKSwgYmFzZWQgb24gdGhlIHByZXZpb3VzIGFuZCBmb2xsb3dpbmcgY2F0ZWdvcmllcy4gVGhpcyBtb2RlXG4gKiBnZW5lcmF0ZXMgYmFycyB3aXRoIGRpZmZlcmVudCB3aWR0aHMgd2hlbiBkYXRhIGFyZSBub3QgZXZlbmx5IHNwYWNlZC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVGbGV4Q2F0ZWdvcnlUcmFpdHMoaW5kZXgsIHJ1bGVyLCBvcHRpb25zKSB7XG5cdHZhciBwaXhlbHMgPSBydWxlci5waXhlbHM7XG5cdHZhciBjdXJyID0gcGl4ZWxzW2luZGV4XTtcblx0dmFyIHByZXYgPSBpbmRleCA+IDAgPyBwaXhlbHNbaW5kZXggLSAxXSA6IG51bGw7XG5cdHZhciBuZXh0ID0gaW5kZXggPCBwaXhlbHMubGVuZ3RoIC0gMSA/IHBpeGVsc1tpbmRleCArIDFdIDogbnVsbDtcblx0dmFyIHBlcmNlbnQgPSBvcHRpb25zLmNhdGVnb3J5UGVyY2VudGFnZTtcblx0dmFyIHN0YXJ0LCBzaXplO1xuXG5cdGlmIChwcmV2ID09PSBudWxsKSB7XG5cdFx0Ly8gZmlyc3QgZGF0YTogaXRzIHNpemUgaXMgZG91YmxlIGJhc2VkIG9uIHRoZSBuZXh0IHBvaW50IG9yLFxuXHRcdC8vIGlmIGl0J3MgYWxzbyB0aGUgbGFzdCBkYXRhLCB3ZSB1c2UgdGhlIHNjYWxlIHNpemUuXG5cdFx0cHJldiA9IGN1cnIgLSAobmV4dCA9PT0gbnVsbCA/IHJ1bGVyLmVuZCAtIHJ1bGVyLnN0YXJ0IDogbmV4dCAtIGN1cnIpO1xuXHR9XG5cblx0aWYgKG5leHQgPT09IG51bGwpIHtcblx0XHQvLyBsYXN0IGRhdGE6IGl0cyBzaXplIGlzIGFsc28gZG91YmxlIGJhc2VkIG9uIHRoZSBwcmV2aW91cyBwb2ludC5cblx0XHRuZXh0ID0gY3VyciArIGN1cnIgLSBwcmV2O1xuXHR9XG5cblx0c3RhcnQgPSBjdXJyIC0gKGN1cnIgLSBNYXRoLm1pbihwcmV2LCBuZXh0KSkgLyAyICogcGVyY2VudDtcblx0c2l6ZSA9IE1hdGguYWJzKG5leHQgLSBwcmV2KSAvIDIgKiBwZXJjZW50O1xuXG5cdHJldHVybiB7XG5cdFx0Y2h1bms6IHNpemUgLyBydWxlci5zdGFja0NvdW50LFxuXHRcdHJhdGlvOiBvcHRpb25zLmJhclBlcmNlbnRhZ2UsXG5cdFx0c3RhcnQ6IHN0YXJ0XG5cdH07XG59XG5cbnZhciBjb250cm9sbGVyX2JhciA9IGNvcmVfZGF0YXNldENvbnRyb2xsZXIuZXh0ZW5kKHtcblxuXHRkYXRhRWxlbWVudFR5cGU6IGVsZW1lbnRzLlJlY3RhbmdsZSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciBtZXRhO1xuXG5cdFx0Y29yZV9kYXRhc2V0Q29udHJvbGxlci5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseShtZSwgYXJndW1lbnRzKTtcblxuXHRcdG1ldGEgPSBtZS5nZXRNZXRhKCk7XG5cdFx0bWV0YS5zdGFjayA9IG1lLmdldERhdGFzZXQoKS5zdGFjaztcblx0XHRtZXRhLmJhciA9IHRydWU7XG5cdH0sXG5cblx0dXBkYXRlOiBmdW5jdGlvbihyZXNldCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIHJlY3RzID0gbWUuZ2V0TWV0YSgpLmRhdGE7XG5cdFx0dmFyIGksIGlsZW47XG5cblx0XHRtZS5fcnVsZXIgPSBtZS5nZXRSdWxlcigpO1xuXG5cdFx0Zm9yIChpID0gMCwgaWxlbiA9IHJlY3RzLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xuXHRcdFx0bWUudXBkYXRlRWxlbWVudChyZWN0c1tpXSwgaSwgcmVzZXQpO1xuXHRcdH1cblx0fSxcblxuXHR1cGRhdGVFbGVtZW50OiBmdW5jdGlvbihyZWN0YW5nbGUsIGluZGV4LCByZXNldCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIG1ldGEgPSBtZS5nZXRNZXRhKCk7XG5cdFx0dmFyIGRhdGFzZXQgPSBtZS5nZXREYXRhc2V0KCk7XG5cdFx0dmFyIG9wdGlvbnMgPSBtZS5fcmVzb2x2ZUVsZW1lbnRPcHRpb25zKHJlY3RhbmdsZSwgaW5kZXgpO1xuXG5cdFx0cmVjdGFuZ2xlLl94U2NhbGUgPSBtZS5nZXRTY2FsZUZvcklkKG1ldGEueEF4aXNJRCk7XG5cdFx0cmVjdGFuZ2xlLl95U2NhbGUgPSBtZS5nZXRTY2FsZUZvcklkKG1ldGEueUF4aXNJRCk7XG5cdFx0cmVjdGFuZ2xlLl9kYXRhc2V0SW5kZXggPSBtZS5pbmRleDtcblx0XHRyZWN0YW5nbGUuX2luZGV4ID0gaW5kZXg7XG5cdFx0cmVjdGFuZ2xlLl9tb2RlbCA9IHtcblx0XHRcdGJhY2tncm91bmRDb2xvcjogb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IsXG5cdFx0XHRib3JkZXJDb2xvcjogb3B0aW9ucy5ib3JkZXJDb2xvcixcblx0XHRcdGJvcmRlclNraXBwZWQ6IG9wdGlvbnMuYm9yZGVyU2tpcHBlZCxcblx0XHRcdGJvcmRlcldpZHRoOiBvcHRpb25zLmJvcmRlcldpZHRoLFxuXHRcdFx0ZGF0YXNldExhYmVsOiBkYXRhc2V0LmxhYmVsLFxuXHRcdFx0bGFiZWw6IG1lLmNoYXJ0LmRhdGEubGFiZWxzW2luZGV4XVxuXHRcdH07XG5cblx0XHRtZS5fdXBkYXRlRWxlbWVudEdlb21ldHJ5KHJlY3RhbmdsZSwgaW5kZXgsIHJlc2V0KTtcblxuXHRcdHJlY3RhbmdsZS5waXZvdCgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X3VwZGF0ZUVsZW1lbnRHZW9tZXRyeTogZnVuY3Rpb24ocmVjdGFuZ2xlLCBpbmRleCwgcmVzZXQpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciBtb2RlbCA9IHJlY3RhbmdsZS5fbW9kZWw7XG5cdFx0dmFyIHZzY2FsZSA9IG1lLl9nZXRWYWx1ZVNjYWxlKCk7XG5cdFx0dmFyIGJhc2UgPSB2c2NhbGUuZ2V0QmFzZVBpeGVsKCk7XG5cdFx0dmFyIGhvcml6b250YWwgPSB2c2NhbGUuaXNIb3Jpem9udGFsKCk7XG5cdFx0dmFyIHJ1bGVyID0gbWUuX3J1bGVyIHx8IG1lLmdldFJ1bGVyKCk7XG5cdFx0dmFyIHZwaXhlbHMgPSBtZS5jYWxjdWxhdGVCYXJWYWx1ZVBpeGVscyhtZS5pbmRleCwgaW5kZXgpO1xuXHRcdHZhciBpcGl4ZWxzID0gbWUuY2FsY3VsYXRlQmFySW5kZXhQaXhlbHMobWUuaW5kZXgsIGluZGV4LCBydWxlcik7XG5cblx0XHRtb2RlbC5ob3Jpem9udGFsID0gaG9yaXpvbnRhbDtcblx0XHRtb2RlbC5iYXNlID0gcmVzZXQgPyBiYXNlIDogdnBpeGVscy5iYXNlO1xuXHRcdG1vZGVsLnggPSBob3Jpem9udGFsID8gcmVzZXQgPyBiYXNlIDogdnBpeGVscy5oZWFkIDogaXBpeGVscy5jZW50ZXI7XG5cdFx0bW9kZWwueSA9IGhvcml6b250YWwgPyBpcGl4ZWxzLmNlbnRlciA6IHJlc2V0ID8gYmFzZSA6IHZwaXhlbHMuaGVhZDtcblx0XHRtb2RlbC5oZWlnaHQgPSBob3Jpem9udGFsID8gaXBpeGVscy5zaXplIDogdW5kZWZpbmVkO1xuXHRcdG1vZGVsLndpZHRoID0gaG9yaXpvbnRhbCA/IHVuZGVmaW5lZCA6IGlwaXhlbHMuc2l6ZTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgc3RhY2tzIGJhc2VkIG9uIGdyb3VwcyBhbmQgYmFyIHZpc2liaWxpdHkuXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBbbGFzdF0gLSBUaGUgZGF0YXNldCBpbmRleFxuXHQgKiBAcmV0dXJucyB7c3RyaW5nW119IFRoZSBsaXN0IG9mIHN0YWNrIElEc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2dldFN0YWNrczogZnVuY3Rpb24obGFzdCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIGNoYXJ0ID0gbWUuY2hhcnQ7XG5cdFx0dmFyIHNjYWxlID0gbWUuX2dldEluZGV4U2NhbGUoKTtcblx0XHR2YXIgc3RhY2tlZCA9IHNjYWxlLm9wdGlvbnMuc3RhY2tlZDtcblx0XHR2YXIgaWxlbiA9IGxhc3QgPT09IHVuZGVmaW5lZCA/IGNoYXJ0LmRhdGEuZGF0YXNldHMubGVuZ3RoIDogbGFzdCArIDE7XG5cdFx0dmFyIHN0YWNrcyA9IFtdO1xuXHRcdHZhciBpLCBtZXRhO1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGlsZW47ICsraSkge1xuXHRcdFx0bWV0YSA9IGNoYXJ0LmdldERhdGFzZXRNZXRhKGkpO1xuXHRcdFx0aWYgKG1ldGEuYmFyICYmIGNoYXJ0LmlzRGF0YXNldFZpc2libGUoaSkgJiZcblx0XHRcdFx0KHN0YWNrZWQgPT09IGZhbHNlIHx8XG5cdFx0XHRcdChzdGFja2VkID09PSB0cnVlICYmIHN0YWNrcy5pbmRleE9mKG1ldGEuc3RhY2spID09PSAtMSkgfHxcblx0XHRcdFx0KHN0YWNrZWQgPT09IHVuZGVmaW5lZCAmJiAobWV0YS5zdGFjayA9PT0gdW5kZWZpbmVkIHx8IHN0YWNrcy5pbmRleE9mKG1ldGEuc3RhY2spID09PSAtMSkpKSkge1xuXHRcdFx0XHRzdGFja3MucHVzaChtZXRhLnN0YWNrKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gc3RhY2tzO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBlZmZlY3RpdmUgbnVtYmVyIG9mIHN0YWNrcyBiYXNlZCBvbiBncm91cHMgYW5kIGJhciB2aXNpYmlsaXR5LlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Z2V0U3RhY2tDb3VudDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFN0YWNrcygpLmxlbmd0aDtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgc3RhY2sgaW5kZXggZm9yIHRoZSBnaXZlbiBkYXRhc2V0IGJhc2VkIG9uIGdyb3VwcyBhbmQgYmFyIHZpc2liaWxpdHkuXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBbZGF0YXNldEluZGV4XSAtIFRoZSBkYXRhc2V0IGluZGV4XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV0gLSBUaGUgc3RhY2sgbmFtZSB0byBmaW5kXG5cdCAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBzdGFjayBpbmRleFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Z2V0U3RhY2tJbmRleDogZnVuY3Rpb24oZGF0YXNldEluZGV4LCBuYW1lKSB7XG5cdFx0dmFyIHN0YWNrcyA9IHRoaXMuX2dldFN0YWNrcyhkYXRhc2V0SW5kZXgpO1xuXHRcdHZhciBpbmRleCA9IChuYW1lICE9PSB1bmRlZmluZWQpXG5cdFx0XHQ/IHN0YWNrcy5pbmRleE9mKG5hbWUpXG5cdFx0XHQ6IC0xOyAvLyBpbmRleE9mIHJldHVybnMgLTEgaWYgZWxlbWVudCBpcyBub3QgcHJlc2VudFxuXG5cdFx0cmV0dXJuIChpbmRleCA9PT0gLTEpXG5cdFx0XHQ/IHN0YWNrcy5sZW5ndGggLSAxXG5cdFx0XHQ6IGluZGV4O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Z2V0UnVsZXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIHNjYWxlID0gbWUuX2dldEluZGV4U2NhbGUoKTtcblx0XHR2YXIgc3RhY2tDb3VudCA9IG1lLmdldFN0YWNrQ291bnQoKTtcblx0XHR2YXIgZGF0YXNldEluZGV4ID0gbWUuaW5kZXg7XG5cdFx0dmFyIGlzSG9yaXpvbnRhbCA9IHNjYWxlLmlzSG9yaXpvbnRhbCgpO1xuXHRcdHZhciBzdGFydCA9IGlzSG9yaXpvbnRhbCA/IHNjYWxlLmxlZnQgOiBzY2FsZS50b3A7XG5cdFx0dmFyIGVuZCA9IHN0YXJ0ICsgKGlzSG9yaXpvbnRhbCA/IHNjYWxlLndpZHRoIDogc2NhbGUuaGVpZ2h0KTtcblx0XHR2YXIgcGl4ZWxzID0gW107XG5cdFx0dmFyIGksIGlsZW4sIG1pbjtcblxuXHRcdGZvciAoaSA9IDAsIGlsZW4gPSBtZS5nZXRNZXRhKCkuZGF0YS5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcblx0XHRcdHBpeGVscy5wdXNoKHNjYWxlLmdldFBpeGVsRm9yVmFsdWUobnVsbCwgaSwgZGF0YXNldEluZGV4KSk7XG5cdFx0fVxuXG5cdFx0bWluID0gaGVscGVycyQxLmlzTnVsbE9yVW5kZWYoc2NhbGUub3B0aW9ucy5iYXJUaGlja25lc3MpXG5cdFx0XHQ/IGNvbXB1dGVNaW5TYW1wbGVTaXplKHNjYWxlLCBwaXhlbHMpXG5cdFx0XHQ6IC0xO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdG1pbjogbWluLFxuXHRcdFx0cGl4ZWxzOiBwaXhlbHMsXG5cdFx0XHRzdGFydDogc3RhcnQsXG5cdFx0XHRlbmQ6IGVuZCxcblx0XHRcdHN0YWNrQ291bnQ6IHN0YWNrQ291bnQsXG5cdFx0XHRzY2FsZTogc2NhbGVcblx0XHR9O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBOb3RlOiBwaXhlbCB2YWx1ZXMgYXJlIG5vdCBjbGFtcGVkIHRvIHRoZSBzY2FsZSBhcmVhLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Y2FsY3VsYXRlQmFyVmFsdWVQaXhlbHM6IGZ1bmN0aW9uKGRhdGFzZXRJbmRleCwgaW5kZXgpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciBjaGFydCA9IG1lLmNoYXJ0O1xuXHRcdHZhciBtZXRhID0gbWUuZ2V0TWV0YSgpO1xuXHRcdHZhciBzY2FsZSA9IG1lLl9nZXRWYWx1ZVNjYWxlKCk7XG5cdFx0dmFyIGlzSG9yaXpvbnRhbCA9IHNjYWxlLmlzSG9yaXpvbnRhbCgpO1xuXHRcdHZhciBkYXRhc2V0cyA9IGNoYXJ0LmRhdGEuZGF0YXNldHM7XG5cdFx0dmFyIHZhbHVlID0gK3NjYWxlLmdldFJpZ2h0VmFsdWUoZGF0YXNldHNbZGF0YXNldEluZGV4XS5kYXRhW2luZGV4XSk7XG5cdFx0dmFyIG1pbkJhckxlbmd0aCA9IHNjYWxlLm9wdGlvbnMubWluQmFyTGVuZ3RoO1xuXHRcdHZhciBzdGFja2VkID0gc2NhbGUub3B0aW9ucy5zdGFja2VkO1xuXHRcdHZhciBzdGFjayA9IG1ldGEuc3RhY2s7XG5cdFx0dmFyIHN0YXJ0ID0gMDtcblx0XHR2YXIgaSwgaW1ldGEsIGl2YWx1ZSwgYmFzZSwgaGVhZCwgc2l6ZTtcblxuXHRcdGlmIChzdGFja2VkIHx8IChzdGFja2VkID09PSB1bmRlZmluZWQgJiYgc3RhY2sgIT09IHVuZGVmaW5lZCkpIHtcblx0XHRcdGZvciAoaSA9IDA7IGkgPCBkYXRhc2V0SW5kZXg7ICsraSkge1xuXHRcdFx0XHRpbWV0YSA9IGNoYXJ0LmdldERhdGFzZXRNZXRhKGkpO1xuXG5cdFx0XHRcdGlmIChpbWV0YS5iYXIgJiZcblx0XHRcdFx0XHRpbWV0YS5zdGFjayA9PT0gc3RhY2sgJiZcblx0XHRcdFx0XHRpbWV0YS5jb250cm9sbGVyLl9nZXRWYWx1ZVNjYWxlSWQoKSA9PT0gc2NhbGUuaWQgJiZcblx0XHRcdFx0XHRjaGFydC5pc0RhdGFzZXRWaXNpYmxlKGkpKSB7XG5cblx0XHRcdFx0XHRpdmFsdWUgPSArc2NhbGUuZ2V0UmlnaHRWYWx1ZShkYXRhc2V0c1tpXS5kYXRhW2luZGV4XSk7XG5cdFx0XHRcdFx0aWYgKCh2YWx1ZSA8IDAgJiYgaXZhbHVlIDwgMCkgfHwgKHZhbHVlID49IDAgJiYgaXZhbHVlID4gMCkpIHtcblx0XHRcdFx0XHRcdHN0YXJ0ICs9IGl2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRiYXNlID0gc2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZShzdGFydCk7XG5cdFx0aGVhZCA9IHNjYWxlLmdldFBpeGVsRm9yVmFsdWUoc3RhcnQgKyB2YWx1ZSk7XG5cdFx0c2l6ZSA9IGhlYWQgLSBiYXNlO1xuXG5cdFx0aWYgKG1pbkJhckxlbmd0aCAhPT0gdW5kZWZpbmVkICYmIE1hdGguYWJzKHNpemUpIDwgbWluQmFyTGVuZ3RoKSB7XG5cdFx0XHRzaXplID0gbWluQmFyTGVuZ3RoO1xuXHRcdFx0aWYgKHZhbHVlID49IDAgJiYgIWlzSG9yaXpvbnRhbCB8fCB2YWx1ZSA8IDAgJiYgaXNIb3Jpem9udGFsKSB7XG5cdFx0XHRcdGhlYWQgPSBiYXNlIC0gbWluQmFyTGVuZ3RoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aGVhZCA9IGJhc2UgKyBtaW5CYXJMZW5ndGg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHNpemU6IHNpemUsXG5cdFx0XHRiYXNlOiBiYXNlLFxuXHRcdFx0aGVhZDogaGVhZCxcblx0XHRcdGNlbnRlcjogaGVhZCArIHNpemUgLyAyXG5cdFx0fTtcblx0fSxcblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGNhbGN1bGF0ZUJhckluZGV4UGl4ZWxzOiBmdW5jdGlvbihkYXRhc2V0SW5kZXgsIGluZGV4LCBydWxlcikge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIG9wdGlvbnMgPSBydWxlci5zY2FsZS5vcHRpb25zO1xuXHRcdHZhciByYW5nZSA9IG9wdGlvbnMuYmFyVGhpY2tuZXNzID09PSAnZmxleCdcblx0XHRcdD8gY29tcHV0ZUZsZXhDYXRlZ29yeVRyYWl0cyhpbmRleCwgcnVsZXIsIG9wdGlvbnMpXG5cdFx0XHQ6IGNvbXB1dGVGaXRDYXRlZ29yeVRyYWl0cyhpbmRleCwgcnVsZXIsIG9wdGlvbnMpO1xuXG5cdFx0dmFyIHN0YWNrSW5kZXggPSBtZS5nZXRTdGFja0luZGV4KGRhdGFzZXRJbmRleCwgbWUuZ2V0TWV0YSgpLnN0YWNrKTtcblx0XHR2YXIgY2VudGVyID0gcmFuZ2Uuc3RhcnQgKyAocmFuZ2UuY2h1bmsgKiBzdGFja0luZGV4KSArIChyYW5nZS5jaHVuayAvIDIpO1xuXHRcdHZhciBzaXplID0gTWF0aC5taW4oXG5cdFx0XHRoZWxwZXJzJDEudmFsdWVPckRlZmF1bHQob3B0aW9ucy5tYXhCYXJUaGlja25lc3MsIEluZmluaXR5KSxcblx0XHRcdHJhbmdlLmNodW5rICogcmFuZ2UucmF0aW8pO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGJhc2U6IGNlbnRlciAtIHNpemUgLyAyLFxuXHRcdFx0aGVhZDogY2VudGVyICsgc2l6ZSAvIDIsXG5cdFx0XHRjZW50ZXI6IGNlbnRlcixcblx0XHRcdHNpemU6IHNpemVcblx0XHR9O1xuXHR9LFxuXG5cdGRyYXc6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIGNoYXJ0ID0gbWUuY2hhcnQ7XG5cdFx0dmFyIHNjYWxlID0gbWUuX2dldFZhbHVlU2NhbGUoKTtcblx0XHR2YXIgcmVjdHMgPSBtZS5nZXRNZXRhKCkuZGF0YTtcblx0XHR2YXIgZGF0YXNldCA9IG1lLmdldERhdGFzZXQoKTtcblx0XHR2YXIgaWxlbiA9IHJlY3RzLmxlbmd0aDtcblx0XHR2YXIgaSA9IDA7XG5cblx0XHRoZWxwZXJzJDEuY2FudmFzLmNsaXBBcmVhKGNoYXJ0LmN0eCwgY2hhcnQuY2hhcnRBcmVhKTtcblxuXHRcdGZvciAoOyBpIDwgaWxlbjsgKytpKSB7XG5cdFx0XHRpZiAoIWlzTmFOKHNjYWxlLmdldFJpZ2h0VmFsdWUoZGF0YXNldC5kYXRhW2ldKSkpIHtcblx0XHRcdFx0cmVjdHNbaV0uZHJhdygpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGhlbHBlcnMkMS5jYW52YXMudW5jbGlwQXJlYShjaGFydC5jdHgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X3Jlc29sdmVFbGVtZW50T3B0aW9uczogZnVuY3Rpb24ocmVjdGFuZ2xlLCBpbmRleCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIGNoYXJ0ID0gbWUuY2hhcnQ7XG5cdFx0dmFyIGRhdGFzZXRzID0gY2hhcnQuZGF0YS5kYXRhc2V0cztcblx0XHR2YXIgZGF0YXNldCA9IGRhdGFzZXRzW21lLmluZGV4XTtcblx0XHR2YXIgY3VzdG9tID0gcmVjdGFuZ2xlLmN1c3RvbSB8fCB7fTtcblx0XHR2YXIgb3B0aW9ucyA9IGNoYXJ0Lm9wdGlvbnMuZWxlbWVudHMucmVjdGFuZ2xlO1xuXHRcdHZhciB2YWx1ZXMgPSB7fTtcblx0XHR2YXIgaSwgaWxlbiwga2V5O1xuXG5cdFx0Ly8gU2NyaXB0YWJsZSBvcHRpb25zXG5cdFx0dmFyIGNvbnRleHQgPSB7XG5cdFx0XHRjaGFydDogY2hhcnQsXG5cdFx0XHRkYXRhSW5kZXg6IGluZGV4LFxuXHRcdFx0ZGF0YXNldDogZGF0YXNldCxcblx0XHRcdGRhdGFzZXRJbmRleDogbWUuaW5kZXhcblx0XHR9O1xuXG5cdFx0dmFyIGtleXMgPSBbXG5cdFx0XHQnYmFja2dyb3VuZENvbG9yJyxcblx0XHRcdCdib3JkZXJDb2xvcicsXG5cdFx0XHQnYm9yZGVyU2tpcHBlZCcsXG5cdFx0XHQnYm9yZGVyV2lkdGgnXG5cdFx0XTtcblxuXHRcdGZvciAoaSA9IDAsIGlsZW4gPSBrZXlzLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xuXHRcdFx0a2V5ID0ga2V5c1tpXTtcblx0XHRcdHZhbHVlc1trZXldID0gcmVzb2x2ZSQxKFtcblx0XHRcdFx0Y3VzdG9tW2tleV0sXG5cdFx0XHRcdGRhdGFzZXRba2V5XSxcblx0XHRcdFx0b3B0aW9uc1trZXldXG5cdFx0XHRdLCBjb250ZXh0LCBpbmRleCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbHVlcztcblx0fVxufSk7XG5cbnZhciB2YWx1ZU9yRGVmYXVsdCQzID0gaGVscGVycyQxLnZhbHVlT3JEZWZhdWx0O1xudmFyIHJlc29sdmUkMiA9IGhlbHBlcnMkMS5vcHRpb25zLnJlc29sdmU7XG5cbmNvcmVfZGVmYXVsdHMuX3NldCgnYnViYmxlJywge1xuXHRob3Zlcjoge1xuXHRcdG1vZGU6ICdzaW5nbGUnXG5cdH0sXG5cblx0c2NhbGVzOiB7XG5cdFx0eEF4ZXM6IFt7XG5cdFx0XHR0eXBlOiAnbGluZWFyJywgLy8gYnViYmxlIHNob3VsZCBwcm9iYWJseSB1c2UgYSBsaW5lYXIgc2NhbGUgYnkgZGVmYXVsdFxuXHRcdFx0cG9zaXRpb246ICdib3R0b20nLFxuXHRcdFx0aWQ6ICd4LWF4aXMtMCcgLy8gbmVlZCBhbiBJRCBzbyBkYXRhc2V0cyBjYW4gcmVmZXJlbmNlIHRoZSBzY2FsZVxuXHRcdH1dLFxuXHRcdHlBeGVzOiBbe1xuXHRcdFx0dHlwZTogJ2xpbmVhcicsXG5cdFx0XHRwb3NpdGlvbjogJ2xlZnQnLFxuXHRcdFx0aWQ6ICd5LWF4aXMtMCdcblx0XHR9XVxuXHR9LFxuXG5cdHRvb2x0aXBzOiB7XG5cdFx0Y2FsbGJhY2tzOiB7XG5cdFx0XHR0aXRsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdC8vIFRpdGxlIGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3Igc2NhdHRlciBzaW5jZSB3ZSBmb3JtYXQgdGhlIGRhdGEgYXMgYSBwb2ludFxuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHR9LFxuXHRcdFx0bGFiZWw6IGZ1bmN0aW9uKGl0ZW0sIGRhdGEpIHtcblx0XHRcdFx0dmFyIGRhdGFzZXRMYWJlbCA9IGRhdGEuZGF0YXNldHNbaXRlbS5kYXRhc2V0SW5kZXhdLmxhYmVsIHx8ICcnO1xuXHRcdFx0XHR2YXIgZGF0YVBvaW50ID0gZGF0YS5kYXRhc2V0c1tpdGVtLmRhdGFzZXRJbmRleF0uZGF0YVtpdGVtLmluZGV4XTtcblx0XHRcdFx0cmV0dXJuIGRhdGFzZXRMYWJlbCArICc6ICgnICsgaXRlbS54TGFiZWwgKyAnLCAnICsgaXRlbS55TGFiZWwgKyAnLCAnICsgZGF0YVBvaW50LnIgKyAnKSc7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59KTtcblxudmFyIGNvbnRyb2xsZXJfYnViYmxlID0gY29yZV9kYXRhc2V0Q29udHJvbGxlci5leHRlbmQoe1xuXHQvKipcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0ZGF0YUVsZW1lbnRUeXBlOiBlbGVtZW50cy5Qb2ludCxcblxuXHQvKipcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0dXBkYXRlOiBmdW5jdGlvbihyZXNldCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIG1ldGEgPSBtZS5nZXRNZXRhKCk7XG5cdFx0dmFyIHBvaW50cyA9IG1ldGEuZGF0YTtcblxuXHRcdC8vIFVwZGF0ZSBQb2ludHNcblx0XHRoZWxwZXJzJDEuZWFjaChwb2ludHMsIGZ1bmN0aW9uKHBvaW50LCBpbmRleCkge1xuXHRcdFx0bWUudXBkYXRlRWxlbWVudChwb2ludCwgaW5kZXgsIHJlc2V0KTtcblx0XHR9KTtcblx0fSxcblxuXHQvKipcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0dXBkYXRlRWxlbWVudDogZnVuY3Rpb24ocG9pbnQsIGluZGV4LCByZXNldCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIG1ldGEgPSBtZS5nZXRNZXRhKCk7XG5cdFx0dmFyIGN1c3RvbSA9IHBvaW50LmN1c3RvbSB8fCB7fTtcblx0XHR2YXIgeFNjYWxlID0gbWUuZ2V0U2NhbGVGb3JJZChtZXRhLnhBeGlzSUQpO1xuXHRcdHZhciB5U2NhbGUgPSBtZS5nZXRTY2FsZUZvcklkKG1ldGEueUF4aXNJRCk7XG5cdFx0dmFyIG9wdGlvbnMgPSBtZS5fcmVzb2x2ZUVsZW1lbnRPcHRpb25zKHBvaW50LCBpbmRleCk7XG5cdFx0dmFyIGRhdGEgPSBtZS5nZXREYXRhc2V0KCkuZGF0YVtpbmRleF07XG5cdFx0dmFyIGRzSW5kZXggPSBtZS5pbmRleDtcblxuXHRcdHZhciB4ID0gcmVzZXQgPyB4U2NhbGUuZ2V0UGl4ZWxGb3JEZWNpbWFsKDAuNSkgOiB4U2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZSh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDogTmFOLCBpbmRleCwgZHNJbmRleCk7XG5cdFx0dmFyIHkgPSByZXNldCA/IHlTY2FsZS5nZXRCYXNlUGl4ZWwoKSA6IHlTY2FsZS5nZXRQaXhlbEZvclZhbHVlKGRhdGEsIGluZGV4LCBkc0luZGV4KTtcblxuXHRcdHBvaW50Ll94U2NhbGUgPSB4U2NhbGU7XG5cdFx0cG9pbnQuX3lTY2FsZSA9IHlTY2FsZTtcblx0XHRwb2ludC5fb3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0cG9pbnQuX2RhdGFzZXRJbmRleCA9IGRzSW5kZXg7XG5cdFx0cG9pbnQuX2luZGV4ID0gaW5kZXg7XG5cdFx0cG9pbnQuX21vZGVsID0ge1xuXHRcdFx0YmFja2dyb3VuZENvbG9yOiBvcHRpb25zLmJhY2tncm91bmRDb2xvcixcblx0XHRcdGJvcmRlckNvbG9yOiBvcHRpb25zLmJvcmRlckNvbG9yLFxuXHRcdFx0Ym9yZGVyV2lkdGg6IG9wdGlvbnMuYm9yZGVyV2lkdGgsXG5cdFx0XHRoaXRSYWRpdXM6IG9wdGlvbnMuaGl0UmFkaXVzLFxuXHRcdFx0cG9pbnRTdHlsZTogb3B0aW9ucy5wb2ludFN0eWxlLFxuXHRcdFx0cm90YXRpb246IG9wdGlvbnMucm90YXRpb24sXG5cdFx0XHRyYWRpdXM6IHJlc2V0ID8gMCA6IG9wdGlvbnMucmFkaXVzLFxuXHRcdFx0c2tpcDogY3VzdG9tLnNraXAgfHwgaXNOYU4oeCkgfHwgaXNOYU4oeSksXG5cdFx0XHR4OiB4LFxuXHRcdFx0eTogeSxcblx0XHR9O1xuXG5cdFx0cG9pbnQucGl2b3QoKTtcblx0fSxcblxuXHQvKipcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0c2V0SG92ZXJTdHlsZTogZnVuY3Rpb24ocG9pbnQpIHtcblx0XHR2YXIgbW9kZWwgPSBwb2ludC5fbW9kZWw7XG5cdFx0dmFyIG9wdGlvbnMgPSBwb2ludC5fb3B0aW9ucztcblx0XHR2YXIgZ2V0SG92ZXJDb2xvciA9IGhlbHBlcnMkMS5nZXRIb3ZlckNvbG9yO1xuXG5cdFx0cG9pbnQuJHByZXZpb3VzU3R5bGUgPSB7XG5cdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IG1vZGVsLmJhY2tncm91bmRDb2xvcixcblx0XHRcdGJvcmRlckNvbG9yOiBtb2RlbC5ib3JkZXJDb2xvcixcblx0XHRcdGJvcmRlcldpZHRoOiBtb2RlbC5ib3JkZXJXaWR0aCxcblx0XHRcdHJhZGl1czogbW9kZWwucmFkaXVzXG5cdFx0fTtcblxuXHRcdG1vZGVsLmJhY2tncm91bmRDb2xvciA9IHZhbHVlT3JEZWZhdWx0JDMob3B0aW9ucy5ob3ZlckJhY2tncm91bmRDb2xvciwgZ2V0SG92ZXJDb2xvcihvcHRpb25zLmJhY2tncm91bmRDb2xvcikpO1xuXHRcdG1vZGVsLmJvcmRlckNvbG9yID0gdmFsdWVPckRlZmF1bHQkMyhvcHRpb25zLmhvdmVyQm9yZGVyQ29sb3IsIGdldEhvdmVyQ29sb3Iob3B0aW9ucy5ib3JkZXJDb2xvcikpO1xuXHRcdG1vZGVsLmJvcmRlcldpZHRoID0gdmFsdWVPckRlZmF1bHQkMyhvcHRpb25zLmhvdmVyQm9yZGVyV2lkdGgsIG9wdGlvbnMuYm9yZGVyV2lkdGgpO1xuXHRcdG1vZGVsLnJhZGl1cyA9IG9wdGlvbnMucmFkaXVzICsgb3B0aW9ucy5ob3ZlclJhZGl1cztcblx0fSxcblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9yZXNvbHZlRWxlbWVudE9wdGlvbnM6IGZ1bmN0aW9uKHBvaW50LCBpbmRleCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIGNoYXJ0ID0gbWUuY2hhcnQ7XG5cdFx0dmFyIGRhdGFzZXRzID0gY2hhcnQuZGF0YS5kYXRhc2V0cztcblx0XHR2YXIgZGF0YXNldCA9IGRhdGFzZXRzW21lLmluZGV4XTtcblx0XHR2YXIgY3VzdG9tID0gcG9pbnQuY3VzdG9tIHx8IHt9O1xuXHRcdHZhciBvcHRpb25zID0gY2hhcnQub3B0aW9ucy5lbGVtZW50cy5wb2ludDtcblx0XHR2YXIgZGF0YSA9IGRhdGFzZXQuZGF0YVtpbmRleF07XG5cdFx0dmFyIHZhbHVlcyA9IHt9O1xuXHRcdHZhciBpLCBpbGVuLCBrZXk7XG5cblx0XHQvLyBTY3JpcHRhYmxlIG9wdGlvbnNcblx0XHR2YXIgY29udGV4dCA9IHtcblx0XHRcdGNoYXJ0OiBjaGFydCxcblx0XHRcdGRhdGFJbmRleDogaW5kZXgsXG5cdFx0XHRkYXRhc2V0OiBkYXRhc2V0LFxuXHRcdFx0ZGF0YXNldEluZGV4OiBtZS5pbmRleFxuXHRcdH07XG5cblx0XHR2YXIga2V5cyA9IFtcblx0XHRcdCdiYWNrZ3JvdW5kQ29sb3InLFxuXHRcdFx0J2JvcmRlckNvbG9yJyxcblx0XHRcdCdib3JkZXJXaWR0aCcsXG5cdFx0XHQnaG92ZXJCYWNrZ3JvdW5kQ29sb3InLFxuXHRcdFx0J2hvdmVyQm9yZGVyQ29sb3InLFxuXHRcdFx0J2hvdmVyQm9yZGVyV2lkdGgnLFxuXHRcdFx0J2hvdmVyUmFkaXVzJyxcblx0XHRcdCdoaXRSYWRpdXMnLFxuXHRcdFx0J3BvaW50U3R5bGUnLFxuXHRcdFx0J3JvdGF0aW9uJ1xuXHRcdF07XG5cblx0XHRmb3IgKGkgPSAwLCBpbGVuID0ga2V5cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcblx0XHRcdGtleSA9IGtleXNbaV07XG5cdFx0XHR2YWx1ZXNba2V5XSA9IHJlc29sdmUkMihbXG5cdFx0XHRcdGN1c3RvbVtrZXldLFxuXHRcdFx0XHRkYXRhc2V0W2tleV0sXG5cdFx0XHRcdG9wdGlvbnNba2V5XVxuXHRcdFx0XSwgY29udGV4dCwgaW5kZXgpO1xuXHRcdH1cblxuXHRcdC8vIEN1c3RvbSByYWRpdXMgcmVzb2x1dGlvblxuXHRcdHZhbHVlcy5yYWRpdXMgPSByZXNvbHZlJDIoW1xuXHRcdFx0Y3VzdG9tLnJhZGl1cyxcblx0XHRcdGRhdGEgPyBkYXRhLnIgOiB1bmRlZmluZWQsXG5cdFx0XHRkYXRhc2V0LnJhZGl1cyxcblx0XHRcdG9wdGlvbnMucmFkaXVzXG5cdFx0XSwgY29udGV4dCwgaW5kZXgpO1xuXG5cdFx0cmV0dXJuIHZhbHVlcztcblx0fVxufSk7XG5cbnZhciByZXNvbHZlJDMgPSBoZWxwZXJzJDEub3B0aW9ucy5yZXNvbHZlO1xudmFyIHZhbHVlT3JEZWZhdWx0JDQgPSBoZWxwZXJzJDEudmFsdWVPckRlZmF1bHQ7XG5cbmNvcmVfZGVmYXVsdHMuX3NldCgnZG91Z2hudXQnLCB7XG5cdGFuaW1hdGlvbjoge1xuXHRcdC8vIEJvb2xlYW4gLSBXaGV0aGVyIHdlIGFuaW1hdGUgdGhlIHJvdGF0aW9uIG9mIHRoZSBEb3VnaG51dFxuXHRcdGFuaW1hdGVSb3RhdGU6IHRydWUsXG5cdFx0Ly8gQm9vbGVhbiAtIFdoZXRoZXIgd2UgYW5pbWF0ZSBzY2FsaW5nIHRoZSBEb3VnaG51dCBmcm9tIHRoZSBjZW50cmVcblx0XHRhbmltYXRlU2NhbGU6IGZhbHNlXG5cdH0sXG5cdGhvdmVyOiB7XG5cdFx0bW9kZTogJ3NpbmdsZSdcblx0fSxcblx0bGVnZW5kQ2FsbGJhY2s6IGZ1bmN0aW9uKGNoYXJ0KSB7XG5cdFx0dmFyIHRleHQgPSBbXTtcblx0XHR0ZXh0LnB1c2goJzx1bCBjbGFzcz1cIicgKyBjaGFydC5pZCArICctbGVnZW5kXCI+Jyk7XG5cblx0XHR2YXIgZGF0YSA9IGNoYXJ0LmRhdGE7XG5cdFx0dmFyIGRhdGFzZXRzID0gZGF0YS5kYXRhc2V0cztcblx0XHR2YXIgbGFiZWxzID0gZGF0YS5sYWJlbHM7XG5cblx0XHRpZiAoZGF0YXNldHMubGVuZ3RoKSB7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGRhdGFzZXRzWzBdLmRhdGEubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGV4dC5wdXNoKCc8bGk+PHNwYW4gc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOicgKyBkYXRhc2V0c1swXS5iYWNrZ3JvdW5kQ29sb3JbaV0gKyAnXCI+PC9zcGFuPicpO1xuXHRcdFx0XHRpZiAobGFiZWxzW2ldKSB7XG5cdFx0XHRcdFx0dGV4dC5wdXNoKGxhYmVsc1tpXSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGV4dC5wdXNoKCc8L2xpPicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRleHQucHVzaCgnPC91bD4nKTtcblx0XHRyZXR1cm4gdGV4dC5qb2luKCcnKTtcblx0fSxcblx0bGVnZW5kOiB7XG5cdFx0bGFiZWxzOiB7XG5cdFx0XHRnZW5lcmF0ZUxhYmVsczogZnVuY3Rpb24oY2hhcnQpIHtcblx0XHRcdFx0dmFyIGRhdGEgPSBjaGFydC5kYXRhO1xuXHRcdFx0XHRpZiAoZGF0YS5sYWJlbHMubGVuZ3RoICYmIGRhdGEuZGF0YXNldHMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGEubGFiZWxzLm1hcChmdW5jdGlvbihsYWJlbCwgaSkge1xuXHRcdFx0XHRcdFx0dmFyIG1ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YSgwKTtcblx0XHRcdFx0XHRcdHZhciBkcyA9IGRhdGEuZGF0YXNldHNbMF07XG5cdFx0XHRcdFx0XHR2YXIgYXJjID0gbWV0YS5kYXRhW2ldO1xuXHRcdFx0XHRcdFx0dmFyIGN1c3RvbSA9IGFyYyAmJiBhcmMuY3VzdG9tIHx8IHt9O1xuXHRcdFx0XHRcdFx0dmFyIGFyY09wdHMgPSBjaGFydC5vcHRpb25zLmVsZW1lbnRzLmFyYztcblx0XHRcdFx0XHRcdHZhciBmaWxsID0gcmVzb2x2ZSQzKFtjdXN0b20uYmFja2dyb3VuZENvbG9yLCBkcy5iYWNrZ3JvdW5kQ29sb3IsIGFyY09wdHMuYmFja2dyb3VuZENvbG9yXSwgdW5kZWZpbmVkLCBpKTtcblx0XHRcdFx0XHRcdHZhciBzdHJva2UgPSByZXNvbHZlJDMoW2N1c3RvbS5ib3JkZXJDb2xvciwgZHMuYm9yZGVyQ29sb3IsIGFyY09wdHMuYm9yZGVyQ29sb3JdLCB1bmRlZmluZWQsIGkpO1xuXHRcdFx0XHRcdFx0dmFyIGJ3ID0gcmVzb2x2ZSQzKFtjdXN0b20uYm9yZGVyV2lkdGgsIGRzLmJvcmRlcldpZHRoLCBhcmNPcHRzLmJvcmRlcldpZHRoXSwgdW5kZWZpbmVkLCBpKTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0dGV4dDogbGFiZWwsXG5cdFx0XHRcdFx0XHRcdGZpbGxTdHlsZTogZmlsbCxcblx0XHRcdFx0XHRcdFx0c3Ryb2tlU3R5bGU6IHN0cm9rZSxcblx0XHRcdFx0XHRcdFx0bGluZVdpZHRoOiBidyxcblx0XHRcdFx0XHRcdFx0aGlkZGVuOiBpc05hTihkcy5kYXRhW2ldKSB8fCBtZXRhLmRhdGFbaV0uaGlkZGVuLFxuXG5cdFx0XHRcdFx0XHRcdC8vIEV4dHJhIGRhdGEgdXNlZCBmb3IgdG9nZ2xpbmcgdGhlIGNvcnJlY3QgaXRlbVxuXHRcdFx0XHRcdFx0XHRpbmRleDogaVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdG9uQ2xpY2s6IGZ1bmN0aW9uKGUsIGxlZ2VuZEl0ZW0pIHtcblx0XHRcdHZhciBpbmRleCA9IGxlZ2VuZEl0ZW0uaW5kZXg7XG5cdFx0XHR2YXIgY2hhcnQgPSB0aGlzLmNoYXJ0O1xuXHRcdFx0dmFyIGksIGlsZW4sIG1ldGE7XG5cblx0XHRcdGZvciAoaSA9IDAsIGlsZW4gPSAoY2hhcnQuZGF0YS5kYXRhc2V0cyB8fCBbXSkubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XG5cdFx0XHRcdG1ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YShpKTtcblx0XHRcdFx0Ly8gdG9nZ2xlIHZpc2liaWxpdHkgb2YgaW5kZXggaWYgZXhpc3RzXG5cdFx0XHRcdGlmIChtZXRhLmRhdGFbaW5kZXhdKSB7XG5cdFx0XHRcdFx0bWV0YS5kYXRhW2luZGV4XS5oaWRkZW4gPSAhbWV0YS5kYXRhW2luZGV4XS5oaWRkZW47XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Y2hhcnQudXBkYXRlKCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8vIFRoZSBwZXJjZW50YWdlIG9mIHRoZSBjaGFydCB0aGF0IHdlIGN1dCBvdXQgb2YgdGhlIG1pZGRsZS5cblx0Y3V0b3V0UGVyY2VudGFnZTogNTAsXG5cblx0Ly8gVGhlIHJvdGF0aW9uIG9mIHRoZSBjaGFydCwgd2hlcmUgdGhlIGZpcnN0IGRhdGEgYXJjIGJlZ2lucy5cblx0cm90YXRpb246IE1hdGguUEkgKiAtMC41LFxuXG5cdC8vIFRoZSB0b3RhbCBjaXJjdW1mZXJlbmNlIG9mIHRoZSBjaGFydC5cblx0Y2lyY3VtZmVyZW5jZTogTWF0aC5QSSAqIDIuMCxcblxuXHQvLyBOZWVkIHRvIG92ZXJyaWRlIHRoZXNlIHRvIGdpdmUgYSBuaWNlIGRlZmF1bHRcblx0dG9vbHRpcHM6IHtcblx0XHRjYWxsYmFja3M6IHtcblx0XHRcdHRpdGxlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICcnO1xuXHRcdFx0fSxcblx0XHRcdGxhYmVsOiBmdW5jdGlvbih0b29sdGlwSXRlbSwgZGF0YSkge1xuXHRcdFx0XHR2YXIgZGF0YUxhYmVsID0gZGF0YS5sYWJlbHNbdG9vbHRpcEl0ZW0uaW5kZXhdO1xuXHRcdFx0XHR2YXIgdmFsdWUgPSAnOiAnICsgZGF0YS5kYXRhc2V0c1t0b29sdGlwSXRlbS5kYXRhc2V0SW5kZXhdLmRhdGFbdG9vbHRpcEl0ZW0uaW5kZXhdO1xuXG5cdFx0XHRcdGlmIChoZWxwZXJzJDEuaXNBcnJheShkYXRhTGFiZWwpKSB7XG5cdFx0XHRcdFx0Ly8gc2hvdyB2YWx1ZSBvbiBmaXJzdCBsaW5lIG9mIG11bHRpbGluZSBsYWJlbFxuXHRcdFx0XHRcdC8vIG5lZWQgdG8gY2xvbmUgYmVjYXVzZSB3ZSBhcmUgY2hhbmdpbmcgdGhlIHZhbHVlXG5cdFx0XHRcdFx0ZGF0YUxhYmVsID0gZGF0YUxhYmVsLnNsaWNlKCk7XG5cdFx0XHRcdFx0ZGF0YUxhYmVsWzBdICs9IHZhbHVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRhdGFMYWJlbCArPSB2YWx1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBkYXRhTGFiZWw7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59KTtcblxudmFyIGNvbnRyb2xsZXJfZG91Z2hudXQgPSBjb3JlX2RhdGFzZXRDb250cm9sbGVyLmV4dGVuZCh7XG5cblx0ZGF0YUVsZW1lbnRUeXBlOiBlbGVtZW50cy5BcmMsXG5cblx0bGlua1NjYWxlczogaGVscGVycyQxLm5vb3AsXG5cblx0Ly8gR2V0IGluZGV4IG9mIHRoZSBkYXRhc2V0IGluIHJlbGF0aW9uIHRvIHRoZSB2aXNpYmxlIGRhdGFzZXRzLiBUaGlzIGFsbG93cyBkZXRlcm1pbmluZyB0aGUgaW5uZXIgYW5kIG91dGVyIHJhZGl1cyBjb3JyZWN0bHlcblx0Z2V0UmluZ0luZGV4OiBmdW5jdGlvbihkYXRhc2V0SW5kZXgpIHtcblx0XHR2YXIgcmluZ0luZGV4ID0gMDtcblxuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgZGF0YXNldEluZGV4OyArK2opIHtcblx0XHRcdGlmICh0aGlzLmNoYXJ0LmlzRGF0YXNldFZpc2libGUoaikpIHtcblx0XHRcdFx0KytyaW5nSW5kZXg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJpbmdJbmRleDtcblx0fSxcblxuXHR1cGRhdGU6IGZ1bmN0aW9uKHJlc2V0KSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgY2hhcnQgPSBtZS5jaGFydDtcblx0XHR2YXIgY2hhcnRBcmVhID0gY2hhcnQuY2hhcnRBcmVhO1xuXHRcdHZhciBvcHRzID0gY2hhcnQub3B0aW9ucztcblx0XHR2YXIgYXZhaWxhYmxlV2lkdGggPSBjaGFydEFyZWEucmlnaHQgLSBjaGFydEFyZWEubGVmdDtcblx0XHR2YXIgYXZhaWxhYmxlSGVpZ2h0ID0gY2hhcnRBcmVhLmJvdHRvbSAtIGNoYXJ0QXJlYS50b3A7XG5cdFx0dmFyIG1pblNpemUgPSBNYXRoLm1pbihhdmFpbGFibGVXaWR0aCwgYXZhaWxhYmxlSGVpZ2h0KTtcblx0XHR2YXIgb2Zmc2V0ID0ge3g6IDAsIHk6IDB9O1xuXHRcdHZhciBtZXRhID0gbWUuZ2V0TWV0YSgpO1xuXHRcdHZhciBhcmNzID0gbWV0YS5kYXRhO1xuXHRcdHZhciBjdXRvdXRQZXJjZW50YWdlID0gb3B0cy5jdXRvdXRQZXJjZW50YWdlO1xuXHRcdHZhciBjaXJjdW1mZXJlbmNlID0gb3B0cy5jaXJjdW1mZXJlbmNlO1xuXHRcdHZhciBjaGFydFdlaWdodCA9IG1lLl9nZXRSaW5nV2VpZ2h0KG1lLmluZGV4KTtcblx0XHR2YXIgaSwgaWxlbjtcblxuXHRcdC8vIElmIHRoZSBjaGFydCdzIGNpcmN1bWZlcmVuY2UgaXNuJ3QgYSBmdWxsIGNpcmNsZSwgY2FsY3VsYXRlIG1pblNpemUgYXMgYSByYXRpbyBvZiB0aGUgd2lkdGgvaGVpZ2h0IG9mIHRoZSBhcmNcblx0XHRpZiAoY2lyY3VtZmVyZW5jZSA8IE1hdGguUEkgKiAyLjApIHtcblx0XHRcdHZhciBzdGFydEFuZ2xlID0gb3B0cy5yb3RhdGlvbiAlIChNYXRoLlBJICogMi4wKTtcblx0XHRcdHN0YXJ0QW5nbGUgKz0gTWF0aC5QSSAqIDIuMCAqIChzdGFydEFuZ2xlID49IE1hdGguUEkgPyAtMSA6IHN0YXJ0QW5nbGUgPCAtTWF0aC5QSSA/IDEgOiAwKTtcblx0XHRcdHZhciBlbmRBbmdsZSA9IHN0YXJ0QW5nbGUgKyBjaXJjdW1mZXJlbmNlO1xuXHRcdFx0dmFyIHN0YXJ0ID0ge3g6IE1hdGguY29zKHN0YXJ0QW5nbGUpLCB5OiBNYXRoLnNpbihzdGFydEFuZ2xlKX07XG5cdFx0XHR2YXIgZW5kID0ge3g6IE1hdGguY29zKGVuZEFuZ2xlKSwgeTogTWF0aC5zaW4oZW5kQW5nbGUpfTtcblx0XHRcdHZhciBjb250YWluczAgPSAoc3RhcnRBbmdsZSA8PSAwICYmIGVuZEFuZ2xlID49IDApIHx8IChzdGFydEFuZ2xlIDw9IE1hdGguUEkgKiAyLjAgJiYgTWF0aC5QSSAqIDIuMCA8PSBlbmRBbmdsZSk7XG5cdFx0XHR2YXIgY29udGFpbnM5MCA9IChzdGFydEFuZ2xlIDw9IE1hdGguUEkgKiAwLjUgJiYgTWF0aC5QSSAqIDAuNSA8PSBlbmRBbmdsZSkgfHwgKHN0YXJ0QW5nbGUgPD0gTWF0aC5QSSAqIDIuNSAmJiBNYXRoLlBJICogMi41IDw9IGVuZEFuZ2xlKTtcblx0XHRcdHZhciBjb250YWluczE4MCA9IChzdGFydEFuZ2xlIDw9IC1NYXRoLlBJICYmIC1NYXRoLlBJIDw9IGVuZEFuZ2xlKSB8fCAoc3RhcnRBbmdsZSA8PSBNYXRoLlBJICYmIE1hdGguUEkgPD0gZW5kQW5nbGUpO1xuXHRcdFx0dmFyIGNvbnRhaW5zMjcwID0gKHN0YXJ0QW5nbGUgPD0gLU1hdGguUEkgKiAwLjUgJiYgLU1hdGguUEkgKiAwLjUgPD0gZW5kQW5nbGUpIHx8IChzdGFydEFuZ2xlIDw9IE1hdGguUEkgKiAxLjUgJiYgTWF0aC5QSSAqIDEuNSA8PSBlbmRBbmdsZSk7XG5cdFx0XHR2YXIgY3V0b3V0ID0gY3V0b3V0UGVyY2VudGFnZSAvIDEwMC4wO1xuXHRcdFx0dmFyIG1pbiA9IHt4OiBjb250YWluczE4MCA/IC0xIDogTWF0aC5taW4oc3RhcnQueCAqIChzdGFydC54IDwgMCA/IDEgOiBjdXRvdXQpLCBlbmQueCAqIChlbmQueCA8IDAgPyAxIDogY3V0b3V0KSksIHk6IGNvbnRhaW5zMjcwID8gLTEgOiBNYXRoLm1pbihzdGFydC55ICogKHN0YXJ0LnkgPCAwID8gMSA6IGN1dG91dCksIGVuZC55ICogKGVuZC55IDwgMCA/IDEgOiBjdXRvdXQpKX07XG5cdFx0XHR2YXIgbWF4ID0ge3g6IGNvbnRhaW5zMCA/IDEgOiBNYXRoLm1heChzdGFydC54ICogKHN0YXJ0LnggPiAwID8gMSA6IGN1dG91dCksIGVuZC54ICogKGVuZC54ID4gMCA/IDEgOiBjdXRvdXQpKSwgeTogY29udGFpbnM5MCA/IDEgOiBNYXRoLm1heChzdGFydC55ICogKHN0YXJ0LnkgPiAwID8gMSA6IGN1dG91dCksIGVuZC55ICogKGVuZC55ID4gMCA/IDEgOiBjdXRvdXQpKX07XG5cdFx0XHR2YXIgc2l6ZSA9IHt3aWR0aDogKG1heC54IC0gbWluLngpICogMC41LCBoZWlnaHQ6IChtYXgueSAtIG1pbi55KSAqIDAuNX07XG5cdFx0XHRtaW5TaXplID0gTWF0aC5taW4oYXZhaWxhYmxlV2lkdGggLyBzaXplLndpZHRoLCBhdmFpbGFibGVIZWlnaHQgLyBzaXplLmhlaWdodCk7XG5cdFx0XHRvZmZzZXQgPSB7eDogKG1heC54ICsgbWluLngpICogLTAuNSwgeTogKG1heC55ICsgbWluLnkpICogLTAuNX07XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMCwgaWxlbiA9IGFyY3MubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XG5cdFx0XHRhcmNzW2ldLl9vcHRpb25zID0gbWUuX3Jlc29sdmVFbGVtZW50T3B0aW9ucyhhcmNzW2ldLCBpKTtcblx0XHR9XG5cblx0XHRjaGFydC5ib3JkZXJXaWR0aCA9IG1lLmdldE1heEJvcmRlcldpZHRoKCk7XG5cdFx0Y2hhcnQub3V0ZXJSYWRpdXMgPSBNYXRoLm1heCgobWluU2l6ZSAtIGNoYXJ0LmJvcmRlcldpZHRoKSAvIDIsIDApO1xuXHRcdGNoYXJ0LmlubmVyUmFkaXVzID0gTWF0aC5tYXgoY3V0b3V0UGVyY2VudGFnZSA/IChjaGFydC5vdXRlclJhZGl1cyAvIDEwMCkgKiAoY3V0b3V0UGVyY2VudGFnZSkgOiAwLCAwKTtcblx0XHRjaGFydC5yYWRpdXNMZW5ndGggPSAoY2hhcnQub3V0ZXJSYWRpdXMgLSBjaGFydC5pbm5lclJhZGl1cykgLyAobWUuX2dldFZpc2libGVEYXRhc2V0V2VpZ2h0VG90YWwoKSB8fCAxKTtcblx0XHRjaGFydC5vZmZzZXRYID0gb2Zmc2V0LnggKiBjaGFydC5vdXRlclJhZGl1cztcblx0XHRjaGFydC5vZmZzZXRZID0gb2Zmc2V0LnkgKiBjaGFydC5vdXRlclJhZGl1cztcblxuXHRcdG1ldGEudG90YWwgPSBtZS5jYWxjdWxhdGVUb3RhbCgpO1xuXG5cdFx0bWUub3V0ZXJSYWRpdXMgPSBjaGFydC5vdXRlclJhZGl1cyAtIGNoYXJ0LnJhZGl1c0xlbmd0aCAqIG1lLl9nZXRSaW5nV2VpZ2h0T2Zmc2V0KG1lLmluZGV4KTtcblx0XHRtZS5pbm5lclJhZGl1cyA9IE1hdGgubWF4KG1lLm91dGVyUmFkaXVzIC0gY2hhcnQucmFkaXVzTGVuZ3RoICogY2hhcnRXZWlnaHQsIDApO1xuXG5cdFx0Zm9yIChpID0gMCwgaWxlbiA9IGFyY3MubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XG5cdFx0XHRtZS51cGRhdGVFbGVtZW50KGFyY3NbaV0sIGksIHJlc2V0KTtcblx0XHR9XG5cdH0sXG5cblx0dXBkYXRlRWxlbWVudDogZnVuY3Rpb24oYXJjLCBpbmRleCwgcmVzZXQpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciBjaGFydCA9IG1lLmNoYXJ0O1xuXHRcdHZhciBjaGFydEFyZWEgPSBjaGFydC5jaGFydEFyZWE7XG5cdFx0dmFyIG9wdHMgPSBjaGFydC5vcHRpb25zO1xuXHRcdHZhciBhbmltYXRpb25PcHRzID0gb3B0cy5hbmltYXRpb247XG5cdFx0dmFyIGNlbnRlclggPSAoY2hhcnRBcmVhLmxlZnQgKyBjaGFydEFyZWEucmlnaHQpIC8gMjtcblx0XHR2YXIgY2VudGVyWSA9IChjaGFydEFyZWEudG9wICsgY2hhcnRBcmVhLmJvdHRvbSkgLyAyO1xuXHRcdHZhciBzdGFydEFuZ2xlID0gb3B0cy5yb3RhdGlvbjsgLy8gbm9uIHJlc2V0IGNhc2UgaGFuZGxlZCBsYXRlclxuXHRcdHZhciBlbmRBbmdsZSA9IG9wdHMucm90YXRpb247IC8vIG5vbiByZXNldCBjYXNlIGhhbmRsZWQgbGF0ZXJcblx0XHR2YXIgZGF0YXNldCA9IG1lLmdldERhdGFzZXQoKTtcblx0XHR2YXIgY2lyY3VtZmVyZW5jZSA9IHJlc2V0ICYmIGFuaW1hdGlvbk9wdHMuYW5pbWF0ZVJvdGF0ZSA/IDAgOiBhcmMuaGlkZGVuID8gMCA6IG1lLmNhbGN1bGF0ZUNpcmN1bWZlcmVuY2UoZGF0YXNldC5kYXRhW2luZGV4XSkgKiAob3B0cy5jaXJjdW1mZXJlbmNlIC8gKDIuMCAqIE1hdGguUEkpKTtcblx0XHR2YXIgaW5uZXJSYWRpdXMgPSByZXNldCAmJiBhbmltYXRpb25PcHRzLmFuaW1hdGVTY2FsZSA/IDAgOiBtZS5pbm5lclJhZGl1cztcblx0XHR2YXIgb3V0ZXJSYWRpdXMgPSByZXNldCAmJiBhbmltYXRpb25PcHRzLmFuaW1hdGVTY2FsZSA/IDAgOiBtZS5vdXRlclJhZGl1cztcblx0XHR2YXIgb3B0aW9ucyA9IGFyYy5fb3B0aW9ucyB8fCB7fTtcblxuXHRcdGhlbHBlcnMkMS5leHRlbmQoYXJjLCB7XG5cdFx0XHQvLyBVdGlsaXR5XG5cdFx0XHRfZGF0YXNldEluZGV4OiBtZS5pbmRleCxcblx0XHRcdF9pbmRleDogaW5kZXgsXG5cblx0XHRcdC8vIERlc2lyZWQgdmlldyBwcm9wZXJ0aWVzXG5cdFx0XHRfbW9kZWw6IHtcblx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiBvcHRpb25zLmJhY2tncm91bmRDb2xvcixcblx0XHRcdFx0Ym9yZGVyQ29sb3I6IG9wdGlvbnMuYm9yZGVyQ29sb3IsXG5cdFx0XHRcdGJvcmRlcldpZHRoOiBvcHRpb25zLmJvcmRlcldpZHRoLFxuXHRcdFx0XHRib3JkZXJBbGlnbjogb3B0aW9ucy5ib3JkZXJBbGlnbixcblx0XHRcdFx0eDogY2VudGVyWCArIGNoYXJ0Lm9mZnNldFgsXG5cdFx0XHRcdHk6IGNlbnRlclkgKyBjaGFydC5vZmZzZXRZLFxuXHRcdFx0XHRzdGFydEFuZ2xlOiBzdGFydEFuZ2xlLFxuXHRcdFx0XHRlbmRBbmdsZTogZW5kQW5nbGUsXG5cdFx0XHRcdGNpcmN1bWZlcmVuY2U6IGNpcmN1bWZlcmVuY2UsXG5cdFx0XHRcdG91dGVyUmFkaXVzOiBvdXRlclJhZGl1cyxcblx0XHRcdFx0aW5uZXJSYWRpdXM6IGlubmVyUmFkaXVzLFxuXHRcdFx0XHRsYWJlbDogaGVscGVycyQxLnZhbHVlQXRJbmRleE9yRGVmYXVsdChkYXRhc2V0LmxhYmVsLCBpbmRleCwgY2hhcnQuZGF0YS5sYWJlbHNbaW5kZXhdKVxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dmFyIG1vZGVsID0gYXJjLl9tb2RlbDtcblxuXHRcdC8vIFNldCBjb3JyZWN0IGFuZ2xlcyBpZiBub3QgcmVzZXR0aW5nXG5cdFx0aWYgKCFyZXNldCB8fCAhYW5pbWF0aW9uT3B0cy5hbmltYXRlUm90YXRlKSB7XG5cdFx0XHRpZiAoaW5kZXggPT09IDApIHtcblx0XHRcdFx0bW9kZWwuc3RhcnRBbmdsZSA9IG9wdHMucm90YXRpb247XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtb2RlbC5zdGFydEFuZ2xlID0gbWUuZ2V0TWV0YSgpLmRhdGFbaW5kZXggLSAxXS5fbW9kZWwuZW5kQW5nbGU7XG5cdFx0XHR9XG5cblx0XHRcdG1vZGVsLmVuZEFuZ2xlID0gbW9kZWwuc3RhcnRBbmdsZSArIG1vZGVsLmNpcmN1bWZlcmVuY2U7XG5cdFx0fVxuXG5cdFx0YXJjLnBpdm90KCk7XG5cdH0sXG5cblx0Y2FsY3VsYXRlVG90YWw6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBkYXRhc2V0ID0gdGhpcy5nZXREYXRhc2V0KCk7XG5cdFx0dmFyIG1ldGEgPSB0aGlzLmdldE1ldGEoKTtcblx0XHR2YXIgdG90YWwgPSAwO1xuXHRcdHZhciB2YWx1ZTtcblxuXHRcdGhlbHBlcnMkMS5lYWNoKG1ldGEuZGF0YSwgZnVuY3Rpb24oZWxlbWVudCwgaW5kZXgpIHtcblx0XHRcdHZhbHVlID0gZGF0YXNldC5kYXRhW2luZGV4XTtcblx0XHRcdGlmICghaXNOYU4odmFsdWUpICYmICFlbGVtZW50LmhpZGRlbikge1xuXHRcdFx0XHR0b3RhbCArPSBNYXRoLmFicyh2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvKiBpZiAodG90YWwgPT09IDApIHtcblx0XHRcdHRvdGFsID0gTmFOO1xuXHRcdH0qL1xuXG5cdFx0cmV0dXJuIHRvdGFsO1xuXHR9LFxuXG5cdGNhbGN1bGF0ZUNpcmN1bWZlcmVuY2U6IGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0dmFyIHRvdGFsID0gdGhpcy5nZXRNZXRhKCkudG90YWw7XG5cdFx0aWYgKHRvdGFsID4gMCAmJiAhaXNOYU4odmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gKE1hdGguUEkgKiAyLjApICogKE1hdGguYWJzKHZhbHVlKSAvIHRvdGFsKTtcblx0XHR9XG5cdFx0cmV0dXJuIDA7XG5cdH0sXG5cblx0Ly8gZ2V0cyB0aGUgbWF4IGJvcmRlciBvciBob3ZlciB3aWR0aCB0byBwcm9wZXJseSBzY2FsZSBwaWUgY2hhcnRzXG5cdGdldE1heEJvcmRlcldpZHRoOiBmdW5jdGlvbihhcmNzKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgbWF4ID0gMDtcblx0XHR2YXIgY2hhcnQgPSBtZS5jaGFydDtcblx0XHR2YXIgaSwgaWxlbiwgbWV0YSwgYXJjLCBjb250cm9sbGVyLCBvcHRpb25zLCBib3JkZXJXaWR0aCwgaG92ZXJXaWR0aDtcblxuXHRcdGlmICghYXJjcykge1xuXHRcdFx0Ly8gRmluZCB0aGUgb3V0bW9zdCB2aXNpYmxlIGRhdGFzZXRcblx0XHRcdGZvciAoaSA9IDAsIGlsZW4gPSBjaGFydC5kYXRhLmRhdGFzZXRzLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xuXHRcdFx0XHRpZiAoY2hhcnQuaXNEYXRhc2V0VmlzaWJsZShpKSkge1xuXHRcdFx0XHRcdG1ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YShpKTtcblx0XHRcdFx0XHRhcmNzID0gbWV0YS5kYXRhO1xuXHRcdFx0XHRcdGlmIChpICE9PSBtZS5pbmRleCkge1xuXHRcdFx0XHRcdFx0Y29udHJvbGxlciA9IG1ldGEuY29udHJvbGxlcjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIWFyY3MpIHtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdGZvciAoaSA9IDAsIGlsZW4gPSBhcmNzLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xuXHRcdFx0YXJjID0gYXJjc1tpXTtcblx0XHRcdG9wdGlvbnMgPSBjb250cm9sbGVyID8gY29udHJvbGxlci5fcmVzb2x2ZUVsZW1lbnRPcHRpb25zKGFyYywgaSkgOiBhcmMuX29wdGlvbnM7XG5cdFx0XHRpZiAob3B0aW9ucy5ib3JkZXJBbGlnbiAhPT0gJ2lubmVyJykge1xuXHRcdFx0XHRib3JkZXJXaWR0aCA9IG9wdGlvbnMuYm9yZGVyV2lkdGg7XG5cdFx0XHRcdGhvdmVyV2lkdGggPSBvcHRpb25zLmhvdmVyQm9yZGVyV2lkdGg7XG5cblx0XHRcdFx0bWF4ID0gYm9yZGVyV2lkdGggPiBtYXggPyBib3JkZXJXaWR0aCA6IG1heDtcblx0XHRcdFx0bWF4ID0gaG92ZXJXaWR0aCA+IG1heCA/IGhvdmVyV2lkdGggOiBtYXg7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBtYXg7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdHNldEhvdmVyU3R5bGU6IGZ1bmN0aW9uKGFyYykge1xuXHRcdHZhciBtb2RlbCA9IGFyYy5fbW9kZWw7XG5cdFx0dmFyIG9wdGlvbnMgPSBhcmMuX29wdGlvbnM7XG5cdFx0dmFyIGdldEhvdmVyQ29sb3IgPSBoZWxwZXJzJDEuZ2V0SG92ZXJDb2xvcjtcblxuXHRcdGFyYy4kcHJldmlvdXNTdHlsZSA9IHtcblx0XHRcdGJhY2tncm91bmRDb2xvcjogbW9kZWwuYmFja2dyb3VuZENvbG9yLFxuXHRcdFx0Ym9yZGVyQ29sb3I6IG1vZGVsLmJvcmRlckNvbG9yLFxuXHRcdFx0Ym9yZGVyV2lkdGg6IG1vZGVsLmJvcmRlcldpZHRoLFxuXHRcdH07XG5cblx0XHRtb2RlbC5iYWNrZ3JvdW5kQ29sb3IgPSB2YWx1ZU9yRGVmYXVsdCQ0KG9wdGlvbnMuaG92ZXJCYWNrZ3JvdW5kQ29sb3IsIGdldEhvdmVyQ29sb3Iob3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IpKTtcblx0XHRtb2RlbC5ib3JkZXJDb2xvciA9IHZhbHVlT3JEZWZhdWx0JDQob3B0aW9ucy5ob3ZlckJvcmRlckNvbG9yLCBnZXRIb3ZlckNvbG9yKG9wdGlvbnMuYm9yZGVyQ29sb3IpKTtcblx0XHRtb2RlbC5ib3JkZXJXaWR0aCA9IHZhbHVlT3JEZWZhdWx0JDQob3B0aW9ucy5ob3ZlckJvcmRlcldpZHRoLCBvcHRpb25zLmJvcmRlcldpZHRoKTtcblx0fSxcblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9yZXNvbHZlRWxlbWVudE9wdGlvbnM6IGZ1bmN0aW9uKGFyYywgaW5kZXgpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciBjaGFydCA9IG1lLmNoYXJ0O1xuXHRcdHZhciBkYXRhc2V0ID0gbWUuZ2V0RGF0YXNldCgpO1xuXHRcdHZhciBjdXN0b20gPSBhcmMuY3VzdG9tIHx8IHt9O1xuXHRcdHZhciBvcHRpb25zID0gY2hhcnQub3B0aW9ucy5lbGVtZW50cy5hcmM7XG5cdFx0dmFyIHZhbHVlcyA9IHt9O1xuXHRcdHZhciBpLCBpbGVuLCBrZXk7XG5cblx0XHQvLyBTY3JpcHRhYmxlIG9wdGlvbnNcblx0XHR2YXIgY29udGV4dCA9IHtcblx0XHRcdGNoYXJ0OiBjaGFydCxcblx0XHRcdGRhdGFJbmRleDogaW5kZXgsXG5cdFx0XHRkYXRhc2V0OiBkYXRhc2V0LFxuXHRcdFx0ZGF0YXNldEluZGV4OiBtZS5pbmRleFxuXHRcdH07XG5cblx0XHR2YXIga2V5cyA9IFtcblx0XHRcdCdiYWNrZ3JvdW5kQ29sb3InLFxuXHRcdFx0J2JvcmRlckNvbG9yJyxcblx0XHRcdCdib3JkZXJXaWR0aCcsXG5cdFx0XHQnYm9yZGVyQWxpZ24nLFxuXHRcdFx0J2hvdmVyQmFja2dyb3VuZENvbG9yJyxcblx0XHRcdCdob3ZlckJvcmRlckNvbG9yJyxcblx0XHRcdCdob3ZlckJvcmRlcldpZHRoJyxcblx0XHRdO1xuXG5cdFx0Zm9yIChpID0gMCwgaWxlbiA9IGtleXMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XG5cdFx0XHRrZXkgPSBrZXlzW2ldO1xuXHRcdFx0dmFsdWVzW2tleV0gPSByZXNvbHZlJDMoW1xuXHRcdFx0XHRjdXN0b21ba2V5XSxcblx0XHRcdFx0ZGF0YXNldFtrZXldLFxuXHRcdFx0XHRvcHRpb25zW2tleV1cblx0XHRcdF0sIGNvbnRleHQsIGluZGV4KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsdWVzO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXQgcmFkaXVzIGxlbmd0aCBvZmZzZXQgb2YgdGhlIGRhdGFzZXQgaW4gcmVsYXRpb24gdG8gdGhlIHZpc2libGUgZGF0YXNldHMgd2VpZ2h0cy4gVGhpcyBhbGxvd3MgZGV0ZXJtaW5pbmcgdGhlIGlubmVyIGFuZCBvdXRlciByYWRpdXMgY29ycmVjdGx5XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0UmluZ1dlaWdodE9mZnNldDogZnVuY3Rpb24oZGF0YXNldEluZGV4KSB7XG5cdFx0dmFyIHJpbmdXZWlnaHRPZmZzZXQgPSAwO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhc2V0SW5kZXg7ICsraSkge1xuXHRcdFx0aWYgKHRoaXMuY2hhcnQuaXNEYXRhc2V0VmlzaWJsZShpKSkge1xuXHRcdFx0XHRyaW5nV2VpZ2h0T2Zmc2V0ICs9IHRoaXMuX2dldFJpbmdXZWlnaHQoaSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJpbmdXZWlnaHRPZmZzZXQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0UmluZ1dlaWdodDogZnVuY3Rpb24oZGF0YVNldEluZGV4KSB7XG5cdFx0cmV0dXJuIE1hdGgubWF4KHZhbHVlT3JEZWZhdWx0JDQodGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzW2RhdGFTZXRJbmRleF0ud2VpZ2h0LCAxKSwgMCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHN1bSBvZiBhbGwgdmlzaWJpbGUgZGF0YSBzZXQgd2VpZ2h0cy4gIFRoaXMgdmFsdWUgY2FuIGJlIDAuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0VmlzaWJsZURhdGFzZXRXZWlnaHRUb3RhbDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFJpbmdXZWlnaHRPZmZzZXQodGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzLmxlbmd0aCk7XG5cdH1cbn0pO1xuXG5jb3JlX2RlZmF1bHRzLl9zZXQoJ2hvcml6b250YWxCYXInLCB7XG5cdGhvdmVyOiB7XG5cdFx0bW9kZTogJ2luZGV4Jyxcblx0XHRheGlzOiAneSdcblx0fSxcblxuXHRzY2FsZXM6IHtcblx0XHR4QXhlczogW3tcblx0XHRcdHR5cGU6ICdsaW5lYXInLFxuXHRcdFx0cG9zaXRpb246ICdib3R0b20nXG5cdFx0fV0sXG5cblx0XHR5QXhlczogW3tcblx0XHRcdHR5cGU6ICdjYXRlZ29yeScsXG5cdFx0XHRwb3NpdGlvbjogJ2xlZnQnLFxuXHRcdFx0Y2F0ZWdvcnlQZXJjZW50YWdlOiAwLjgsXG5cdFx0XHRiYXJQZXJjZW50YWdlOiAwLjksXG5cdFx0XHRvZmZzZXQ6IHRydWUsXG5cdFx0XHRncmlkTGluZXM6IHtcblx0XHRcdFx0b2Zmc2V0R3JpZExpbmVzOiB0cnVlXG5cdFx0XHR9XG5cdFx0fV1cblx0fSxcblxuXHRlbGVtZW50czoge1xuXHRcdHJlY3RhbmdsZToge1xuXHRcdFx0Ym9yZGVyU2tpcHBlZDogJ2xlZnQnXG5cdFx0fVxuXHR9LFxuXG5cdHRvb2x0aXBzOiB7XG5cdFx0bW9kZTogJ2luZGV4Jyxcblx0XHRheGlzOiAneSdcblx0fVxufSk7XG5cbnZhciBjb250cm9sbGVyX2hvcml6b250YWxCYXIgPSBjb250cm9sbGVyX2Jhci5leHRlbmQoe1xuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9nZXRWYWx1ZVNjYWxlSWQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE1ldGEoKS54QXhpc0lEO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2dldEluZGV4U2NhbGVJZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TWV0YSgpLnlBeGlzSUQ7XG5cdH1cbn0pO1xuXG52YXIgdmFsdWVPckRlZmF1bHQkNSA9IGhlbHBlcnMkMS52YWx1ZU9yRGVmYXVsdDtcbnZhciByZXNvbHZlJDQgPSBoZWxwZXJzJDEub3B0aW9ucy5yZXNvbHZlO1xudmFyIGlzUG9pbnRJbkFyZWEgPSBoZWxwZXJzJDEuY2FudmFzLl9pc1BvaW50SW5BcmVhO1xuXG5jb3JlX2RlZmF1bHRzLl9zZXQoJ2xpbmUnLCB7XG5cdHNob3dMaW5lczogdHJ1ZSxcblx0c3BhbkdhcHM6IGZhbHNlLFxuXG5cdGhvdmVyOiB7XG5cdFx0bW9kZTogJ2xhYmVsJ1xuXHR9LFxuXG5cdHNjYWxlczoge1xuXHRcdHhBeGVzOiBbe1xuXHRcdFx0dHlwZTogJ2NhdGVnb3J5Jyxcblx0XHRcdGlkOiAneC1heGlzLTAnXG5cdFx0fV0sXG5cdFx0eUF4ZXM6IFt7XG5cdFx0XHR0eXBlOiAnbGluZWFyJyxcblx0XHRcdGlkOiAneS1heGlzLTAnXG5cdFx0fV1cblx0fVxufSk7XG5cbmZ1bmN0aW9uIGxpbmVFbmFibGVkKGRhdGFzZXQsIG9wdGlvbnMpIHtcblx0cmV0dXJuIHZhbHVlT3JEZWZhdWx0JDUoZGF0YXNldC5zaG93TGluZSwgb3B0aW9ucy5zaG93TGluZXMpO1xufVxuXG52YXIgY29udHJvbGxlcl9saW5lID0gY29yZV9kYXRhc2V0Q29udHJvbGxlci5leHRlbmQoe1xuXG5cdGRhdGFzZXRFbGVtZW50VHlwZTogZWxlbWVudHMuTGluZSxcblxuXHRkYXRhRWxlbWVudFR5cGU6IGVsZW1lbnRzLlBvaW50LFxuXG5cdHVwZGF0ZTogZnVuY3Rpb24ocmVzZXQpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciBtZXRhID0gbWUuZ2V0TWV0YSgpO1xuXHRcdHZhciBsaW5lID0gbWV0YS5kYXRhc2V0O1xuXHRcdHZhciBwb2ludHMgPSBtZXRhLmRhdGEgfHwgW107XG5cdFx0dmFyIHNjYWxlID0gbWUuZ2V0U2NhbGVGb3JJZChtZXRhLnlBeGlzSUQpO1xuXHRcdHZhciBkYXRhc2V0ID0gbWUuZ2V0RGF0YXNldCgpO1xuXHRcdHZhciBzaG93TGluZSA9IGxpbmVFbmFibGVkKGRhdGFzZXQsIG1lLmNoYXJ0Lm9wdGlvbnMpO1xuXHRcdHZhciBpLCBpbGVuO1xuXG5cdFx0Ly8gVXBkYXRlIExpbmVcblx0XHRpZiAoc2hvd0xpbmUpIHtcblx0XHRcdC8vIENvbXBhdGliaWxpdHk6IElmIHRoZSBwcm9wZXJ0aWVzIGFyZSBkZWZpbmVkIHdpdGggb25seSB0aGUgb2xkIG5hbWUsIHVzZSB0aG9zZSB2YWx1ZXNcblx0XHRcdGlmICgoZGF0YXNldC50ZW5zaW9uICE9PSB1bmRlZmluZWQpICYmIChkYXRhc2V0LmxpbmVUZW5zaW9uID09PSB1bmRlZmluZWQpKSB7XG5cdFx0XHRcdGRhdGFzZXQubGluZVRlbnNpb24gPSBkYXRhc2V0LnRlbnNpb247XG5cdFx0XHR9XG5cblx0XHRcdC8vIFV0aWxpdHlcblx0XHRcdGxpbmUuX3NjYWxlID0gc2NhbGU7XG5cdFx0XHRsaW5lLl9kYXRhc2V0SW5kZXggPSBtZS5pbmRleDtcblx0XHRcdC8vIERhdGFcblx0XHRcdGxpbmUuX2NoaWxkcmVuID0gcG9pbnRzO1xuXHRcdFx0Ly8gTW9kZWxcblx0XHRcdGxpbmUuX21vZGVsID0gbWUuX3Jlc29sdmVMaW5lT3B0aW9ucyhsaW5lKTtcblxuXHRcdFx0bGluZS5waXZvdCgpO1xuXHRcdH1cblxuXHRcdC8vIFVwZGF0ZSBQb2ludHNcblx0XHRmb3IgKGkgPSAwLCBpbGVuID0gcG9pbnRzLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xuXHRcdFx0bWUudXBkYXRlRWxlbWVudChwb2ludHNbaV0sIGksIHJlc2V0KTtcblx0XHR9XG5cblx0XHRpZiAoc2hvd0xpbmUgJiYgbGluZS5fbW9kZWwudGVuc2lvbiAhPT0gMCkge1xuXHRcdFx0bWUudXBkYXRlQmV6aWVyQ29udHJvbFBvaW50cygpO1xuXHRcdH1cblxuXHRcdC8vIE5vdyBwaXZvdCB0aGUgcG9pbnQgZm9yIGFuaW1hdGlvblxuXHRcdGZvciAoaSA9IDAsIGlsZW4gPSBwb2ludHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XG5cdFx0XHRwb2ludHNbaV0ucGl2b3QoKTtcblx0XHR9XG5cdH0sXG5cblx0dXBkYXRlRWxlbWVudDogZnVuY3Rpb24ocG9pbnQsIGluZGV4LCByZXNldCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIG1ldGEgPSBtZS5nZXRNZXRhKCk7XG5cdFx0dmFyIGN1c3RvbSA9IHBvaW50LmN1c3RvbSB8fCB7fTtcblx0XHR2YXIgZGF0YXNldCA9IG1lLmdldERhdGFzZXQoKTtcblx0XHR2YXIgZGF0YXNldEluZGV4ID0gbWUuaW5kZXg7XG5cdFx0dmFyIHZhbHVlID0gZGF0YXNldC5kYXRhW2luZGV4XTtcblx0XHR2YXIgeVNjYWxlID0gbWUuZ2V0U2NhbGVGb3JJZChtZXRhLnlBeGlzSUQpO1xuXHRcdHZhciB4U2NhbGUgPSBtZS5nZXRTY2FsZUZvcklkKG1ldGEueEF4aXNJRCk7XG5cdFx0dmFyIGxpbmVNb2RlbCA9IG1ldGEuZGF0YXNldC5fbW9kZWw7XG5cdFx0dmFyIHgsIHk7XG5cblx0XHR2YXIgb3B0aW9ucyA9IG1lLl9yZXNvbHZlUG9pbnRPcHRpb25zKHBvaW50LCBpbmRleCk7XG5cblx0XHR4ID0geFNjYWxlLmdldFBpeGVsRm9yVmFsdWUodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHZhbHVlIDogTmFOLCBpbmRleCwgZGF0YXNldEluZGV4KTtcblx0XHR5ID0gcmVzZXQgPyB5U2NhbGUuZ2V0QmFzZVBpeGVsKCkgOiBtZS5jYWxjdWxhdGVQb2ludFkodmFsdWUsIGluZGV4LCBkYXRhc2V0SW5kZXgpO1xuXG5cdFx0Ly8gVXRpbGl0eVxuXHRcdHBvaW50Ll94U2NhbGUgPSB4U2NhbGU7XG5cdFx0cG9pbnQuX3lTY2FsZSA9IHlTY2FsZTtcblx0XHRwb2ludC5fb3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0cG9pbnQuX2RhdGFzZXRJbmRleCA9IGRhdGFzZXRJbmRleDtcblx0XHRwb2ludC5faW5kZXggPSBpbmRleDtcblxuXHRcdC8vIERlc2lyZWQgdmlldyBwcm9wZXJ0aWVzXG5cdFx0cG9pbnQuX21vZGVsID0ge1xuXHRcdFx0eDogeCxcblx0XHRcdHk6IHksXG5cdFx0XHRza2lwOiBjdXN0b20uc2tpcCB8fCBpc05hTih4KSB8fCBpc05hTih5KSxcblx0XHRcdC8vIEFwcGVhcmFuY2Vcblx0XHRcdHJhZGl1czogb3B0aW9ucy5yYWRpdXMsXG5cdFx0XHRwb2ludFN0eWxlOiBvcHRpb25zLnBvaW50U3R5bGUsXG5cdFx0XHRyb3RhdGlvbjogb3B0aW9ucy5yb3RhdGlvbixcblx0XHRcdGJhY2tncm91bmRDb2xvcjogb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IsXG5cdFx0XHRib3JkZXJDb2xvcjogb3B0aW9ucy5ib3JkZXJDb2xvcixcblx0XHRcdGJvcmRlcldpZHRoOiBvcHRpb25zLmJvcmRlcldpZHRoLFxuXHRcdFx0dGVuc2lvbjogdmFsdWVPckRlZmF1bHQkNShjdXN0b20udGVuc2lvbiwgbGluZU1vZGVsID8gbGluZU1vZGVsLnRlbnNpb24gOiAwKSxcblx0XHRcdHN0ZXBwZWRMaW5lOiBsaW5lTW9kZWwgPyBsaW5lTW9kZWwuc3RlcHBlZExpbmUgOiBmYWxzZSxcblx0XHRcdC8vIFRvb2x0aXBcblx0XHRcdGhpdFJhZGl1czogb3B0aW9ucy5oaXRSYWRpdXNcblx0XHR9O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X3Jlc29sdmVQb2ludE9wdGlvbnM6IGZ1bmN0aW9uKGVsZW1lbnQsIGluZGV4KSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgY2hhcnQgPSBtZS5jaGFydDtcblx0XHR2YXIgZGF0YXNldCA9IGNoYXJ0LmRhdGEuZGF0YXNldHNbbWUuaW5kZXhdO1xuXHRcdHZhciBjdXN0b20gPSBlbGVtZW50LmN1c3RvbSB8fCB7fTtcblx0XHR2YXIgb3B0aW9ucyA9IGNoYXJ0Lm9wdGlvbnMuZWxlbWVudHMucG9pbnQ7XG5cdFx0dmFyIHZhbHVlcyA9IHt9O1xuXHRcdHZhciBpLCBpbGVuLCBrZXk7XG5cblx0XHQvLyBTY3JpcHRhYmxlIG9wdGlvbnNcblx0XHR2YXIgY29udGV4dCA9IHtcblx0XHRcdGNoYXJ0OiBjaGFydCxcblx0XHRcdGRhdGFJbmRleDogaW5kZXgsXG5cdFx0XHRkYXRhc2V0OiBkYXRhc2V0LFxuXHRcdFx0ZGF0YXNldEluZGV4OiBtZS5pbmRleFxuXHRcdH07XG5cblx0XHR2YXIgRUxFTUVOVF9PUFRJT05TID0ge1xuXHRcdFx0YmFja2dyb3VuZENvbG9yOiAncG9pbnRCYWNrZ3JvdW5kQ29sb3InLFxuXHRcdFx0Ym9yZGVyQ29sb3I6ICdwb2ludEJvcmRlckNvbG9yJyxcblx0XHRcdGJvcmRlcldpZHRoOiAncG9pbnRCb3JkZXJXaWR0aCcsXG5cdFx0XHRoaXRSYWRpdXM6ICdwb2ludEhpdFJhZGl1cycsXG5cdFx0XHRob3ZlckJhY2tncm91bmRDb2xvcjogJ3BvaW50SG92ZXJCYWNrZ3JvdW5kQ29sb3InLFxuXHRcdFx0aG92ZXJCb3JkZXJDb2xvcjogJ3BvaW50SG92ZXJCb3JkZXJDb2xvcicsXG5cdFx0XHRob3ZlckJvcmRlcldpZHRoOiAncG9pbnRIb3ZlckJvcmRlcldpZHRoJyxcblx0XHRcdGhvdmVyUmFkaXVzOiAncG9pbnRIb3ZlclJhZGl1cycsXG5cdFx0XHRwb2ludFN0eWxlOiAncG9pbnRTdHlsZScsXG5cdFx0XHRyYWRpdXM6ICdwb2ludFJhZGl1cycsXG5cdFx0XHRyb3RhdGlvbjogJ3BvaW50Um90YXRpb24nXG5cdFx0fTtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKEVMRU1FTlRfT1BUSU9OUyk7XG5cblx0XHRmb3IgKGkgPSAwLCBpbGVuID0ga2V5cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcblx0XHRcdGtleSA9IGtleXNbaV07XG5cdFx0XHR2YWx1ZXNba2V5XSA9IHJlc29sdmUkNChbXG5cdFx0XHRcdGN1c3RvbVtrZXldLFxuXHRcdFx0XHRkYXRhc2V0W0VMRU1FTlRfT1BUSU9OU1trZXldXSxcblx0XHRcdFx0ZGF0YXNldFtrZXldLFxuXHRcdFx0XHRvcHRpb25zW2tleV1cblx0XHRcdF0sIGNvbnRleHQsIGluZGV4KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsdWVzO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X3Jlc29sdmVMaW5lT3B0aW9uczogZnVuY3Rpb24oZWxlbWVudCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIGNoYXJ0ID0gbWUuY2hhcnQ7XG5cdFx0dmFyIGRhdGFzZXQgPSBjaGFydC5kYXRhLmRhdGFzZXRzW21lLmluZGV4XTtcblx0XHR2YXIgY3VzdG9tID0gZWxlbWVudC5jdXN0b20gfHwge307XG5cdFx0dmFyIG9wdGlvbnMgPSBjaGFydC5vcHRpb25zO1xuXHRcdHZhciBlbGVtZW50T3B0aW9ucyA9IG9wdGlvbnMuZWxlbWVudHMubGluZTtcblx0XHR2YXIgdmFsdWVzID0ge307XG5cdFx0dmFyIGksIGlsZW4sIGtleTtcblxuXHRcdHZhciBrZXlzID0gW1xuXHRcdFx0J2JhY2tncm91bmRDb2xvcicsXG5cdFx0XHQnYm9yZGVyV2lkdGgnLFxuXHRcdFx0J2JvcmRlckNvbG9yJyxcblx0XHRcdCdib3JkZXJDYXBTdHlsZScsXG5cdFx0XHQnYm9yZGVyRGFzaCcsXG5cdFx0XHQnYm9yZGVyRGFzaE9mZnNldCcsXG5cdFx0XHQnYm9yZGVySm9pblN0eWxlJyxcblx0XHRcdCdmaWxsJyxcblx0XHRcdCdjdWJpY0ludGVycG9sYXRpb25Nb2RlJ1xuXHRcdF07XG5cblx0XHRmb3IgKGkgPSAwLCBpbGVuID0ga2V5cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcblx0XHRcdGtleSA9IGtleXNbaV07XG5cdFx0XHR2YWx1ZXNba2V5XSA9IHJlc29sdmUkNChbXG5cdFx0XHRcdGN1c3RvbVtrZXldLFxuXHRcdFx0XHRkYXRhc2V0W2tleV0sXG5cdFx0XHRcdGVsZW1lbnRPcHRpb25zW2tleV1cblx0XHRcdF0pO1xuXHRcdH1cblxuXHRcdC8vIFRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIGxpbmVzIGlzIHRvIGJyZWFrIGF0IG51bGwgdmFsdWVzLCBhY2NvcmRpbmdcblx0XHQvLyB0byBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9pc3N1ZXMvMjQzNSNpc3N1ZWNvbW1lbnQtMjE2NzE4MTU4XG5cdFx0Ly8gVGhpcyBvcHRpb24gZ2l2ZXMgbGluZXMgdGhlIGFiaWxpdHkgdG8gc3BhbiBnYXBzXG5cdFx0dmFsdWVzLnNwYW5HYXBzID0gdmFsdWVPckRlZmF1bHQkNShkYXRhc2V0LnNwYW5HYXBzLCBvcHRpb25zLnNwYW5HYXBzKTtcblx0XHR2YWx1ZXMudGVuc2lvbiA9IHZhbHVlT3JEZWZhdWx0JDUoZGF0YXNldC5saW5lVGVuc2lvbiwgZWxlbWVudE9wdGlvbnMudGVuc2lvbik7XG5cdFx0dmFsdWVzLnN0ZXBwZWRMaW5lID0gcmVzb2x2ZSQ0KFtjdXN0b20uc3RlcHBlZExpbmUsIGRhdGFzZXQuc3RlcHBlZExpbmUsIGVsZW1lbnRPcHRpb25zLnN0ZXBwZWRdKTtcblxuXHRcdHJldHVybiB2YWx1ZXM7XG5cdH0sXG5cblx0Y2FsY3VsYXRlUG9pbnRZOiBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGRhdGFzZXRJbmRleCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIGNoYXJ0ID0gbWUuY2hhcnQ7XG5cdFx0dmFyIG1ldGEgPSBtZS5nZXRNZXRhKCk7XG5cdFx0dmFyIHlTY2FsZSA9IG1lLmdldFNjYWxlRm9ySWQobWV0YS55QXhpc0lEKTtcblx0XHR2YXIgc3VtUG9zID0gMDtcblx0XHR2YXIgc3VtTmVnID0gMDtcblx0XHR2YXIgaSwgZHMsIGRzTWV0YTtcblxuXHRcdGlmICh5U2NhbGUub3B0aW9ucy5zdGFja2VkKSB7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgZGF0YXNldEluZGV4OyBpKyspIHtcblx0XHRcdFx0ZHMgPSBjaGFydC5kYXRhLmRhdGFzZXRzW2ldO1xuXHRcdFx0XHRkc01ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YShpKTtcblx0XHRcdFx0aWYgKGRzTWV0YS50eXBlID09PSAnbGluZScgJiYgZHNNZXRhLnlBeGlzSUQgPT09IHlTY2FsZS5pZCAmJiBjaGFydC5pc0RhdGFzZXRWaXNpYmxlKGkpKSB7XG5cdFx0XHRcdFx0dmFyIHN0YWNrZWRSaWdodFZhbHVlID0gTnVtYmVyKHlTY2FsZS5nZXRSaWdodFZhbHVlKGRzLmRhdGFbaW5kZXhdKSk7XG5cdFx0XHRcdFx0aWYgKHN0YWNrZWRSaWdodFZhbHVlIDwgMCkge1xuXHRcdFx0XHRcdFx0c3VtTmVnICs9IHN0YWNrZWRSaWdodFZhbHVlIHx8IDA7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHN1bVBvcyArPSBzdGFja2VkUmlnaHRWYWx1ZSB8fCAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR2YXIgcmlnaHRWYWx1ZSA9IE51bWJlcih5U2NhbGUuZ2V0UmlnaHRWYWx1ZSh2YWx1ZSkpO1xuXHRcdFx0aWYgKHJpZ2h0VmFsdWUgPCAwKSB7XG5cdFx0XHRcdHJldHVybiB5U2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZShzdW1OZWcgKyByaWdodFZhbHVlKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB5U2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZShzdW1Qb3MgKyByaWdodFZhbHVlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4geVNjYWxlLmdldFBpeGVsRm9yVmFsdWUodmFsdWUpO1xuXHR9LFxuXG5cdHVwZGF0ZUJlemllckNvbnRyb2xQb2ludHM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIGNoYXJ0ID0gbWUuY2hhcnQ7XG5cdFx0dmFyIG1ldGEgPSBtZS5nZXRNZXRhKCk7XG5cdFx0dmFyIGxpbmVNb2RlbCA9IG1ldGEuZGF0YXNldC5fbW9kZWw7XG5cdFx0dmFyIGFyZWEgPSBjaGFydC5jaGFydEFyZWE7XG5cdFx0dmFyIHBvaW50cyA9IG1ldGEuZGF0YSB8fCBbXTtcblx0XHR2YXIgaSwgaWxlbiwgbW9kZWwsIGNvbnRyb2xQb2ludHM7XG5cblx0XHQvLyBPbmx5IGNvbnNpZGVyIHBvaW50cyB0aGF0IGFyZSBkcmF3biBpbiBjYXNlIHRoZSBzcGFuR2FwcyBvcHRpb24gaXMgdXNlZFxuXHRcdGlmIChsaW5lTW9kZWwuc3BhbkdhcHMpIHtcblx0XHRcdHBvaW50cyA9IHBvaW50cy5maWx0ZXIoZnVuY3Rpb24ocHQpIHtcblx0XHRcdFx0cmV0dXJuICFwdC5fbW9kZWwuc2tpcDtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGNhcENvbnRyb2xQb2ludChwdCwgbWluLCBtYXgpIHtcblx0XHRcdHJldHVybiBNYXRoLm1heChNYXRoLm1pbihwdCwgbWF4KSwgbWluKTtcblx0XHR9XG5cblx0XHRpZiAobGluZU1vZGVsLmN1YmljSW50ZXJwb2xhdGlvbk1vZGUgPT09ICdtb25vdG9uZScpIHtcblx0XHRcdGhlbHBlcnMkMS5zcGxpbmVDdXJ2ZU1vbm90b25lKHBvaW50cyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoaSA9IDAsIGlsZW4gPSBwb2ludHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XG5cdFx0XHRcdG1vZGVsID0gcG9pbnRzW2ldLl9tb2RlbDtcblx0XHRcdFx0Y29udHJvbFBvaW50cyA9IGhlbHBlcnMkMS5zcGxpbmVDdXJ2ZShcblx0XHRcdFx0XHRoZWxwZXJzJDEucHJldmlvdXNJdGVtKHBvaW50cywgaSkuX21vZGVsLFxuXHRcdFx0XHRcdG1vZGVsLFxuXHRcdFx0XHRcdGhlbHBlcnMkMS5uZXh0SXRlbShwb2ludHMsIGkpLl9tb2RlbCxcblx0XHRcdFx0XHRsaW5lTW9kZWwudGVuc2lvblxuXHRcdFx0XHQpO1xuXHRcdFx0XHRtb2RlbC5jb250cm9sUG9pbnRQcmV2aW91c1ggPSBjb250cm9sUG9pbnRzLnByZXZpb3VzLng7XG5cdFx0XHRcdG1vZGVsLmNvbnRyb2xQb2ludFByZXZpb3VzWSA9IGNvbnRyb2xQb2ludHMucHJldmlvdXMueTtcblx0XHRcdFx0bW9kZWwuY29udHJvbFBvaW50TmV4dFggPSBjb250cm9sUG9pbnRzLm5leHQueDtcblx0XHRcdFx0bW9kZWwuY29udHJvbFBvaW50TmV4dFkgPSBjb250cm9sUG9pbnRzLm5leHQueTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoY2hhcnQub3B0aW9ucy5lbGVtZW50cy5saW5lLmNhcEJlemllclBvaW50cykge1xuXHRcdFx0Zm9yIChpID0gMCwgaWxlbiA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcblx0XHRcdFx0bW9kZWwgPSBwb2ludHNbaV0uX21vZGVsO1xuXHRcdFx0XHRpZiAoaXNQb2ludEluQXJlYShtb2RlbCwgYXJlYSkpIHtcblx0XHRcdFx0XHRpZiAoaSA+IDAgJiYgaXNQb2ludEluQXJlYShwb2ludHNbaSAtIDFdLl9tb2RlbCwgYXJlYSkpIHtcblx0XHRcdFx0XHRcdG1vZGVsLmNvbnRyb2xQb2ludFByZXZpb3VzWCA9IGNhcENvbnRyb2xQb2ludChtb2RlbC5jb250cm9sUG9pbnRQcmV2aW91c1gsIGFyZWEubGVmdCwgYXJlYS5yaWdodCk7XG5cdFx0XHRcdFx0XHRtb2RlbC5jb250cm9sUG9pbnRQcmV2aW91c1kgPSBjYXBDb250cm9sUG9pbnQobW9kZWwuY29udHJvbFBvaW50UHJldmlvdXNZLCBhcmVhLnRvcCwgYXJlYS5ib3R0b20pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoaSA8IHBvaW50cy5sZW5ndGggLSAxICYmIGlzUG9pbnRJbkFyZWEocG9pbnRzW2kgKyAxXS5fbW9kZWwsIGFyZWEpKSB7XG5cdFx0XHRcdFx0XHRtb2RlbC5jb250cm9sUG9pbnROZXh0WCA9IGNhcENvbnRyb2xQb2ludChtb2RlbC5jb250cm9sUG9pbnROZXh0WCwgYXJlYS5sZWZ0LCBhcmVhLnJpZ2h0KTtcblx0XHRcdFx0XHRcdG1vZGVsLmNvbnRyb2xQb2ludE5leHRZID0gY2FwQ29udHJvbFBvaW50KG1vZGVsLmNvbnRyb2xQb2ludE5leHRZLCBhcmVhLnRvcCwgYXJlYS5ib3R0b20pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRkcmF3OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciBjaGFydCA9IG1lLmNoYXJ0O1xuXHRcdHZhciBtZXRhID0gbWUuZ2V0TWV0YSgpO1xuXHRcdHZhciBwb2ludHMgPSBtZXRhLmRhdGEgfHwgW107XG5cdFx0dmFyIGFyZWEgPSBjaGFydC5jaGFydEFyZWE7XG5cdFx0dmFyIGlsZW4gPSBwb2ludHMubGVuZ3RoO1xuXHRcdHZhciBoYWxmQm9yZGVyV2lkdGg7XG5cdFx0dmFyIGkgPSAwO1xuXG5cdFx0aWYgKGxpbmVFbmFibGVkKG1lLmdldERhdGFzZXQoKSwgY2hhcnQub3B0aW9ucykpIHtcblx0XHRcdGhhbGZCb3JkZXJXaWR0aCA9IChtZXRhLmRhdGFzZXQuX21vZGVsLmJvcmRlcldpZHRoIHx8IDApIC8gMjtcblxuXHRcdFx0aGVscGVycyQxLmNhbnZhcy5jbGlwQXJlYShjaGFydC5jdHgsIHtcblx0XHRcdFx0bGVmdDogYXJlYS5sZWZ0LFxuXHRcdFx0XHRyaWdodDogYXJlYS5yaWdodCxcblx0XHRcdFx0dG9wOiBhcmVhLnRvcCAtIGhhbGZCb3JkZXJXaWR0aCxcblx0XHRcdFx0Ym90dG9tOiBhcmVhLmJvdHRvbSArIGhhbGZCb3JkZXJXaWR0aFxuXHRcdFx0fSk7XG5cblx0XHRcdG1ldGEuZGF0YXNldC5kcmF3KCk7XG5cblx0XHRcdGhlbHBlcnMkMS5jYW52YXMudW5jbGlwQXJlYShjaGFydC5jdHgpO1xuXHRcdH1cblxuXHRcdC8vIERyYXcgdGhlIHBvaW50c1xuXHRcdGZvciAoOyBpIDwgaWxlbjsgKytpKSB7XG5cdFx0XHRwb2ludHNbaV0uZHJhdyhhcmVhKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdHNldEhvdmVyU3R5bGU6IGZ1bmN0aW9uKHBvaW50KSB7XG5cdFx0dmFyIG1vZGVsID0gcG9pbnQuX21vZGVsO1xuXHRcdHZhciBvcHRpb25zID0gcG9pbnQuX29wdGlvbnM7XG5cdFx0dmFyIGdldEhvdmVyQ29sb3IgPSBoZWxwZXJzJDEuZ2V0SG92ZXJDb2xvcjtcblxuXHRcdHBvaW50LiRwcmV2aW91c1N0eWxlID0ge1xuXHRcdFx0YmFja2dyb3VuZENvbG9yOiBtb2RlbC5iYWNrZ3JvdW5kQ29sb3IsXG5cdFx0XHRib3JkZXJDb2xvcjogbW9kZWwuYm9yZGVyQ29sb3IsXG5cdFx0XHRib3JkZXJXaWR0aDogbW9kZWwuYm9yZGVyV2lkdGgsXG5cdFx0XHRyYWRpdXM6IG1vZGVsLnJhZGl1c1xuXHRcdH07XG5cblx0XHRtb2RlbC5iYWNrZ3JvdW5kQ29sb3IgPSB2YWx1ZU9yRGVmYXVsdCQ1KG9wdGlvbnMuaG92ZXJCYWNrZ3JvdW5kQ29sb3IsIGdldEhvdmVyQ29sb3Iob3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IpKTtcblx0XHRtb2RlbC5ib3JkZXJDb2xvciA9IHZhbHVlT3JEZWZhdWx0JDUob3B0aW9ucy5ob3ZlckJvcmRlckNvbG9yLCBnZXRIb3ZlckNvbG9yKG9wdGlvbnMuYm9yZGVyQ29sb3IpKTtcblx0XHRtb2RlbC5ib3JkZXJXaWR0aCA9IHZhbHVlT3JEZWZhdWx0JDUob3B0aW9ucy5ob3ZlckJvcmRlcldpZHRoLCBvcHRpb25zLmJvcmRlcldpZHRoKTtcblx0XHRtb2RlbC5yYWRpdXMgPSB2YWx1ZU9yRGVmYXVsdCQ1KG9wdGlvbnMuaG92ZXJSYWRpdXMsIG9wdGlvbnMucmFkaXVzKTtcblx0fSxcbn0pO1xuXG52YXIgcmVzb2x2ZSQ1ID0gaGVscGVycyQxLm9wdGlvbnMucmVzb2x2ZTtcblxuY29yZV9kZWZhdWx0cy5fc2V0KCdwb2xhckFyZWEnLCB7XG5cdHNjYWxlOiB7XG5cdFx0dHlwZTogJ3JhZGlhbExpbmVhcicsXG5cdFx0YW5nbGVMaW5lczoge1xuXHRcdFx0ZGlzcGxheTogZmFsc2Vcblx0XHR9LFxuXHRcdGdyaWRMaW5lczoge1xuXHRcdFx0Y2lyY3VsYXI6IHRydWVcblx0XHR9LFxuXHRcdHBvaW50TGFiZWxzOiB7XG5cdFx0XHRkaXNwbGF5OiBmYWxzZVxuXHRcdH0sXG5cdFx0dGlja3M6IHtcblx0XHRcdGJlZ2luQXRaZXJvOiB0cnVlXG5cdFx0fVxuXHR9LFxuXG5cdC8vIEJvb2xlYW4gLSBXaGV0aGVyIHRvIGFuaW1hdGUgdGhlIHJvdGF0aW9uIG9mIHRoZSBjaGFydFxuXHRhbmltYXRpb246IHtcblx0XHRhbmltYXRlUm90YXRlOiB0cnVlLFxuXHRcdGFuaW1hdGVTY2FsZTogdHJ1ZVxuXHR9LFxuXG5cdHN0YXJ0QW5nbGU6IC0wLjUgKiBNYXRoLlBJLFxuXHRsZWdlbmRDYWxsYmFjazogZnVuY3Rpb24oY2hhcnQpIHtcblx0XHR2YXIgdGV4dCA9IFtdO1xuXHRcdHRleHQucHVzaCgnPHVsIGNsYXNzPVwiJyArIGNoYXJ0LmlkICsgJy1sZWdlbmRcIj4nKTtcblxuXHRcdHZhciBkYXRhID0gY2hhcnQuZGF0YTtcblx0XHR2YXIgZGF0YXNldHMgPSBkYXRhLmRhdGFzZXRzO1xuXHRcdHZhciBsYWJlbHMgPSBkYXRhLmxhYmVscztcblxuXHRcdGlmIChkYXRhc2V0cy5sZW5ndGgpIHtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YXNldHNbMF0uZGF0YS5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHR0ZXh0LnB1c2goJzxsaT48c3BhbiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6JyArIGRhdGFzZXRzWzBdLmJhY2tncm91bmRDb2xvcltpXSArICdcIj48L3NwYW4+Jyk7XG5cdFx0XHRcdGlmIChsYWJlbHNbaV0pIHtcblx0XHRcdFx0XHR0ZXh0LnB1c2gobGFiZWxzW2ldKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0ZXh0LnB1c2goJzwvbGk+Jyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGV4dC5wdXNoKCc8L3VsPicpO1xuXHRcdHJldHVybiB0ZXh0LmpvaW4oJycpO1xuXHR9LFxuXHRsZWdlbmQ6IHtcblx0XHRsYWJlbHM6IHtcblx0XHRcdGdlbmVyYXRlTGFiZWxzOiBmdW5jdGlvbihjaGFydCkge1xuXHRcdFx0XHR2YXIgZGF0YSA9IGNoYXJ0LmRhdGE7XG5cdFx0XHRcdGlmIChkYXRhLmxhYmVscy5sZW5ndGggJiYgZGF0YS5kYXRhc2V0cy5sZW5ndGgpIHtcblx0XHRcdFx0XHRyZXR1cm4gZGF0YS5sYWJlbHMubWFwKGZ1bmN0aW9uKGxhYmVsLCBpKSB7XG5cdFx0XHRcdFx0XHR2YXIgbWV0YSA9IGNoYXJ0LmdldERhdGFzZXRNZXRhKDApO1xuXHRcdFx0XHRcdFx0dmFyIGRzID0gZGF0YS5kYXRhc2V0c1swXTtcblx0XHRcdFx0XHRcdHZhciBhcmMgPSBtZXRhLmRhdGFbaV07XG5cdFx0XHRcdFx0XHR2YXIgY3VzdG9tID0gYXJjLmN1c3RvbSB8fCB7fTtcblx0XHRcdFx0XHRcdHZhciBhcmNPcHRzID0gY2hhcnQub3B0aW9ucy5lbGVtZW50cy5hcmM7XG5cdFx0XHRcdFx0XHR2YXIgZmlsbCA9IHJlc29sdmUkNShbY3VzdG9tLmJhY2tncm91bmRDb2xvciwgZHMuYmFja2dyb3VuZENvbG9yLCBhcmNPcHRzLmJhY2tncm91bmRDb2xvcl0sIHVuZGVmaW5lZCwgaSk7XG5cdFx0XHRcdFx0XHR2YXIgc3Ryb2tlID0gcmVzb2x2ZSQ1KFtjdXN0b20uYm9yZGVyQ29sb3IsIGRzLmJvcmRlckNvbG9yLCBhcmNPcHRzLmJvcmRlckNvbG9yXSwgdW5kZWZpbmVkLCBpKTtcblx0XHRcdFx0XHRcdHZhciBidyA9IHJlc29sdmUkNShbY3VzdG9tLmJvcmRlcldpZHRoLCBkcy5ib3JkZXJXaWR0aCwgYXJjT3B0cy5ib3JkZXJXaWR0aF0sIHVuZGVmaW5lZCwgaSk7XG5cblx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdHRleHQ6IGxhYmVsLFxuXHRcdFx0XHRcdFx0XHRmaWxsU3R5bGU6IGZpbGwsXG5cdFx0XHRcdFx0XHRcdHN0cm9rZVN0eWxlOiBzdHJva2UsXG5cdFx0XHRcdFx0XHRcdGxpbmVXaWR0aDogYncsXG5cdFx0XHRcdFx0XHRcdGhpZGRlbjogaXNOYU4oZHMuZGF0YVtpXSkgfHwgbWV0YS5kYXRhW2ldLmhpZGRlbixcblxuXHRcdFx0XHRcdFx0XHQvLyBFeHRyYSBkYXRhIHVzZWQgZm9yIHRvZ2dsaW5nIHRoZSBjb3JyZWN0IGl0ZW1cblx0XHRcdFx0XHRcdFx0aW5kZXg6IGlcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRvbkNsaWNrOiBmdW5jdGlvbihlLCBsZWdlbmRJdGVtKSB7XG5cdFx0XHR2YXIgaW5kZXggPSBsZWdlbmRJdGVtLmluZGV4O1xuXHRcdFx0dmFyIGNoYXJ0ID0gdGhpcy5jaGFydDtcblx0XHRcdHZhciBpLCBpbGVuLCBtZXRhO1xuXG5cdFx0XHRmb3IgKGkgPSAwLCBpbGVuID0gKGNoYXJ0LmRhdGEuZGF0YXNldHMgfHwgW10pLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xuXHRcdFx0XHRtZXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoaSk7XG5cdFx0XHRcdG1ldGEuZGF0YVtpbmRleF0uaGlkZGVuID0gIW1ldGEuZGF0YVtpbmRleF0uaGlkZGVuO1xuXHRcdFx0fVxuXG5cdFx0XHRjaGFydC51cGRhdGUoKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gTmVlZCB0byBvdmVycmlkZSB0aGVzZSB0byBnaXZlIGEgbmljZSBkZWZhdWx0XG5cdHRvb2x0aXBzOiB7XG5cdFx0Y2FsbGJhY2tzOiB7XG5cdFx0XHR0aXRsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAnJztcblx0XHRcdH0sXG5cdFx0XHRsYWJlbDogZnVuY3Rpb24oaXRlbSwgZGF0YSkge1xuXHRcdFx0XHRyZXR1cm4gZGF0YS5sYWJlbHNbaXRlbS5pbmRleF0gKyAnOiAnICsgaXRlbS55TGFiZWw7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59KTtcblxudmFyIGNvbnRyb2xsZXJfcG9sYXJBcmVhID0gY29yZV9kYXRhc2V0Q29udHJvbGxlci5leHRlbmQoe1xuXG5cdGRhdGFFbGVtZW50VHlwZTogZWxlbWVudHMuQXJjLFxuXG5cdGxpbmtTY2FsZXM6IGhlbHBlcnMkMS5ub29wLFxuXG5cdHVwZGF0ZTogZnVuY3Rpb24ocmVzZXQpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciBkYXRhc2V0ID0gbWUuZ2V0RGF0YXNldCgpO1xuXHRcdHZhciBtZXRhID0gbWUuZ2V0TWV0YSgpO1xuXHRcdHZhciBzdGFydCA9IG1lLmNoYXJ0Lm9wdGlvbnMuc3RhcnRBbmdsZSB8fCAwO1xuXHRcdHZhciBzdGFydHMgPSBtZS5fc3RhcnRzID0gW107XG5cdFx0dmFyIGFuZ2xlcyA9IG1lLl9hbmdsZXMgPSBbXTtcblx0XHR2YXIgYXJjcyA9IG1ldGEuZGF0YTtcblx0XHR2YXIgaSwgaWxlbiwgYW5nbGU7XG5cblx0XHRtZS5fdXBkYXRlUmFkaXVzKCk7XG5cblx0XHRtZXRhLmNvdW50ID0gbWUuY291bnRWaXNpYmxlRWxlbWVudHMoKTtcblxuXHRcdGZvciAoaSA9IDAsIGlsZW4gPSBkYXRhc2V0LmRhdGEubGVuZ3RoOyBpIDwgaWxlbjsgaSsrKSB7XG5cdFx0XHRzdGFydHNbaV0gPSBzdGFydDtcblx0XHRcdGFuZ2xlID0gbWUuX2NvbXB1dGVBbmdsZShpKTtcblx0XHRcdGFuZ2xlc1tpXSA9IGFuZ2xlO1xuXHRcdFx0c3RhcnQgKz0gYW5nbGU7XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMCwgaWxlbiA9IGFyY3MubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XG5cdFx0XHRhcmNzW2ldLl9vcHRpb25zID0gbWUuX3Jlc29sdmVFbGVtZW50T3B0aW9ucyhhcmNzW2ldLCBpKTtcblx0XHRcdG1lLnVwZGF0ZUVsZW1lbnQoYXJjc1tpXSwgaSwgcmVzZXQpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF91cGRhdGVSYWRpdXM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIGNoYXJ0ID0gbWUuY2hhcnQ7XG5cdFx0dmFyIGNoYXJ0QXJlYSA9IGNoYXJ0LmNoYXJ0QXJlYTtcblx0XHR2YXIgb3B0cyA9IGNoYXJ0Lm9wdGlvbnM7XG5cdFx0dmFyIG1pblNpemUgPSBNYXRoLm1pbihjaGFydEFyZWEucmlnaHQgLSBjaGFydEFyZWEubGVmdCwgY2hhcnRBcmVhLmJvdHRvbSAtIGNoYXJ0QXJlYS50b3ApO1xuXG5cdFx0Y2hhcnQub3V0ZXJSYWRpdXMgPSBNYXRoLm1heChtaW5TaXplIC8gMiwgMCk7XG5cdFx0Y2hhcnQuaW5uZXJSYWRpdXMgPSBNYXRoLm1heChvcHRzLmN1dG91dFBlcmNlbnRhZ2UgPyAoY2hhcnQub3V0ZXJSYWRpdXMgLyAxMDApICogKG9wdHMuY3V0b3V0UGVyY2VudGFnZSkgOiAxLCAwKTtcblx0XHRjaGFydC5yYWRpdXNMZW5ndGggPSAoY2hhcnQub3V0ZXJSYWRpdXMgLSBjaGFydC5pbm5lclJhZGl1cykgLyBjaGFydC5nZXRWaXNpYmxlRGF0YXNldENvdW50KCk7XG5cblx0XHRtZS5vdXRlclJhZGl1cyA9IGNoYXJ0Lm91dGVyUmFkaXVzIC0gKGNoYXJ0LnJhZGl1c0xlbmd0aCAqIG1lLmluZGV4KTtcblx0XHRtZS5pbm5lclJhZGl1cyA9IG1lLm91dGVyUmFkaXVzIC0gY2hhcnQucmFkaXVzTGVuZ3RoO1xuXHR9LFxuXG5cdHVwZGF0ZUVsZW1lbnQ6IGZ1bmN0aW9uKGFyYywgaW5kZXgsIHJlc2V0KSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgY2hhcnQgPSBtZS5jaGFydDtcblx0XHR2YXIgZGF0YXNldCA9IG1lLmdldERhdGFzZXQoKTtcblx0XHR2YXIgb3B0cyA9IGNoYXJ0Lm9wdGlvbnM7XG5cdFx0dmFyIGFuaW1hdGlvbk9wdHMgPSBvcHRzLmFuaW1hdGlvbjtcblx0XHR2YXIgc2NhbGUgPSBjaGFydC5zY2FsZTtcblx0XHR2YXIgbGFiZWxzID0gY2hhcnQuZGF0YS5sYWJlbHM7XG5cblx0XHR2YXIgY2VudGVyWCA9IHNjYWxlLnhDZW50ZXI7XG5cdFx0dmFyIGNlbnRlclkgPSBzY2FsZS55Q2VudGVyO1xuXG5cdFx0Ly8gdmFyIG5lZ0hhbGZQSSA9IC0wLjUgKiBNYXRoLlBJO1xuXHRcdHZhciBkYXRhc2V0U3RhcnRBbmdsZSA9IG9wdHMuc3RhcnRBbmdsZTtcblx0XHR2YXIgZGlzdGFuY2UgPSBhcmMuaGlkZGVuID8gMCA6IHNjYWxlLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKGRhdGFzZXQuZGF0YVtpbmRleF0pO1xuXHRcdHZhciBzdGFydEFuZ2xlID0gbWUuX3N0YXJ0c1tpbmRleF07XG5cdFx0dmFyIGVuZEFuZ2xlID0gc3RhcnRBbmdsZSArIChhcmMuaGlkZGVuID8gMCA6IG1lLl9hbmdsZXNbaW5kZXhdKTtcblxuXHRcdHZhciByZXNldFJhZGl1cyA9IGFuaW1hdGlvbk9wdHMuYW5pbWF0ZVNjYWxlID8gMCA6IHNjYWxlLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKGRhdGFzZXQuZGF0YVtpbmRleF0pO1xuXHRcdHZhciBvcHRpb25zID0gYXJjLl9vcHRpb25zIHx8IHt9O1xuXG5cdFx0aGVscGVycyQxLmV4dGVuZChhcmMsIHtcblx0XHRcdC8vIFV0aWxpdHlcblx0XHRcdF9kYXRhc2V0SW5kZXg6IG1lLmluZGV4LFxuXHRcdFx0X2luZGV4OiBpbmRleCxcblx0XHRcdF9zY2FsZTogc2NhbGUsXG5cblx0XHRcdC8vIERlc2lyZWQgdmlldyBwcm9wZXJ0aWVzXG5cdFx0XHRfbW9kZWw6IHtcblx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiBvcHRpb25zLmJhY2tncm91bmRDb2xvcixcblx0XHRcdFx0Ym9yZGVyQ29sb3I6IG9wdGlvbnMuYm9yZGVyQ29sb3IsXG5cdFx0XHRcdGJvcmRlcldpZHRoOiBvcHRpb25zLmJvcmRlcldpZHRoLFxuXHRcdFx0XHRib3JkZXJBbGlnbjogb3B0aW9ucy5ib3JkZXJBbGlnbixcblx0XHRcdFx0eDogY2VudGVyWCxcblx0XHRcdFx0eTogY2VudGVyWSxcblx0XHRcdFx0aW5uZXJSYWRpdXM6IDAsXG5cdFx0XHRcdG91dGVyUmFkaXVzOiByZXNldCA/IHJlc2V0UmFkaXVzIDogZGlzdGFuY2UsXG5cdFx0XHRcdHN0YXJ0QW5nbGU6IHJlc2V0ICYmIGFuaW1hdGlvbk9wdHMuYW5pbWF0ZVJvdGF0ZSA/IGRhdGFzZXRTdGFydEFuZ2xlIDogc3RhcnRBbmdsZSxcblx0XHRcdFx0ZW5kQW5nbGU6IHJlc2V0ICYmIGFuaW1hdGlvbk9wdHMuYW5pbWF0ZVJvdGF0ZSA/IGRhdGFzZXRTdGFydEFuZ2xlIDogZW5kQW5nbGUsXG5cdFx0XHRcdGxhYmVsOiBoZWxwZXJzJDEudmFsdWVBdEluZGV4T3JEZWZhdWx0KGxhYmVscywgaW5kZXgsIGxhYmVsc1tpbmRleF0pXG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRhcmMucGl2b3QoKTtcblx0fSxcblxuXHRjb3VudFZpc2libGVFbGVtZW50czogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGRhdGFzZXQgPSB0aGlzLmdldERhdGFzZXQoKTtcblx0XHR2YXIgbWV0YSA9IHRoaXMuZ2V0TWV0YSgpO1xuXHRcdHZhciBjb3VudCA9IDA7XG5cblx0XHRoZWxwZXJzJDEuZWFjaChtZXRhLmRhdGEsIGZ1bmN0aW9uKGVsZW1lbnQsIGluZGV4KSB7XG5cdFx0XHRpZiAoIWlzTmFOKGRhdGFzZXQuZGF0YVtpbmRleF0pICYmICFlbGVtZW50LmhpZGRlbikge1xuXHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIGNvdW50O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRzZXRIb3ZlclN0eWxlOiBmdW5jdGlvbihhcmMpIHtcblx0XHR2YXIgbW9kZWwgPSBhcmMuX21vZGVsO1xuXHRcdHZhciBvcHRpb25zID0gYXJjLl9vcHRpb25zO1xuXHRcdHZhciBnZXRIb3ZlckNvbG9yID0gaGVscGVycyQxLmdldEhvdmVyQ29sb3I7XG5cdFx0dmFyIHZhbHVlT3JEZWZhdWx0ID0gaGVscGVycyQxLnZhbHVlT3JEZWZhdWx0O1xuXG5cdFx0YXJjLiRwcmV2aW91c1N0eWxlID0ge1xuXHRcdFx0YmFja2dyb3VuZENvbG9yOiBtb2RlbC5iYWNrZ3JvdW5kQ29sb3IsXG5cdFx0XHRib3JkZXJDb2xvcjogbW9kZWwuYm9yZGVyQ29sb3IsXG5cdFx0XHRib3JkZXJXaWR0aDogbW9kZWwuYm9yZGVyV2lkdGgsXG5cdFx0fTtcblxuXHRcdG1vZGVsLmJhY2tncm91bmRDb2xvciA9IHZhbHVlT3JEZWZhdWx0KG9wdGlvbnMuaG92ZXJCYWNrZ3JvdW5kQ29sb3IsIGdldEhvdmVyQ29sb3Iob3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IpKTtcblx0XHRtb2RlbC5ib3JkZXJDb2xvciA9IHZhbHVlT3JEZWZhdWx0KG9wdGlvbnMuaG92ZXJCb3JkZXJDb2xvciwgZ2V0SG92ZXJDb2xvcihvcHRpb25zLmJvcmRlckNvbG9yKSk7XG5cdFx0bW9kZWwuYm9yZGVyV2lkdGggPSB2YWx1ZU9yRGVmYXVsdChvcHRpb25zLmhvdmVyQm9yZGVyV2lkdGgsIG9wdGlvbnMuYm9yZGVyV2lkdGgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X3Jlc29sdmVFbGVtZW50T3B0aW9uczogZnVuY3Rpb24oYXJjLCBpbmRleCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIGNoYXJ0ID0gbWUuY2hhcnQ7XG5cdFx0dmFyIGRhdGFzZXQgPSBtZS5nZXREYXRhc2V0KCk7XG5cdFx0dmFyIGN1c3RvbSA9IGFyYy5jdXN0b20gfHwge307XG5cdFx0dmFyIG9wdGlvbnMgPSBjaGFydC5vcHRpb25zLmVsZW1lbnRzLmFyYztcblx0XHR2YXIgdmFsdWVzID0ge307XG5cdFx0dmFyIGksIGlsZW4sIGtleTtcblxuXHRcdC8vIFNjcmlwdGFibGUgb3B0aW9uc1xuXHRcdHZhciBjb250ZXh0ID0ge1xuXHRcdFx0Y2hhcnQ6IGNoYXJ0LFxuXHRcdFx0ZGF0YUluZGV4OiBpbmRleCxcblx0XHRcdGRhdGFzZXQ6IGRhdGFzZXQsXG5cdFx0XHRkYXRhc2V0SW5kZXg6IG1lLmluZGV4XG5cdFx0fTtcblxuXHRcdHZhciBrZXlzID0gW1xuXHRcdFx0J2JhY2tncm91bmRDb2xvcicsXG5cdFx0XHQnYm9yZGVyQ29sb3InLFxuXHRcdFx0J2JvcmRlcldpZHRoJyxcblx0XHRcdCdib3JkZXJBbGlnbicsXG5cdFx0XHQnaG92ZXJCYWNrZ3JvdW5kQ29sb3InLFxuXHRcdFx0J2hvdmVyQm9yZGVyQ29sb3InLFxuXHRcdFx0J2hvdmVyQm9yZGVyV2lkdGgnLFxuXHRcdF07XG5cblx0XHRmb3IgKGkgPSAwLCBpbGVuID0ga2V5cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcblx0XHRcdGtleSA9IGtleXNbaV07XG5cdFx0XHR2YWx1ZXNba2V5XSA9IHJlc29sdmUkNShbXG5cdFx0XHRcdGN1c3RvbVtrZXldLFxuXHRcdFx0XHRkYXRhc2V0W2tleV0sXG5cdFx0XHRcdG9wdGlvbnNba2V5XVxuXHRcdFx0XSwgY29udGV4dCwgaW5kZXgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB2YWx1ZXM7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfY29tcHV0ZUFuZ2xlOiBmdW5jdGlvbihpbmRleCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIGNvdW50ID0gdGhpcy5nZXRNZXRhKCkuY291bnQ7XG5cdFx0dmFyIGRhdGFzZXQgPSBtZS5nZXREYXRhc2V0KCk7XG5cdFx0dmFyIG1ldGEgPSBtZS5nZXRNZXRhKCk7XG5cblx0XHRpZiAoaXNOYU4oZGF0YXNldC5kYXRhW2luZGV4XSkgfHwgbWV0YS5kYXRhW2luZGV4XS5oaWRkZW4pIHtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdC8vIFNjcmlwdGFibGUgb3B0aW9uc1xuXHRcdHZhciBjb250ZXh0ID0ge1xuXHRcdFx0Y2hhcnQ6IG1lLmNoYXJ0LFxuXHRcdFx0ZGF0YUluZGV4OiBpbmRleCxcblx0XHRcdGRhdGFzZXQ6IGRhdGFzZXQsXG5cdFx0XHRkYXRhc2V0SW5kZXg6IG1lLmluZGV4XG5cdFx0fTtcblxuXHRcdHJldHVybiByZXNvbHZlJDUoW1xuXHRcdFx0bWUuY2hhcnQub3B0aW9ucy5lbGVtZW50cy5hcmMuYW5nbGUsXG5cdFx0XHQoMiAqIE1hdGguUEkpIC8gY291bnRcblx0XHRdLCBjb250ZXh0LCBpbmRleCk7XG5cdH1cbn0pO1xuXG5jb3JlX2RlZmF1bHRzLl9zZXQoJ3BpZScsIGhlbHBlcnMkMS5jbG9uZShjb3JlX2RlZmF1bHRzLmRvdWdobnV0KSk7XG5jb3JlX2RlZmF1bHRzLl9zZXQoJ3BpZScsIHtcblx0Y3V0b3V0UGVyY2VudGFnZTogMFxufSk7XG5cbi8vIFBpZSBjaGFydHMgYXJlIERvdWdobnV0IGNoYXJ0IHdpdGggZGlmZmVyZW50IGRlZmF1bHRzXG52YXIgY29udHJvbGxlcl9waWUgPSBjb250cm9sbGVyX2RvdWdobnV0O1xuXG52YXIgdmFsdWVPckRlZmF1bHQkNiA9IGhlbHBlcnMkMS52YWx1ZU9yRGVmYXVsdDtcbnZhciByZXNvbHZlJDYgPSBoZWxwZXJzJDEub3B0aW9ucy5yZXNvbHZlO1xuXG5jb3JlX2RlZmF1bHRzLl9zZXQoJ3JhZGFyJywge1xuXHRzY2FsZToge1xuXHRcdHR5cGU6ICdyYWRpYWxMaW5lYXInXG5cdH0sXG5cdGVsZW1lbnRzOiB7XG5cdFx0bGluZToge1xuXHRcdFx0dGVuc2lvbjogMCAvLyBubyBiZXppZXIgaW4gcmFkYXJcblx0XHR9XG5cdH1cbn0pO1xuXG52YXIgY29udHJvbGxlcl9yYWRhciA9IGNvcmVfZGF0YXNldENvbnRyb2xsZXIuZXh0ZW5kKHtcblxuXHRkYXRhc2V0RWxlbWVudFR5cGU6IGVsZW1lbnRzLkxpbmUsXG5cblx0ZGF0YUVsZW1lbnRUeXBlOiBlbGVtZW50cy5Qb2ludCxcblxuXHRsaW5rU2NhbGVzOiBoZWxwZXJzJDEubm9vcCxcblxuXHR1cGRhdGU6IGZ1bmN0aW9uKHJlc2V0KSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgbWV0YSA9IG1lLmdldE1ldGEoKTtcblx0XHR2YXIgbGluZSA9IG1ldGEuZGF0YXNldDtcblx0XHR2YXIgcG9pbnRzID0gbWV0YS5kYXRhIHx8IFtdO1xuXHRcdHZhciBzY2FsZSA9IG1lLmNoYXJ0LnNjYWxlO1xuXHRcdHZhciBkYXRhc2V0ID0gbWUuZ2V0RGF0YXNldCgpO1xuXHRcdHZhciBpLCBpbGVuO1xuXG5cdFx0Ly8gQ29tcGF0aWJpbGl0eTogSWYgdGhlIHByb3BlcnRpZXMgYXJlIGRlZmluZWQgd2l0aCBvbmx5IHRoZSBvbGQgbmFtZSwgdXNlIHRob3NlIHZhbHVlc1xuXHRcdGlmICgoZGF0YXNldC50ZW5zaW9uICE9PSB1bmRlZmluZWQpICYmIChkYXRhc2V0LmxpbmVUZW5zaW9uID09PSB1bmRlZmluZWQpKSB7XG5cdFx0XHRkYXRhc2V0LmxpbmVUZW5zaW9uID0gZGF0YXNldC50ZW5zaW9uO1xuXHRcdH1cblxuXHRcdC8vIFV0aWxpdHlcblx0XHRsaW5lLl9zY2FsZSA9IHNjYWxlO1xuXHRcdGxpbmUuX2RhdGFzZXRJbmRleCA9IG1lLmluZGV4O1xuXHRcdC8vIERhdGFcblx0XHRsaW5lLl9jaGlsZHJlbiA9IHBvaW50cztcblx0XHRsaW5lLl9sb29wID0gdHJ1ZTtcblx0XHQvLyBNb2RlbFxuXHRcdGxpbmUuX21vZGVsID0gbWUuX3Jlc29sdmVMaW5lT3B0aW9ucyhsaW5lKTtcblxuXHRcdGxpbmUucGl2b3QoKTtcblxuXHRcdC8vIFVwZGF0ZSBQb2ludHNcblx0XHRmb3IgKGkgPSAwLCBpbGVuID0gcG9pbnRzLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xuXHRcdFx0bWUudXBkYXRlRWxlbWVudChwb2ludHNbaV0sIGksIHJlc2V0KTtcblx0XHR9XG5cblx0XHQvLyBVcGRhdGUgYmV6aWVyIGNvbnRyb2wgcG9pbnRzXG5cdFx0bWUudXBkYXRlQmV6aWVyQ29udHJvbFBvaW50cygpO1xuXG5cdFx0Ly8gTm93IHBpdm90IHRoZSBwb2ludCBmb3IgYW5pbWF0aW9uXG5cdFx0Zm9yIChpID0gMCwgaWxlbiA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcblx0XHRcdHBvaW50c1tpXS5waXZvdCgpO1xuXHRcdH1cblx0fSxcblxuXHR1cGRhdGVFbGVtZW50OiBmdW5jdGlvbihwb2ludCwgaW5kZXgsIHJlc2V0KSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgY3VzdG9tID0gcG9pbnQuY3VzdG9tIHx8IHt9O1xuXHRcdHZhciBkYXRhc2V0ID0gbWUuZ2V0RGF0YXNldCgpO1xuXHRcdHZhciBzY2FsZSA9IG1lLmNoYXJ0LnNjYWxlO1xuXHRcdHZhciBwb2ludFBvc2l0aW9uID0gc2NhbGUuZ2V0UG9pbnRQb3NpdGlvbkZvclZhbHVlKGluZGV4LCBkYXRhc2V0LmRhdGFbaW5kZXhdKTtcblx0XHR2YXIgb3B0aW9ucyA9IG1lLl9yZXNvbHZlUG9pbnRPcHRpb25zKHBvaW50LCBpbmRleCk7XG5cdFx0dmFyIGxpbmVNb2RlbCA9IG1lLmdldE1ldGEoKS5kYXRhc2V0Ll9tb2RlbDtcblx0XHR2YXIgeCA9IHJlc2V0ID8gc2NhbGUueENlbnRlciA6IHBvaW50UG9zaXRpb24ueDtcblx0XHR2YXIgeSA9IHJlc2V0ID8gc2NhbGUueUNlbnRlciA6IHBvaW50UG9zaXRpb24ueTtcblxuXHRcdC8vIFV0aWxpdHlcblx0XHRwb2ludC5fc2NhbGUgPSBzY2FsZTtcblx0XHRwb2ludC5fb3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0cG9pbnQuX2RhdGFzZXRJbmRleCA9IG1lLmluZGV4O1xuXHRcdHBvaW50Ll9pbmRleCA9IGluZGV4O1xuXG5cdFx0Ly8gRGVzaXJlZCB2aWV3IHByb3BlcnRpZXNcblx0XHRwb2ludC5fbW9kZWwgPSB7XG5cdFx0XHR4OiB4LCAvLyB2YWx1ZSBub3QgdXNlZCBpbiBkYXRhc2V0IHNjYWxlLCBidXQgd2Ugd2FudCBhIGNvbnNpc3RlbnQgQVBJIGJldHdlZW4gc2NhbGVzXG5cdFx0XHR5OiB5LFxuXHRcdFx0c2tpcDogY3VzdG9tLnNraXAgfHwgaXNOYU4oeCkgfHwgaXNOYU4oeSksXG5cdFx0XHQvLyBBcHBlYXJhbmNlXG5cdFx0XHRyYWRpdXM6IG9wdGlvbnMucmFkaXVzLFxuXHRcdFx0cG9pbnRTdHlsZTogb3B0aW9ucy5wb2ludFN0eWxlLFxuXHRcdFx0cm90YXRpb246IG9wdGlvbnMucm90YXRpb24sXG5cdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IG9wdGlvbnMuYmFja2dyb3VuZENvbG9yLFxuXHRcdFx0Ym9yZGVyQ29sb3I6IG9wdGlvbnMuYm9yZGVyQ29sb3IsXG5cdFx0XHRib3JkZXJXaWR0aDogb3B0aW9ucy5ib3JkZXJXaWR0aCxcblx0XHRcdHRlbnNpb246IHZhbHVlT3JEZWZhdWx0JDYoY3VzdG9tLnRlbnNpb24sIGxpbmVNb2RlbCA/IGxpbmVNb2RlbC50ZW5zaW9uIDogMCksXG5cblx0XHRcdC8vIFRvb2x0aXBcblx0XHRcdGhpdFJhZGl1czogb3B0aW9ucy5oaXRSYWRpdXNcblx0XHR9O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X3Jlc29sdmVQb2ludE9wdGlvbnM6IGZ1bmN0aW9uKGVsZW1lbnQsIGluZGV4KSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgY2hhcnQgPSBtZS5jaGFydDtcblx0XHR2YXIgZGF0YXNldCA9IGNoYXJ0LmRhdGEuZGF0YXNldHNbbWUuaW5kZXhdO1xuXHRcdHZhciBjdXN0b20gPSBlbGVtZW50LmN1c3RvbSB8fCB7fTtcblx0XHR2YXIgb3B0aW9ucyA9IGNoYXJ0Lm9wdGlvbnMuZWxlbWVudHMucG9pbnQ7XG5cdFx0dmFyIHZhbHVlcyA9IHt9O1xuXHRcdHZhciBpLCBpbGVuLCBrZXk7XG5cblx0XHQvLyBTY3JpcHRhYmxlIG9wdGlvbnNcblx0XHR2YXIgY29udGV4dCA9IHtcblx0XHRcdGNoYXJ0OiBjaGFydCxcblx0XHRcdGRhdGFJbmRleDogaW5kZXgsXG5cdFx0XHRkYXRhc2V0OiBkYXRhc2V0LFxuXHRcdFx0ZGF0YXNldEluZGV4OiBtZS5pbmRleFxuXHRcdH07XG5cblx0XHR2YXIgRUxFTUVOVF9PUFRJT05TID0ge1xuXHRcdFx0YmFja2dyb3VuZENvbG9yOiAncG9pbnRCYWNrZ3JvdW5kQ29sb3InLFxuXHRcdFx0Ym9yZGVyQ29sb3I6ICdwb2ludEJvcmRlckNvbG9yJyxcblx0XHRcdGJvcmRlcldpZHRoOiAncG9pbnRCb3JkZXJXaWR0aCcsXG5cdFx0XHRoaXRSYWRpdXM6ICdwb2ludEhpdFJhZGl1cycsXG5cdFx0XHRob3ZlckJhY2tncm91bmRDb2xvcjogJ3BvaW50SG92ZXJCYWNrZ3JvdW5kQ29sb3InLFxuXHRcdFx0aG92ZXJCb3JkZXJDb2xvcjogJ3BvaW50SG92ZXJCb3JkZXJDb2xvcicsXG5cdFx0XHRob3ZlckJvcmRlcldpZHRoOiAncG9pbnRIb3ZlckJvcmRlcldpZHRoJyxcblx0XHRcdGhvdmVyUmFkaXVzOiAncG9pbnRIb3ZlclJhZGl1cycsXG5cdFx0XHRwb2ludFN0eWxlOiAncG9pbnRTdHlsZScsXG5cdFx0XHRyYWRpdXM6ICdwb2ludFJhZGl1cycsXG5cdFx0XHRyb3RhdGlvbjogJ3BvaW50Um90YXRpb24nXG5cdFx0fTtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKEVMRU1FTlRfT1BUSU9OUyk7XG5cblx0XHRmb3IgKGkgPSAwLCBpbGVuID0ga2V5cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcblx0XHRcdGtleSA9IGtleXNbaV07XG5cdFx0XHR2YWx1ZXNba2V5XSA9IHJlc29sdmUkNihbXG5cdFx0XHRcdGN1c3RvbVtrZXldLFxuXHRcdFx0XHRkYXRhc2V0W0VMRU1FTlRfT1BUSU9OU1trZXldXSxcblx0XHRcdFx0ZGF0YXNldFtrZXldLFxuXHRcdFx0XHRvcHRpb25zW2tleV1cblx0XHRcdF0sIGNvbnRleHQsIGluZGV4KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsdWVzO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X3Jlc29sdmVMaW5lT3B0aW9uczogZnVuY3Rpb24oZWxlbWVudCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIGNoYXJ0ID0gbWUuY2hhcnQ7XG5cdFx0dmFyIGRhdGFzZXQgPSBjaGFydC5kYXRhLmRhdGFzZXRzW21lLmluZGV4XTtcblx0XHR2YXIgY3VzdG9tID0gZWxlbWVudC5jdXN0b20gfHwge307XG5cdFx0dmFyIG9wdGlvbnMgPSBjaGFydC5vcHRpb25zLmVsZW1lbnRzLmxpbmU7XG5cdFx0dmFyIHZhbHVlcyA9IHt9O1xuXHRcdHZhciBpLCBpbGVuLCBrZXk7XG5cblx0XHR2YXIga2V5cyA9IFtcblx0XHRcdCdiYWNrZ3JvdW5kQ29sb3InLFxuXHRcdFx0J2JvcmRlcldpZHRoJyxcblx0XHRcdCdib3JkZXJDb2xvcicsXG5cdFx0XHQnYm9yZGVyQ2FwU3R5bGUnLFxuXHRcdFx0J2JvcmRlckRhc2gnLFxuXHRcdFx0J2JvcmRlckRhc2hPZmZzZXQnLFxuXHRcdFx0J2JvcmRlckpvaW5TdHlsZScsXG5cdFx0XHQnZmlsbCdcblx0XHRdO1xuXG5cdFx0Zm9yIChpID0gMCwgaWxlbiA9IGtleXMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XG5cdFx0XHRrZXkgPSBrZXlzW2ldO1xuXHRcdFx0dmFsdWVzW2tleV0gPSByZXNvbHZlJDYoW1xuXHRcdFx0XHRjdXN0b21ba2V5XSxcblx0XHRcdFx0ZGF0YXNldFtrZXldLFxuXHRcdFx0XHRvcHRpb25zW2tleV1cblx0XHRcdF0pO1xuXHRcdH1cblxuXHRcdHZhbHVlcy50ZW5zaW9uID0gdmFsdWVPckRlZmF1bHQkNihkYXRhc2V0LmxpbmVUZW5zaW9uLCBvcHRpb25zLnRlbnNpb24pO1xuXG5cdFx0cmV0dXJuIHZhbHVlcztcblx0fSxcblxuXHR1cGRhdGVCZXppZXJDb250cm9sUG9pbnRzOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciBtZXRhID0gbWUuZ2V0TWV0YSgpO1xuXHRcdHZhciBhcmVhID0gbWUuY2hhcnQuY2hhcnRBcmVhO1xuXHRcdHZhciBwb2ludHMgPSBtZXRhLmRhdGEgfHwgW107XG5cdFx0dmFyIGksIGlsZW4sIG1vZGVsLCBjb250cm9sUG9pbnRzO1xuXG5cdFx0ZnVuY3Rpb24gY2FwQ29udHJvbFBvaW50KHB0LCBtaW4sIG1heCkge1xuXHRcdFx0cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKHB0LCBtYXgpLCBtaW4pO1xuXHRcdH1cblxuXHRcdGZvciAoaSA9IDAsIGlsZW4gPSBwb2ludHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XG5cdFx0XHRtb2RlbCA9IHBvaW50c1tpXS5fbW9kZWw7XG5cdFx0XHRjb250cm9sUG9pbnRzID0gaGVscGVycyQxLnNwbGluZUN1cnZlKFxuXHRcdFx0XHRoZWxwZXJzJDEucHJldmlvdXNJdGVtKHBvaW50cywgaSwgdHJ1ZSkuX21vZGVsLFxuXHRcdFx0XHRtb2RlbCxcblx0XHRcdFx0aGVscGVycyQxLm5leHRJdGVtKHBvaW50cywgaSwgdHJ1ZSkuX21vZGVsLFxuXHRcdFx0XHRtb2RlbC50ZW5zaW9uXG5cdFx0XHQpO1xuXG5cdFx0XHQvLyBQcmV2ZW50IHRoZSBiZXppZXIgZ29pbmcgb3V0c2lkZSBvZiB0aGUgYm91bmRzIG9mIHRoZSBncmFwaFxuXHRcdFx0bW9kZWwuY29udHJvbFBvaW50UHJldmlvdXNYID0gY2FwQ29udHJvbFBvaW50KGNvbnRyb2xQb2ludHMucHJldmlvdXMueCwgYXJlYS5sZWZ0LCBhcmVhLnJpZ2h0KTtcblx0XHRcdG1vZGVsLmNvbnRyb2xQb2ludFByZXZpb3VzWSA9IGNhcENvbnRyb2xQb2ludChjb250cm9sUG9pbnRzLnByZXZpb3VzLnksIGFyZWEudG9wLCBhcmVhLmJvdHRvbSk7XG5cdFx0XHRtb2RlbC5jb250cm9sUG9pbnROZXh0WCA9IGNhcENvbnRyb2xQb2ludChjb250cm9sUG9pbnRzLm5leHQueCwgYXJlYS5sZWZ0LCBhcmVhLnJpZ2h0KTtcblx0XHRcdG1vZGVsLmNvbnRyb2xQb2ludE5leHRZID0gY2FwQ29udHJvbFBvaW50KGNvbnRyb2xQb2ludHMubmV4dC55LCBhcmVhLnRvcCwgYXJlYS5ib3R0b20pO1xuXHRcdH1cblx0fSxcblxuXHRzZXRIb3ZlclN0eWxlOiBmdW5jdGlvbihwb2ludCkge1xuXHRcdHZhciBtb2RlbCA9IHBvaW50Ll9tb2RlbDtcblx0XHR2YXIgb3B0aW9ucyA9IHBvaW50Ll9vcHRpb25zO1xuXHRcdHZhciBnZXRIb3ZlckNvbG9yID0gaGVscGVycyQxLmdldEhvdmVyQ29sb3I7XG5cblx0XHRwb2ludC4kcHJldmlvdXNTdHlsZSA9IHtcblx0XHRcdGJhY2tncm91bmRDb2xvcjogbW9kZWwuYmFja2dyb3VuZENvbG9yLFxuXHRcdFx0Ym9yZGVyQ29sb3I6IG1vZGVsLmJvcmRlckNvbG9yLFxuXHRcdFx0Ym9yZGVyV2lkdGg6IG1vZGVsLmJvcmRlcldpZHRoLFxuXHRcdFx0cmFkaXVzOiBtb2RlbC5yYWRpdXNcblx0XHR9O1xuXG5cdFx0bW9kZWwuYmFja2dyb3VuZENvbG9yID0gdmFsdWVPckRlZmF1bHQkNihvcHRpb25zLmhvdmVyQmFja2dyb3VuZENvbG9yLCBnZXRIb3ZlckNvbG9yKG9wdGlvbnMuYmFja2dyb3VuZENvbG9yKSk7XG5cdFx0bW9kZWwuYm9yZGVyQ29sb3IgPSB2YWx1ZU9yRGVmYXVsdCQ2KG9wdGlvbnMuaG92ZXJCb3JkZXJDb2xvciwgZ2V0SG92ZXJDb2xvcihvcHRpb25zLmJvcmRlckNvbG9yKSk7XG5cdFx0bW9kZWwuYm9yZGVyV2lkdGggPSB2YWx1ZU9yRGVmYXVsdCQ2KG9wdGlvbnMuaG92ZXJCb3JkZXJXaWR0aCwgb3B0aW9ucy5ib3JkZXJXaWR0aCk7XG5cdFx0bW9kZWwucmFkaXVzID0gdmFsdWVPckRlZmF1bHQkNihvcHRpb25zLmhvdmVyUmFkaXVzLCBvcHRpb25zLnJhZGl1cyk7XG5cdH1cbn0pO1xuXG5jb3JlX2RlZmF1bHRzLl9zZXQoJ3NjYXR0ZXInLCB7XG5cdGhvdmVyOiB7XG5cdFx0bW9kZTogJ3NpbmdsZSdcblx0fSxcblxuXHRzY2FsZXM6IHtcblx0XHR4QXhlczogW3tcblx0XHRcdGlkOiAneC1heGlzLTEnLCAgICAvLyBuZWVkIGFuIElEIHNvIGRhdGFzZXRzIGNhbiByZWZlcmVuY2UgdGhlIHNjYWxlXG5cdFx0XHR0eXBlOiAnbGluZWFyJywgICAgLy8gc2NhdHRlciBzaG91bGQgbm90IHVzZSBhIGNhdGVnb3J5IGF4aXNcblx0XHRcdHBvc2l0aW9uOiAnYm90dG9tJ1xuXHRcdH1dLFxuXHRcdHlBeGVzOiBbe1xuXHRcdFx0aWQ6ICd5LWF4aXMtMScsXG5cdFx0XHR0eXBlOiAnbGluZWFyJyxcblx0XHRcdHBvc2l0aW9uOiAnbGVmdCdcblx0XHR9XVxuXHR9LFxuXG5cdHNob3dMaW5lczogZmFsc2UsXG5cblx0dG9vbHRpcHM6IHtcblx0XHRjYWxsYmFja3M6IHtcblx0XHRcdHRpdGxlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICcnOyAgICAgLy8gZG9lc24ndCBtYWtlIHNlbnNlIGZvciBzY2F0dGVyIHNpbmNlIGRhdGEgYXJlIGZvcm1hdHRlZCBhcyBhIHBvaW50XG5cdFx0XHR9LFxuXHRcdFx0bGFiZWw6IGZ1bmN0aW9uKGl0ZW0pIHtcblx0XHRcdFx0cmV0dXJuICcoJyArIGl0ZW0ueExhYmVsICsgJywgJyArIGl0ZW0ueUxhYmVsICsgJyknO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSk7XG5cbi8vIFNjYXR0ZXIgY2hhcnRzIHVzZSBsaW5lIGNvbnRyb2xsZXJzXG52YXIgY29udHJvbGxlcl9zY2F0dGVyID0gY29udHJvbGxlcl9saW5lO1xuXG4vLyBOT1RFIGV4cG9ydCBhIG1hcCBpbiB3aGljaCB0aGUga2V5IHJlcHJlc2VudHMgdGhlIGNvbnRyb2xsZXIgdHlwZSwgbm90XG4vLyB0aGUgY2xhc3MsIGFuZCBzbyBtdXN0IGJlIENhbWVsQ2FzZSBpbiBvcmRlciB0byBiZSBjb3JyZWN0bHkgcmV0cmlldmVkXG4vLyBieSB0aGUgY29udHJvbGxlciBpbiBjb3JlLmNvbnRyb2xsZXIuanMgKGBjb250cm9sbGVyc1ttZXRhLnR5cGVdYCkuXG5cbnZhciBjb250cm9sbGVycyA9IHtcblx0YmFyOiBjb250cm9sbGVyX2Jhcixcblx0YnViYmxlOiBjb250cm9sbGVyX2J1YmJsZSxcblx0ZG91Z2hudXQ6IGNvbnRyb2xsZXJfZG91Z2hudXQsXG5cdGhvcml6b250YWxCYXI6IGNvbnRyb2xsZXJfaG9yaXpvbnRhbEJhcixcblx0bGluZTogY29udHJvbGxlcl9saW5lLFxuXHRwb2xhckFyZWE6IGNvbnRyb2xsZXJfcG9sYXJBcmVhLFxuXHRwaWU6IGNvbnRyb2xsZXJfcGllLFxuXHRyYWRhcjogY29udHJvbGxlcl9yYWRhcixcblx0c2NhdHRlcjogY29udHJvbGxlcl9zY2F0dGVyXG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgcmVsYXRpdmUgcG9zaXRpb24gZm9yIGFuIGV2ZW50XG4gKiBAcGFyYW0ge0V2ZW50fElFdmVudH0gZXZlbnQgLSBUaGUgZXZlbnQgdG8gZ2V0IHRoZSBwb3NpdGlvbiBmb3JcbiAqIEBwYXJhbSB7Q2hhcnR9IGNoYXJ0IC0gVGhlIGNoYXJ0XG4gKiBAcmV0dXJucyB7b2JqZWN0fSB0aGUgZXZlbnQgcG9zaXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0UmVsYXRpdmVQb3NpdGlvbihlLCBjaGFydCkge1xuXHRpZiAoZS5uYXRpdmUpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0eDogZS54LFxuXHRcdFx0eTogZS55XG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiBoZWxwZXJzJDEuZ2V0UmVsYXRpdmVQb3NpdGlvbihlLCBjaGFydCk7XG59XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHRyYXZlcnNlIGFsbCBvZiB0aGUgdmlzaWJsZSBlbGVtZW50cyBpbiB0aGUgY2hhcnRcbiAqIEBwYXJhbSB7Q2hhcnR9IGNoYXJ0IC0gdGhlIGNoYXJ0XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBoYW5kbGVyIC0gdGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgZm9yIGVhY2ggdmlzaWJsZSBpdGVtXG4gKi9cbmZ1bmN0aW9uIHBhcnNlVmlzaWJsZUl0ZW1zKGNoYXJ0LCBoYW5kbGVyKSB7XG5cdHZhciBkYXRhc2V0cyA9IGNoYXJ0LmRhdGEuZGF0YXNldHM7XG5cdHZhciBtZXRhLCBpLCBqLCBpbGVuLCBqbGVuO1xuXG5cdGZvciAoaSA9IDAsIGlsZW4gPSBkYXRhc2V0cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcblx0XHRpZiAoIWNoYXJ0LmlzRGF0YXNldFZpc2libGUoaSkpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdG1ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YShpKTtcblx0XHRmb3IgKGogPSAwLCBqbGVuID0gbWV0YS5kYXRhLmxlbmd0aDsgaiA8IGpsZW47ICsraikge1xuXHRcdFx0dmFyIGVsZW1lbnQgPSBtZXRhLmRhdGFbal07XG5cdFx0XHRpZiAoIWVsZW1lbnQuX3ZpZXcuc2tpcCkge1xuXHRcdFx0XHRoYW5kbGVyKGVsZW1lbnQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIGl0ZW1zIHRoYXQgaW50ZXJzZWN0IHRoZSBldmVudCBwb3NpdGlvblxuICogQHBhcmFtIHtDaGFydEVsZW1lbnRbXX0gaXRlbXMgLSBlbGVtZW50cyB0byBmaWx0ZXJcbiAqIEBwYXJhbSB7b2JqZWN0fSBwb3NpdGlvbiAtIHRoZSBwb2ludCB0byBiZSBuZWFyZXN0IHRvXG4gKiBAcmV0dXJuIHtDaGFydEVsZW1lbnRbXX0gdGhlIG5lYXJlc3QgaXRlbXNcbiAqL1xuZnVuY3Rpb24gZ2V0SW50ZXJzZWN0SXRlbXMoY2hhcnQsIHBvc2l0aW9uKSB7XG5cdHZhciBlbGVtZW50cyA9IFtdO1xuXG5cdHBhcnNlVmlzaWJsZUl0ZW1zKGNoYXJ0LCBmdW5jdGlvbihlbGVtZW50KSB7XG5cdFx0aWYgKGVsZW1lbnQuaW5SYW5nZShwb3NpdGlvbi54LCBwb3NpdGlvbi55KSkge1xuXHRcdFx0ZWxlbWVudHMucHVzaChlbGVtZW50KTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBlbGVtZW50cztcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBpdGVtcyBuZWFyZXN0IHRvIHRoZSBldmVudCBwb3NpdGlvbiBjb25zaWRlcmluZyBhbGwgdmlzaWJsZSBpdGVtcyBpbiB0ZWggY2hhcnRcbiAqIEBwYXJhbSB7Q2hhcnR9IGNoYXJ0IC0gdGhlIGNoYXJ0IHRvIGxvb2sgYXQgZWxlbWVudHMgZnJvbVxuICogQHBhcmFtIHtvYmplY3R9IHBvc2l0aW9uIC0gdGhlIHBvaW50IHRvIGJlIG5lYXJlc3QgdG9cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW50ZXJzZWN0IC0gaWYgdHJ1ZSwgb25seSBjb25zaWRlciBpdGVtcyB0aGF0IGludGVyc2VjdCB0aGUgcG9zaXRpb25cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGRpc3RhbmNlTWV0cmljIC0gZnVuY3Rpb24gdG8gcHJvdmlkZSB0aGUgZGlzdGFuY2UgYmV0d2VlbiBwb2ludHNcbiAqIEByZXR1cm4ge0NoYXJ0RWxlbWVudFtdfSB0aGUgbmVhcmVzdCBpdGVtc1xuICovXG5mdW5jdGlvbiBnZXROZWFyZXN0SXRlbXMoY2hhcnQsIHBvc2l0aW9uLCBpbnRlcnNlY3QsIGRpc3RhbmNlTWV0cmljKSB7XG5cdHZhciBtaW5EaXN0YW5jZSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcblx0dmFyIG5lYXJlc3RJdGVtcyA9IFtdO1xuXG5cdHBhcnNlVmlzaWJsZUl0ZW1zKGNoYXJ0LCBmdW5jdGlvbihlbGVtZW50KSB7XG5cdFx0aWYgKGludGVyc2VjdCAmJiAhZWxlbWVudC5pblJhbmdlKHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIGNlbnRlciA9IGVsZW1lbnQuZ2V0Q2VudGVyUG9pbnQoKTtcblx0XHR2YXIgZGlzdGFuY2UgPSBkaXN0YW5jZU1ldHJpYyhwb3NpdGlvbiwgY2VudGVyKTtcblx0XHRpZiAoZGlzdGFuY2UgPCBtaW5EaXN0YW5jZSkge1xuXHRcdFx0bmVhcmVzdEl0ZW1zID0gW2VsZW1lbnRdO1xuXHRcdFx0bWluRGlzdGFuY2UgPSBkaXN0YW5jZTtcblx0XHR9IGVsc2UgaWYgKGRpc3RhbmNlID09PSBtaW5EaXN0YW5jZSkge1xuXHRcdFx0Ly8gQ2FuIGhhdmUgbXVsdGlwbGUgaXRlbXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgaW4gd2hpY2ggY2FzZSB3ZSBzb3J0IGJ5IHNpemVcblx0XHRcdG5lYXJlc3RJdGVtcy5wdXNoKGVsZW1lbnQpO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIG5lYXJlc3RJdGVtcztcbn1cblxuLyoqXG4gKiBHZXQgYSBkaXN0YW5jZSBtZXRyaWMgZnVuY3Rpb24gZm9yIHR3byBwb2ludHMgYmFzZWQgb24gdGhlXG4gKiBheGlzIG1vZGUgc2V0dGluZ1xuICogQHBhcmFtIHtzdHJpbmd9IGF4aXMgLSB0aGUgYXhpcyBtb2RlLiB4fHl8eHlcbiAqL1xuZnVuY3Rpb24gZ2V0RGlzdGFuY2VNZXRyaWNGb3JBeGlzKGF4aXMpIHtcblx0dmFyIHVzZVggPSBheGlzLmluZGV4T2YoJ3gnKSAhPT0gLTE7XG5cdHZhciB1c2VZID0gYXhpcy5pbmRleE9mKCd5JykgIT09IC0xO1xuXG5cdHJldHVybiBmdW5jdGlvbihwdDEsIHB0Mikge1xuXHRcdHZhciBkZWx0YVggPSB1c2VYID8gTWF0aC5hYnMocHQxLnggLSBwdDIueCkgOiAwO1xuXHRcdHZhciBkZWx0YVkgPSB1c2VZID8gTWF0aC5hYnMocHQxLnkgLSBwdDIueSkgOiAwO1xuXHRcdHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coZGVsdGFYLCAyKSArIE1hdGgucG93KGRlbHRhWSwgMikpO1xuXHR9O1xufVxuXG5mdW5jdGlvbiBpbmRleE1vZGUoY2hhcnQsIGUsIG9wdGlvbnMpIHtcblx0dmFyIHBvc2l0aW9uID0gZ2V0UmVsYXRpdmVQb3NpdGlvbihlLCBjaGFydCk7XG5cdC8vIERlZmF1bHQgYXhpcyBmb3IgaW5kZXggbW9kZSBpcyAneCcgdG8gbWF0Y2ggb2xkIGJlaGF2aW91clxuXHRvcHRpb25zLmF4aXMgPSBvcHRpb25zLmF4aXMgfHwgJ3gnO1xuXHR2YXIgZGlzdGFuY2VNZXRyaWMgPSBnZXREaXN0YW5jZU1ldHJpY0ZvckF4aXMob3B0aW9ucy5heGlzKTtcblx0dmFyIGl0ZW1zID0gb3B0aW9ucy5pbnRlcnNlY3QgPyBnZXRJbnRlcnNlY3RJdGVtcyhjaGFydCwgcG9zaXRpb24pIDogZ2V0TmVhcmVzdEl0ZW1zKGNoYXJ0LCBwb3NpdGlvbiwgZmFsc2UsIGRpc3RhbmNlTWV0cmljKTtcblx0dmFyIGVsZW1lbnRzID0gW107XG5cblx0aWYgKCFpdGVtcy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblxuXHRjaGFydC5kYXRhLmRhdGFzZXRzLmZvckVhY2goZnVuY3Rpb24oZGF0YXNldCwgZGF0YXNldEluZGV4KSB7XG5cdFx0aWYgKGNoYXJ0LmlzRGF0YXNldFZpc2libGUoZGF0YXNldEluZGV4KSkge1xuXHRcdFx0dmFyIG1ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YShkYXRhc2V0SW5kZXgpO1xuXHRcdFx0dmFyIGVsZW1lbnQgPSBtZXRhLmRhdGFbaXRlbXNbMF0uX2luZGV4XTtcblxuXHRcdFx0Ly8gZG9uJ3QgY291bnQgaXRlbXMgdGhhdCBhcmUgc2tpcHBlZCAobnVsbCBkYXRhKVxuXHRcdFx0aWYgKGVsZW1lbnQgJiYgIWVsZW1lbnQuX3ZpZXcuc2tpcCkge1xuXHRcdFx0XHRlbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIGVsZW1lbnRzO1xufVxuXG4vKipcbiAqIEBpbnRlcmZhY2UgSUludGVyYWN0aW9uT3B0aW9uc1xuICovXG4vKipcbiAqIElmIHRydWUsIG9ubHkgY29uc2lkZXIgaXRlbXMgdGhhdCBpbnRlcnNlY3QgdGhlIHBvaW50XG4gKiBAbmFtZSBJSW50ZXJmYWNlT3B0aW9ucyNib29sZWFuXG4gKiBAdHlwZSBCb29sZWFuXG4gKi9cblxuLyoqXG4gKiBDb250YWlucyBpbnRlcmFjdGlvbiByZWxhdGVkIGZ1bmN0aW9uc1xuICogQG5hbWVzcGFjZSBDaGFydC5JbnRlcmFjdGlvblxuICovXG52YXIgY29yZV9pbnRlcmFjdGlvbiA9IHtcblx0Ly8gSGVscGVyIGZ1bmN0aW9uIGZvciBkaWZmZXJlbnQgbW9kZXNcblx0bW9kZXM6IHtcblx0XHRzaW5nbGU6IGZ1bmN0aW9uKGNoYXJ0LCBlKSB7XG5cdFx0XHR2YXIgcG9zaXRpb24gPSBnZXRSZWxhdGl2ZVBvc2l0aW9uKGUsIGNoYXJ0KTtcblx0XHRcdHZhciBlbGVtZW50cyA9IFtdO1xuXG5cdFx0XHRwYXJzZVZpc2libGVJdGVtcyhjaGFydCwgZnVuY3Rpb24oZWxlbWVudCkge1xuXHRcdFx0XHRpZiAoZWxlbWVudC5pblJhbmdlKHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpKSB7XG5cdFx0XHRcdFx0ZWxlbWVudHMucHVzaChlbGVtZW50KTtcblx0XHRcdFx0XHRyZXR1cm4gZWxlbWVudHM7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gZWxlbWVudHMuc2xpY2UoMCwgMSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEBmdW5jdGlvbiBDaGFydC5JbnRlcmFjdGlvbi5tb2Rlcy5sYWJlbFxuXHRcdCAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMi40LjBcblx0XHQgKiBAdG9kbyByZW1vdmUgYXQgdmVyc2lvbiAzXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHRsYWJlbDogaW5kZXhNb2RlLFxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyBpdGVtcyBhdCB0aGUgc2FtZSBpbmRleC4gSWYgdGhlIG9wdGlvbnMuaW50ZXJzZWN0IHBhcmFtZXRlciBpcyB0cnVlLCB3ZSBvbmx5IHJldHVybiBpdGVtcyBpZiB3ZSBpbnRlcnNlY3Qgc29tZXRoaW5nXG5cdFx0ICogSWYgdGhlIG9wdGlvbnMuaW50ZXJzZWN0IG1vZGUgaXMgZmFsc2UsIHdlIGZpbmQgdGhlIG5lYXJlc3QgaXRlbSBhbmQgcmV0dXJuIHRoZSBpdGVtcyBhdCB0aGUgc2FtZSBpbmRleCBhcyB0aGF0IGl0ZW1cblx0XHQgKiBAZnVuY3Rpb24gQ2hhcnQuSW50ZXJhY3Rpb24ubW9kZXMuaW5kZXhcblx0XHQgKiBAc2luY2UgdjIuNC4wXG5cdFx0ICogQHBhcmFtIHtDaGFydH0gY2hhcnQgLSB0aGUgY2hhcnQgd2UgYXJlIHJldHVybmluZyBpdGVtcyBmcm9tXG5cdFx0ICogQHBhcmFtIHtFdmVudH0gZSAtIHRoZSBldmVudCB3ZSBhcmUgZmluZCB0aGluZ3MgYXRcblx0XHQgKiBAcGFyYW0ge0lJbnRlcmFjdGlvbk9wdGlvbnN9IG9wdGlvbnMgLSBvcHRpb25zIHRvIHVzZSBkdXJpbmcgaW50ZXJhY3Rpb25cblx0XHQgKiBAcmV0dXJuIHtDaGFydC5FbGVtZW50W119IEFycmF5IG9mIGVsZW1lbnRzIHRoYXQgYXJlIHVuZGVyIHRoZSBwb2ludC4gSWYgbm9uZSBhcmUgZm91bmQsIGFuIGVtcHR5IGFycmF5IGlzIHJldHVybmVkXG5cdFx0ICovXG5cdFx0aW5kZXg6IGluZGV4TW9kZSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgaXRlbXMgaW4gdGhlIHNhbWUgZGF0YXNldC4gSWYgdGhlIG9wdGlvbnMuaW50ZXJzZWN0IHBhcmFtZXRlciBpcyB0cnVlLCB3ZSBvbmx5IHJldHVybiBpdGVtcyBpZiB3ZSBpbnRlcnNlY3Qgc29tZXRoaW5nXG5cdFx0ICogSWYgdGhlIG9wdGlvbnMuaW50ZXJzZWN0IGlzIGZhbHNlLCB3ZSBmaW5kIHRoZSBuZWFyZXN0IGl0ZW0gYW5kIHJldHVybiB0aGUgaXRlbXMgaW4gdGhhdCBkYXRhc2V0XG5cdFx0ICogQGZ1bmN0aW9uIENoYXJ0LkludGVyYWN0aW9uLm1vZGVzLmRhdGFzZXRcblx0XHQgKiBAcGFyYW0ge0NoYXJ0fSBjaGFydCAtIHRoZSBjaGFydCB3ZSBhcmUgcmV0dXJuaW5nIGl0ZW1zIGZyb21cblx0XHQgKiBAcGFyYW0ge0V2ZW50fSBlIC0gdGhlIGV2ZW50IHdlIGFyZSBmaW5kIHRoaW5ncyBhdFxuXHRcdCAqIEBwYXJhbSB7SUludGVyYWN0aW9uT3B0aW9uc30gb3B0aW9ucyAtIG9wdGlvbnMgdG8gdXNlIGR1cmluZyBpbnRlcmFjdGlvblxuXHRcdCAqIEByZXR1cm4ge0NoYXJ0LkVsZW1lbnRbXX0gQXJyYXkgb2YgZWxlbWVudHMgdGhhdCBhcmUgdW5kZXIgdGhlIHBvaW50LiBJZiBub25lIGFyZSBmb3VuZCwgYW4gZW1wdHkgYXJyYXkgaXMgcmV0dXJuZWRcblx0XHQgKi9cblx0XHRkYXRhc2V0OiBmdW5jdGlvbihjaGFydCwgZSwgb3B0aW9ucykge1xuXHRcdFx0dmFyIHBvc2l0aW9uID0gZ2V0UmVsYXRpdmVQb3NpdGlvbihlLCBjaGFydCk7XG5cdFx0XHRvcHRpb25zLmF4aXMgPSBvcHRpb25zLmF4aXMgfHwgJ3h5Jztcblx0XHRcdHZhciBkaXN0YW5jZU1ldHJpYyA9IGdldERpc3RhbmNlTWV0cmljRm9yQXhpcyhvcHRpb25zLmF4aXMpO1xuXHRcdFx0dmFyIGl0ZW1zID0gb3B0aW9ucy5pbnRlcnNlY3QgPyBnZXRJbnRlcnNlY3RJdGVtcyhjaGFydCwgcG9zaXRpb24pIDogZ2V0TmVhcmVzdEl0ZW1zKGNoYXJ0LCBwb3NpdGlvbiwgZmFsc2UsIGRpc3RhbmNlTWV0cmljKTtcblxuXHRcdFx0aWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0aXRlbXMgPSBjaGFydC5nZXREYXRhc2V0TWV0YShpdGVtc1swXS5fZGF0YXNldEluZGV4KS5kYXRhO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gaXRlbXM7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEBmdW5jdGlvbiBDaGFydC5JbnRlcmFjdGlvbi5tb2Rlcy54LWF4aXNcblx0XHQgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDIuNC4wLiBVc2UgaW5kZXggbW9kZSBhbmQgaW50ZXJzZWN0ID09IHRydWVcblx0XHQgKiBAdG9kbyByZW1vdmUgYXQgdmVyc2lvbiAzXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHQneC1heGlzJzogZnVuY3Rpb24oY2hhcnQsIGUpIHtcblx0XHRcdHJldHVybiBpbmRleE1vZGUoY2hhcnQsIGUsIHtpbnRlcnNlY3Q6IGZhbHNlfSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFBvaW50IG1vZGUgcmV0dXJucyBhbGwgZWxlbWVudHMgdGhhdCBoaXQgdGVzdCBiYXNlZCBvbiB0aGUgZXZlbnQgcG9zaXRpb25cblx0XHQgKiBvZiB0aGUgZXZlbnRcblx0XHQgKiBAZnVuY3Rpb24gQ2hhcnQuSW50ZXJhY3Rpb24ubW9kZXMuaW50ZXJzZWN0XG5cdFx0ICogQHBhcmFtIHtDaGFydH0gY2hhcnQgLSB0aGUgY2hhcnQgd2UgYXJlIHJldHVybmluZyBpdGVtcyBmcm9tXG5cdFx0ICogQHBhcmFtIHtFdmVudH0gZSAtIHRoZSBldmVudCB3ZSBhcmUgZmluZCB0aGluZ3MgYXRcblx0XHQgKiBAcmV0dXJuIHtDaGFydC5FbGVtZW50W119IEFycmF5IG9mIGVsZW1lbnRzIHRoYXQgYXJlIHVuZGVyIHRoZSBwb2ludC4gSWYgbm9uZSBhcmUgZm91bmQsIGFuIGVtcHR5IGFycmF5IGlzIHJldHVybmVkXG5cdFx0ICovXG5cdFx0cG9pbnQ6IGZ1bmN0aW9uKGNoYXJ0LCBlKSB7XG5cdFx0XHR2YXIgcG9zaXRpb24gPSBnZXRSZWxhdGl2ZVBvc2l0aW9uKGUsIGNoYXJ0KTtcblx0XHRcdHJldHVybiBnZXRJbnRlcnNlY3RJdGVtcyhjaGFydCwgcG9zaXRpb24pO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBuZWFyZXN0IG1vZGUgcmV0dXJucyB0aGUgZWxlbWVudCBjbG9zZXN0IHRvIHRoZSBwb2ludFxuXHRcdCAqIEBmdW5jdGlvbiBDaGFydC5JbnRlcmFjdGlvbi5tb2Rlcy5pbnRlcnNlY3Rcblx0XHQgKiBAcGFyYW0ge0NoYXJ0fSBjaGFydCAtIHRoZSBjaGFydCB3ZSBhcmUgcmV0dXJuaW5nIGl0ZW1zIGZyb21cblx0XHQgKiBAcGFyYW0ge0V2ZW50fSBlIC0gdGhlIGV2ZW50IHdlIGFyZSBmaW5kIHRoaW5ncyBhdFxuXHRcdCAqIEBwYXJhbSB7SUludGVyYWN0aW9uT3B0aW9uc30gb3B0aW9ucyAtIG9wdGlvbnMgdG8gdXNlXG5cdFx0ICogQHJldHVybiB7Q2hhcnQuRWxlbWVudFtdfSBBcnJheSBvZiBlbGVtZW50cyB0aGF0IGFyZSB1bmRlciB0aGUgcG9pbnQuIElmIG5vbmUgYXJlIGZvdW5kLCBhbiBlbXB0eSBhcnJheSBpcyByZXR1cm5lZFxuXHRcdCAqL1xuXHRcdG5lYXJlc3Q6IGZ1bmN0aW9uKGNoYXJ0LCBlLCBvcHRpb25zKSB7XG5cdFx0XHR2YXIgcG9zaXRpb24gPSBnZXRSZWxhdGl2ZVBvc2l0aW9uKGUsIGNoYXJ0KTtcblx0XHRcdG9wdGlvbnMuYXhpcyA9IG9wdGlvbnMuYXhpcyB8fCAneHknO1xuXHRcdFx0dmFyIGRpc3RhbmNlTWV0cmljID0gZ2V0RGlzdGFuY2VNZXRyaWNGb3JBeGlzKG9wdGlvbnMuYXhpcyk7XG5cdFx0XHRyZXR1cm4gZ2V0TmVhcmVzdEl0ZW1zKGNoYXJ0LCBwb3NpdGlvbiwgb3B0aW9ucy5pbnRlcnNlY3QsIGRpc3RhbmNlTWV0cmljKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogeCBtb2RlIHJldHVybnMgdGhlIGVsZW1lbnRzIHRoYXQgaGl0LXRlc3QgYXQgdGhlIGN1cnJlbnQgeCBjb29yZGluYXRlXG5cdFx0ICogQGZ1bmN0aW9uIENoYXJ0LkludGVyYWN0aW9uLm1vZGVzLnhcblx0XHQgKiBAcGFyYW0ge0NoYXJ0fSBjaGFydCAtIHRoZSBjaGFydCB3ZSBhcmUgcmV0dXJuaW5nIGl0ZW1zIGZyb21cblx0XHQgKiBAcGFyYW0ge0V2ZW50fSBlIC0gdGhlIGV2ZW50IHdlIGFyZSBmaW5kIHRoaW5ncyBhdFxuXHRcdCAqIEBwYXJhbSB7SUludGVyYWN0aW9uT3B0aW9uc30gb3B0aW9ucyAtIG9wdGlvbnMgdG8gdXNlXG5cdFx0ICogQHJldHVybiB7Q2hhcnQuRWxlbWVudFtdfSBBcnJheSBvZiBlbGVtZW50cyB0aGF0IGFyZSB1bmRlciB0aGUgcG9pbnQuIElmIG5vbmUgYXJlIGZvdW5kLCBhbiBlbXB0eSBhcnJheSBpcyByZXR1cm5lZFxuXHRcdCAqL1xuXHRcdHg6IGZ1bmN0aW9uKGNoYXJ0LCBlLCBvcHRpb25zKSB7XG5cdFx0XHR2YXIgcG9zaXRpb24gPSBnZXRSZWxhdGl2ZVBvc2l0aW9uKGUsIGNoYXJ0KTtcblx0XHRcdHZhciBpdGVtcyA9IFtdO1xuXHRcdFx0dmFyIGludGVyc2VjdHNJdGVtID0gZmFsc2U7XG5cblx0XHRcdHBhcnNlVmlzaWJsZUl0ZW1zKGNoYXJ0LCBmdW5jdGlvbihlbGVtZW50KSB7XG5cdFx0XHRcdGlmIChlbGVtZW50LmluWFJhbmdlKHBvc2l0aW9uLngpKSB7XG5cdFx0XHRcdFx0aXRlbXMucHVzaChlbGVtZW50KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChlbGVtZW50LmluUmFuZ2UocG9zaXRpb24ueCwgcG9zaXRpb24ueSkpIHtcblx0XHRcdFx0XHRpbnRlcnNlY3RzSXRlbSA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBJZiB3ZSB3YW50IHRvIHRyaWdnZXIgb24gYW4gaW50ZXJzZWN0IGFuZCB3ZSBkb24ndCBoYXZlIGFueSBpdGVtc1xuXHRcdFx0Ly8gdGhhdCBpbnRlcnNlY3QgdGhlIHBvc2l0aW9uLCByZXR1cm4gbm90aGluZ1xuXHRcdFx0aWYgKG9wdGlvbnMuaW50ZXJzZWN0ICYmICFpbnRlcnNlY3RzSXRlbSkge1xuXHRcdFx0XHRpdGVtcyA9IFtdO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGl0ZW1zO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiB5IG1vZGUgcmV0dXJucyB0aGUgZWxlbWVudHMgdGhhdCBoaXQtdGVzdCBhdCB0aGUgY3VycmVudCB5IGNvb3JkaW5hdGVcblx0XHQgKiBAZnVuY3Rpb24gQ2hhcnQuSW50ZXJhY3Rpb24ubW9kZXMueVxuXHRcdCAqIEBwYXJhbSB7Q2hhcnR9IGNoYXJ0IC0gdGhlIGNoYXJ0IHdlIGFyZSByZXR1cm5pbmcgaXRlbXMgZnJvbVxuXHRcdCAqIEBwYXJhbSB7RXZlbnR9IGUgLSB0aGUgZXZlbnQgd2UgYXJlIGZpbmQgdGhpbmdzIGF0XG5cdFx0ICogQHBhcmFtIHtJSW50ZXJhY3Rpb25PcHRpb25zfSBvcHRpb25zIC0gb3B0aW9ucyB0byB1c2Vcblx0XHQgKiBAcmV0dXJuIHtDaGFydC5FbGVtZW50W119IEFycmF5IG9mIGVsZW1lbnRzIHRoYXQgYXJlIHVuZGVyIHRoZSBwb2ludC4gSWYgbm9uZSBhcmUgZm91bmQsIGFuIGVtcHR5IGFycmF5IGlzIHJldHVybmVkXG5cdFx0ICovXG5cdFx0eTogZnVuY3Rpb24oY2hhcnQsIGUsIG9wdGlvbnMpIHtcblx0XHRcdHZhciBwb3NpdGlvbiA9IGdldFJlbGF0aXZlUG9zaXRpb24oZSwgY2hhcnQpO1xuXHRcdFx0dmFyIGl0ZW1zID0gW107XG5cdFx0XHR2YXIgaW50ZXJzZWN0c0l0ZW0gPSBmYWxzZTtcblxuXHRcdFx0cGFyc2VWaXNpYmxlSXRlbXMoY2hhcnQsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcblx0XHRcdFx0aWYgKGVsZW1lbnQuaW5ZUmFuZ2UocG9zaXRpb24ueSkpIHtcblx0XHRcdFx0XHRpdGVtcy5wdXNoKGVsZW1lbnQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGVsZW1lbnQuaW5SYW5nZShwb3NpdGlvbi54LCBwb3NpdGlvbi55KSkge1xuXHRcdFx0XHRcdGludGVyc2VjdHNJdGVtID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdC8vIElmIHdlIHdhbnQgdG8gdHJpZ2dlciBvbiBhbiBpbnRlcnNlY3QgYW5kIHdlIGRvbid0IGhhdmUgYW55IGl0ZW1zXG5cdFx0XHQvLyB0aGF0IGludGVyc2VjdCB0aGUgcG9zaXRpb24sIHJldHVybiBub3RoaW5nXG5cdFx0XHRpZiAob3B0aW9ucy5pbnRlcnNlY3QgJiYgIWludGVyc2VjdHNJdGVtKSB7XG5cdFx0XHRcdGl0ZW1zID0gW107XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gaXRlbXM7XG5cdFx0fVxuXHR9XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXJCeVBvc2l0aW9uKGFycmF5LCBwb3NpdGlvbikge1xuXHRyZXR1cm4gaGVscGVycyQxLndoZXJlKGFycmF5LCBmdW5jdGlvbih2KSB7XG5cdFx0cmV0dXJuIHYucG9zaXRpb24gPT09IHBvc2l0aW9uO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gc29ydEJ5V2VpZ2h0KGFycmF5LCByZXZlcnNlKSB7XG5cdGFycmF5LmZvckVhY2goZnVuY3Rpb24odiwgaSkge1xuXHRcdHYuX3RtcEluZGV4XyA9IGk7XG5cdFx0cmV0dXJuIHY7XG5cdH0pO1xuXHRhcnJheS5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcblx0XHR2YXIgdjAgPSByZXZlcnNlID8gYiA6IGE7XG5cdFx0dmFyIHYxID0gcmV2ZXJzZSA/IGEgOiBiO1xuXHRcdHJldHVybiB2MC53ZWlnaHQgPT09IHYxLndlaWdodCA/XG5cdFx0XHR2MC5fdG1wSW5kZXhfIC0gdjEuX3RtcEluZGV4XyA6XG5cdFx0XHR2MC53ZWlnaHQgLSB2MS53ZWlnaHQ7XG5cdH0pO1xuXHRhcnJheS5mb3JFYWNoKGZ1bmN0aW9uKHYpIHtcblx0XHRkZWxldGUgdi5fdG1wSW5kZXhfO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gZmluZE1heFBhZGRpbmcoYm94ZXMpIHtcblx0dmFyIHRvcCA9IDA7XG5cdHZhciBsZWZ0ID0gMDtcblx0dmFyIGJvdHRvbSA9IDA7XG5cdHZhciByaWdodCA9IDA7XG5cdGhlbHBlcnMkMS5lYWNoKGJveGVzLCBmdW5jdGlvbihib3gpIHtcblx0XHRpZiAoYm94LmdldFBhZGRpbmcpIHtcblx0XHRcdHZhciBib3hQYWRkaW5nID0gYm94LmdldFBhZGRpbmcoKTtcblx0XHRcdHRvcCA9IE1hdGgubWF4KHRvcCwgYm94UGFkZGluZy50b3ApO1xuXHRcdFx0bGVmdCA9IE1hdGgubWF4KGxlZnQsIGJveFBhZGRpbmcubGVmdCk7XG5cdFx0XHRib3R0b20gPSBNYXRoLm1heChib3R0b20sIGJveFBhZGRpbmcuYm90dG9tKTtcblx0XHRcdHJpZ2h0ID0gTWF0aC5tYXgocmlnaHQsIGJveFBhZGRpbmcucmlnaHQpO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiB7XG5cdFx0dG9wOiB0b3AsXG5cdFx0bGVmdDogbGVmdCxcblx0XHRib3R0b206IGJvdHRvbSxcblx0XHRyaWdodDogcmlnaHRcblx0fTtcbn1cblxuZnVuY3Rpb24gYWRkU2l6ZUJ5UG9zaXRpb24oYm94ZXMsIHNpemUpIHtcblx0aGVscGVycyQxLmVhY2goYm94ZXMsIGZ1bmN0aW9uKGJveCkge1xuXHRcdHNpemVbYm94LnBvc2l0aW9uXSArPSBib3guaXNIb3Jpem9udGFsKCkgPyBib3guaGVpZ2h0IDogYm94LndpZHRoO1xuXHR9KTtcbn1cblxuY29yZV9kZWZhdWx0cy5fc2V0KCdnbG9iYWwnLCB7XG5cdGxheW91dDoge1xuXHRcdHBhZGRpbmc6IHtcblx0XHRcdHRvcDogMCxcblx0XHRcdHJpZ2h0OiAwLFxuXHRcdFx0Ym90dG9tOiAwLFxuXHRcdFx0bGVmdDogMFxuXHRcdH1cblx0fVxufSk7XG5cbi8qKlxuICogQGludGVyZmFjZSBJTGF5b3V0SXRlbVxuICogQHByb3Age3N0cmluZ30gcG9zaXRpb24gLSBUaGUgcG9zaXRpb24gb2YgdGhlIGl0ZW0gaW4gdGhlIGNoYXJ0IGxheW91dC4gUG9zc2libGUgdmFsdWVzIGFyZVxuICogJ2xlZnQnLCAndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsIGFuZCAnY2hhcnRBcmVhJ1xuICogQHByb3Age251bWJlcn0gd2VpZ2h0IC0gVGhlIHdlaWdodCB1c2VkIHRvIHNvcnQgdGhlIGl0ZW0uIEhpZ2hlciB3ZWlnaHRzIGFyZSBmdXJ0aGVyIGF3YXkgZnJvbSB0aGUgY2hhcnQgYXJlYVxuICogQHByb3Age2Jvb2xlYW59IGZ1bGxXaWR0aCAtIGlmIHRydWUsIGFuZCB0aGUgaXRlbSBpcyBob3Jpem9udGFsLCB0aGVuIHB1c2ggdmVydGljYWwgYm94ZXMgZG93blxuICogQHByb3Age2Z1bmN0aW9ufSBpc0hvcml6b250YWwgLSByZXR1cm5zIHRydWUgaWYgdGhlIGxheW91dCBpdGVtIGlzIGhvcml6b250YWwgKGllLiB0b3Agb3IgYm90dG9tKVxuICogQHByb3Age2Z1bmN0aW9ufSB1cGRhdGUgLSBUYWtlcyB0d28gcGFyYW1ldGVyczogd2lkdGggYW5kIGhlaWdodC4gUmV0dXJucyBzaXplIG9mIGl0ZW1cbiAqIEBwcm9wIHtmdW5jdGlvbn0gZ2V0UGFkZGluZyAtICBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHBhZGRpbmcgb24gdGhlIGVkZ2VzXG4gKiBAcHJvcCB7bnVtYmVyfSB3aWR0aCAtIFdpZHRoIG9mIGl0ZW0uIE11c3QgYmUgdmFsaWQgYWZ0ZXIgdXBkYXRlKClcbiAqIEBwcm9wIHtudW1iZXJ9IGhlaWdodCAtIEhlaWdodCBvZiBpdGVtLiBNdXN0IGJlIHZhbGlkIGFmdGVyIHVwZGF0ZSgpXG4gKiBAcHJvcCB7bnVtYmVyfSBsZWZ0IC0gTGVmdCBlZGdlIG9mIHRoZSBpdGVtLiBTZXQgYnkgbGF5b3V0IHN5c3RlbSBhbmQgY2Fubm90IGJlIHVzZWQgaW4gdXBkYXRlXG4gKiBAcHJvcCB7bnVtYmVyfSB0b3AgLSBUb3AgZWRnZSBvZiB0aGUgaXRlbS4gU2V0IGJ5IGxheW91dCBzeXN0ZW0gYW5kIGNhbm5vdCBiZSB1c2VkIGluIHVwZGF0ZVxuICogQHByb3Age251bWJlcn0gcmlnaHQgLSBSaWdodCBlZGdlIG9mIHRoZSBpdGVtLiBTZXQgYnkgbGF5b3V0IHN5c3RlbSBhbmQgY2Fubm90IGJlIHVzZWQgaW4gdXBkYXRlXG4gKiBAcHJvcCB7bnVtYmVyfSBib3R0b20gLSBCb3R0b20gZWRnZSBvZiB0aGUgaXRlbS4gU2V0IGJ5IGxheW91dCBzeXN0ZW0gYW5kIGNhbm5vdCBiZSB1c2VkIGluIHVwZGF0ZVxuICovXG5cbi8vIFRoZSBsYXlvdXQgc2VydmljZSBpcyB2ZXJ5IHNlbGYgZXhwbGFuYXRvcnkuICBJdCdzIHJlc3BvbnNpYmxlIGZvciB0aGUgbGF5b3V0IHdpdGhpbiBhIGNoYXJ0LlxuLy8gU2NhbGVzLCBMZWdlbmRzIGFuZCBQbHVnaW5zIGFsbCByZWx5IG9uIHRoZSBsYXlvdXQgc2VydmljZSBhbmQgY2FuIGVhc2lseSByZWdpc3RlciB0byBiZSBwbGFjZWQgYW55d2hlcmUgdGhleSBuZWVkXG4vLyBJdCBpcyB0aGlzIHNlcnZpY2UncyByZXNwb25zaWJpbGl0eSBvZiBjYXJyeWluZyBvdXQgdGhhdCBsYXlvdXQuXG52YXIgY29yZV9sYXlvdXRzID0ge1xuXHRkZWZhdWx0czoge30sXG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVyIGEgYm94IHRvIGEgY2hhcnQuXG5cdCAqIEEgYm94IGlzIHNpbXBseSBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgdGhhdCByZXF1aXJlcyBsYXlvdXQuIGVnLiBTY2FsZXMsIExlZ2VuZCwgVGl0bGUuXG5cdCAqIEBwYXJhbSB7Q2hhcnR9IGNoYXJ0IC0gdGhlIGNoYXJ0IHRvIHVzZVxuXHQgKiBAcGFyYW0ge0lMYXlvdXRJdGVtfSBpdGVtIC0gdGhlIGl0ZW0gdG8gYWRkIHRvIGJlIGxheWVkIG91dFxuXHQgKi9cblx0YWRkQm94OiBmdW5jdGlvbihjaGFydCwgaXRlbSkge1xuXHRcdGlmICghY2hhcnQuYm94ZXMpIHtcblx0XHRcdGNoYXJ0LmJveGVzID0gW107XG5cdFx0fVxuXG5cdFx0Ly8gaW5pdGlhbGl6ZSBpdGVtIHdpdGggZGVmYXVsdCB2YWx1ZXNcblx0XHRpdGVtLmZ1bGxXaWR0aCA9IGl0ZW0uZnVsbFdpZHRoIHx8IGZhbHNlO1xuXHRcdGl0ZW0ucG9zaXRpb24gPSBpdGVtLnBvc2l0aW9uIHx8ICd0b3AnO1xuXHRcdGl0ZW0ud2VpZ2h0ID0gaXRlbS53ZWlnaHQgfHwgMDtcblxuXHRcdGNoYXJ0LmJveGVzLnB1c2goaXRlbSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJlbW92ZSBhIGxheW91dEl0ZW0gZnJvbSBhIGNoYXJ0XG5cdCAqIEBwYXJhbSB7Q2hhcnR9IGNoYXJ0IC0gdGhlIGNoYXJ0IHRvIHJlbW92ZSB0aGUgYm94IGZyb21cblx0ICogQHBhcmFtIHtJTGF5b3V0SXRlbX0gbGF5b3V0SXRlbSAtIHRoZSBpdGVtIHRvIHJlbW92ZSBmcm9tIHRoZSBsYXlvdXRcblx0ICovXG5cdHJlbW92ZUJveDogZnVuY3Rpb24oY2hhcnQsIGxheW91dEl0ZW0pIHtcblx0XHR2YXIgaW5kZXggPSBjaGFydC5ib3hlcyA/IGNoYXJ0LmJveGVzLmluZGV4T2YobGF5b3V0SXRlbSkgOiAtMTtcblx0XHRpZiAoaW5kZXggIT09IC0xKSB7XG5cdFx0XHRjaGFydC5ib3hlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogU2V0cyAob3IgdXBkYXRlcykgb3B0aW9ucyBvbiB0aGUgZ2l2ZW4gYGl0ZW1gLlxuXHQgKiBAcGFyYW0ge0NoYXJ0fSBjaGFydCAtIHRoZSBjaGFydCBpbiB3aGljaCB0aGUgaXRlbSBsaXZlcyAob3Igd2lsbCBiZSBhZGRlZCB0bylcblx0ICogQHBhcmFtIHtJTGF5b3V0SXRlbX0gaXRlbSAtIHRoZSBpdGVtIHRvIGNvbmZpZ3VyZSB3aXRoIHRoZSBnaXZlbiBvcHRpb25zXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gdGhlIG5ldyBpdGVtIG9wdGlvbnMuXG5cdCAqL1xuXHRjb25maWd1cmU6IGZ1bmN0aW9uKGNoYXJ0LCBpdGVtLCBvcHRpb25zKSB7XG5cdFx0dmFyIHByb3BzID0gWydmdWxsV2lkdGgnLCAncG9zaXRpb24nLCAnd2VpZ2h0J107XG5cdFx0dmFyIGlsZW4gPSBwcm9wcy5sZW5ndGg7XG5cdFx0dmFyIGkgPSAwO1xuXHRcdHZhciBwcm9wO1xuXG5cdFx0Zm9yICg7IGkgPCBpbGVuOyArK2kpIHtcblx0XHRcdHByb3AgPSBwcm9wc1tpXTtcblx0XHRcdGlmIChvcHRpb25zLmhhc093blByb3BlcnR5KHByb3ApKSB7XG5cdFx0XHRcdGl0ZW1bcHJvcF0gPSBvcHRpb25zW3Byb3BdO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogRml0cyBib3hlcyBvZiB0aGUgZ2l2ZW4gY2hhcnQgaW50byB0aGUgZ2l2ZW4gc2l6ZSBieSBoYXZpbmcgZWFjaCBib3ggbWVhc3VyZSBpdHNlbGZcblx0ICogdGhlbiBydW5uaW5nIGEgZml0dGluZyBhbGdvcml0aG1cblx0ICogQHBhcmFtIHtDaGFydH0gY2hhcnQgLSB0aGUgY2hhcnRcblx0ICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gdGhlIHdpZHRoIHRvIGZpdCBpbnRvXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSB0aGUgaGVpZ2h0IHRvIGZpdCBpbnRvXG5cdCAqL1xuXHR1cGRhdGU6IGZ1bmN0aW9uKGNoYXJ0LCB3aWR0aCwgaGVpZ2h0KSB7XG5cdFx0aWYgKCFjaGFydCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBsYXlvdXRPcHRpb25zID0gY2hhcnQub3B0aW9ucy5sYXlvdXQgfHwge307XG5cdFx0dmFyIHBhZGRpbmcgPSBoZWxwZXJzJDEub3B0aW9ucy50b1BhZGRpbmcobGF5b3V0T3B0aW9ucy5wYWRkaW5nKTtcblx0XHR2YXIgbGVmdFBhZGRpbmcgPSBwYWRkaW5nLmxlZnQ7XG5cdFx0dmFyIHJpZ2h0UGFkZGluZyA9IHBhZGRpbmcucmlnaHQ7XG5cdFx0dmFyIHRvcFBhZGRpbmcgPSBwYWRkaW5nLnRvcDtcblx0XHR2YXIgYm90dG9tUGFkZGluZyA9IHBhZGRpbmcuYm90dG9tO1xuXG5cdFx0dmFyIGxlZnRCb3hlcyA9IGZpbHRlckJ5UG9zaXRpb24oY2hhcnQuYm94ZXMsICdsZWZ0Jyk7XG5cdFx0dmFyIHJpZ2h0Qm94ZXMgPSBmaWx0ZXJCeVBvc2l0aW9uKGNoYXJ0LmJveGVzLCAncmlnaHQnKTtcblx0XHR2YXIgdG9wQm94ZXMgPSBmaWx0ZXJCeVBvc2l0aW9uKGNoYXJ0LmJveGVzLCAndG9wJyk7XG5cdFx0dmFyIGJvdHRvbUJveGVzID0gZmlsdGVyQnlQb3NpdGlvbihjaGFydC5ib3hlcywgJ2JvdHRvbScpO1xuXHRcdHZhciBjaGFydEFyZWFCb3hlcyA9IGZpbHRlckJ5UG9zaXRpb24oY2hhcnQuYm94ZXMsICdjaGFydEFyZWEnKTtcblxuXHRcdC8vIFNvcnQgYm94ZXMgYnkgd2VpZ2h0LiBBIGhpZ2hlciB3ZWlnaHQgaXMgZnVydGhlciBhd2F5IGZyb20gdGhlIGNoYXJ0IGFyZWFcblx0XHRzb3J0QnlXZWlnaHQobGVmdEJveGVzLCB0cnVlKTtcblx0XHRzb3J0QnlXZWlnaHQocmlnaHRCb3hlcywgZmFsc2UpO1xuXHRcdHNvcnRCeVdlaWdodCh0b3BCb3hlcywgdHJ1ZSk7XG5cdFx0c29ydEJ5V2VpZ2h0KGJvdHRvbUJveGVzLCBmYWxzZSk7XG5cblx0XHR2YXIgdmVydGljYWxCb3hlcyA9IGxlZnRCb3hlcy5jb25jYXQocmlnaHRCb3hlcyk7XG5cdFx0dmFyIGhvcml6b250YWxCb3hlcyA9IHRvcEJveGVzLmNvbmNhdChib3R0b21Cb3hlcyk7XG5cdFx0dmFyIG91dGVyQm94ZXMgPSB2ZXJ0aWNhbEJveGVzLmNvbmNhdChob3Jpem9udGFsQm94ZXMpO1xuXG5cdFx0Ly8gRXNzZW50aWFsbHkgd2Ugbm93IGhhdmUgYW55IG51bWJlciBvZiBib3hlcyBvbiBlYWNoIG9mIHRoZSA0IHNpZGVzLlxuXHRcdC8vIE91ciBjYW52YXMgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nLlxuXHRcdC8vIFRoZSBhcmVhcyBMMSBhbmQgTDIgYXJlIHRoZSBsZWZ0IGF4ZXMuIFIxIGlzIHRoZSByaWdodCBheGlzLCBUMSBpcyB0aGUgdG9wIGF4aXMgYW5kXG5cdFx0Ly8gQjEgaXMgdGhlIGJvdHRvbSBheGlzXG5cdFx0Ly8gVGhlcmUgYXJlIGFsc28gNCBxdWFkcmFudC1saWtlIGxvY2F0aW9ucyAobGVmdCB0byByaWdodCBpbnN0ZWFkIG9mIGNsb2Nrd2lzZSkgcmVzZXJ2ZWQgZm9yIGNoYXJ0IG92ZXJsYXlzXG5cdFx0Ly8gVGhlc2UgbG9jYXRpb25zIGFyZSBzaW5nbGUtYm94IGxvY2F0aW9ucyBvbmx5LCB3aGVuIHRyeWluZyB0byByZWdpc3RlciBhIGNoYXJ0QXJlYSBsb2NhdGlvbiB0aGF0IGlzIGFscmVhZHkgdGFrZW4sXG5cdFx0Ly8gYW4gZXJyb3Igd2lsbCBiZSB0aHJvd24uXG5cdFx0Ly9cblx0XHQvLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcblx0XHQvLyB8ICAgICAgICAgICAgICAgICAgVDEgKEZ1bGwgV2lkdGgpICAgICAgICAgICAgICAgICAgIHxcblx0XHQvLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcblx0XHQvLyB8ICAgIHwgICAgfCAgICAgICAgICAgICAgICAgVDIgICAgICAgICAgICAgICAgICB8ICAgIHxcblx0XHQvLyB8ICAgIHwtLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLXxcblx0XHQvLyB8ICAgIHwgICAgfCBDMSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDMiB8ICAgIHxcblx0XHQvLyB8ICAgIHwgICAgfC0tLS18ICAgICAgICAgICAgICAgICAgICAgICAgICAgfC0tLS18ICAgIHxcblx0XHQvLyB8ICAgIHwgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHxcblx0XHQvLyB8IEwxIHwgTDIgfCAgICAgICAgICAgQ2hhcnRBcmVhIChDMCkgICAgICAgICAgICB8IFIxIHxcblx0XHQvLyB8ICAgIHwgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHxcblx0XHQvLyB8ICAgIHwgICAgfC0tLS18ICAgICAgICAgICAgICAgICAgICAgICAgICAgfC0tLS18ICAgIHxcblx0XHQvLyB8ICAgIHwgICAgfCBDMyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDNCB8ICAgIHxcblx0XHQvLyB8ICAgIHwtLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLXxcblx0XHQvLyB8ICAgIHwgICAgfCAgICAgICAgICAgICAgICAgQjEgICAgICAgICAgICAgICAgICB8ICAgIHxcblx0XHQvLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcblx0XHQvLyB8ICAgICAgICAgICAgICAgICAgQjIgKEZ1bGwgV2lkdGgpICAgICAgICAgICAgICAgICAgIHxcblx0XHQvLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcblx0XHQvL1xuXHRcdC8vIFdoYXQgd2UgZG8gdG8gZmluZCB0aGUgYmVzdCBzaXppbmcsIHdlIGRvIHRoZSBmb2xsb3dpbmdcblx0XHQvLyAxLiBEZXRlcm1pbmUgdGhlIG1pbmltdW0gc2l6ZSBvZiB0aGUgY2hhcnQgYXJlYS5cblx0XHQvLyAyLiBTcGxpdCB0aGUgcmVtYWluaW5nIHdpZHRoIGVxdWFsbHkgYmV0d2VlbiBlYWNoIHZlcnRpY2FsIGF4aXNcblx0XHQvLyAzLiBTcGxpdCB0aGUgcmVtYWluaW5nIGhlaWdodCBlcXVhbGx5IGJldHdlZW4gZWFjaCBob3Jpem9udGFsIGF4aXNcblx0XHQvLyA0LiBHaXZlIGVhY2ggbGF5b3V0IHRoZSBtYXhpbXVtIHNpemUgaXQgY2FuIGJlLiBUaGUgbGF5b3V0IHdpbGwgcmV0dXJuIGl0J3MgbWluaW11bSBzaXplXG5cdFx0Ly8gNS4gQWRqdXN0IHRoZSBzaXplcyBvZiBlYWNoIGF4aXMgYmFzZWQgb24gaXQncyBtaW5pbXVtIHJlcG9ydGVkIHNpemUuXG5cdFx0Ly8gNi4gUmVmaXQgZWFjaCBheGlzXG5cdFx0Ly8gNy4gUG9zaXRpb24gZWFjaCBheGlzIGluIHRoZSBmaW5hbCBsb2NhdGlvblxuXHRcdC8vIDguIFRlbGwgdGhlIGNoYXJ0IHRoZSBmaW5hbCBsb2NhdGlvbiBvZiB0aGUgY2hhcnQgYXJlYVxuXHRcdC8vIDkuIFRlbGwgYW55IGF4ZXMgdGhhdCBvdmVybGF5IHRoZSBjaGFydCBhcmVhIHRoZSBwb3NpdGlvbnMgb2YgdGhlIGNoYXJ0IGFyZWFcblxuXHRcdC8vIFN0ZXAgMVxuXHRcdHZhciBjaGFydFdpZHRoID0gd2lkdGggLSBsZWZ0UGFkZGluZyAtIHJpZ2h0UGFkZGluZztcblx0XHR2YXIgY2hhcnRIZWlnaHQgPSBoZWlnaHQgLSB0b3BQYWRkaW5nIC0gYm90dG9tUGFkZGluZztcblx0XHR2YXIgY2hhcnRBcmVhV2lkdGggPSBjaGFydFdpZHRoIC8gMjsgLy8gbWluIDUwJVxuXG5cdFx0Ly8gU3RlcCAyXG5cdFx0dmFyIHZlcnRpY2FsQm94V2lkdGggPSAod2lkdGggLSBjaGFydEFyZWFXaWR0aCkgLyB2ZXJ0aWNhbEJveGVzLmxlbmd0aDtcblxuXHRcdC8vIFN0ZXAgM1xuXHRcdC8vIFRPRE8gcmUtbGltaXQgaG9yaXpvbnRhbCBheGlzIGhlaWdodCAodGhpcyBsaW1pdCBoYXMgYWZmZWN0ZWQgb25seSBwYWRkaW5nIGNhbGN1bGF0aW9uIHNpbmNlIFBSIDE4MzcpXG5cdFx0Ly8gdmFyIGhvcml6b250YWxCb3hIZWlnaHQgPSAoaGVpZ2h0IC0gY2hhcnRBcmVhSGVpZ2h0KSAvIGhvcml6b250YWxCb3hlcy5sZW5ndGg7XG5cblx0XHQvLyBTdGVwIDRcblx0XHR2YXIgbWF4Q2hhcnRBcmVhV2lkdGggPSBjaGFydFdpZHRoO1xuXHRcdHZhciBtYXhDaGFydEFyZWFIZWlnaHQgPSBjaGFydEhlaWdodDtcblx0XHR2YXIgb3V0ZXJCb3hTaXplcyA9IHt0b3A6IHRvcFBhZGRpbmcsIGxlZnQ6IGxlZnRQYWRkaW5nLCBib3R0b206IGJvdHRvbVBhZGRpbmcsIHJpZ2h0OiByaWdodFBhZGRpbmd9O1xuXHRcdHZhciBtaW5Cb3hTaXplcyA9IFtdO1xuXHRcdHZhciBtYXhQYWRkaW5nO1xuXG5cdFx0ZnVuY3Rpb24gZ2V0TWluaW11bUJveFNpemUoYm94KSB7XG5cdFx0XHR2YXIgbWluU2l6ZTtcblx0XHRcdHZhciBpc0hvcml6b250YWwgPSBib3guaXNIb3Jpem9udGFsKCk7XG5cblx0XHRcdGlmIChpc0hvcml6b250YWwpIHtcblx0XHRcdFx0bWluU2l6ZSA9IGJveC51cGRhdGUoYm94LmZ1bGxXaWR0aCA/IGNoYXJ0V2lkdGggOiBtYXhDaGFydEFyZWFXaWR0aCwgY2hhcnRIZWlnaHQgLyAyKTtcblx0XHRcdFx0bWF4Q2hhcnRBcmVhSGVpZ2h0IC09IG1pblNpemUuaGVpZ2h0O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWluU2l6ZSA9IGJveC51cGRhdGUodmVydGljYWxCb3hXaWR0aCwgbWF4Q2hhcnRBcmVhSGVpZ2h0KTtcblx0XHRcdFx0bWF4Q2hhcnRBcmVhV2lkdGggLT0gbWluU2l6ZS53aWR0aDtcblx0XHRcdH1cblxuXHRcdFx0bWluQm94U2l6ZXMucHVzaCh7XG5cdFx0XHRcdGhvcml6b250YWw6IGlzSG9yaXpvbnRhbCxcblx0XHRcdFx0d2lkdGg6IG1pblNpemUud2lkdGgsXG5cdFx0XHRcdGJveDogYm94LFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aGVscGVycyQxLmVhY2gob3V0ZXJCb3hlcywgZ2V0TWluaW11bUJveFNpemUpO1xuXG5cdFx0Ly8gSWYgYSBob3Jpem9udGFsIGJveCBoYXMgcGFkZGluZywgd2UgbW92ZSB0aGUgbGVmdCBib3hlcyBvdmVyIHRvIGF2b2lkIHVnbHkgY2hhcnRzIChzZWUgaXNzdWUgIzI0NzgpXG5cdFx0bWF4UGFkZGluZyA9IGZpbmRNYXhQYWRkaW5nKG91dGVyQm94ZXMpO1xuXG5cdFx0Ly8gQXQgdGhpcyBwb2ludCwgbWF4Q2hhcnRBcmVhSGVpZ2h0IGFuZCBtYXhDaGFydEFyZWFXaWR0aCBhcmUgdGhlIHNpemUgdGhlIGNoYXJ0IGFyZWEgY291bGRcblx0XHQvLyBiZSBpZiB0aGUgYXhlcyBhcmUgZHJhd24gYXQgdGhlaXIgbWluaW11bSBzaXplcy5cblx0XHQvLyBTdGVwcyA1ICYgNlxuXG5cdFx0Ly8gRnVuY3Rpb24gdG8gZml0IGEgYm94XG5cdFx0ZnVuY3Rpb24gZml0Qm94KGJveCkge1xuXHRcdFx0dmFyIG1pbkJveFNpemUgPSBoZWxwZXJzJDEuZmluZE5leHRXaGVyZShtaW5Cb3hTaXplcywgZnVuY3Rpb24obWluQm94KSB7XG5cdFx0XHRcdHJldHVybiBtaW5Cb3guYm94ID09PSBib3g7XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKG1pbkJveFNpemUpIHtcblx0XHRcdFx0aWYgKG1pbkJveFNpemUuaG9yaXpvbnRhbCkge1xuXHRcdFx0XHRcdHZhciBzY2FsZU1hcmdpbiA9IHtcblx0XHRcdFx0XHRcdGxlZnQ6IE1hdGgubWF4KG91dGVyQm94U2l6ZXMubGVmdCwgbWF4UGFkZGluZy5sZWZ0KSxcblx0XHRcdFx0XHRcdHJpZ2h0OiBNYXRoLm1heChvdXRlckJveFNpemVzLnJpZ2h0LCBtYXhQYWRkaW5nLnJpZ2h0KSxcblx0XHRcdFx0XHRcdHRvcDogMCxcblx0XHRcdFx0XHRcdGJvdHRvbTogMFxuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHQvLyBEb24ndCB1c2UgbWluIHNpemUgaGVyZSBiZWNhdXNlIG9mIGxhYmVsIHJvdGF0aW9uLiBXaGVuIHRoZSBsYWJlbHMgYXJlIHJvdGF0ZWQsIHRoZWlyIHJvdGF0aW9uIGhpZ2hseSBkZXBlbmRzXG5cdFx0XHRcdFx0Ly8gb24gdGhlIG1hcmdpbi4gU29tZXRpbWVzIHRoZXkgbmVlZCB0byBpbmNyZWFzZSBpbiBzaXplIHNsaWdodGx5XG5cdFx0XHRcdFx0Ym94LnVwZGF0ZShib3guZnVsbFdpZHRoID8gY2hhcnRXaWR0aCA6IG1heENoYXJ0QXJlYVdpZHRoLCBjaGFydEhlaWdodCAvIDIsIHNjYWxlTWFyZ2luKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRib3gudXBkYXRlKG1pbkJveFNpemUud2lkdGgsIG1heENoYXJ0QXJlYUhlaWdodCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBVcGRhdGUsIGFuZCBjYWxjdWxhdGUgdGhlIGxlZnQgYW5kIHJpZ2h0IG1hcmdpbnMgZm9yIHRoZSBob3Jpem9udGFsIGJveGVzXG5cdFx0aGVscGVycyQxLmVhY2godmVydGljYWxCb3hlcywgZml0Qm94KTtcblx0XHRhZGRTaXplQnlQb3NpdGlvbih2ZXJ0aWNhbEJveGVzLCBvdXRlckJveFNpemVzKTtcblxuXHRcdC8vIFNldCB0aGUgTGVmdCBhbmQgUmlnaHQgbWFyZ2lucyBmb3IgdGhlIGhvcml6b250YWwgYm94ZXNcblx0XHRoZWxwZXJzJDEuZWFjaChob3Jpem9udGFsQm94ZXMsIGZpdEJveCk7XG5cdFx0YWRkU2l6ZUJ5UG9zaXRpb24oaG9yaXpvbnRhbEJveGVzLCBvdXRlckJveFNpemVzKTtcblxuXHRcdGZ1bmN0aW9uIGZpbmFsRml0VmVydGljYWxCb3goYm94KSB7XG5cdFx0XHR2YXIgbWluQm94U2l6ZSA9IGhlbHBlcnMkMS5maW5kTmV4dFdoZXJlKG1pbkJveFNpemVzLCBmdW5jdGlvbihtaW5TaXplKSB7XG5cdFx0XHRcdHJldHVybiBtaW5TaXplLmJveCA9PT0gYm94O1xuXHRcdFx0fSk7XG5cblx0XHRcdHZhciBzY2FsZU1hcmdpbiA9IHtcblx0XHRcdFx0bGVmdDogMCxcblx0XHRcdFx0cmlnaHQ6IDAsXG5cdFx0XHRcdHRvcDogb3V0ZXJCb3hTaXplcy50b3AsXG5cdFx0XHRcdGJvdHRvbTogb3V0ZXJCb3hTaXplcy5ib3R0b21cblx0XHRcdH07XG5cblx0XHRcdGlmIChtaW5Cb3hTaXplKSB7XG5cdFx0XHRcdGJveC51cGRhdGUobWluQm94U2l6ZS53aWR0aCwgbWF4Q2hhcnRBcmVhSGVpZ2h0LCBzY2FsZU1hcmdpbik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gTGV0IHRoZSBsZWZ0IGxheW91dCBrbm93IHRoZSBmaW5hbCBtYXJnaW5cblx0XHRoZWxwZXJzJDEuZWFjaCh2ZXJ0aWNhbEJveGVzLCBmaW5hbEZpdFZlcnRpY2FsQm94KTtcblxuXHRcdC8vIFJlY2FsY3VsYXRlIGJlY2F1c2UgdGhlIHNpemUgb2YgZWFjaCBsYXlvdXQgbWlnaHQgaGF2ZSBjaGFuZ2VkIHNsaWdodGx5IGR1ZSB0byB0aGUgbWFyZ2lucyAobGFiZWwgcm90YXRpb24gZm9yIGluc3RhbmNlKVxuXHRcdG91dGVyQm94U2l6ZXMgPSB7dG9wOiB0b3BQYWRkaW5nLCBsZWZ0OiBsZWZ0UGFkZGluZywgYm90dG9tOiBib3R0b21QYWRkaW5nLCByaWdodDogcmlnaHRQYWRkaW5nfTtcblx0XHRhZGRTaXplQnlQb3NpdGlvbihvdXRlckJveGVzLCBvdXRlckJveFNpemVzKTtcblxuXHRcdC8vIFdlIG1heSBiZSBhZGRpbmcgc29tZSBwYWRkaW5nIHRvIGFjY291bnQgZm9yIHJvdGF0ZWQgeCBheGlzIGxhYmVsc1xuXHRcdHZhciBsZWZ0UGFkZGluZ0FkZGl0aW9uID0gTWF0aC5tYXgobWF4UGFkZGluZy5sZWZ0IC0gb3V0ZXJCb3hTaXplcy5sZWZ0LCAwKTtcblx0XHRvdXRlckJveFNpemVzLmxlZnQgKz0gbGVmdFBhZGRpbmdBZGRpdGlvbjtcblx0XHRvdXRlckJveFNpemVzLnJpZ2h0ICs9IE1hdGgubWF4KG1heFBhZGRpbmcucmlnaHQgLSBvdXRlckJveFNpemVzLnJpZ2h0LCAwKTtcblxuXHRcdHZhciB0b3BQYWRkaW5nQWRkaXRpb24gPSBNYXRoLm1heChtYXhQYWRkaW5nLnRvcCAtIG91dGVyQm94U2l6ZXMudG9wLCAwKTtcblx0XHRvdXRlckJveFNpemVzLnRvcCArPSB0b3BQYWRkaW5nQWRkaXRpb247XG5cdFx0b3V0ZXJCb3hTaXplcy5ib3R0b20gKz0gTWF0aC5tYXgobWF4UGFkZGluZy5ib3R0b20gLSBvdXRlckJveFNpemVzLmJvdHRvbSwgMCk7XG5cblx0XHQvLyBGaWd1cmUgb3V0IGlmIG91ciBjaGFydCBhcmVhIGNoYW5nZWQuIFRoaXMgd291bGQgb2NjdXIgaWYgdGhlIGRhdGFzZXQgbGF5b3V0IGxhYmVsIHJvdGF0aW9uXG5cdFx0Ly8gY2hhbmdlZCBkdWUgdG8gdGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBtYXJnaW5zIGluIHN0ZXAgNi4gU2luY2Ugd2UgY2FuIG9ubHkgZ2V0IGJpZ2dlciwgdGhpcyBpcyBzYWZlIHRvIGRvXG5cdFx0Ly8gd2l0aG91dCBjYWxsaW5nIGBmaXRgIGFnYWluXG5cdFx0dmFyIG5ld01heENoYXJ0QXJlYUhlaWdodCA9IGhlaWdodCAtIG91dGVyQm94U2l6ZXMudG9wIC0gb3V0ZXJCb3hTaXplcy5ib3R0b207XG5cdFx0dmFyIG5ld01heENoYXJ0QXJlYVdpZHRoID0gd2lkdGggLSBvdXRlckJveFNpemVzLmxlZnQgLSBvdXRlckJveFNpemVzLnJpZ2h0O1xuXG5cdFx0aWYgKG5ld01heENoYXJ0QXJlYVdpZHRoICE9PSBtYXhDaGFydEFyZWFXaWR0aCB8fCBuZXdNYXhDaGFydEFyZWFIZWlnaHQgIT09IG1heENoYXJ0QXJlYUhlaWdodCkge1xuXHRcdFx0aGVscGVycyQxLmVhY2godmVydGljYWxCb3hlcywgZnVuY3Rpb24oYm94KSB7XG5cdFx0XHRcdGJveC5oZWlnaHQgPSBuZXdNYXhDaGFydEFyZWFIZWlnaHQ7XG5cdFx0XHR9KTtcblxuXHRcdFx0aGVscGVycyQxLmVhY2goaG9yaXpvbnRhbEJveGVzLCBmdW5jdGlvbihib3gpIHtcblx0XHRcdFx0aWYgKCFib3guZnVsbFdpZHRoKSB7XG5cdFx0XHRcdFx0Ym94LndpZHRoID0gbmV3TWF4Q2hhcnRBcmVhV2lkdGg7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRtYXhDaGFydEFyZWFIZWlnaHQgPSBuZXdNYXhDaGFydEFyZWFIZWlnaHQ7XG5cdFx0XHRtYXhDaGFydEFyZWFXaWR0aCA9IG5ld01heENoYXJ0QXJlYVdpZHRoO1xuXHRcdH1cblxuXHRcdC8vIFN0ZXAgNyAtIFBvc2l0aW9uIHRoZSBib3hlc1xuXHRcdHZhciBsZWZ0ID0gbGVmdFBhZGRpbmcgKyBsZWZ0UGFkZGluZ0FkZGl0aW9uO1xuXHRcdHZhciB0b3AgPSB0b3BQYWRkaW5nICsgdG9wUGFkZGluZ0FkZGl0aW9uO1xuXG5cdFx0ZnVuY3Rpb24gcGxhY2VCb3goYm94KSB7XG5cdFx0XHRpZiAoYm94LmlzSG9yaXpvbnRhbCgpKSB7XG5cdFx0XHRcdGJveC5sZWZ0ID0gYm94LmZ1bGxXaWR0aCA/IGxlZnRQYWRkaW5nIDogb3V0ZXJCb3hTaXplcy5sZWZ0O1xuXHRcdFx0XHRib3gucmlnaHQgPSBib3guZnVsbFdpZHRoID8gd2lkdGggLSByaWdodFBhZGRpbmcgOiBvdXRlckJveFNpemVzLmxlZnQgKyBtYXhDaGFydEFyZWFXaWR0aDtcblx0XHRcdFx0Ym94LnRvcCA9IHRvcDtcblx0XHRcdFx0Ym94LmJvdHRvbSA9IHRvcCArIGJveC5oZWlnaHQ7XG5cblx0XHRcdFx0Ly8gTW92ZSB0byBuZXh0IHBvaW50XG5cdFx0XHRcdHRvcCA9IGJveC5ib3R0b207XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ym94LmxlZnQgPSBsZWZ0O1xuXHRcdFx0XHRib3gucmlnaHQgPSBsZWZ0ICsgYm94LndpZHRoO1xuXHRcdFx0XHRib3gudG9wID0gb3V0ZXJCb3hTaXplcy50b3A7XG5cdFx0XHRcdGJveC5ib3R0b20gPSBvdXRlckJveFNpemVzLnRvcCArIG1heENoYXJ0QXJlYUhlaWdodDtcblxuXHRcdFx0XHQvLyBNb3ZlIHRvIG5leHQgcG9pbnRcblx0XHRcdFx0bGVmdCA9IGJveC5yaWdodDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoZWxwZXJzJDEuZWFjaChsZWZ0Qm94ZXMuY29uY2F0KHRvcEJveGVzKSwgcGxhY2VCb3gpO1xuXG5cdFx0Ly8gQWNjb3VudCBmb3IgY2hhcnQgd2lkdGggYW5kIGhlaWdodFxuXHRcdGxlZnQgKz0gbWF4Q2hhcnRBcmVhV2lkdGg7XG5cdFx0dG9wICs9IG1heENoYXJ0QXJlYUhlaWdodDtcblxuXHRcdGhlbHBlcnMkMS5lYWNoKHJpZ2h0Qm94ZXMsIHBsYWNlQm94KTtcblx0XHRoZWxwZXJzJDEuZWFjaChib3R0b21Cb3hlcywgcGxhY2VCb3gpO1xuXG5cdFx0Ly8gU3RlcCA4XG5cdFx0Y2hhcnQuY2hhcnRBcmVhID0ge1xuXHRcdFx0bGVmdDogb3V0ZXJCb3hTaXplcy5sZWZ0LFxuXHRcdFx0dG9wOiBvdXRlckJveFNpemVzLnRvcCxcblx0XHRcdHJpZ2h0OiBvdXRlckJveFNpemVzLmxlZnQgKyBtYXhDaGFydEFyZWFXaWR0aCxcblx0XHRcdGJvdHRvbTogb3V0ZXJCb3hTaXplcy50b3AgKyBtYXhDaGFydEFyZWFIZWlnaHRcblx0XHR9O1xuXG5cdFx0Ly8gU3RlcCA5XG5cdFx0aGVscGVycyQxLmVhY2goY2hhcnRBcmVhQm94ZXMsIGZ1bmN0aW9uKGJveCkge1xuXHRcdFx0Ym94LmxlZnQgPSBjaGFydC5jaGFydEFyZWEubGVmdDtcblx0XHRcdGJveC50b3AgPSBjaGFydC5jaGFydEFyZWEudG9wO1xuXHRcdFx0Ym94LnJpZ2h0ID0gY2hhcnQuY2hhcnRBcmVhLnJpZ2h0O1xuXHRcdFx0Ym94LmJvdHRvbSA9IGNoYXJ0LmNoYXJ0QXJlYS5ib3R0b207XG5cblx0XHRcdGJveC51cGRhdGUobWF4Q2hhcnRBcmVhV2lkdGgsIG1heENoYXJ0QXJlYUhlaWdodCk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbi8qKlxuICogUGxhdGZvcm0gZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gKG1pbmltYWwpLlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9wdWxsLzQ1OTEjaXNzdWVjb21tZW50LTMxOTU3NTkzOVxuICovXG5cbnZhciBwbGF0Zm9ybV9iYXNpYyA9IHtcblx0YWNxdWlyZUNvbnRleHQ6IGZ1bmN0aW9uKGl0ZW0pIHtcblx0XHRpZiAoaXRlbSAmJiBpdGVtLmNhbnZhcykge1xuXHRcdFx0Ly8gU3VwcG9ydCBmb3IgYW55IG9iamVjdCBhc3NvY2lhdGVkIHRvIGEgY2FudmFzIChpbmNsdWRpbmcgYSBjb250ZXh0MmQpXG5cdFx0XHRpdGVtID0gaXRlbS5jYW52YXM7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGl0ZW0gJiYgaXRlbS5nZXRDb250ZXh0KCcyZCcpIHx8IG51bGw7XG5cdH1cbn07XG5cbnZhciBwbGF0Zm9ybV9kb20gPSBcIi8qXFxuICogRE9NIGVsZW1lbnQgcmVuZGVyaW5nIGRldGVjdGlvblxcbiAqIGh0dHBzOi8vZGF2aWR3YWxzaC5uYW1lL2RldGVjdC1ub2RlLWluc2VydGlvblxcbiAqL1xcbkBrZXlmcmFtZXMgY2hhcnRqcy1yZW5kZXItYW5pbWF0aW9uIHtcXG5cXHRmcm9tIHsgb3BhY2l0eTogMC45OTsgfVxcblxcdHRvIHsgb3BhY2l0eTogMTsgfVxcbn1cXG5cXG4uY2hhcnRqcy1yZW5kZXItbW9uaXRvciB7XFxuXFx0YW5pbWF0aW9uOiBjaGFydGpzLXJlbmRlci1hbmltYXRpb24gMC4wMDFzO1xcbn1cXG5cXG4vKlxcbiAqIERPTSBlbGVtZW50IHJlc2l6aW5nIGRldGVjdGlvblxcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJjai9jc3MtZWxlbWVudC1xdWVyaWVzXFxuICovXFxuLmNoYXJ0anMtc2l6ZS1tb25pdG9yLFxcbi5jaGFydGpzLXNpemUtbW9uaXRvci1leHBhbmQsXFxuLmNoYXJ0anMtc2l6ZS1tb25pdG9yLXNocmluayB7XFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcblxcdGRpcmVjdGlvbjogbHRyO1xcblxcdGxlZnQ6IDA7XFxuXFx0dG9wOiAwO1xcblxcdHJpZ2h0OiAwO1xcblxcdGJvdHRvbTogMDtcXG5cXHRvdmVyZmxvdzogaGlkZGVuO1xcblxcdHBvaW50ZXItZXZlbnRzOiBub25lO1xcblxcdHZpc2liaWxpdHk6IGhpZGRlbjtcXG5cXHR6LWluZGV4OiAtMTtcXG59XFxuXFxuLmNoYXJ0anMtc2l6ZS1tb25pdG9yLWV4cGFuZCA+IGRpdiB7XFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcblxcdHdpZHRoOiAxMDAwMDAwcHg7XFxuXFx0aGVpZ2h0OiAxMDAwMDAwcHg7XFxuXFx0bGVmdDogMDtcXG5cXHR0b3A6IDA7XFxufVxcblxcbi5jaGFydGpzLXNpemUtbW9uaXRvci1zaHJpbmsgPiBkaXYge1xcblxcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG5cXHR3aWR0aDogMjAwJTtcXG5cXHRoZWlnaHQ6IDIwMCU7XFxuXFx0bGVmdDogMDtcXG5cXHR0b3A6IDA7XFxufVxcblwiO1xuXG52YXIgcGxhdGZvcm1fZG9tJDEgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG5kZWZhdWx0OiBwbGF0Zm9ybV9kb21cbn0pO1xuXG5mdW5jdGlvbiBnZXRDanNFeHBvcnRGcm9tTmFtZXNwYWNlIChuKSB7XG5cdHJldHVybiBuICYmIG4uZGVmYXVsdCB8fCBuO1xufVxuXG52YXIgc3R5bGVzaGVldCA9IGdldENqc0V4cG9ydEZyb21OYW1lc3BhY2UocGxhdGZvcm1fZG9tJDEpO1xuXG52YXIgRVhQQU5ET19LRVkgPSAnJGNoYXJ0anMnO1xudmFyIENTU19QUkVGSVggPSAnY2hhcnRqcy0nO1xudmFyIENTU19TSVpFX01PTklUT1IgPSBDU1NfUFJFRklYICsgJ3NpemUtbW9uaXRvcic7XG52YXIgQ1NTX1JFTkRFUl9NT05JVE9SID0gQ1NTX1BSRUZJWCArICdyZW5kZXItbW9uaXRvcic7XG52YXIgQ1NTX1JFTkRFUl9BTklNQVRJT04gPSBDU1NfUFJFRklYICsgJ3JlbmRlci1hbmltYXRpb24nO1xudmFyIEFOSU1BVElPTl9TVEFSVF9FVkVOVFMgPSBbJ2FuaW1hdGlvbnN0YXJ0JywgJ3dlYmtpdEFuaW1hdGlvblN0YXJ0J107XG5cbi8qKlxuICogRE9NIGV2ZW50IHR5cGVzIC0+IENoYXJ0LmpzIGV2ZW50IHR5cGVzLlxuICogTm90ZTogb25seSBldmVudHMgd2l0aCBkaWZmZXJlbnQgdHlwZXMgYXJlIG1hcHBlZC5cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzXG4gKi9cbnZhciBFVkVOVF9UWVBFUyA9IHtcblx0dG91Y2hzdGFydDogJ21vdXNlZG93bicsXG5cdHRvdWNobW92ZTogJ21vdXNlbW92ZScsXG5cdHRvdWNoZW5kOiAnbW91c2V1cCcsXG5cdHBvaW50ZXJlbnRlcjogJ21vdXNlZW50ZXInLFxuXHRwb2ludGVyZG93bjogJ21vdXNlZG93bicsXG5cdHBvaW50ZXJtb3ZlOiAnbW91c2Vtb3ZlJyxcblx0cG9pbnRlcnVwOiAnbW91c2V1cCcsXG5cdHBvaW50ZXJsZWF2ZTogJ21vdXNlb3V0Jyxcblx0cG9pbnRlcm91dDogJ21vdXNlb3V0J1xufTtcblxuLyoqXG4gKiBUaGUgXCJ1c2VkXCIgc2l6ZSBpcyB0aGUgZmluYWwgdmFsdWUgb2YgYSBkaW1lbnNpb24gcHJvcGVydHkgYWZ0ZXIgYWxsIGNhbGN1bGF0aW9ucyBoYXZlXG4gKiBiZWVuIHBlcmZvcm1lZC4gVGhpcyBtZXRob2QgdXNlcyB0aGUgY29tcHV0ZWQgc3R5bGUgb2YgYGVsZW1lbnRgIGJ1dCByZXR1cm5zIHVuZGVmaW5lZFxuICogaWYgdGhlIGNvbXB1dGVkIHN0eWxlIGlzIG5vdCBleHByZXNzZWQgaW4gcGl4ZWxzLiBUaGF0IGNhbiBoYXBwZW4gaW4gc29tZSBjYXNlcyB3aGVyZVxuICogYGVsZW1lbnRgIGhhcyBhIHNpemUgcmVsYXRpdmUgdG8gaXRzIHBhcmVudCBhbmQgdGhpcyBsYXN0IG9uZSBpcyBub3QgeWV0IGRpc3BsYXllZCxcbiAqIGZvciBleGFtcGxlIGJlY2F1c2Ugb2YgYGRpc3BsYXk6IG5vbmVgIG9uIGEgcGFyZW50IG5vZGUuXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy91c2VkX3ZhbHVlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBTaXplIGluIHBpeGVscyBvciB1bmRlZmluZWQgaWYgdW5rbm93bi5cbiAqL1xuZnVuY3Rpb24gcmVhZFVzZWRTaXplKGVsZW1lbnQsIHByb3BlcnR5KSB7XG5cdHZhciB2YWx1ZSA9IGhlbHBlcnMkMS5nZXRTdHlsZShlbGVtZW50LCBwcm9wZXJ0eSk7XG5cdHZhciBtYXRjaGVzID0gdmFsdWUgJiYgdmFsdWUubWF0Y2goL14oXFxkKykoXFwuXFxkKyk/cHgkLyk7XG5cdHJldHVybiBtYXRjaGVzID8gTnVtYmVyKG1hdGNoZXNbMV0pIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemVzIHRoZSBjYW52YXMgc3R5bGUgYW5kIHJlbmRlciBzaXplIHdpdGhvdXQgbW9kaWZ5aW5nIHRoZSBjYW52YXMgZGlzcGxheSBzaXplLFxuICogc2luY2UgcmVzcG9uc2l2ZW5lc3MgaXMgaGFuZGxlZCBieSB0aGUgY29udHJvbGxlci5yZXNpemUoKSBtZXRob2QuIFRoZSBjb25maWcgaXMgdXNlZFxuICogdG8gZGV0ZXJtaW5lIHRoZSBhc3BlY3QgcmF0aW8gdG8gYXBwbHkgaW4gY2FzZSBubyBleHBsaWNpdCBoZWlnaHQgaGFzIGJlZW4gc3BlY2lmaWVkLlxuICovXG5mdW5jdGlvbiBpbml0Q2FudmFzKGNhbnZhcywgY29uZmlnKSB7XG5cdHZhciBzdHlsZSA9IGNhbnZhcy5zdHlsZTtcblxuXHQvLyBOT1RFKFNCKSBjYW52YXMuZ2V0QXR0cmlidXRlKCd3aWR0aCcpICE9PSBjYW52YXMud2lkdGg6IGluIHRoZSBmaXJzdCBjYXNlIGl0XG5cdC8vIHJldHVybnMgbnVsbCBvciAnJyBpZiBubyBleHBsaWNpdCB2YWx1ZSBoYXMgYmVlbiBzZXQgdG8gdGhlIGNhbnZhcyBhdHRyaWJ1dGUuXG5cdHZhciByZW5kZXJIZWlnaHQgPSBjYW52YXMuZ2V0QXR0cmlidXRlKCdoZWlnaHQnKTtcblx0dmFyIHJlbmRlcldpZHRoID0gY2FudmFzLmdldEF0dHJpYnV0ZSgnd2lkdGgnKTtcblxuXHQvLyBDaGFydC5qcyBtb2RpZmllcyBzb21lIGNhbnZhcyB2YWx1ZXMgdGhhdCB3ZSB3YW50IHRvIHJlc3RvcmUgb24gZGVzdHJveVxuXHRjYW52YXNbRVhQQU5ET19LRVldID0ge1xuXHRcdGluaXRpYWw6IHtcblx0XHRcdGhlaWdodDogcmVuZGVySGVpZ2h0LFxuXHRcdFx0d2lkdGg6IHJlbmRlcldpZHRoLFxuXHRcdFx0c3R5bGU6IHtcblx0XHRcdFx0ZGlzcGxheTogc3R5bGUuZGlzcGxheSxcblx0XHRcdFx0aGVpZ2h0OiBzdHlsZS5oZWlnaHQsXG5cdFx0XHRcdHdpZHRoOiBzdHlsZS53aWR0aFxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHQvLyBGb3JjZSBjYW52YXMgdG8gZGlzcGxheSBhcyBibG9jayB0byBhdm9pZCBleHRyYSBzcGFjZSBjYXVzZWQgYnkgaW5saW5lXG5cdC8vIGVsZW1lbnRzLCB3aGljaCB3b3VsZCBpbnRlcmZlcmUgd2l0aCB0aGUgcmVzcG9uc2l2ZSByZXNpemUgcHJvY2Vzcy5cblx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL2NoYXJ0anMvQ2hhcnQuanMvaXNzdWVzLzI1Mzhcblx0c3R5bGUuZGlzcGxheSA9IHN0eWxlLmRpc3BsYXkgfHwgJ2Jsb2NrJztcblxuXHRpZiAocmVuZGVyV2lkdGggPT09IG51bGwgfHwgcmVuZGVyV2lkdGggPT09ICcnKSB7XG5cdFx0dmFyIGRpc3BsYXlXaWR0aCA9IHJlYWRVc2VkU2l6ZShjYW52YXMsICd3aWR0aCcpO1xuXHRcdGlmIChkaXNwbGF5V2lkdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y2FudmFzLndpZHRoID0gZGlzcGxheVdpZHRoO1xuXHRcdH1cblx0fVxuXG5cdGlmIChyZW5kZXJIZWlnaHQgPT09IG51bGwgfHwgcmVuZGVySGVpZ2h0ID09PSAnJykge1xuXHRcdGlmIChjYW52YXMuc3R5bGUuaGVpZ2h0ID09PSAnJykge1xuXHRcdFx0Ly8gSWYgbm8gZXhwbGljaXQgcmVuZGVyIGhlaWdodCBhbmQgc3R5bGUgaGVpZ2h0LCBsZXQncyBhcHBseSB0aGUgYXNwZWN0IHJhdGlvLFxuXHRcdFx0Ly8gd2hpY2ggb25lIGNhbiBiZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIgYnV0IGFsc28gYnkgY2hhcnRzIGFzIGRlZmF1bHQgb3B0aW9uXG5cdFx0XHQvLyAoaS5lLiBvcHRpb25zLmFzcGVjdFJhdGlvKS4gSWYgbm90IHNwZWNpZmllZCwgdXNlIGNhbnZhcyBhc3BlY3QgcmF0aW8gb2YgMi5cblx0XHRcdGNhbnZhcy5oZWlnaHQgPSBjYW52YXMud2lkdGggLyAoY29uZmlnLm9wdGlvbnMuYXNwZWN0UmF0aW8gfHwgMik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciBkaXNwbGF5SGVpZ2h0ID0gcmVhZFVzZWRTaXplKGNhbnZhcywgJ2hlaWdodCcpO1xuXHRcdFx0aWYgKGRpc3BsYXlXaWR0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNhbnZhcy5oZWlnaHQgPSBkaXNwbGF5SGVpZ2h0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjYW52YXM7XG59XG5cbi8qKlxuICogRGV0ZWN0cyBzdXBwb3J0IGZvciBvcHRpb25zIG9iamVjdCBhcmd1bWVudCBpbiBhZGRFdmVudExpc3RlbmVyLlxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50VGFyZ2V0L2FkZEV2ZW50TGlzdGVuZXIjU2FmZWx5X2RldGVjdGluZ19vcHRpb25fc3VwcG9ydFxuICogQHByaXZhdGVcbiAqL1xudmFyIHN1cHBvcnRzRXZlbnRMaXN0ZW5lck9wdGlvbnMgPSAoZnVuY3Rpb24oKSB7XG5cdHZhciBzdXBwb3J0cyA9IGZhbHNlO1xuXHR0cnkge1xuXHRcdHZhciBvcHRpb25zID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAncGFzc2l2ZScsIHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnZXR0ZXItcmV0dXJuXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRzdXBwb3J0cyA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2UnLCBudWxsLCBvcHRpb25zKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdC8vIGNvbnRpbnVlIHJlZ2FyZGxlc3Mgb2YgZXJyb3Jcblx0fVxuXHRyZXR1cm4gc3VwcG9ydHM7XG59KCkpO1xuXG4vLyBEZWZhdWx0IHBhc3NpdmUgdG8gdHJ1ZSBhcyBleHBlY3RlZCBieSBDaHJvbWUgZm9yICd0b3VjaHN0YXJ0JyBhbmQgJ3RvdWNoZW5kJyBldmVudHMuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9pc3N1ZXMvNDI4N1xudmFyIGV2ZW50TGlzdGVuZXJPcHRpb25zID0gc3VwcG9ydHNFdmVudExpc3RlbmVyT3B0aW9ucyA/IHtwYXNzaXZlOiB0cnVlfSA6IGZhbHNlO1xuXG5mdW5jdGlvbiBhZGRMaXN0ZW5lcihub2RlLCB0eXBlLCBsaXN0ZW5lcikge1xuXHRub2RlLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIGV2ZW50TGlzdGVuZXJPcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIobm9kZSwgdHlwZSwgbGlzdGVuZXIpIHtcblx0bm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBldmVudExpc3RlbmVyT3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUV2ZW50KHR5cGUsIGNoYXJ0LCB4LCB5LCBuYXRpdmVFdmVudCkge1xuXHRyZXR1cm4ge1xuXHRcdHR5cGU6IHR5cGUsXG5cdFx0Y2hhcnQ6IGNoYXJ0LFxuXHRcdG5hdGl2ZTogbmF0aXZlRXZlbnQgfHwgbnVsbCxcblx0XHR4OiB4ICE9PSB1bmRlZmluZWQgPyB4IDogbnVsbCxcblx0XHR5OiB5ICE9PSB1bmRlZmluZWQgPyB5IDogbnVsbCxcblx0fTtcbn1cblxuZnVuY3Rpb24gZnJvbU5hdGl2ZUV2ZW50KGV2ZW50LCBjaGFydCkge1xuXHR2YXIgdHlwZSA9IEVWRU5UX1RZUEVTW2V2ZW50LnR5cGVdIHx8IGV2ZW50LnR5cGU7XG5cdHZhciBwb3MgPSBoZWxwZXJzJDEuZ2V0UmVsYXRpdmVQb3NpdGlvbihldmVudCwgY2hhcnQpO1xuXHRyZXR1cm4gY3JlYXRlRXZlbnQodHlwZSwgY2hhcnQsIHBvcy54LCBwb3MueSwgZXZlbnQpO1xufVxuXG5mdW5jdGlvbiB0aHJvdHRsZWQoZm4sIHRoaXNBcmcpIHtcblx0dmFyIHRpY2tpbmcgPSBmYWxzZTtcblx0dmFyIGFyZ3MgPSBbXTtcblxuXHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdFx0dGhpc0FyZyA9IHRoaXNBcmcgfHwgdGhpcztcblxuXHRcdGlmICghdGlja2luZykge1xuXHRcdFx0dGlja2luZyA9IHRydWU7XG5cdFx0XHRoZWxwZXJzJDEucmVxdWVzdEFuaW1GcmFtZS5jYWxsKHdpbmRvdywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHRpY2tpbmcgPSBmYWxzZTtcblx0XHRcdFx0Zm4uYXBwbHkodGhpc0FyZywgYXJncyk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURpdihjbHMpIHtcblx0dmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdGVsLmNsYXNzTmFtZSA9IGNscyB8fCAnJztcblx0cmV0dXJuIGVsO1xufVxuXG4vLyBJbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vbWFyY2ovY3NzLWVsZW1lbnQtcXVlcmllc1xuZnVuY3Rpb24gY3JlYXRlUmVzaXplcihoYW5kbGVyKSB7XG5cdHZhciBtYXhTaXplID0gMTAwMDAwMDtcblxuXHQvLyBOT1RFKFNCKSBEb24ndCB1c2UgaW5uZXJIVE1MIGJlY2F1c2UgaXQgY291bGQgYmUgY29uc2lkZXJlZCB1bnNhZmUuXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFydGpzL0NoYXJ0LmpzL2lzc3Vlcy81OTAyXG5cdHZhciByZXNpemVyID0gY3JlYXRlRGl2KENTU19TSVpFX01PTklUT1IpO1xuXHR2YXIgZXhwYW5kID0gY3JlYXRlRGl2KENTU19TSVpFX01PTklUT1IgKyAnLWV4cGFuZCcpO1xuXHR2YXIgc2hyaW5rID0gY3JlYXRlRGl2KENTU19TSVpFX01PTklUT1IgKyAnLXNocmluaycpO1xuXG5cdGV4cGFuZC5hcHBlbmRDaGlsZChjcmVhdGVEaXYoKSk7XG5cdHNocmluay5hcHBlbmRDaGlsZChjcmVhdGVEaXYoKSk7XG5cblx0cmVzaXplci5hcHBlbmRDaGlsZChleHBhbmQpO1xuXHRyZXNpemVyLmFwcGVuZENoaWxkKHNocmluayk7XG5cdHJlc2l6ZXIuX3Jlc2V0ID0gZnVuY3Rpb24oKSB7XG5cdFx0ZXhwYW5kLnNjcm9sbExlZnQgPSBtYXhTaXplO1xuXHRcdGV4cGFuZC5zY3JvbGxUb3AgPSBtYXhTaXplO1xuXHRcdHNocmluay5zY3JvbGxMZWZ0ID0gbWF4U2l6ZTtcblx0XHRzaHJpbmsuc2Nyb2xsVG9wID0gbWF4U2l6ZTtcblx0fTtcblxuXHR2YXIgb25TY3JvbGwgPSBmdW5jdGlvbigpIHtcblx0XHRyZXNpemVyLl9yZXNldCgpO1xuXHRcdGhhbmRsZXIoKTtcblx0fTtcblxuXHRhZGRMaXN0ZW5lcihleHBhbmQsICdzY3JvbGwnLCBvblNjcm9sbC5iaW5kKGV4cGFuZCwgJ2V4cGFuZCcpKTtcblx0YWRkTGlzdGVuZXIoc2hyaW5rLCAnc2Nyb2xsJywgb25TY3JvbGwuYmluZChzaHJpbmssICdzaHJpbmsnKSk7XG5cblx0cmV0dXJuIHJlc2l6ZXI7XG59XG5cbi8vIGh0dHBzOi8vZGF2aWR3YWxzaC5uYW1lL2RldGVjdC1ub2RlLWluc2VydGlvblxuZnVuY3Rpb24gd2F0Y2hGb3JSZW5kZXIobm9kZSwgaGFuZGxlcikge1xuXHR2YXIgZXhwYW5kbyA9IG5vZGVbRVhQQU5ET19LRVldIHx8IChub2RlW0VYUEFORE9fS0VZXSA9IHt9KTtcblx0dmFyIHByb3h5ID0gZXhwYW5kby5yZW5kZXJQcm94eSA9IGZ1bmN0aW9uKGUpIHtcblx0XHRpZiAoZS5hbmltYXRpb25OYW1lID09PSBDU1NfUkVOREVSX0FOSU1BVElPTikge1xuXHRcdFx0aGFuZGxlcigpO1xuXHRcdH1cblx0fTtcblxuXHRoZWxwZXJzJDEuZWFjaChBTklNQVRJT05fU1RBUlRfRVZFTlRTLCBmdW5jdGlvbih0eXBlKSB7XG5cdFx0YWRkTGlzdGVuZXIobm9kZSwgdHlwZSwgcHJveHkpO1xuXHR9KTtcblxuXHQvLyAjNDczNzogQ2hyb21lIG1pZ2h0IHNraXAgdGhlIENTUyBhbmltYXRpb24gd2hlbiB0aGUgQ1NTX1JFTkRFUl9NT05JVE9SIGNsYXNzXG5cdC8vIGlzIHJlbW92ZWQgdGhlbiBhZGRlZCBiYWNrIGltbWVkaWF0ZWx5IChzYW1lIGFuaW1hdGlvbiBmcmFtZT8pLiBBY2Nlc3NpbmcgdGhlXG5cdC8vIGBvZmZzZXRQYXJlbnRgIHByb3BlcnR5IHdpbGwgZm9yY2UgYSByZWZsb3cgYW5kIHJlLWV2YWx1YXRlIHRoZSBDU1MgYW5pbWF0aW9uLlxuXHQvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9wYXVsaXJpc2gvNWQ1MmZiMDgxYjM1NzBjODFlM2EjYm94LW1ldHJpY3Ncblx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL2NoYXJ0anMvQ2hhcnQuanMvaXNzdWVzLzQ3Mzdcblx0ZXhwYW5kby5yZWZsb3cgPSAhIW5vZGUub2Zmc2V0UGFyZW50O1xuXG5cdG5vZGUuY2xhc3NMaXN0LmFkZChDU1NfUkVOREVSX01PTklUT1IpO1xufVxuXG5mdW5jdGlvbiB1bndhdGNoRm9yUmVuZGVyKG5vZGUpIHtcblx0dmFyIGV4cGFuZG8gPSBub2RlW0VYUEFORE9fS0VZXSB8fCB7fTtcblx0dmFyIHByb3h5ID0gZXhwYW5kby5yZW5kZXJQcm94eTtcblxuXHRpZiAocHJveHkpIHtcblx0XHRoZWxwZXJzJDEuZWFjaChBTklNQVRJT05fU1RBUlRfRVZFTlRTLCBmdW5jdGlvbih0eXBlKSB7XG5cdFx0XHRyZW1vdmVMaXN0ZW5lcihub2RlLCB0eXBlLCBwcm94eSk7XG5cdFx0fSk7XG5cblx0XHRkZWxldGUgZXhwYW5kby5yZW5kZXJQcm94eTtcblx0fVxuXG5cdG5vZGUuY2xhc3NMaXN0LnJlbW92ZShDU1NfUkVOREVSX01PTklUT1IpO1xufVxuXG5mdW5jdGlvbiBhZGRSZXNpemVMaXN0ZW5lcihub2RlLCBsaXN0ZW5lciwgY2hhcnQpIHtcblx0dmFyIGV4cGFuZG8gPSBub2RlW0VYUEFORE9fS0VZXSB8fCAobm9kZVtFWFBBTkRPX0tFWV0gPSB7fSk7XG5cblx0Ly8gTGV0J3Mga2VlcCB0cmFjayBvZiB0aGlzIGFkZGVkIHJlc2l6ZXIgYW5kIHRodXMgYXZvaWQgRE9NIHF1ZXJ5IHdoZW4gcmVtb3ZpbmcgaXQuXG5cdHZhciByZXNpemVyID0gZXhwYW5kby5yZXNpemVyID0gY3JlYXRlUmVzaXplcih0aHJvdHRsZWQoZnVuY3Rpb24oKSB7XG5cdFx0aWYgKGV4cGFuZG8ucmVzaXplcikge1xuXHRcdFx0dmFyIGNvbnRhaW5lciA9IGNoYXJ0Lm9wdGlvbnMubWFpbnRhaW5Bc3BlY3RSYXRpbyAmJiBub2RlLnBhcmVudE5vZGU7XG5cdFx0XHR2YXIgdyA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci5jbGllbnRXaWR0aCA6IDA7XG5cdFx0XHRsaXN0ZW5lcihjcmVhdGVFdmVudCgncmVzaXplJywgY2hhcnQpKTtcblx0XHRcdGlmIChjb250YWluZXIgJiYgY29udGFpbmVyLmNsaWVudFdpZHRoIDwgdyAmJiBjaGFydC5jYW52YXMpIHtcblx0XHRcdFx0Ly8gSWYgdGhlIGNvbnRhaW5lciBzaXplIHNocmFuayBkdXJpbmcgY2hhcnQgcmVzaXplLCBsZXQncyBhc3N1bWVcblx0XHRcdFx0Ly8gc2Nyb2xsYmFyIGFwcGVhcmVkLiBTbyB3ZSByZXNpemUgYWdhaW4gd2l0aCB0aGUgc2Nyb2xsYmFyIHZpc2libGUgLVxuXHRcdFx0XHQvLyBlZmZlY3RpdmVseSBtYWtpbmcgY2hhcnQgc21hbGxlciBhbmQgdGhlIHNjcm9sbGJhciBoaWRkZW4gYWdhaW4uXG5cdFx0XHRcdC8vIEJlY2F1c2Ugd2UgYXJlIGluc2lkZSBgdGhyb3R0bGVkYCwgYW5kIGN1cnJlbnRseSBgdGlja2luZ2AsIHNjcm9sbFxuXHRcdFx0XHQvLyBldmVudHMgYXJlIGlnbm9yZWQgZHVyaW5nIHRoaXMgd2hvbGUgMiByZXNpemUgcHJvY2Vzcy5cblx0XHRcdFx0Ly8gSWYgd2UgYXNzdW1lZCB3cm9uZyBhbmQgc29tZXRoaW5nIGVsc2UgaGFwcGVuZWQsIHdlIGFyZSByZXNpemluZ1xuXHRcdFx0XHQvLyB0d2ljZSBpbiBhIGZyYW1lIChwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaXNzdWUpXG5cdFx0XHRcdGxpc3RlbmVyKGNyZWF0ZUV2ZW50KCdyZXNpemUnLCBjaGFydCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSkpO1xuXG5cdC8vIFRoZSByZXNpemVyIG5lZWRzIHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBub2RlIHBhcmVudCwgc28gd2UgZmlyc3QgbmVlZCB0byBiZVxuXHQvLyBzdXJlIHRoYXQgYG5vZGVgIGlzIGF0dGFjaGVkIHRvIHRoZSBET00gYmVmb3JlIGluamVjdGluZyB0aGUgcmVzaXplciBlbGVtZW50LlxuXHR3YXRjaEZvclJlbmRlcihub2RlLCBmdW5jdGlvbigpIHtcblx0XHRpZiAoZXhwYW5kby5yZXNpemVyKSB7XG5cdFx0XHR2YXIgY29udGFpbmVyID0gbm9kZS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKGNvbnRhaW5lciAmJiBjb250YWluZXIgIT09IHJlc2l6ZXIucGFyZW50Tm9kZSkge1xuXHRcdFx0XHRjb250YWluZXIuaW5zZXJ0QmVmb3JlKHJlc2l6ZXIsIGNvbnRhaW5lci5maXJzdENoaWxkKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGhlIGNvbnRhaW5lciBzaXplIG1pZ2h0IGhhdmUgY2hhbmdlZCwgbGV0J3MgcmVzZXQgdGhlIHJlc2l6ZXIgc3RhdGUuXG5cdFx0XHRyZXNpemVyLl9yZXNldCgpO1xuXHRcdH1cblx0fSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVJlc2l6ZUxpc3RlbmVyKG5vZGUpIHtcblx0dmFyIGV4cGFuZG8gPSBub2RlW0VYUEFORE9fS0VZXSB8fCB7fTtcblx0dmFyIHJlc2l6ZXIgPSBleHBhbmRvLnJlc2l6ZXI7XG5cblx0ZGVsZXRlIGV4cGFuZG8ucmVzaXplcjtcblx0dW53YXRjaEZvclJlbmRlcihub2RlKTtcblxuXHRpZiAocmVzaXplciAmJiByZXNpemVyLnBhcmVudE5vZGUpIHtcblx0XHRyZXNpemVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocmVzaXplcik7XG5cdH1cbn1cblxuZnVuY3Rpb24gaW5qZWN0Q1NTKHBsYXRmb3JtLCBjc3MpIHtcblx0Ly8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xLzM5MjIxMzlcblx0dmFyIHN0eWxlID0gcGxhdGZvcm0uX3N0eWxlIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG5cdGlmICghcGxhdGZvcm0uX3N0eWxlKSB7XG5cdFx0cGxhdGZvcm0uX3N0eWxlID0gc3R5bGU7XG5cdFx0Y3NzID0gJy8qIENoYXJ0LmpzICovXFxuJyArIGNzcztcblx0XHRzdHlsZS5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9jc3MnKTtcblx0XHRkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdLmFwcGVuZENoaWxkKHN0eWxlKTtcblx0fVxuXG5cdHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xufVxuXG52YXIgcGxhdGZvcm1fZG9tJDIgPSB7XG5cdC8qKlxuXHQgKiBXaGVuIGB0cnVlYCwgcHJldmVudHMgdGhlIGF1dG9tYXRpYyBpbmplY3Rpb24gb2YgdGhlIHN0eWxlc2hlZXQgcmVxdWlyZWQgdG9cblx0ICogY29ycmVjdGx5IGRldGVjdCB3aGVuIHRoZSBjaGFydCBpcyBhZGRlZCB0byB0aGUgRE9NIGFuZCB0aGVuIHJlc2l6ZWQuIFRoaXNcblx0ICogc3dpdGNoIGhhcyBiZWVuIGFkZGVkIHRvIGFsbG93IGV4dGVybmFsIHN0eWxlc2hlZXQgKGBkaXN0L0NoYXJ0KC5taW4pPy5qc2ApXG5cdCAqIHRvIGJlIG1hbnVhbGx5IGltcG9ydGVkIHRvIG1ha2UgdGhpcyBsaWJyYXJ5IGNvbXBhdGlibGUgd2l0aCBhbnkgQ1NQLlxuXHQgKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2NoYXJ0anMvQ2hhcnQuanMvaXNzdWVzLzUyMDhcblx0ICovXG5cdGRpc2FibGVDU1NJbmplY3Rpb246IGZhbHNlLFxuXG5cdC8qKlxuXHQgKiBUaGlzIHByb3BlcnR5IGhvbGRzIHdoZXRoZXIgdGhpcyBwbGF0Zm9ybSBpcyBlbmFibGVkIGZvciB0aGUgY3VycmVudCBlbnZpcm9ubWVudC5cblx0ICogQ3VycmVudGx5IHVzZWQgYnkgcGxhdGZvcm0uanMgdG8gc2VsZWN0IHRoZSBwcm9wZXIgaW1wbGVtZW50YXRpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZW5hYmxlZDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyxcblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9lbnN1cmVMb2FkZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICh0aGlzLl9sb2FkZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9sb2FkZWQgPSB0cnVlO1xuXG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL2NoYXJ0anMvQ2hhcnQuanMvaXNzdWVzLzUyMDhcblx0XHRpZiAoIXRoaXMuZGlzYWJsZUNTU0luamVjdGlvbikge1xuXHRcdFx0aW5qZWN0Q1NTKHRoaXMsIHN0eWxlc2hlZXQpO1xuXHRcdH1cblx0fSxcblxuXHRhY3F1aXJlQ29udGV4dDogZnVuY3Rpb24oaXRlbSwgY29uZmlnKSB7XG5cdFx0aWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykge1xuXHRcdFx0aXRlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGl0ZW0pO1xuXHRcdH0gZWxzZSBpZiAoaXRlbS5sZW5ndGgpIHtcblx0XHRcdC8vIFN1cHBvcnQgZm9yIGFycmF5IGJhc2VkIHF1ZXJpZXMgKHN1Y2ggYXMgalF1ZXJ5KVxuXHRcdFx0aXRlbSA9IGl0ZW1bMF07XG5cdFx0fVxuXG5cdFx0aWYgKGl0ZW0gJiYgaXRlbS5jYW52YXMpIHtcblx0XHRcdC8vIFN1cHBvcnQgZm9yIGFueSBvYmplY3QgYXNzb2NpYXRlZCB0byBhIGNhbnZhcyAoaW5jbHVkaW5nIGEgY29udGV4dDJkKVxuXHRcdFx0aXRlbSA9IGl0ZW0uY2FudmFzO1xuXHRcdH1cblxuXHRcdC8vIFRvIHByZXZlbnQgY2FudmFzIGZpbmdlcnByaW50aW5nLCBzb21lIGFkZC1vbnMgdW5kZWZpbmUgdGhlIGdldENvbnRleHRcblx0XHQvLyBtZXRob2QsIGZvciBleGFtcGxlOiBodHRwczovL2dpdGh1Yi5jb20va2thcHNuZXIvQ2FudmFzQmxvY2tlclxuXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFydGpzL0NoYXJ0LmpzL2lzc3Vlcy8yODA3XG5cdFx0dmFyIGNvbnRleHQgPSBpdGVtICYmIGl0ZW0uZ2V0Q29udGV4dCAmJiBpdGVtLmdldENvbnRleHQoJzJkJyk7XG5cblx0XHQvLyBMb2FkIHBsYXRmb3JtIHJlc291cmNlcyBvbiBmaXJzdCBjaGFydCBjcmVhdGlvbiwgdG8gbWFrZSBwb3NzaWJsZSB0byBjaGFuZ2Vcblx0XHQvLyBwbGF0Zm9ybSBvcHRpb25zIGFmdGVyIGltcG9ydGluZyB0aGUgbGlicmFyeSAoZS5nLiBgZGlzYWJsZUNTU0luamVjdGlvbmApLlxuXHRcdHRoaXMuX2Vuc3VyZUxvYWRlZCgpO1xuXG5cdFx0Ly8gYGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEYCBmYWlscyB3aGVuIHRoZSBpdGVtIGlzXG5cdFx0Ly8gaW5zaWRlIGFuIGlmcmFtZSBvciB3aGVuIHJ1bm5pbmcgaW4gYSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQuIFdlIGNvdWxkIGd1ZXNzIHRoZVxuXHRcdC8vIHR5cGVzIGZyb20gdGhlaXIgdG9TdHJpbmcoKSB2YWx1ZSBidXQgbGV0J3Mga2VlcCB0aGluZ3MgZmxleGlibGUgYW5kIGFzc3VtZSBpdCdzXG5cdFx0Ly8gYSBzdWZmaWNpZW50IGNvbmRpdGlvbiBpZiB0aGUgaXRlbSBoYXMgYSBjb250ZXh0MkQgd2hpY2ggaGFzIGl0ZW0gYXMgYGNhbnZhc2AuXG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL2NoYXJ0anMvQ2hhcnQuanMvaXNzdWVzLzM4ODdcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9pc3N1ZXMvNDEwMlxuXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFydGpzL0NoYXJ0LmpzL2lzc3Vlcy80MTUyXG5cdFx0aWYgKGNvbnRleHQgJiYgY29udGV4dC5jYW52YXMgPT09IGl0ZW0pIHtcblx0XHRcdGluaXRDYW52YXMoaXRlbSwgY29uZmlnKTtcblx0XHRcdHJldHVybiBjb250ZXh0O1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdHJlbGVhc2VDb250ZXh0OiBmdW5jdGlvbihjb250ZXh0KSB7XG5cdFx0dmFyIGNhbnZhcyA9IGNvbnRleHQuY2FudmFzO1xuXHRcdGlmICghY2FudmFzW0VYUEFORE9fS0VZXSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBpbml0aWFsID0gY2FudmFzW0VYUEFORE9fS0VZXS5pbml0aWFsO1xuXHRcdFsnaGVpZ2h0JywgJ3dpZHRoJ10uZm9yRWFjaChmdW5jdGlvbihwcm9wKSB7XG5cdFx0XHR2YXIgdmFsdWUgPSBpbml0aWFsW3Byb3BdO1xuXHRcdFx0aWYgKGhlbHBlcnMkMS5pc051bGxPclVuZGVmKHZhbHVlKSkge1xuXHRcdFx0XHRjYW52YXMucmVtb3ZlQXR0cmlidXRlKHByb3ApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2FudmFzLnNldEF0dHJpYnV0ZShwcm9wLCB2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRoZWxwZXJzJDEuZWFjaChpbml0aWFsLnN0eWxlIHx8IHt9LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG5cdFx0XHRjYW52YXMuc3R5bGVba2V5XSA9IHZhbHVlO1xuXHRcdH0pO1xuXG5cdFx0Ly8gVGhlIGNhbnZhcyByZW5kZXIgc2l6ZSBtaWdodCBoYXZlIGJlZW4gY2hhbmdlZCAoYW5kIHRodXMgdGhlIHN0YXRlIHN0YWNrIGRpc2NhcmRlZCksXG5cdFx0Ly8gd2UgY2FuJ3QgdXNlIHNhdmUoKSBhbmQgcmVzdG9yZSgpIHRvIHJlc3RvcmUgdGhlIGluaXRpYWwgc3RhdGUuIFNvIG1ha2Ugc3VyZSB0aGF0IGF0XG5cdFx0Ly8gbGVhc3QgdGhlIGNhbnZhcyBjb250ZXh0IGlzIHJlc2V0IHRvIHRoZSBkZWZhdWx0IHN0YXRlIGJ5IHNldHRpbmcgdGhlIGNhbnZhcyB3aWR0aC5cblx0XHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvMjAxMS9XRC1odG1sNS0yMDExMDUyNS90aGUtY2FudmFzLWVsZW1lbnQuaHRtbFxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWFzc2lnblxuXHRcdGNhbnZhcy53aWR0aCA9IGNhbnZhcy53aWR0aDtcblxuXHRcdGRlbGV0ZSBjYW52YXNbRVhQQU5ET19LRVldO1xuXHR9LFxuXG5cdGFkZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uKGNoYXJ0LCB0eXBlLCBsaXN0ZW5lcikge1xuXHRcdHZhciBjYW52YXMgPSBjaGFydC5jYW52YXM7XG5cdFx0aWYgKHR5cGUgPT09ICdyZXNpemUnKSB7XG5cdFx0XHQvLyBOb3RlOiB0aGUgcmVzaXplIGV2ZW50IGlzIG5vdCBzdXBwb3J0ZWQgb24gYWxsIGJyb3dzZXJzLlxuXHRcdFx0YWRkUmVzaXplTGlzdGVuZXIoY2FudmFzLCBsaXN0ZW5lciwgY2hhcnQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBleHBhbmRvID0gbGlzdGVuZXJbRVhQQU5ET19LRVldIHx8IChsaXN0ZW5lcltFWFBBTkRPX0tFWV0gPSB7fSk7XG5cdFx0dmFyIHByb3hpZXMgPSBleHBhbmRvLnByb3hpZXMgfHwgKGV4cGFuZG8ucHJveGllcyA9IHt9KTtcblx0XHR2YXIgcHJveHkgPSBwcm94aWVzW2NoYXJ0LmlkICsgJ18nICsgdHlwZV0gPSBmdW5jdGlvbihldmVudCkge1xuXHRcdFx0bGlzdGVuZXIoZnJvbU5hdGl2ZUV2ZW50KGV2ZW50LCBjaGFydCkpO1xuXHRcdH07XG5cblx0XHRhZGRMaXN0ZW5lcihjYW52YXMsIHR5cGUsIHByb3h5KTtcblx0fSxcblxuXHRyZW1vdmVFdmVudExpc3RlbmVyOiBmdW5jdGlvbihjaGFydCwgdHlwZSwgbGlzdGVuZXIpIHtcblx0XHR2YXIgY2FudmFzID0gY2hhcnQuY2FudmFzO1xuXHRcdGlmICh0eXBlID09PSAncmVzaXplJykge1xuXHRcdFx0Ly8gTm90ZTogdGhlIHJlc2l6ZSBldmVudCBpcyBub3Qgc3VwcG9ydGVkIG9uIGFsbCBicm93c2Vycy5cblx0XHRcdHJlbW92ZVJlc2l6ZUxpc3RlbmVyKGNhbnZhcyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIGV4cGFuZG8gPSBsaXN0ZW5lcltFWFBBTkRPX0tFWV0gfHwge307XG5cdFx0dmFyIHByb3hpZXMgPSBleHBhbmRvLnByb3hpZXMgfHwge307XG5cdFx0dmFyIHByb3h5ID0gcHJveGllc1tjaGFydC5pZCArICdfJyArIHR5cGVdO1xuXHRcdGlmICghcHJveHkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRyZW1vdmVMaXN0ZW5lcihjYW52YXMsIHR5cGUsIHByb3h5KTtcblx0fVxufTtcblxuLy8gREVQUkVDQVRJT05TXG5cbi8qKlxuICogUHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHVzZSBFdmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyIGluc3RlYWQuXG4gKiBFdmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyIGNvbXBhdGliaWxpdHk6IENocm9tZSwgT3BlcmEgNywgU2FmYXJpLCBGRjEuNSssIElFOStcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50VGFyZ2V0L2FkZEV2ZW50TGlzdGVuZXJcbiAqIEBmdW5jdGlvbiBDaGFydC5oZWxwZXJzLmFkZEV2ZW50XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDIuNy4wXG4gKiBAdG9kbyByZW1vdmUgYXQgdmVyc2lvbiAzXG4gKiBAcHJpdmF0ZVxuICovXG5oZWxwZXJzJDEuYWRkRXZlbnQgPSBhZGRMaXN0ZW5lcjtcblxuLyoqXG4gKiBQcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdXNlIEV2ZW50VGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIgaW5zdGVhZC5cbiAqIEV2ZW50VGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIgY29tcGF0aWJpbGl0eTogQ2hyb21lLCBPcGVyYSA3LCBTYWZhcmksIEZGMS41KywgSUU5K1xuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZlbnRUYXJnZXQvcmVtb3ZlRXZlbnRMaXN0ZW5lclxuICogQGZ1bmN0aW9uIENoYXJ0LmhlbHBlcnMucmVtb3ZlRXZlbnRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMi43LjBcbiAqIEB0b2RvIHJlbW92ZSBhdCB2ZXJzaW9uIDNcbiAqIEBwcml2YXRlXG4gKi9cbmhlbHBlcnMkMS5yZW1vdmVFdmVudCA9IHJlbW92ZUxpc3RlbmVyO1xuXG4vLyBAVE9ETyBNYWtlIHBvc3NpYmxlIHRvIHNlbGVjdCBhbm90aGVyIHBsYXRmb3JtIGF0IGJ1aWxkIHRpbWUuXG52YXIgaW1wbGVtZW50YXRpb24gPSBwbGF0Zm9ybV9kb20kMi5fZW5hYmxlZCA/IHBsYXRmb3JtX2RvbSQyIDogcGxhdGZvcm1fYmFzaWM7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBDaGFydC5wbGF0Zm9ybVxuICogQHNlZSBodHRwczovL2NoYXJ0anMuZ2l0Ym9va3MuaW8vcHJvcG9zYWxzL2NvbnRlbnQvUGxhdGZvcm0uaHRtbFxuICogQHNpbmNlIDIuNC4wXG4gKi9cbnZhciBwbGF0Zm9ybSA9IGhlbHBlcnMkMS5leHRlbmQoe1xuXHQvKipcblx0ICogQHNpbmNlIDIuNy4wXG5cdCAqL1xuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHt9LFxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgYXQgY2hhcnQgY29uc3RydWN0aW9uIHRpbWUsIHJldHVybnMgYSBjb250ZXh0MmQgaW5zdGFuY2UgaW1wbGVtZW50aW5nXG5cdCAqIHRoZSBbVzNDIENhbnZhcyAyRCBDb250ZXh0IEFQSSBzdGFuZGFyZF17QGxpbmsgaHR0cHM6Ly93d3cudzMub3JnL1RSLzJkY29udGV4dC99LlxuXHQgKiBAcGFyYW0geyp9IGl0ZW0gLSBUaGUgbmF0aXZlIGl0ZW0gZnJvbSB3aGljaCB0byBhY3F1aXJlIGNvbnRleHQgKHBsYXRmb3JtIHNwZWNpZmljKVxuXHQgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIFRoZSBjaGFydCBvcHRpb25zXG5cdCAqIEByZXR1cm5zIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGNvbnRleHQyZCBpbnN0YW5jZVxuXHQgKi9cblx0YWNxdWlyZUNvbnRleHQ6IGZ1bmN0aW9uKCkge30sXG5cblx0LyoqXG5cdCAqIENhbGxlZCBhdCBjaGFydCBkZXN0cnVjdGlvbiB0aW1lLCByZWxlYXNlcyBhbnkgcmVzb3VyY2VzIGFzc29jaWF0ZWQgdG8gdGhlIGNvbnRleHRcblx0ICogcHJldmlvdXNseSByZXR1cm5lZCBieSB0aGUgYWNxdWlyZUNvbnRleHQoKSBtZXRob2QuXG5cdCAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjb250ZXh0IC0gVGhlIGNvbnRleHQyZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgbWV0aG9kIHN1Y2NlZWRlZCwgZWxzZSBmYWxzZVxuXHQgKi9cblx0cmVsZWFzZUNvbnRleHQ6IGZ1bmN0aW9uKCkge30sXG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVycyB0aGUgc3BlY2lmaWVkIGxpc3RlbmVyIG9uIHRoZSBnaXZlbiBjaGFydC5cblx0ICogQHBhcmFtIHtDaGFydH0gY2hhcnQgLSBDaGFydCBmcm9tIHdoaWNoIHRvIGxpc3RlbiBmb3IgZXZlbnRcblx0ICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBUaGUgKHtAbGluayBJRXZlbnR9KSB0eXBlIHRvIGxpc3RlbiBmb3Jcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gbGlzdGVuZXIgLSBSZWNlaXZlcyBhIG5vdGlmaWNhdGlvbiAoYW4gb2JqZWN0IHRoYXQgaW1wbGVtZW50c1xuXHQgKiB0aGUge0BsaW5rIElFdmVudH0gaW50ZXJmYWNlKSB3aGVuIGFuIGV2ZW50IG9mIHRoZSBzcGVjaWZpZWQgdHlwZSBvY2N1cnMuXG5cdCAqL1xuXHRhZGRFdmVudExpc3RlbmVyOiBmdW5jdGlvbigpIHt9LFxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQgbGlzdGVuZXIgcHJldmlvdXNseSByZWdpc3RlcmVkIHdpdGggYWRkRXZlbnRMaXN0ZW5lci5cblx0ICogQHBhcmFtIHtDaGFydH0gY2hhcnQgLSBDaGFydCBmcm9tIHdoaWNoIHRvIHJlbW92ZSB0aGUgbGlzdGVuZXJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBUaGUgKHtAbGluayBJRXZlbnR9KSB0eXBlIHRvIHJlbW92ZVxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBsaXN0ZW5lciAtIFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byByZW1vdmUgZnJvbSB0aGUgZXZlbnQgdGFyZ2V0LlxuXHQgKi9cblx0cmVtb3ZlRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24oKSB7fVxuXG59LCBpbXBsZW1lbnRhdGlvbik7XG5cbmNvcmVfZGVmYXVsdHMuX3NldCgnZ2xvYmFsJywge1xuXHRwbHVnaW5zOiB7fVxufSk7XG5cbi8qKlxuICogVGhlIHBsdWdpbiBzZXJ2aWNlIHNpbmdsZXRvblxuICogQG5hbWVzcGFjZSBDaGFydC5wbHVnaW5zXG4gKiBAc2luY2UgMi4xLjBcbiAqL1xudmFyIGNvcmVfcGx1Z2lucyA9IHtcblx0LyoqXG5cdCAqIEdsb2JhbGx5IHJlZ2lzdGVyZWQgcGx1Z2lucy5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9wbHVnaW5zOiBbXSxcblxuXHQvKipcblx0ICogVGhpcyBpZGVudGlmaWVyIGlzIHVzZWQgdG8gaW52YWxpZGF0ZSB0aGUgZGVzY3JpcHRvcnMgY2FjaGUgYXR0YWNoZWQgdG8gZWFjaCBjaGFydFxuXHQgKiB3aGVuIGEgZ2xvYmFsIHBsdWdpbiBpcyByZWdpc3RlcmVkIG9yIHVucmVnaXN0ZXJlZC4gSW4gdGhpcyBjYXNlLCB0aGUgY2FjaGUgSUQgaXNcblx0ICogaW5jcmVtZW50ZWQgYW5kIGRlc2NyaXB0b3JzIGFyZSByZWdlbmVyYXRlZCBkdXJpbmcgZm9sbG93aW5nIEFQSSBjYWxscy5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9jYWNoZUlkOiAwLFxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlcnMgdGhlIGdpdmVuIHBsdWdpbihzKSBpZiBub3QgYWxyZWFkeSByZWdpc3RlcmVkLlxuXHQgKiBAcGFyYW0ge0lQbHVnaW5bXXxJUGx1Z2lufSBwbHVnaW5zIHBsdWdpbiBpbnN0YW5jZShzKS5cblx0ICovXG5cdHJlZ2lzdGVyOiBmdW5jdGlvbihwbHVnaW5zKSB7XG5cdFx0dmFyIHAgPSB0aGlzLl9wbHVnaW5zO1xuXHRcdChbXSkuY29uY2F0KHBsdWdpbnMpLmZvckVhY2goZnVuY3Rpb24ocGx1Z2luKSB7XG5cdFx0XHRpZiAocC5pbmRleE9mKHBsdWdpbikgPT09IC0xKSB7XG5cdFx0XHRcdHAucHVzaChwbHVnaW4pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5fY2FjaGVJZCsrO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBVbnJlZ2lzdGVycyB0aGUgZ2l2ZW4gcGx1Z2luKHMpIG9ubHkgaWYgcmVnaXN0ZXJlZC5cblx0ICogQHBhcmFtIHtJUGx1Z2luW118SVBsdWdpbn0gcGx1Z2lucyBwbHVnaW4gaW5zdGFuY2UocykuXG5cdCAqL1xuXHR1bnJlZ2lzdGVyOiBmdW5jdGlvbihwbHVnaW5zKSB7XG5cdFx0dmFyIHAgPSB0aGlzLl9wbHVnaW5zO1xuXHRcdChbXSkuY29uY2F0KHBsdWdpbnMpLmZvckVhY2goZnVuY3Rpb24ocGx1Z2luKSB7XG5cdFx0XHR2YXIgaWR4ID0gcC5pbmRleE9mKHBsdWdpbik7XG5cdFx0XHRpZiAoaWR4ICE9PSAtMSkge1xuXHRcdFx0XHRwLnNwbGljZShpZHgsIDEpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5fY2FjaGVJZCsrO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgYWxsIHJlZ2lzdGVyZWQgcGx1Z2lucy5cblx0ICogQHNpbmNlIDIuMS41XG5cdCAqL1xuXHRjbGVhcjogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5fcGx1Z2lucyA9IFtdO1xuXHRcdHRoaXMuX2NhY2hlSWQrKztcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgcGx1Z2lucz9cblx0ICogQHJldHVybnMge251bWJlcn1cblx0ICogQHNpbmNlIDIuMS41XG5cdCAqL1xuXHRjb3VudDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3BsdWdpbnMubGVuZ3RoO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGFsbCByZWdpc3RlcmVkIHBsdWdpbiBpbnN0YW5jZXMuXG5cdCAqIEByZXR1cm5zIHtJUGx1Z2luW119IGFycmF5IG9mIHBsdWdpbiBvYmplY3RzLlxuXHQgKiBAc2luY2UgMi4xLjVcblx0ICovXG5cdGdldEFsbDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3BsdWdpbnM7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENhbGxzIGVuYWJsZWQgcGx1Z2lucyBmb3IgYGNoYXJ0YCBvbiB0aGUgc3BlY2lmaWVkIGhvb2sgYW5kIHdpdGggdGhlIGdpdmVuIGFyZ3MuXG5cdCAqIFRoaXMgbWV0aG9kIGltbWVkaWF0ZWx5IHJldHVybnMgYXMgc29vbiBhcyBhIHBsdWdpbiBleHBsaWNpdGx5IHJldHVybnMgZmFsc2UuIFRoZVxuXHQgKiByZXR1cm5lZCB2YWx1ZSBjYW4gYmUgdXNlZCwgZm9yIGluc3RhbmNlLCB0byBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgYWN0aW9uLlxuXHQgKiBAcGFyYW0ge0NoYXJ0fSBjaGFydCAtIFRoZSBjaGFydCBpbnN0YW5jZSBmb3Igd2hpY2ggcGx1Z2lucyBzaG91bGQgYmUgY2FsbGVkLlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaG9vayAtIFRoZSBuYW1lIG9mIHRoZSBwbHVnaW4gbWV0aG9kIHRvIGNhbGwgKGUuZy4gJ2JlZm9yZVVwZGF0ZScpLlxuXHQgKiBAcGFyYW0ge0FycmF5fSBbYXJnc10gLSBFeHRyYSBhcmd1bWVudHMgdG8gYXBwbHkgdG8gdGhlIGhvb2sgY2FsbC5cblx0ICogQHJldHVybnMge2Jvb2xlYW59IGZhbHNlIGlmIGFueSBvZiB0aGUgcGx1Z2lucyByZXR1cm4gZmFsc2UsIGVsc2UgcmV0dXJucyB0cnVlLlxuXHQgKi9cblx0bm90aWZ5OiBmdW5jdGlvbihjaGFydCwgaG9vaywgYXJncykge1xuXHRcdHZhciBkZXNjcmlwdG9ycyA9IHRoaXMuZGVzY3JpcHRvcnMoY2hhcnQpO1xuXHRcdHZhciBpbGVuID0gZGVzY3JpcHRvcnMubGVuZ3RoO1xuXHRcdHZhciBpLCBkZXNjcmlwdG9yLCBwbHVnaW4sIHBhcmFtcywgbWV0aG9kO1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGlsZW47ICsraSkge1xuXHRcdFx0ZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JzW2ldO1xuXHRcdFx0cGx1Z2luID0gZGVzY3JpcHRvci5wbHVnaW47XG5cdFx0XHRtZXRob2QgPSBwbHVnaW5baG9va107XG5cdFx0XHRpZiAodHlwZW9mIG1ldGhvZCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRwYXJhbXMgPSBbY2hhcnRdLmNvbmNhdChhcmdzIHx8IFtdKTtcblx0XHRcdFx0cGFyYW1zLnB1c2goZGVzY3JpcHRvci5vcHRpb25zKTtcblx0XHRcdFx0aWYgKG1ldGhvZC5hcHBseShwbHVnaW4sIHBhcmFtcykgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgZGVzY3JpcHRvcnMgb2YgZW5hYmxlZCBwbHVnaW5zIGZvciB0aGUgZ2l2ZW4gY2hhcnQuXG5cdCAqIEByZXR1cm5zIHtvYmplY3RbXX0gW3sgcGx1Z2luLCBvcHRpb25zIH1dXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRkZXNjcmlwdG9yczogZnVuY3Rpb24oY2hhcnQpIHtcblx0XHR2YXIgY2FjaGUgPSBjaGFydC4kcGx1Z2lucyB8fCAoY2hhcnQuJHBsdWdpbnMgPSB7fSk7XG5cdFx0aWYgKGNhY2hlLmlkID09PSB0aGlzLl9jYWNoZUlkKSB7XG5cdFx0XHRyZXR1cm4gY2FjaGUuZGVzY3JpcHRvcnM7XG5cdFx0fVxuXG5cdFx0dmFyIHBsdWdpbnMgPSBbXTtcblx0XHR2YXIgZGVzY3JpcHRvcnMgPSBbXTtcblx0XHR2YXIgY29uZmlnID0gKGNoYXJ0ICYmIGNoYXJ0LmNvbmZpZykgfHwge307XG5cdFx0dmFyIG9wdGlvbnMgPSAoY29uZmlnLm9wdGlvbnMgJiYgY29uZmlnLm9wdGlvbnMucGx1Z2lucykgfHwge307XG5cblx0XHR0aGlzLl9wbHVnaW5zLmNvbmNhdChjb25maWcucGx1Z2lucyB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbihwbHVnaW4pIHtcblx0XHRcdHZhciBpZHggPSBwbHVnaW5zLmluZGV4T2YocGx1Z2luKTtcblx0XHRcdGlmIChpZHggIT09IC0xKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGlkID0gcGx1Z2luLmlkO1xuXHRcdFx0dmFyIG9wdHMgPSBvcHRpb25zW2lkXTtcblx0XHRcdGlmIChvcHRzID09PSBmYWxzZSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvcHRzID09PSB0cnVlKSB7XG5cdFx0XHRcdG9wdHMgPSBoZWxwZXJzJDEuY2xvbmUoY29yZV9kZWZhdWx0cy5nbG9iYWwucGx1Z2luc1tpZF0pO1xuXHRcdFx0fVxuXG5cdFx0XHRwbHVnaW5zLnB1c2gocGx1Z2luKTtcblx0XHRcdGRlc2NyaXB0b3JzLnB1c2goe1xuXHRcdFx0XHRwbHVnaW46IHBsdWdpbixcblx0XHRcdFx0b3B0aW9uczogb3B0cyB8fCB7fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRjYWNoZS5kZXNjcmlwdG9ycyA9IGRlc2NyaXB0b3JzO1xuXHRcdGNhY2hlLmlkID0gdGhpcy5fY2FjaGVJZDtcblx0XHRyZXR1cm4gZGVzY3JpcHRvcnM7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEludmFsaWRhdGVzIGNhY2hlIGZvciB0aGUgZ2l2ZW4gY2hhcnQ6IGRlc2NyaXB0b3JzIGhvbGQgYSByZWZlcmVuY2Ugb24gcGx1Z2luIG9wdGlvbixcblx0ICogYnV0IGluIHNvbWUgY2FzZXMsIHRoaXMgcmVmZXJlbmNlIGNhbiBiZSBjaGFuZ2VkIGJ5IHRoZSB1c2VyIHdoZW4gdXBkYXRpbmcgb3B0aW9ucy5cblx0ICogaHR0cHM6Ly9naXRodWIuY29tL2NoYXJ0anMvQ2hhcnQuanMvaXNzdWVzLzUxMTEjaXNzdWVjb21tZW50LTM1NTkzNDE2N1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2ludmFsaWRhdGU6IGZ1bmN0aW9uKGNoYXJ0KSB7XG5cdFx0ZGVsZXRlIGNoYXJ0LiRwbHVnaW5zO1xuXHR9XG59O1xuXG52YXIgY29yZV9zY2FsZVNlcnZpY2UgPSB7XG5cdC8vIFNjYWxlIHJlZ2lzdHJhdGlvbiBvYmplY3QuIEV4dGVuc2lvbnMgY2FuIHJlZ2lzdGVyIG5ldyBzY2FsZSB0eXBlcyAoc3VjaCBhcyBsb2cgb3IgREIgc2NhbGVzKSBhbmQgdGhlblxuXHQvLyB1c2UgdGhlIG5ldyBjaGFydCBvcHRpb25zIHRvIGdyYWIgdGhlIGNvcnJlY3Qgc2NhbGVcblx0Y29uc3RydWN0b3JzOiB7fSxcblx0Ly8gVXNlIGEgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uIHNvIHRoYXQgd2UgY2FuIG1vdmUgdG8gYW4gRVM2IG1hcCB3aGVuIHdlIG5vIGxvbmdlciBuZWVkIHRvIHN1cHBvcnRcblx0Ly8gb2xkIGJyb3dzZXJzXG5cblx0Ly8gU2NhbGUgY29uZmlnIGRlZmF1bHRzXG5cdGRlZmF1bHRzOiB7fSxcblx0cmVnaXN0ZXJTY2FsZVR5cGU6IGZ1bmN0aW9uKHR5cGUsIHNjYWxlQ29uc3RydWN0b3IsIHNjYWxlRGVmYXVsdHMpIHtcblx0XHR0aGlzLmNvbnN0cnVjdG9yc1t0eXBlXSA9IHNjYWxlQ29uc3RydWN0b3I7XG5cdFx0dGhpcy5kZWZhdWx0c1t0eXBlXSA9IGhlbHBlcnMkMS5jbG9uZShzY2FsZURlZmF1bHRzKTtcblx0fSxcblx0Z2V0U2NhbGVDb25zdHJ1Y3RvcjogZnVuY3Rpb24odHlwZSkge1xuXHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdG9ycy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSA/IHRoaXMuY29uc3RydWN0b3JzW3R5cGVdIDogdW5kZWZpbmVkO1xuXHR9LFxuXHRnZXRTY2FsZURlZmF1bHRzOiBmdW5jdGlvbih0eXBlKSB7XG5cdFx0Ly8gUmV0dXJuIHRoZSBzY2FsZSBkZWZhdWx0cyBtZXJnZWQgd2l0aCB0aGUgZ2xvYmFsIHNldHRpbmdzIHNvIHRoYXQgd2UgYWx3YXlzIHVzZSB0aGUgbGF0ZXN0IG9uZXNcblx0XHRyZXR1cm4gdGhpcy5kZWZhdWx0cy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSA/IGhlbHBlcnMkMS5tZXJnZSh7fSwgW2NvcmVfZGVmYXVsdHMuc2NhbGUsIHRoaXMuZGVmYXVsdHNbdHlwZV1dKSA6IHt9O1xuXHR9LFxuXHR1cGRhdGVTY2FsZURlZmF1bHRzOiBmdW5jdGlvbih0eXBlLCBhZGRpdGlvbnMpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdGlmIChtZS5kZWZhdWx0cy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkge1xuXHRcdFx0bWUuZGVmYXVsdHNbdHlwZV0gPSBoZWxwZXJzJDEuZXh0ZW5kKG1lLmRlZmF1bHRzW3R5cGVdLCBhZGRpdGlvbnMpO1xuXHRcdH1cblx0fSxcblx0YWRkU2NhbGVzVG9MYXlvdXQ6IGZ1bmN0aW9uKGNoYXJ0KSB7XG5cdFx0Ly8gQWRkcyBlYWNoIHNjYWxlIHRvIHRoZSBjaGFydC5ib3hlcyBhcnJheSB0byBiZSBzaXplZCBhY2NvcmRpbmdseVxuXHRcdGhlbHBlcnMkMS5lYWNoKGNoYXJ0LnNjYWxlcywgZnVuY3Rpb24oc2NhbGUpIHtcblx0XHRcdC8vIFNldCBJTGF5b3V0SXRlbSBwYXJhbWV0ZXJzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuXHRcdFx0c2NhbGUuZnVsbFdpZHRoID0gc2NhbGUub3B0aW9ucy5mdWxsV2lkdGg7XG5cdFx0XHRzY2FsZS5wb3NpdGlvbiA9IHNjYWxlLm9wdGlvbnMucG9zaXRpb247XG5cdFx0XHRzY2FsZS53ZWlnaHQgPSBzY2FsZS5vcHRpb25zLndlaWdodDtcblx0XHRcdGNvcmVfbGF5b3V0cy5hZGRCb3goY2hhcnQsIHNjYWxlKTtcblx0XHR9KTtcblx0fVxufTtcblxudmFyIHZhbHVlT3JEZWZhdWx0JDcgPSBoZWxwZXJzJDEudmFsdWVPckRlZmF1bHQ7XG5cbmNvcmVfZGVmYXVsdHMuX3NldCgnZ2xvYmFsJywge1xuXHR0b29sdGlwczoge1xuXHRcdGVuYWJsZWQ6IHRydWUsXG5cdFx0Y3VzdG9tOiBudWxsLFxuXHRcdG1vZGU6ICduZWFyZXN0Jyxcblx0XHRwb3NpdGlvbjogJ2F2ZXJhZ2UnLFxuXHRcdGludGVyc2VjdDogdHJ1ZSxcblx0XHRiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsMCwwLDAuOCknLFxuXHRcdHRpdGxlRm9udFN0eWxlOiAnYm9sZCcsXG5cdFx0dGl0bGVTcGFjaW5nOiAyLFxuXHRcdHRpdGxlTWFyZ2luQm90dG9tOiA2LFxuXHRcdHRpdGxlRm9udENvbG9yOiAnI2ZmZicsXG5cdFx0dGl0bGVBbGlnbjogJ2xlZnQnLFxuXHRcdGJvZHlTcGFjaW5nOiAyLFxuXHRcdGJvZHlGb250Q29sb3I6ICcjZmZmJyxcblx0XHRib2R5QWxpZ246ICdsZWZ0Jyxcblx0XHRmb290ZXJGb250U3R5bGU6ICdib2xkJyxcblx0XHRmb290ZXJTcGFjaW5nOiAyLFxuXHRcdGZvb3Rlck1hcmdpblRvcDogNixcblx0XHRmb290ZXJGb250Q29sb3I6ICcjZmZmJyxcblx0XHRmb290ZXJBbGlnbjogJ2xlZnQnLFxuXHRcdHlQYWRkaW5nOiA2LFxuXHRcdHhQYWRkaW5nOiA2LFxuXHRcdGNhcmV0UGFkZGluZzogMixcblx0XHRjYXJldFNpemU6IDUsXG5cdFx0Y29ybmVyUmFkaXVzOiA2LFxuXHRcdG11bHRpS2V5QmFja2dyb3VuZDogJyNmZmYnLFxuXHRcdGRpc3BsYXlDb2xvcnM6IHRydWUsXG5cdFx0Ym9yZGVyQ29sb3I6ICdyZ2JhKDAsMCwwLDApJyxcblx0XHRib3JkZXJXaWR0aDogMCxcblx0XHRjYWxsYmFja3M6IHtcblx0XHRcdC8vIEFyZ3MgYXJlOiAodG9vbHRpcEl0ZW1zLCBkYXRhKVxuXHRcdFx0YmVmb3JlVGl0bGU6IGhlbHBlcnMkMS5ub29wLFxuXHRcdFx0dGl0bGU6IGZ1bmN0aW9uKHRvb2x0aXBJdGVtcywgZGF0YSkge1xuXHRcdFx0XHR2YXIgdGl0bGUgPSAnJztcblx0XHRcdFx0dmFyIGxhYmVscyA9IGRhdGEubGFiZWxzO1xuXHRcdFx0XHR2YXIgbGFiZWxDb3VudCA9IGxhYmVscyA/IGxhYmVscy5sZW5ndGggOiAwO1xuXG5cdFx0XHRcdGlmICh0b29sdGlwSXRlbXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdHZhciBpdGVtID0gdG9vbHRpcEl0ZW1zWzBdO1xuXHRcdFx0XHRcdGlmIChpdGVtLmxhYmVsKSB7XG5cdFx0XHRcdFx0XHR0aXRsZSA9IGl0ZW0ubGFiZWw7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChpdGVtLnhMYWJlbCkge1xuXHRcdFx0XHRcdFx0dGl0bGUgPSBpdGVtLnhMYWJlbDtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGxhYmVsQ291bnQgPiAwICYmIGl0ZW0uaW5kZXggPCBsYWJlbENvdW50KSB7XG5cdFx0XHRcdFx0XHR0aXRsZSA9IGxhYmVsc1tpdGVtLmluZGV4XTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdGl0bGU7XG5cdFx0XHR9LFxuXHRcdFx0YWZ0ZXJUaXRsZTogaGVscGVycyQxLm5vb3AsXG5cblx0XHRcdC8vIEFyZ3MgYXJlOiAodG9vbHRpcEl0ZW1zLCBkYXRhKVxuXHRcdFx0YmVmb3JlQm9keTogaGVscGVycyQxLm5vb3AsXG5cblx0XHRcdC8vIEFyZ3MgYXJlOiAodG9vbHRpcEl0ZW0sIGRhdGEpXG5cdFx0XHRiZWZvcmVMYWJlbDogaGVscGVycyQxLm5vb3AsXG5cdFx0XHRsYWJlbDogZnVuY3Rpb24odG9vbHRpcEl0ZW0sIGRhdGEpIHtcblx0XHRcdFx0dmFyIGxhYmVsID0gZGF0YS5kYXRhc2V0c1t0b29sdGlwSXRlbS5kYXRhc2V0SW5kZXhdLmxhYmVsIHx8ICcnO1xuXG5cdFx0XHRcdGlmIChsYWJlbCkge1xuXHRcdFx0XHRcdGxhYmVsICs9ICc6ICc7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFoZWxwZXJzJDEuaXNOdWxsT3JVbmRlZih0b29sdGlwSXRlbS52YWx1ZSkpIHtcblx0XHRcdFx0XHRsYWJlbCArPSB0b29sdGlwSXRlbS52YWx1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsYWJlbCArPSB0b29sdGlwSXRlbS55TGFiZWw7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGxhYmVsO1xuXHRcdFx0fSxcblx0XHRcdGxhYmVsQ29sb3I6IGZ1bmN0aW9uKHRvb2x0aXBJdGVtLCBjaGFydCkge1xuXHRcdFx0XHR2YXIgbWV0YSA9IGNoYXJ0LmdldERhdGFzZXRNZXRhKHRvb2x0aXBJdGVtLmRhdGFzZXRJbmRleCk7XG5cdFx0XHRcdHZhciBhY3RpdmVFbGVtZW50ID0gbWV0YS5kYXRhW3Rvb2x0aXBJdGVtLmluZGV4XTtcblx0XHRcdFx0dmFyIHZpZXcgPSBhY3RpdmVFbGVtZW50Ll92aWV3O1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGJvcmRlckNvbG9yOiB2aWV3LmJvcmRlckNvbG9yLFxuXHRcdFx0XHRcdGJhY2tncm91bmRDb2xvcjogdmlldy5iYWNrZ3JvdW5kQ29sb3Jcblx0XHRcdFx0fTtcblx0XHRcdH0sXG5cdFx0XHRsYWJlbFRleHRDb2xvcjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9vcHRpb25zLmJvZHlGb250Q29sb3I7XG5cdFx0XHR9LFxuXHRcdFx0YWZ0ZXJMYWJlbDogaGVscGVycyQxLm5vb3AsXG5cblx0XHRcdC8vIEFyZ3MgYXJlOiAodG9vbHRpcEl0ZW1zLCBkYXRhKVxuXHRcdFx0YWZ0ZXJCb2R5OiBoZWxwZXJzJDEubm9vcCxcblxuXHRcdFx0Ly8gQXJncyBhcmU6ICh0b29sdGlwSXRlbXMsIGRhdGEpXG5cdFx0XHRiZWZvcmVGb290ZXI6IGhlbHBlcnMkMS5ub29wLFxuXHRcdFx0Zm9vdGVyOiBoZWxwZXJzJDEubm9vcCxcblx0XHRcdGFmdGVyRm9vdGVyOiBoZWxwZXJzJDEubm9vcFxuXHRcdH1cblx0fVxufSk7XG5cbnZhciBwb3NpdGlvbmVycyA9IHtcblx0LyoqXG5cdCAqIEF2ZXJhZ2UgbW9kZSBwbGFjZXMgdGhlIHRvb2x0aXAgYXQgdGhlIGF2ZXJhZ2UgcG9zaXRpb24gb2YgdGhlIGVsZW1lbnRzIHNob3duXG5cdCAqIEBmdW5jdGlvbiBDaGFydC5Ub29sdGlwLnBvc2l0aW9uZXJzLmF2ZXJhZ2Vcblx0ICogQHBhcmFtIGVsZW1lbnRzIHtDaGFydEVsZW1lbnRbXX0gdGhlIGVsZW1lbnRzIGJlaW5nIGRpc3BsYXllZCBpbiB0aGUgdG9vbHRpcFxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSB0b29sdGlwIHBvc2l0aW9uXG5cdCAqL1xuXHRhdmVyYWdlOiBmdW5jdGlvbihlbGVtZW50cykge1xuXHRcdGlmICghZWxlbWVudHMubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGksIGxlbjtcblx0XHR2YXIgeCA9IDA7XG5cdFx0dmFyIHkgPSAwO1xuXHRcdHZhciBjb3VudCA9IDA7XG5cblx0XHRmb3IgKGkgPSAwLCBsZW4gPSBlbGVtZW50cy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuXHRcdFx0dmFyIGVsID0gZWxlbWVudHNbaV07XG5cdFx0XHRpZiAoZWwgJiYgZWwuaGFzVmFsdWUoKSkge1xuXHRcdFx0XHR2YXIgcG9zID0gZWwudG9vbHRpcFBvc2l0aW9uKCk7XG5cdFx0XHRcdHggKz0gcG9zLng7XG5cdFx0XHRcdHkgKz0gcG9zLnk7XG5cdFx0XHRcdCsrY291bnQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHg6IHggLyBjb3VudCxcblx0XHRcdHk6IHkgLyBjb3VudFxuXHRcdH07XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHRvb2x0aXAgcG9zaXRpb24gbmVhcmVzdCBvZiB0aGUgaXRlbSBuZWFyZXN0IHRvIHRoZSBldmVudCBwb3NpdGlvblxuXHQgKiBAZnVuY3Rpb24gQ2hhcnQuVG9vbHRpcC5wb3NpdGlvbmVycy5uZWFyZXN0XG5cdCAqIEBwYXJhbSBlbGVtZW50cyB7Q2hhcnQuRWxlbWVudFtdfSB0aGUgdG9vbHRpcCBlbGVtZW50c1xuXHQgKiBAcGFyYW0gZXZlbnRQb3NpdGlvbiB7b2JqZWN0fSB0aGUgcG9zaXRpb24gb2YgdGhlIGV2ZW50IGluIGNhbnZhcyBjb29yZGluYXRlc1xuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSB0aGUgdG9vbHRpcCBwb3NpdGlvblxuXHQgKi9cblx0bmVhcmVzdDogZnVuY3Rpb24oZWxlbWVudHMsIGV2ZW50UG9zaXRpb24pIHtcblx0XHR2YXIgeCA9IGV2ZW50UG9zaXRpb24ueDtcblx0XHR2YXIgeSA9IGV2ZW50UG9zaXRpb24ueTtcblx0XHR2YXIgbWluRGlzdGFuY2UgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG5cdFx0dmFyIGksIGxlbiwgbmVhcmVzdEVsZW1lbnQ7XG5cblx0XHRmb3IgKGkgPSAwLCBsZW4gPSBlbGVtZW50cy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuXHRcdFx0dmFyIGVsID0gZWxlbWVudHNbaV07XG5cdFx0XHRpZiAoZWwgJiYgZWwuaGFzVmFsdWUoKSkge1xuXHRcdFx0XHR2YXIgY2VudGVyID0gZWwuZ2V0Q2VudGVyUG9pbnQoKTtcblx0XHRcdFx0dmFyIGQgPSBoZWxwZXJzJDEuZGlzdGFuY2VCZXR3ZWVuUG9pbnRzKGV2ZW50UG9zaXRpb24sIGNlbnRlcik7XG5cblx0XHRcdFx0aWYgKGQgPCBtaW5EaXN0YW5jZSkge1xuXHRcdFx0XHRcdG1pbkRpc3RhbmNlID0gZDtcblx0XHRcdFx0XHRuZWFyZXN0RWxlbWVudCA9IGVsO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKG5lYXJlc3RFbGVtZW50KSB7XG5cdFx0XHR2YXIgdHAgPSBuZWFyZXN0RWxlbWVudC50b29sdGlwUG9zaXRpb24oKTtcblx0XHRcdHggPSB0cC54O1xuXHRcdFx0eSA9IHRwLnk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHg6IHgsXG5cdFx0XHR5OiB5XG5cdFx0fTtcblx0fVxufTtcblxuLy8gSGVscGVyIHRvIHB1c2ggb3IgY29uY2F0IGJhc2VkIG9uIGlmIHRoZSAybmQgcGFyYW1ldGVyIGlzIGFuIGFycmF5IG9yIG5vdFxuZnVuY3Rpb24gcHVzaE9yQ29uY2F0KGJhc2UsIHRvUHVzaCkge1xuXHRpZiAodG9QdXNoKSB7XG5cdFx0aWYgKGhlbHBlcnMkMS5pc0FycmF5KHRvUHVzaCkpIHtcblx0XHRcdC8vIGJhc2UgPSBiYXNlLmNvbmNhdCh0b1B1c2gpO1xuXHRcdFx0QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYmFzZSwgdG9QdXNoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YmFzZS5wdXNoKHRvUHVzaCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGJhc2U7XG59XG5cbi8qKlxuICogUmV0dXJucyBhcnJheSBvZiBzdHJpbmdzIHNwbGl0IGJ5IG5ld2xpbmVcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBzcGxpdCBieSBuZXdsaW5lLlxuICogQHJldHVybnMge3N0cmluZ1tdfSB2YWx1ZSBpZiBuZXdsaW5lIHByZXNlbnQgLSBSZXR1cm5lZCBmcm9tIFN0cmluZyBzcGxpdCgpIG1ldGhvZFxuICogQGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIHNwbGl0TmV3bGluZXMoc3RyKSB7XG5cdGlmICgodHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgfHwgc3RyIGluc3RhbmNlb2YgU3RyaW5nKSAmJiBzdHIuaW5kZXhPZignXFxuJykgPiAtMSkge1xuXHRcdHJldHVybiBzdHIuc3BsaXQoJ1xcbicpO1xuXHR9XG5cdHJldHVybiBzdHI7XG59XG5cblxuLyoqXG4gKiBQcml2YXRlIGhlbHBlciB0byBjcmVhdGUgYSB0b29sdGlwIGl0ZW0gbW9kZWxcbiAqIEBwYXJhbSBlbGVtZW50IC0gdGhlIGNoYXJ0IGVsZW1lbnQgKHBvaW50LCBhcmMsIGJhcikgdG8gY3JlYXRlIHRoZSB0b29sdGlwIGl0ZW0gZm9yXG4gKiBAcmV0dXJuIG5ldyB0b29sdGlwIGl0ZW1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlVG9vbHRpcEl0ZW0oZWxlbWVudCkge1xuXHR2YXIgeFNjYWxlID0gZWxlbWVudC5feFNjYWxlO1xuXHR2YXIgeVNjYWxlID0gZWxlbWVudC5feVNjYWxlIHx8IGVsZW1lbnQuX3NjYWxlOyAvLyBoYW5kbGUgcmFkYXIgfHwgcG9sYXJBcmVhIGNoYXJ0c1xuXHR2YXIgaW5kZXggPSBlbGVtZW50Ll9pbmRleDtcblx0dmFyIGRhdGFzZXRJbmRleCA9IGVsZW1lbnQuX2RhdGFzZXRJbmRleDtcblx0dmFyIGNvbnRyb2xsZXIgPSBlbGVtZW50Ll9jaGFydC5nZXREYXRhc2V0TWV0YShkYXRhc2V0SW5kZXgpLmNvbnRyb2xsZXI7XG5cdHZhciBpbmRleFNjYWxlID0gY29udHJvbGxlci5fZ2V0SW5kZXhTY2FsZSgpO1xuXHR2YXIgdmFsdWVTY2FsZSA9IGNvbnRyb2xsZXIuX2dldFZhbHVlU2NhbGUoKTtcblxuXHRyZXR1cm4ge1xuXHRcdHhMYWJlbDogeFNjYWxlID8geFNjYWxlLmdldExhYmVsRm9ySW5kZXgoaW5kZXgsIGRhdGFzZXRJbmRleCkgOiAnJyxcblx0XHR5TGFiZWw6IHlTY2FsZSA/IHlTY2FsZS5nZXRMYWJlbEZvckluZGV4KGluZGV4LCBkYXRhc2V0SW5kZXgpIDogJycsXG5cdFx0bGFiZWw6IGluZGV4U2NhbGUgPyAnJyArIGluZGV4U2NhbGUuZ2V0TGFiZWxGb3JJbmRleChpbmRleCwgZGF0YXNldEluZGV4KSA6ICcnLFxuXHRcdHZhbHVlOiB2YWx1ZVNjYWxlID8gJycgKyB2YWx1ZVNjYWxlLmdldExhYmVsRm9ySW5kZXgoaW5kZXgsIGRhdGFzZXRJbmRleCkgOiAnJyxcblx0XHRpbmRleDogaW5kZXgsXG5cdFx0ZGF0YXNldEluZGV4OiBkYXRhc2V0SW5kZXgsXG5cdFx0eDogZWxlbWVudC5fbW9kZWwueCxcblx0XHR5OiBlbGVtZW50Ll9tb2RlbC55XG5cdH07XG59XG5cbi8qKlxuICogSGVscGVyIHRvIGdldCB0aGUgcmVzZXQgbW9kZWwgZm9yIHRoZSB0b29sdGlwXG4gKiBAcGFyYW0gdG9vbHRpcE9wdHMge29iamVjdH0gdGhlIHRvb2x0aXAgb3B0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRCYXNlTW9kZWwodG9vbHRpcE9wdHMpIHtcblx0dmFyIGdsb2JhbERlZmF1bHRzID0gY29yZV9kZWZhdWx0cy5nbG9iYWw7XG5cblx0cmV0dXJuIHtcblx0XHQvLyBQb3NpdGlvbmluZ1xuXHRcdHhQYWRkaW5nOiB0b29sdGlwT3B0cy54UGFkZGluZyxcblx0XHR5UGFkZGluZzogdG9vbHRpcE9wdHMueVBhZGRpbmcsXG5cdFx0eEFsaWduOiB0b29sdGlwT3B0cy54QWxpZ24sXG5cdFx0eUFsaWduOiB0b29sdGlwT3B0cy55QWxpZ24sXG5cblx0XHQvLyBCb2R5XG5cdFx0Ym9keUZvbnRDb2xvcjogdG9vbHRpcE9wdHMuYm9keUZvbnRDb2xvcixcblx0XHRfYm9keUZvbnRGYW1pbHk6IHZhbHVlT3JEZWZhdWx0JDcodG9vbHRpcE9wdHMuYm9keUZvbnRGYW1pbHksIGdsb2JhbERlZmF1bHRzLmRlZmF1bHRGb250RmFtaWx5KSxcblx0XHRfYm9keUZvbnRTdHlsZTogdmFsdWVPckRlZmF1bHQkNyh0b29sdGlwT3B0cy5ib2R5Rm9udFN0eWxlLCBnbG9iYWxEZWZhdWx0cy5kZWZhdWx0Rm9udFN0eWxlKSxcblx0XHRfYm9keUFsaWduOiB0b29sdGlwT3B0cy5ib2R5QWxpZ24sXG5cdFx0Ym9keUZvbnRTaXplOiB2YWx1ZU9yRGVmYXVsdCQ3KHRvb2x0aXBPcHRzLmJvZHlGb250U2l6ZSwgZ2xvYmFsRGVmYXVsdHMuZGVmYXVsdEZvbnRTaXplKSxcblx0XHRib2R5U3BhY2luZzogdG9vbHRpcE9wdHMuYm9keVNwYWNpbmcsXG5cblx0XHQvLyBUaXRsZVxuXHRcdHRpdGxlRm9udENvbG9yOiB0b29sdGlwT3B0cy50aXRsZUZvbnRDb2xvcixcblx0XHRfdGl0bGVGb250RmFtaWx5OiB2YWx1ZU9yRGVmYXVsdCQ3KHRvb2x0aXBPcHRzLnRpdGxlRm9udEZhbWlseSwgZ2xvYmFsRGVmYXVsdHMuZGVmYXVsdEZvbnRGYW1pbHkpLFxuXHRcdF90aXRsZUZvbnRTdHlsZTogdmFsdWVPckRlZmF1bHQkNyh0b29sdGlwT3B0cy50aXRsZUZvbnRTdHlsZSwgZ2xvYmFsRGVmYXVsdHMuZGVmYXVsdEZvbnRTdHlsZSksXG5cdFx0dGl0bGVGb250U2l6ZTogdmFsdWVPckRlZmF1bHQkNyh0b29sdGlwT3B0cy50aXRsZUZvbnRTaXplLCBnbG9iYWxEZWZhdWx0cy5kZWZhdWx0Rm9udFNpemUpLFxuXHRcdF90aXRsZUFsaWduOiB0b29sdGlwT3B0cy50aXRsZUFsaWduLFxuXHRcdHRpdGxlU3BhY2luZzogdG9vbHRpcE9wdHMudGl0bGVTcGFjaW5nLFxuXHRcdHRpdGxlTWFyZ2luQm90dG9tOiB0b29sdGlwT3B0cy50aXRsZU1hcmdpbkJvdHRvbSxcblxuXHRcdC8vIEZvb3RlclxuXHRcdGZvb3RlckZvbnRDb2xvcjogdG9vbHRpcE9wdHMuZm9vdGVyRm9udENvbG9yLFxuXHRcdF9mb290ZXJGb250RmFtaWx5OiB2YWx1ZU9yRGVmYXVsdCQ3KHRvb2x0aXBPcHRzLmZvb3RlckZvbnRGYW1pbHksIGdsb2JhbERlZmF1bHRzLmRlZmF1bHRGb250RmFtaWx5KSxcblx0XHRfZm9vdGVyRm9udFN0eWxlOiB2YWx1ZU9yRGVmYXVsdCQ3KHRvb2x0aXBPcHRzLmZvb3RlckZvbnRTdHlsZSwgZ2xvYmFsRGVmYXVsdHMuZGVmYXVsdEZvbnRTdHlsZSksXG5cdFx0Zm9vdGVyRm9udFNpemU6IHZhbHVlT3JEZWZhdWx0JDcodG9vbHRpcE9wdHMuZm9vdGVyRm9udFNpemUsIGdsb2JhbERlZmF1bHRzLmRlZmF1bHRGb250U2l6ZSksXG5cdFx0X2Zvb3RlckFsaWduOiB0b29sdGlwT3B0cy5mb290ZXJBbGlnbixcblx0XHRmb290ZXJTcGFjaW5nOiB0b29sdGlwT3B0cy5mb290ZXJTcGFjaW5nLFxuXHRcdGZvb3Rlck1hcmdpblRvcDogdG9vbHRpcE9wdHMuZm9vdGVyTWFyZ2luVG9wLFxuXG5cdFx0Ly8gQXBwZWFyYW5jZVxuXHRcdGNhcmV0U2l6ZTogdG9vbHRpcE9wdHMuY2FyZXRTaXplLFxuXHRcdGNvcm5lclJhZGl1czogdG9vbHRpcE9wdHMuY29ybmVyUmFkaXVzLFxuXHRcdGJhY2tncm91bmRDb2xvcjogdG9vbHRpcE9wdHMuYmFja2dyb3VuZENvbG9yLFxuXHRcdG9wYWNpdHk6IDAsXG5cdFx0bGVnZW5kQ29sb3JCYWNrZ3JvdW5kOiB0b29sdGlwT3B0cy5tdWx0aUtleUJhY2tncm91bmQsXG5cdFx0ZGlzcGxheUNvbG9yczogdG9vbHRpcE9wdHMuZGlzcGxheUNvbG9ycyxcblx0XHRib3JkZXJDb2xvcjogdG9vbHRpcE9wdHMuYm9yZGVyQ29sb3IsXG5cdFx0Ym9yZGVyV2lkdGg6IHRvb2x0aXBPcHRzLmJvcmRlcldpZHRoXG5cdH07XG59XG5cbi8qKlxuICogR2V0IHRoZSBzaXplIG9mIHRoZSB0b29sdGlwXG4gKi9cbmZ1bmN0aW9uIGdldFRvb2x0aXBTaXplKHRvb2x0aXAsIG1vZGVsKSB7XG5cdHZhciBjdHggPSB0b29sdGlwLl9jaGFydC5jdHg7XG5cblx0dmFyIGhlaWdodCA9IG1vZGVsLnlQYWRkaW5nICogMjsgLy8gVG9vbHRpcCBQYWRkaW5nXG5cdHZhciB3aWR0aCA9IDA7XG5cblx0Ly8gQ291bnQgb2YgYWxsIGxpbmVzIGluIHRoZSBib2R5XG5cdHZhciBib2R5ID0gbW9kZWwuYm9keTtcblx0dmFyIGNvbWJpbmVkQm9keUxlbmd0aCA9IGJvZHkucmVkdWNlKGZ1bmN0aW9uKGNvdW50LCBib2R5SXRlbSkge1xuXHRcdHJldHVybiBjb3VudCArIGJvZHlJdGVtLmJlZm9yZS5sZW5ndGggKyBib2R5SXRlbS5saW5lcy5sZW5ndGggKyBib2R5SXRlbS5hZnRlci5sZW5ndGg7XG5cdH0sIDApO1xuXHRjb21iaW5lZEJvZHlMZW5ndGggKz0gbW9kZWwuYmVmb3JlQm9keS5sZW5ndGggKyBtb2RlbC5hZnRlckJvZHkubGVuZ3RoO1xuXG5cdHZhciB0aXRsZUxpbmVDb3VudCA9IG1vZGVsLnRpdGxlLmxlbmd0aDtcblx0dmFyIGZvb3RlckxpbmVDb3VudCA9IG1vZGVsLmZvb3Rlci5sZW5ndGg7XG5cdHZhciB0aXRsZUZvbnRTaXplID0gbW9kZWwudGl0bGVGb250U2l6ZTtcblx0dmFyIGJvZHlGb250U2l6ZSA9IG1vZGVsLmJvZHlGb250U2l6ZTtcblx0dmFyIGZvb3RlckZvbnRTaXplID0gbW9kZWwuZm9vdGVyRm9udFNpemU7XG5cblx0aGVpZ2h0ICs9IHRpdGxlTGluZUNvdW50ICogdGl0bGVGb250U2l6ZTsgLy8gVGl0bGUgTGluZXNcblx0aGVpZ2h0ICs9IHRpdGxlTGluZUNvdW50ID8gKHRpdGxlTGluZUNvdW50IC0gMSkgKiBtb2RlbC50aXRsZVNwYWNpbmcgOiAwOyAvLyBUaXRsZSBMaW5lIFNwYWNpbmdcblx0aGVpZ2h0ICs9IHRpdGxlTGluZUNvdW50ID8gbW9kZWwudGl0bGVNYXJnaW5Cb3R0b20gOiAwOyAvLyBUaXRsZSdzIGJvdHRvbSBNYXJnaW5cblx0aGVpZ2h0ICs9IGNvbWJpbmVkQm9keUxlbmd0aCAqIGJvZHlGb250U2l6ZTsgLy8gQm9keSBMaW5lc1xuXHRoZWlnaHQgKz0gY29tYmluZWRCb2R5TGVuZ3RoID8gKGNvbWJpbmVkQm9keUxlbmd0aCAtIDEpICogbW9kZWwuYm9keVNwYWNpbmcgOiAwOyAvLyBCb2R5IExpbmUgU3BhY2luZ1xuXHRoZWlnaHQgKz0gZm9vdGVyTGluZUNvdW50ID8gbW9kZWwuZm9vdGVyTWFyZ2luVG9wIDogMDsgLy8gRm9vdGVyIE1hcmdpblxuXHRoZWlnaHQgKz0gZm9vdGVyTGluZUNvdW50ICogKGZvb3RlckZvbnRTaXplKTsgLy8gRm9vdGVyIExpbmVzXG5cdGhlaWdodCArPSBmb290ZXJMaW5lQ291bnQgPyAoZm9vdGVyTGluZUNvdW50IC0gMSkgKiBtb2RlbC5mb290ZXJTcGFjaW5nIDogMDsgLy8gRm9vdGVyIExpbmUgU3BhY2luZ1xuXG5cdC8vIFRpdGxlIHdpZHRoXG5cdHZhciB3aWR0aFBhZGRpbmcgPSAwO1xuXHR2YXIgbWF4TGluZVdpZHRoID0gZnVuY3Rpb24obGluZSkge1xuXHRcdHdpZHRoID0gTWF0aC5tYXgod2lkdGgsIGN0eC5tZWFzdXJlVGV4dChsaW5lKS53aWR0aCArIHdpZHRoUGFkZGluZyk7XG5cdH07XG5cblx0Y3R4LmZvbnQgPSBoZWxwZXJzJDEuZm9udFN0cmluZyh0aXRsZUZvbnRTaXplLCBtb2RlbC5fdGl0bGVGb250U3R5bGUsIG1vZGVsLl90aXRsZUZvbnRGYW1pbHkpO1xuXHRoZWxwZXJzJDEuZWFjaChtb2RlbC50aXRsZSwgbWF4TGluZVdpZHRoKTtcblxuXHQvLyBCb2R5IHdpZHRoXG5cdGN0eC5mb250ID0gaGVscGVycyQxLmZvbnRTdHJpbmcoYm9keUZvbnRTaXplLCBtb2RlbC5fYm9keUZvbnRTdHlsZSwgbW9kZWwuX2JvZHlGb250RmFtaWx5KTtcblx0aGVscGVycyQxLmVhY2gobW9kZWwuYmVmb3JlQm9keS5jb25jYXQobW9kZWwuYWZ0ZXJCb2R5KSwgbWF4TGluZVdpZHRoKTtcblxuXHQvLyBCb2R5IGxpbmVzIG1heSBpbmNsdWRlIHNvbWUgZXh0cmEgd2lkdGggZHVlIHRvIHRoZSBjb2xvciBib3hcblx0d2lkdGhQYWRkaW5nID0gbW9kZWwuZGlzcGxheUNvbG9ycyA/IChib2R5Rm9udFNpemUgKyAyKSA6IDA7XG5cdGhlbHBlcnMkMS5lYWNoKGJvZHksIGZ1bmN0aW9uKGJvZHlJdGVtKSB7XG5cdFx0aGVscGVycyQxLmVhY2goYm9keUl0ZW0uYmVmb3JlLCBtYXhMaW5lV2lkdGgpO1xuXHRcdGhlbHBlcnMkMS5lYWNoKGJvZHlJdGVtLmxpbmVzLCBtYXhMaW5lV2lkdGgpO1xuXHRcdGhlbHBlcnMkMS5lYWNoKGJvZHlJdGVtLmFmdGVyLCBtYXhMaW5lV2lkdGgpO1xuXHR9KTtcblxuXHQvLyBSZXNldCBiYWNrIHRvIDBcblx0d2lkdGhQYWRkaW5nID0gMDtcblxuXHQvLyBGb290ZXIgd2lkdGhcblx0Y3R4LmZvbnQgPSBoZWxwZXJzJDEuZm9udFN0cmluZyhmb290ZXJGb250U2l6ZSwgbW9kZWwuX2Zvb3RlckZvbnRTdHlsZSwgbW9kZWwuX2Zvb3RlckZvbnRGYW1pbHkpO1xuXHRoZWxwZXJzJDEuZWFjaChtb2RlbC5mb290ZXIsIG1heExpbmVXaWR0aCk7XG5cblx0Ly8gQWRkIHBhZGRpbmdcblx0d2lkdGggKz0gMiAqIG1vZGVsLnhQYWRkaW5nO1xuXG5cdHJldHVybiB7XG5cdFx0d2lkdGg6IHdpZHRoLFxuXHRcdGhlaWdodDogaGVpZ2h0XG5cdH07XG59XG5cbi8qKlxuICogSGVscGVyIHRvIGdldCB0aGUgYWxpZ25tZW50IG9mIGEgdG9vbHRpcCBnaXZlbiB0aGUgc2l6ZVxuICovXG5mdW5jdGlvbiBkZXRlcm1pbmVBbGlnbm1lbnQodG9vbHRpcCwgc2l6ZSkge1xuXHR2YXIgbW9kZWwgPSB0b29sdGlwLl9tb2RlbDtcblx0dmFyIGNoYXJ0ID0gdG9vbHRpcC5fY2hhcnQ7XG5cdHZhciBjaGFydEFyZWEgPSB0b29sdGlwLl9jaGFydC5jaGFydEFyZWE7XG5cdHZhciB4QWxpZ24gPSAnY2VudGVyJztcblx0dmFyIHlBbGlnbiA9ICdjZW50ZXInO1xuXG5cdGlmIChtb2RlbC55IDwgc2l6ZS5oZWlnaHQpIHtcblx0XHR5QWxpZ24gPSAndG9wJztcblx0fSBlbHNlIGlmIChtb2RlbC55ID4gKGNoYXJ0LmhlaWdodCAtIHNpemUuaGVpZ2h0KSkge1xuXHRcdHlBbGlnbiA9ICdib3R0b20nO1xuXHR9XG5cblx0dmFyIGxmLCByZjsgLy8gZnVuY3Rpb25zIHRvIGRldGVybWluZSBsZWZ0LCByaWdodCBhbGlnbm1lbnRcblx0dmFyIG9sZiwgb3JmOyAvLyBmdW5jdGlvbnMgdG8gZGV0ZXJtaW5lIGlmIGxlZnQvcmlnaHQgYWxpZ25tZW50IGNhdXNlcyB0b29sdGlwIHRvIGdvIG91dHNpZGUgY2hhcnRcblx0dmFyIHlmOyAvLyBmdW5jdGlvbiB0byBnZXQgdGhlIHkgYWxpZ25tZW50IGlmIHRoZSB0b29sdGlwIGdvZXMgb3V0c2lkZSBvZiB0aGUgbGVmdCBvciByaWdodCBlZGdlc1xuXHR2YXIgbWlkWCA9IChjaGFydEFyZWEubGVmdCArIGNoYXJ0QXJlYS5yaWdodCkgLyAyO1xuXHR2YXIgbWlkWSA9IChjaGFydEFyZWEudG9wICsgY2hhcnRBcmVhLmJvdHRvbSkgLyAyO1xuXG5cdGlmICh5QWxpZ24gPT09ICdjZW50ZXInKSB7XG5cdFx0bGYgPSBmdW5jdGlvbih4KSB7XG5cdFx0XHRyZXR1cm4geCA8PSBtaWRYO1xuXHRcdH07XG5cdFx0cmYgPSBmdW5jdGlvbih4KSB7XG5cdFx0XHRyZXR1cm4geCA+IG1pZFg7XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRsZiA9IGZ1bmN0aW9uKHgpIHtcblx0XHRcdHJldHVybiB4IDw9IChzaXplLndpZHRoIC8gMik7XG5cdFx0fTtcblx0XHRyZiA9IGZ1bmN0aW9uKHgpIHtcblx0XHRcdHJldHVybiB4ID49IChjaGFydC53aWR0aCAtIChzaXplLndpZHRoIC8gMikpO1xuXHRcdH07XG5cdH1cblxuXHRvbGYgPSBmdW5jdGlvbih4KSB7XG5cdFx0cmV0dXJuIHggKyBzaXplLndpZHRoICsgbW9kZWwuY2FyZXRTaXplICsgbW9kZWwuY2FyZXRQYWRkaW5nID4gY2hhcnQud2lkdGg7XG5cdH07XG5cdG9yZiA9IGZ1bmN0aW9uKHgpIHtcblx0XHRyZXR1cm4geCAtIHNpemUud2lkdGggLSBtb2RlbC5jYXJldFNpemUgLSBtb2RlbC5jYXJldFBhZGRpbmcgPCAwO1xuXHR9O1xuXHR5ZiA9IGZ1bmN0aW9uKHkpIHtcblx0XHRyZXR1cm4geSA8PSBtaWRZID8gJ3RvcCcgOiAnYm90dG9tJztcblx0fTtcblxuXHRpZiAobGYobW9kZWwueCkpIHtcblx0XHR4QWxpZ24gPSAnbGVmdCc7XG5cblx0XHQvLyBJcyB0b29sdGlwIHRvbyB3aWRlIGFuZCBnb2VzIG92ZXIgdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNoYXJ0Lj9cblx0XHRpZiAob2xmKG1vZGVsLngpKSB7XG5cdFx0XHR4QWxpZ24gPSAnY2VudGVyJztcblx0XHRcdHlBbGlnbiA9IHlmKG1vZGVsLnkpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChyZihtb2RlbC54KSkge1xuXHRcdHhBbGlnbiA9ICdyaWdodCc7XG5cblx0XHQvLyBJcyB0b29sdGlwIHRvbyB3aWRlIGFuZCBnb2VzIG91dHNpZGUgbGVmdCBlZGdlIG9mIGNhbnZhcz9cblx0XHRpZiAob3JmKG1vZGVsLngpKSB7XG5cdFx0XHR4QWxpZ24gPSAnY2VudGVyJztcblx0XHRcdHlBbGlnbiA9IHlmKG1vZGVsLnkpO1xuXHRcdH1cblx0fVxuXG5cdHZhciBvcHRzID0gdG9vbHRpcC5fb3B0aW9ucztcblx0cmV0dXJuIHtcblx0XHR4QWxpZ246IG9wdHMueEFsaWduID8gb3B0cy54QWxpZ24gOiB4QWxpZ24sXG5cdFx0eUFsaWduOiBvcHRzLnlBbGlnbiA/IG9wdHMueUFsaWduIDogeUFsaWduXG5cdH07XG59XG5cbi8qKlxuICogSGVscGVyIHRvIGdldCB0aGUgbG9jYXRpb24gYSB0b29sdGlwIG5lZWRzIHRvIGJlIHBsYWNlZCBhdCBnaXZlbiB0aGUgaW5pdGlhbCBwb3NpdGlvbiAodmlhIHRoZSB2bSkgYW5kIHRoZSBzaXplIGFuZCBhbGlnbm1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0QmFja2dyb3VuZFBvaW50KHZtLCBzaXplLCBhbGlnbm1lbnQsIGNoYXJ0KSB7XG5cdC8vIEJhY2tncm91bmQgUG9zaXRpb25cblx0dmFyIHggPSB2bS54O1xuXHR2YXIgeSA9IHZtLnk7XG5cblx0dmFyIGNhcmV0U2l6ZSA9IHZtLmNhcmV0U2l6ZTtcblx0dmFyIGNhcmV0UGFkZGluZyA9IHZtLmNhcmV0UGFkZGluZztcblx0dmFyIGNvcm5lclJhZGl1cyA9IHZtLmNvcm5lclJhZGl1cztcblx0dmFyIHhBbGlnbiA9IGFsaWdubWVudC54QWxpZ247XG5cdHZhciB5QWxpZ24gPSBhbGlnbm1lbnQueUFsaWduO1xuXHR2YXIgcGFkZGluZ0FuZFNpemUgPSBjYXJldFNpemUgKyBjYXJldFBhZGRpbmc7XG5cdHZhciByYWRpdXNBbmRQYWRkaW5nID0gY29ybmVyUmFkaXVzICsgY2FyZXRQYWRkaW5nO1xuXG5cdGlmICh4QWxpZ24gPT09ICdyaWdodCcpIHtcblx0XHR4IC09IHNpemUud2lkdGg7XG5cdH0gZWxzZSBpZiAoeEFsaWduID09PSAnY2VudGVyJykge1xuXHRcdHggLT0gKHNpemUud2lkdGggLyAyKTtcblx0XHRpZiAoeCArIHNpemUud2lkdGggPiBjaGFydC53aWR0aCkge1xuXHRcdFx0eCA9IGNoYXJ0LndpZHRoIC0gc2l6ZS53aWR0aDtcblx0XHR9XG5cdFx0aWYgKHggPCAwKSB7XG5cdFx0XHR4ID0gMDtcblx0XHR9XG5cdH1cblxuXHRpZiAoeUFsaWduID09PSAndG9wJykge1xuXHRcdHkgKz0gcGFkZGluZ0FuZFNpemU7XG5cdH0gZWxzZSBpZiAoeUFsaWduID09PSAnYm90dG9tJykge1xuXHRcdHkgLT0gc2l6ZS5oZWlnaHQgKyBwYWRkaW5nQW5kU2l6ZTtcblx0fSBlbHNlIHtcblx0XHR5IC09IChzaXplLmhlaWdodCAvIDIpO1xuXHR9XG5cblx0aWYgKHlBbGlnbiA9PT0gJ2NlbnRlcicpIHtcblx0XHRpZiAoeEFsaWduID09PSAnbGVmdCcpIHtcblx0XHRcdHggKz0gcGFkZGluZ0FuZFNpemU7XG5cdFx0fSBlbHNlIGlmICh4QWxpZ24gPT09ICdyaWdodCcpIHtcblx0XHRcdHggLT0gcGFkZGluZ0FuZFNpemU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKHhBbGlnbiA9PT0gJ2xlZnQnKSB7XG5cdFx0eCAtPSByYWRpdXNBbmRQYWRkaW5nO1xuXHR9IGVsc2UgaWYgKHhBbGlnbiA9PT0gJ3JpZ2h0Jykge1xuXHRcdHggKz0gcmFkaXVzQW5kUGFkZGluZztcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0eDogeCxcblx0XHR5OiB5XG5cdH07XG59XG5cbmZ1bmN0aW9uIGdldEFsaWduZWRYKHZtLCBhbGlnbikge1xuXHRyZXR1cm4gYWxpZ24gPT09ICdjZW50ZXInXG5cdFx0PyB2bS54ICsgdm0ud2lkdGggLyAyXG5cdFx0OiBhbGlnbiA9PT0gJ3JpZ2h0J1xuXHRcdFx0PyB2bS54ICsgdm0ud2lkdGggLSB2bS54UGFkZGluZ1xuXHRcdFx0OiB2bS54ICsgdm0ueFBhZGRpbmc7XG59XG5cbi8qKlxuICogSGVscGVyIHRvIGJ1aWxkIGJlZm9yZSBhbmQgYWZ0ZXIgYm9keSBsaW5lc1xuICovXG5mdW5jdGlvbiBnZXRCZWZvcmVBZnRlckJvZHlMaW5lcyhjYWxsYmFjaykge1xuXHRyZXR1cm4gcHVzaE9yQ29uY2F0KFtdLCBzcGxpdE5ld2xpbmVzKGNhbGxiYWNrKSk7XG59XG5cbnZhciBleHBvcnRzJDMgPSBjb3JlX2VsZW1lbnQuZXh0ZW5kKHtcblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5fbW9kZWwgPSBnZXRCYXNlTW9kZWwodGhpcy5fb3B0aW9ucyk7XG5cdFx0dGhpcy5fbGFzdEFjdGl2ZSA9IFtdO1xuXHR9LFxuXG5cdC8vIEdldCB0aGUgdGl0bGVcblx0Ly8gQXJncyBhcmU6ICh0b29sdGlwSXRlbSwgZGF0YSlcblx0Z2V0VGl0bGU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIG9wdHMgPSBtZS5fb3B0aW9ucztcblx0XHR2YXIgY2FsbGJhY2tzID0gb3B0cy5jYWxsYmFja3M7XG5cblx0XHR2YXIgYmVmb3JlVGl0bGUgPSBjYWxsYmFja3MuYmVmb3JlVGl0bGUuYXBwbHkobWUsIGFyZ3VtZW50cyk7XG5cdFx0dmFyIHRpdGxlID0gY2FsbGJhY2tzLnRpdGxlLmFwcGx5KG1lLCBhcmd1bWVudHMpO1xuXHRcdHZhciBhZnRlclRpdGxlID0gY2FsbGJhY2tzLmFmdGVyVGl0bGUuYXBwbHkobWUsIGFyZ3VtZW50cyk7XG5cblx0XHR2YXIgbGluZXMgPSBbXTtcblx0XHRsaW5lcyA9IHB1c2hPckNvbmNhdChsaW5lcywgc3BsaXROZXdsaW5lcyhiZWZvcmVUaXRsZSkpO1xuXHRcdGxpbmVzID0gcHVzaE9yQ29uY2F0KGxpbmVzLCBzcGxpdE5ld2xpbmVzKHRpdGxlKSk7XG5cdFx0bGluZXMgPSBwdXNoT3JDb25jYXQobGluZXMsIHNwbGl0TmV3bGluZXMoYWZ0ZXJUaXRsZSkpO1xuXG5cdFx0cmV0dXJuIGxpbmVzO1xuXHR9LFxuXG5cdC8vIEFyZ3MgYXJlOiAodG9vbHRpcEl0ZW0sIGRhdGEpXG5cdGdldEJlZm9yZUJvZHk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBnZXRCZWZvcmVBZnRlckJvZHlMaW5lcyh0aGlzLl9vcHRpb25zLmNhbGxiYWNrcy5iZWZvcmVCb2R5LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuXHR9LFxuXG5cdC8vIEFyZ3MgYXJlOiAodG9vbHRpcEl0ZW0sIGRhdGEpXG5cdGdldEJvZHk6IGZ1bmN0aW9uKHRvb2x0aXBJdGVtcywgZGF0YSkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIGNhbGxiYWNrcyA9IG1lLl9vcHRpb25zLmNhbGxiYWNrcztcblx0XHR2YXIgYm9keUl0ZW1zID0gW107XG5cblx0XHRoZWxwZXJzJDEuZWFjaCh0b29sdGlwSXRlbXMsIGZ1bmN0aW9uKHRvb2x0aXBJdGVtKSB7XG5cdFx0XHR2YXIgYm9keUl0ZW0gPSB7XG5cdFx0XHRcdGJlZm9yZTogW10sXG5cdFx0XHRcdGxpbmVzOiBbXSxcblx0XHRcdFx0YWZ0ZXI6IFtdXG5cdFx0XHR9O1xuXHRcdFx0cHVzaE9yQ29uY2F0KGJvZHlJdGVtLmJlZm9yZSwgc3BsaXROZXdsaW5lcyhjYWxsYmFja3MuYmVmb3JlTGFiZWwuY2FsbChtZSwgdG9vbHRpcEl0ZW0sIGRhdGEpKSk7XG5cdFx0XHRwdXNoT3JDb25jYXQoYm9keUl0ZW0ubGluZXMsIGNhbGxiYWNrcy5sYWJlbC5jYWxsKG1lLCB0b29sdGlwSXRlbSwgZGF0YSkpO1xuXHRcdFx0cHVzaE9yQ29uY2F0KGJvZHlJdGVtLmFmdGVyLCBzcGxpdE5ld2xpbmVzKGNhbGxiYWNrcy5hZnRlckxhYmVsLmNhbGwobWUsIHRvb2x0aXBJdGVtLCBkYXRhKSkpO1xuXG5cdFx0XHRib2R5SXRlbXMucHVzaChib2R5SXRlbSk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gYm9keUl0ZW1zO1xuXHR9LFxuXG5cdC8vIEFyZ3MgYXJlOiAodG9vbHRpcEl0ZW0sIGRhdGEpXG5cdGdldEFmdGVyQm9keTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGdldEJlZm9yZUFmdGVyQm9keUxpbmVzKHRoaXMuX29wdGlvbnMuY2FsbGJhY2tzLmFmdGVyQm9keS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcblx0fSxcblxuXHQvLyBHZXQgdGhlIGZvb3RlciBhbmQgYmVmb3JlRm9vdGVyIGFuZCBhZnRlckZvb3RlciBsaW5lc1xuXHQvLyBBcmdzIGFyZTogKHRvb2x0aXBJdGVtLCBkYXRhKVxuXHRnZXRGb290ZXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIGNhbGxiYWNrcyA9IG1lLl9vcHRpb25zLmNhbGxiYWNrcztcblxuXHRcdHZhciBiZWZvcmVGb290ZXIgPSBjYWxsYmFja3MuYmVmb3JlRm9vdGVyLmFwcGx5KG1lLCBhcmd1bWVudHMpO1xuXHRcdHZhciBmb290ZXIgPSBjYWxsYmFja3MuZm9vdGVyLmFwcGx5KG1lLCBhcmd1bWVudHMpO1xuXHRcdHZhciBhZnRlckZvb3RlciA9IGNhbGxiYWNrcy5hZnRlckZvb3Rlci5hcHBseShtZSwgYXJndW1lbnRzKTtcblxuXHRcdHZhciBsaW5lcyA9IFtdO1xuXHRcdGxpbmVzID0gcHVzaE9yQ29uY2F0KGxpbmVzLCBzcGxpdE5ld2xpbmVzKGJlZm9yZUZvb3RlcikpO1xuXHRcdGxpbmVzID0gcHVzaE9yQ29uY2F0KGxpbmVzLCBzcGxpdE5ld2xpbmVzKGZvb3RlcikpO1xuXHRcdGxpbmVzID0gcHVzaE9yQ29uY2F0KGxpbmVzLCBzcGxpdE5ld2xpbmVzKGFmdGVyRm9vdGVyKSk7XG5cblx0XHRyZXR1cm4gbGluZXM7XG5cdH0sXG5cblx0dXBkYXRlOiBmdW5jdGlvbihjaGFuZ2VkKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgb3B0cyA9IG1lLl9vcHRpb25zO1xuXG5cdFx0Ly8gTmVlZCB0byByZWdlbmVyYXRlIHRoZSBtb2RlbCBiZWNhdXNlIGl0cyBmYXN0ZXIgdGhhbiB1c2luZyBleHRlbmQgYW5kIGl0IGlzIG5lY2Vzc2FyeSBkdWUgdG8gdGhlIG9wdGltaXphdGlvbiBpbiBDaGFydC5FbGVtZW50LnRyYW5zaXRpb25cblx0XHQvLyB0aGF0IGRvZXMgX3ZpZXcgPSBfbW9kZWwgaWYgZWFzZSA9PT0gMS4gVGhpcyBjYXVzZXMgdGhlIDJuZCB0b29sdGlwIHVwZGF0ZSB0byBzZXQgcHJvcGVydGllcyBpbiBib3RoIHRoZSB2aWV3IGFuZCBtb2RlbCBhdCB0aGUgc2FtZSB0aW1lXG5cdFx0Ly8gd2hpY2ggYnJlYWtzIGFueSBhbmltYXRpb25zLlxuXHRcdHZhciBleGlzdGluZ01vZGVsID0gbWUuX21vZGVsO1xuXHRcdHZhciBtb2RlbCA9IG1lLl9tb2RlbCA9IGdldEJhc2VNb2RlbChvcHRzKTtcblx0XHR2YXIgYWN0aXZlID0gbWUuX2FjdGl2ZTtcblxuXHRcdHZhciBkYXRhID0gbWUuX2RhdGE7XG5cblx0XHQvLyBJbiB0aGUgY2FzZSB3aGVyZSBhY3RpdmUubGVuZ3RoID09PSAwIHdlIG5lZWQgdG8ga2VlcCB0aGVzZSBhdCBleGlzdGluZyB2YWx1ZXMgZm9yIGdvb2QgYW5pbWF0aW9uc1xuXHRcdHZhciBhbGlnbm1lbnQgPSB7XG5cdFx0XHR4QWxpZ246IGV4aXN0aW5nTW9kZWwueEFsaWduLFxuXHRcdFx0eUFsaWduOiBleGlzdGluZ01vZGVsLnlBbGlnblxuXHRcdH07XG5cdFx0dmFyIGJhY2tncm91bmRQb2ludCA9IHtcblx0XHRcdHg6IGV4aXN0aW5nTW9kZWwueCxcblx0XHRcdHk6IGV4aXN0aW5nTW9kZWwueVxuXHRcdH07XG5cdFx0dmFyIHRvb2x0aXBTaXplID0ge1xuXHRcdFx0d2lkdGg6IGV4aXN0aW5nTW9kZWwud2lkdGgsXG5cdFx0XHRoZWlnaHQ6IGV4aXN0aW5nTW9kZWwuaGVpZ2h0XG5cdFx0fTtcblx0XHR2YXIgdG9vbHRpcFBvc2l0aW9uID0ge1xuXHRcdFx0eDogZXhpc3RpbmdNb2RlbC5jYXJldFgsXG5cdFx0XHR5OiBleGlzdGluZ01vZGVsLmNhcmV0WVxuXHRcdH07XG5cblx0XHR2YXIgaSwgbGVuO1xuXG5cdFx0aWYgKGFjdGl2ZS5sZW5ndGgpIHtcblx0XHRcdG1vZGVsLm9wYWNpdHkgPSAxO1xuXG5cdFx0XHR2YXIgbGFiZWxDb2xvcnMgPSBbXTtcblx0XHRcdHZhciBsYWJlbFRleHRDb2xvcnMgPSBbXTtcblx0XHRcdHRvb2x0aXBQb3NpdGlvbiA9IHBvc2l0aW9uZXJzW29wdHMucG9zaXRpb25dLmNhbGwobWUsIGFjdGl2ZSwgbWUuX2V2ZW50UG9zaXRpb24pO1xuXG5cdFx0XHR2YXIgdG9vbHRpcEl0ZW1zID0gW107XG5cdFx0XHRmb3IgKGkgPSAwLCBsZW4gPSBhY3RpdmUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcblx0XHRcdFx0dG9vbHRpcEl0ZW1zLnB1c2goY3JlYXRlVG9vbHRpcEl0ZW0oYWN0aXZlW2ldKSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHRoZSB1c2VyIHByb3ZpZGVkIGEgZmlsdGVyIGZ1bmN0aW9uLCB1c2UgaXQgdG8gbW9kaWZ5IHRoZSB0b29sdGlwIGl0ZW1zXG5cdFx0XHRpZiAob3B0cy5maWx0ZXIpIHtcblx0XHRcdFx0dG9vbHRpcEl0ZW1zID0gdG9vbHRpcEl0ZW1zLmZpbHRlcihmdW5jdGlvbihhKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9wdHMuZmlsdGVyKGEsIGRhdGEpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGhlIHVzZXIgcHJvdmlkZWQgYSBzb3J0aW5nIGZ1bmN0aW9uLCB1c2UgaXQgdG8gbW9kaWZ5IHRoZSB0b29sdGlwIGl0ZW1zXG5cdFx0XHRpZiAob3B0cy5pdGVtU29ydCkge1xuXHRcdFx0XHR0b29sdGlwSXRlbXMgPSB0b29sdGlwSXRlbXMuc29ydChmdW5jdGlvbihhLCBiKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9wdHMuaXRlbVNvcnQoYSwgYiwgZGF0YSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBEZXRlcm1pbmUgY29sb3JzIGZvciBib3hlc1xuXHRcdFx0aGVscGVycyQxLmVhY2godG9vbHRpcEl0ZW1zLCBmdW5jdGlvbih0b29sdGlwSXRlbSkge1xuXHRcdFx0XHRsYWJlbENvbG9ycy5wdXNoKG9wdHMuY2FsbGJhY2tzLmxhYmVsQ29sb3IuY2FsbChtZSwgdG9vbHRpcEl0ZW0sIG1lLl9jaGFydCkpO1xuXHRcdFx0XHRsYWJlbFRleHRDb2xvcnMucHVzaChvcHRzLmNhbGxiYWNrcy5sYWJlbFRleHRDb2xvci5jYWxsKG1lLCB0b29sdGlwSXRlbSwgbWUuX2NoYXJ0KSk7XG5cdFx0XHR9KTtcblxuXG5cdFx0XHQvLyBCdWlsZCB0aGUgVGV4dCBMaW5lc1xuXHRcdFx0bW9kZWwudGl0bGUgPSBtZS5nZXRUaXRsZSh0b29sdGlwSXRlbXMsIGRhdGEpO1xuXHRcdFx0bW9kZWwuYmVmb3JlQm9keSA9IG1lLmdldEJlZm9yZUJvZHkodG9vbHRpcEl0ZW1zLCBkYXRhKTtcblx0XHRcdG1vZGVsLmJvZHkgPSBtZS5nZXRCb2R5KHRvb2x0aXBJdGVtcywgZGF0YSk7XG5cdFx0XHRtb2RlbC5hZnRlckJvZHkgPSBtZS5nZXRBZnRlckJvZHkodG9vbHRpcEl0ZW1zLCBkYXRhKTtcblx0XHRcdG1vZGVsLmZvb3RlciA9IG1lLmdldEZvb3Rlcih0b29sdGlwSXRlbXMsIGRhdGEpO1xuXG5cdFx0XHQvLyBJbml0aWFsIHBvc2l0aW9uaW5nIGFuZCBjb2xvcnNcblx0XHRcdG1vZGVsLnggPSB0b29sdGlwUG9zaXRpb24ueDtcblx0XHRcdG1vZGVsLnkgPSB0b29sdGlwUG9zaXRpb24ueTtcblx0XHRcdG1vZGVsLmNhcmV0UGFkZGluZyA9IG9wdHMuY2FyZXRQYWRkaW5nO1xuXHRcdFx0bW9kZWwubGFiZWxDb2xvcnMgPSBsYWJlbENvbG9ycztcblx0XHRcdG1vZGVsLmxhYmVsVGV4dENvbG9ycyA9IGxhYmVsVGV4dENvbG9ycztcblxuXHRcdFx0Ly8gZGF0YSBwb2ludHNcblx0XHRcdG1vZGVsLmRhdGFQb2ludHMgPSB0b29sdGlwSXRlbXM7XG5cblx0XHRcdC8vIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIGFsaWdubWVudCBvZiB0aGUgdG9vbHRpcFxuXHRcdFx0dG9vbHRpcFNpemUgPSBnZXRUb29sdGlwU2l6ZSh0aGlzLCBtb2RlbCk7XG5cdFx0XHRhbGlnbm1lbnQgPSBkZXRlcm1pbmVBbGlnbm1lbnQodGhpcywgdG9vbHRpcFNpemUpO1xuXHRcdFx0Ly8gRmluYWwgU2l6ZSBhbmQgUG9zaXRpb25cblx0XHRcdGJhY2tncm91bmRQb2ludCA9IGdldEJhY2tncm91bmRQb2ludChtb2RlbCwgdG9vbHRpcFNpemUsIGFsaWdubWVudCwgbWUuX2NoYXJ0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bW9kZWwub3BhY2l0eSA9IDA7XG5cdFx0fVxuXG5cdFx0bW9kZWwueEFsaWduID0gYWxpZ25tZW50LnhBbGlnbjtcblx0XHRtb2RlbC55QWxpZ24gPSBhbGlnbm1lbnQueUFsaWduO1xuXHRcdG1vZGVsLnggPSBiYWNrZ3JvdW5kUG9pbnQueDtcblx0XHRtb2RlbC55ID0gYmFja2dyb3VuZFBvaW50Lnk7XG5cdFx0bW9kZWwud2lkdGggPSB0b29sdGlwU2l6ZS53aWR0aDtcblx0XHRtb2RlbC5oZWlnaHQgPSB0b29sdGlwU2l6ZS5oZWlnaHQ7XG5cblx0XHQvLyBQb2ludCB3aGVyZSB0aGUgY2FyZXQgb24gdGhlIHRvb2x0aXAgcG9pbnRzIHRvXG5cdFx0bW9kZWwuY2FyZXRYID0gdG9vbHRpcFBvc2l0aW9uLng7XG5cdFx0bW9kZWwuY2FyZXRZID0gdG9vbHRpcFBvc2l0aW9uLnk7XG5cblx0XHRtZS5fbW9kZWwgPSBtb2RlbDtcblxuXHRcdGlmIChjaGFuZ2VkICYmIG9wdHMuY3VzdG9tKSB7XG5cdFx0XHRvcHRzLmN1c3RvbS5jYWxsKG1lLCBtb2RlbCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1lO1xuXHR9LFxuXG5cdGRyYXdDYXJldDogZnVuY3Rpb24odG9vbHRpcFBvaW50LCBzaXplKSB7XG5cdFx0dmFyIGN0eCA9IHRoaXMuX2NoYXJ0LmN0eDtcblx0XHR2YXIgdm0gPSB0aGlzLl92aWV3O1xuXHRcdHZhciBjYXJldFBvc2l0aW9uID0gdGhpcy5nZXRDYXJldFBvc2l0aW9uKHRvb2x0aXBQb2ludCwgc2l6ZSwgdm0pO1xuXG5cdFx0Y3R4LmxpbmVUbyhjYXJldFBvc2l0aW9uLngxLCBjYXJldFBvc2l0aW9uLnkxKTtcblx0XHRjdHgubGluZVRvKGNhcmV0UG9zaXRpb24ueDIsIGNhcmV0UG9zaXRpb24ueTIpO1xuXHRcdGN0eC5saW5lVG8oY2FyZXRQb3NpdGlvbi54MywgY2FyZXRQb3NpdGlvbi55Myk7XG5cdH0sXG5cdGdldENhcmV0UG9zaXRpb246IGZ1bmN0aW9uKHRvb2x0aXBQb2ludCwgc2l6ZSwgdm0pIHtcblx0XHR2YXIgeDEsIHgyLCB4MywgeTEsIHkyLCB5Mztcblx0XHR2YXIgY2FyZXRTaXplID0gdm0uY2FyZXRTaXplO1xuXHRcdHZhciBjb3JuZXJSYWRpdXMgPSB2bS5jb3JuZXJSYWRpdXM7XG5cdFx0dmFyIHhBbGlnbiA9IHZtLnhBbGlnbjtcblx0XHR2YXIgeUFsaWduID0gdm0ueUFsaWduO1xuXHRcdHZhciBwdFggPSB0b29sdGlwUG9pbnQueDtcblx0XHR2YXIgcHRZID0gdG9vbHRpcFBvaW50Lnk7XG5cdFx0dmFyIHdpZHRoID0gc2l6ZS53aWR0aDtcblx0XHR2YXIgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQ7XG5cblx0XHRpZiAoeUFsaWduID09PSAnY2VudGVyJykge1xuXHRcdFx0eTIgPSBwdFkgKyAoaGVpZ2h0IC8gMik7XG5cblx0XHRcdGlmICh4QWxpZ24gPT09ICdsZWZ0Jykge1xuXHRcdFx0XHR4MSA9IHB0WDtcblx0XHRcdFx0eDIgPSB4MSAtIGNhcmV0U2l6ZTtcblx0XHRcdFx0eDMgPSB4MTtcblxuXHRcdFx0XHR5MSA9IHkyICsgY2FyZXRTaXplO1xuXHRcdFx0XHR5MyA9IHkyIC0gY2FyZXRTaXplO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0eDEgPSBwdFggKyB3aWR0aDtcblx0XHRcdFx0eDIgPSB4MSArIGNhcmV0U2l6ZTtcblx0XHRcdFx0eDMgPSB4MTtcblxuXHRcdFx0XHR5MSA9IHkyIC0gY2FyZXRTaXplO1xuXHRcdFx0XHR5MyA9IHkyICsgY2FyZXRTaXplO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoeEFsaWduID09PSAnbGVmdCcpIHtcblx0XHRcdFx0eDIgPSBwdFggKyBjb3JuZXJSYWRpdXMgKyAoY2FyZXRTaXplKTtcblx0XHRcdFx0eDEgPSB4MiAtIGNhcmV0U2l6ZTtcblx0XHRcdFx0eDMgPSB4MiArIGNhcmV0U2l6ZTtcblx0XHRcdH0gZWxzZSBpZiAoeEFsaWduID09PSAncmlnaHQnKSB7XG5cdFx0XHRcdHgyID0gcHRYICsgd2lkdGggLSBjb3JuZXJSYWRpdXMgLSBjYXJldFNpemU7XG5cdFx0XHRcdHgxID0geDIgLSBjYXJldFNpemU7XG5cdFx0XHRcdHgzID0geDIgKyBjYXJldFNpemU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR4MiA9IHZtLmNhcmV0WDtcblx0XHRcdFx0eDEgPSB4MiAtIGNhcmV0U2l6ZTtcblx0XHRcdFx0eDMgPSB4MiArIGNhcmV0U2l6ZTtcblx0XHRcdH1cblx0XHRcdGlmICh5QWxpZ24gPT09ICd0b3AnKSB7XG5cdFx0XHRcdHkxID0gcHRZO1xuXHRcdFx0XHR5MiA9IHkxIC0gY2FyZXRTaXplO1xuXHRcdFx0XHR5MyA9IHkxO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0eTEgPSBwdFkgKyBoZWlnaHQ7XG5cdFx0XHRcdHkyID0geTEgKyBjYXJldFNpemU7XG5cdFx0XHRcdHkzID0geTE7XG5cdFx0XHRcdC8vIGludmVydCBkcmF3aW5nIG9yZGVyXG5cdFx0XHRcdHZhciB0bXAgPSB4Mztcblx0XHRcdFx0eDMgPSB4MTtcblx0XHRcdFx0eDEgPSB0bXA7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7eDE6IHgxLCB4MjogeDIsIHgzOiB4MywgeTE6IHkxLCB5MjogeTIsIHkzOiB5M307XG5cdH0sXG5cblx0ZHJhd1RpdGxlOiBmdW5jdGlvbihwdCwgdm0sIGN0eCkge1xuXHRcdHZhciB0aXRsZSA9IHZtLnRpdGxlO1xuXG5cdFx0aWYgKHRpdGxlLmxlbmd0aCkge1xuXHRcdFx0cHQueCA9IGdldEFsaWduZWRYKHZtLCB2bS5fdGl0bGVBbGlnbik7XG5cblx0XHRcdGN0eC50ZXh0QWxpZ24gPSB2bS5fdGl0bGVBbGlnbjtcblx0XHRcdGN0eC50ZXh0QmFzZWxpbmUgPSAndG9wJztcblxuXHRcdFx0dmFyIHRpdGxlRm9udFNpemUgPSB2bS50aXRsZUZvbnRTaXplO1xuXHRcdFx0dmFyIHRpdGxlU3BhY2luZyA9IHZtLnRpdGxlU3BhY2luZztcblxuXHRcdFx0Y3R4LmZpbGxTdHlsZSA9IHZtLnRpdGxlRm9udENvbG9yO1xuXHRcdFx0Y3R4LmZvbnQgPSBoZWxwZXJzJDEuZm9udFN0cmluZyh0aXRsZUZvbnRTaXplLCB2bS5fdGl0bGVGb250U3R5bGUsIHZtLl90aXRsZUZvbnRGYW1pbHkpO1xuXG5cdFx0XHR2YXIgaSwgbGVuO1xuXHRcdFx0Zm9yIChpID0gMCwgbGVuID0gdGl0bGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcblx0XHRcdFx0Y3R4LmZpbGxUZXh0KHRpdGxlW2ldLCBwdC54LCBwdC55KTtcblx0XHRcdFx0cHQueSArPSB0aXRsZUZvbnRTaXplICsgdGl0bGVTcGFjaW5nOyAvLyBMaW5lIEhlaWdodCBhbmQgc3BhY2luZ1xuXG5cdFx0XHRcdGlmIChpICsgMSA9PT0gdGl0bGUubGVuZ3RoKSB7XG5cdFx0XHRcdFx0cHQueSArPSB2bS50aXRsZU1hcmdpbkJvdHRvbSAtIHRpdGxlU3BhY2luZzsgLy8gSWYgTGFzdCwgYWRkIG1hcmdpbiwgcmVtb3ZlIHNwYWNpbmdcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRkcmF3Qm9keTogZnVuY3Rpb24ocHQsIHZtLCBjdHgpIHtcblx0XHR2YXIgYm9keUZvbnRTaXplID0gdm0uYm9keUZvbnRTaXplO1xuXHRcdHZhciBib2R5U3BhY2luZyA9IHZtLmJvZHlTcGFjaW5nO1xuXHRcdHZhciBib2R5QWxpZ24gPSB2bS5fYm9keUFsaWduO1xuXHRcdHZhciBib2R5ID0gdm0uYm9keTtcblx0XHR2YXIgZHJhd0NvbG9yQm94ZXMgPSB2bS5kaXNwbGF5Q29sb3JzO1xuXHRcdHZhciBsYWJlbENvbG9ycyA9IHZtLmxhYmVsQ29sb3JzO1xuXHRcdHZhciB4TGluZVBhZGRpbmcgPSAwO1xuXHRcdHZhciBjb2xvclggPSBkcmF3Q29sb3JCb3hlcyA/IGdldEFsaWduZWRYKHZtLCAnbGVmdCcpIDogMDtcblx0XHR2YXIgdGV4dENvbG9yO1xuXG5cdFx0Y3R4LnRleHRBbGlnbiA9IGJvZHlBbGlnbjtcblx0XHRjdHgudGV4dEJhc2VsaW5lID0gJ3RvcCc7XG5cdFx0Y3R4LmZvbnQgPSBoZWxwZXJzJDEuZm9udFN0cmluZyhib2R5Rm9udFNpemUsIHZtLl9ib2R5Rm9udFN0eWxlLCB2bS5fYm9keUZvbnRGYW1pbHkpO1xuXG5cdFx0cHQueCA9IGdldEFsaWduZWRYKHZtLCBib2R5QWxpZ24pO1xuXG5cdFx0Ly8gQmVmb3JlIEJvZHlcblx0XHR2YXIgZmlsbExpbmVPZlRleHQgPSBmdW5jdGlvbihsaW5lKSB7XG5cdFx0XHRjdHguZmlsbFRleHQobGluZSwgcHQueCArIHhMaW5lUGFkZGluZywgcHQueSk7XG5cdFx0XHRwdC55ICs9IGJvZHlGb250U2l6ZSArIGJvZHlTcGFjaW5nO1xuXHRcdH07XG5cblx0XHQvLyBCZWZvcmUgYm9keSBsaW5lc1xuXHRcdGN0eC5maWxsU3R5bGUgPSB2bS5ib2R5Rm9udENvbG9yO1xuXHRcdGhlbHBlcnMkMS5lYWNoKHZtLmJlZm9yZUJvZHksIGZpbGxMaW5lT2ZUZXh0KTtcblxuXHRcdHhMaW5lUGFkZGluZyA9IGRyYXdDb2xvckJveGVzICYmIGJvZHlBbGlnbiAhPT0gJ3JpZ2h0J1xuXHRcdFx0PyBib2R5QWxpZ24gPT09ICdjZW50ZXInID8gKGJvZHlGb250U2l6ZSAvIDIgKyAxKSA6IChib2R5Rm9udFNpemUgKyAyKVxuXHRcdFx0OiAwO1xuXG5cdFx0Ly8gRHJhdyBib2R5IGxpbmVzIG5vd1xuXHRcdGhlbHBlcnMkMS5lYWNoKGJvZHksIGZ1bmN0aW9uKGJvZHlJdGVtLCBpKSB7XG5cdFx0XHR0ZXh0Q29sb3IgPSB2bS5sYWJlbFRleHRDb2xvcnNbaV07XG5cdFx0XHRjdHguZmlsbFN0eWxlID0gdGV4dENvbG9yO1xuXHRcdFx0aGVscGVycyQxLmVhY2goYm9keUl0ZW0uYmVmb3JlLCBmaWxsTGluZU9mVGV4dCk7XG5cblx0XHRcdGhlbHBlcnMkMS5lYWNoKGJvZHlJdGVtLmxpbmVzLCBmdW5jdGlvbihsaW5lKSB7XG5cdFx0XHRcdC8vIERyYXcgTGVnZW5kLWxpa2UgYm94ZXMgaWYgbmVlZGVkXG5cdFx0XHRcdGlmIChkcmF3Q29sb3JCb3hlcykge1xuXHRcdFx0XHRcdC8vIEZpbGwgYSB3aGl0ZSByZWN0IHNvIHRoYXQgY29sb3VycyBtZXJnZSBuaWNlbHkgaWYgdGhlIG9wYWNpdHkgaXMgPCAxXG5cdFx0XHRcdFx0Y3R4LmZpbGxTdHlsZSA9IHZtLmxlZ2VuZENvbG9yQmFja2dyb3VuZDtcblx0XHRcdFx0XHRjdHguZmlsbFJlY3QoY29sb3JYLCBwdC55LCBib2R5Rm9udFNpemUsIGJvZHlGb250U2l6ZSk7XG5cblx0XHRcdFx0XHQvLyBCb3JkZXJcblx0XHRcdFx0XHRjdHgubGluZVdpZHRoID0gMTtcblx0XHRcdFx0XHRjdHguc3Ryb2tlU3R5bGUgPSBsYWJlbENvbG9yc1tpXS5ib3JkZXJDb2xvcjtcblx0XHRcdFx0XHRjdHguc3Ryb2tlUmVjdChjb2xvclgsIHB0LnksIGJvZHlGb250U2l6ZSwgYm9keUZvbnRTaXplKTtcblxuXHRcdFx0XHRcdC8vIElubmVyIHNxdWFyZVxuXHRcdFx0XHRcdGN0eC5maWxsU3R5bGUgPSBsYWJlbENvbG9yc1tpXS5iYWNrZ3JvdW5kQ29sb3I7XG5cdFx0XHRcdFx0Y3R4LmZpbGxSZWN0KGNvbG9yWCArIDEsIHB0LnkgKyAxLCBib2R5Rm9udFNpemUgLSAyLCBib2R5Rm9udFNpemUgLSAyKTtcblx0XHRcdFx0XHRjdHguZmlsbFN0eWxlID0gdGV4dENvbG9yO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZmlsbExpbmVPZlRleHQobGluZSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0aGVscGVycyQxLmVhY2goYm9keUl0ZW0uYWZ0ZXIsIGZpbGxMaW5lT2ZUZXh0KTtcblx0XHR9KTtcblxuXHRcdC8vIFJlc2V0IGJhY2sgdG8gMCBmb3IgYWZ0ZXIgYm9keVxuXHRcdHhMaW5lUGFkZGluZyA9IDA7XG5cblx0XHQvLyBBZnRlciBib2R5IGxpbmVzXG5cdFx0aGVscGVycyQxLmVhY2godm0uYWZ0ZXJCb2R5LCBmaWxsTGluZU9mVGV4dCk7XG5cdFx0cHQueSAtPSBib2R5U3BhY2luZzsgLy8gUmVtb3ZlIGxhc3QgYm9keSBzcGFjaW5nXG5cdH0sXG5cblx0ZHJhd0Zvb3RlcjogZnVuY3Rpb24ocHQsIHZtLCBjdHgpIHtcblx0XHR2YXIgZm9vdGVyID0gdm0uZm9vdGVyO1xuXG5cdFx0aWYgKGZvb3Rlci5sZW5ndGgpIHtcblx0XHRcdHB0LnggPSBnZXRBbGlnbmVkWCh2bSwgdm0uX2Zvb3RlckFsaWduKTtcblx0XHRcdHB0LnkgKz0gdm0uZm9vdGVyTWFyZ2luVG9wO1xuXG5cdFx0XHRjdHgudGV4dEFsaWduID0gdm0uX2Zvb3RlckFsaWduO1xuXHRcdFx0Y3R4LnRleHRCYXNlbGluZSA9ICd0b3AnO1xuXG5cdFx0XHRjdHguZmlsbFN0eWxlID0gdm0uZm9vdGVyRm9udENvbG9yO1xuXHRcdFx0Y3R4LmZvbnQgPSBoZWxwZXJzJDEuZm9udFN0cmluZyh2bS5mb290ZXJGb250U2l6ZSwgdm0uX2Zvb3RlckZvbnRTdHlsZSwgdm0uX2Zvb3RlckZvbnRGYW1pbHkpO1xuXG5cdFx0XHRoZWxwZXJzJDEuZWFjaChmb290ZXIsIGZ1bmN0aW9uKGxpbmUpIHtcblx0XHRcdFx0Y3R4LmZpbGxUZXh0KGxpbmUsIHB0LngsIHB0LnkpO1xuXHRcdFx0XHRwdC55ICs9IHZtLmZvb3RlckZvbnRTaXplICsgdm0uZm9vdGVyU3BhY2luZztcblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHRkcmF3QmFja2dyb3VuZDogZnVuY3Rpb24ocHQsIHZtLCBjdHgsIHRvb2x0aXBTaXplKSB7XG5cdFx0Y3R4LmZpbGxTdHlsZSA9IHZtLmJhY2tncm91bmRDb2xvcjtcblx0XHRjdHguc3Ryb2tlU3R5bGUgPSB2bS5ib3JkZXJDb2xvcjtcblx0XHRjdHgubGluZVdpZHRoID0gdm0uYm9yZGVyV2lkdGg7XG5cdFx0dmFyIHhBbGlnbiA9IHZtLnhBbGlnbjtcblx0XHR2YXIgeUFsaWduID0gdm0ueUFsaWduO1xuXHRcdHZhciB4ID0gcHQueDtcblx0XHR2YXIgeSA9IHB0Lnk7XG5cdFx0dmFyIHdpZHRoID0gdG9vbHRpcFNpemUud2lkdGg7XG5cdFx0dmFyIGhlaWdodCA9IHRvb2x0aXBTaXplLmhlaWdodDtcblx0XHR2YXIgcmFkaXVzID0gdm0uY29ybmVyUmFkaXVzO1xuXG5cdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdGN0eC5tb3ZlVG8oeCArIHJhZGl1cywgeSk7XG5cdFx0aWYgKHlBbGlnbiA9PT0gJ3RvcCcpIHtcblx0XHRcdHRoaXMuZHJhd0NhcmV0KHB0LCB0b29sdGlwU2l6ZSk7XG5cdFx0fVxuXHRcdGN0eC5saW5lVG8oeCArIHdpZHRoIC0gcmFkaXVzLCB5KTtcblx0XHRjdHgucXVhZHJhdGljQ3VydmVUbyh4ICsgd2lkdGgsIHksIHggKyB3aWR0aCwgeSArIHJhZGl1cyk7XG5cdFx0aWYgKHlBbGlnbiA9PT0gJ2NlbnRlcicgJiYgeEFsaWduID09PSAncmlnaHQnKSB7XG5cdFx0XHR0aGlzLmRyYXdDYXJldChwdCwgdG9vbHRpcFNpemUpO1xuXHRcdH1cblx0XHRjdHgubGluZVRvKHggKyB3aWR0aCwgeSArIGhlaWdodCAtIHJhZGl1cyk7XG5cdFx0Y3R4LnF1YWRyYXRpY0N1cnZlVG8oeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGggLSByYWRpdXMsIHkgKyBoZWlnaHQpO1xuXHRcdGlmICh5QWxpZ24gPT09ICdib3R0b20nKSB7XG5cdFx0XHR0aGlzLmRyYXdDYXJldChwdCwgdG9vbHRpcFNpemUpO1xuXHRcdH1cblx0XHRjdHgubGluZVRvKHggKyByYWRpdXMsIHkgKyBoZWlnaHQpO1xuXHRcdGN0eC5xdWFkcmF0aWNDdXJ2ZVRvKHgsIHkgKyBoZWlnaHQsIHgsIHkgKyBoZWlnaHQgLSByYWRpdXMpO1xuXHRcdGlmICh5QWxpZ24gPT09ICdjZW50ZXInICYmIHhBbGlnbiA9PT0gJ2xlZnQnKSB7XG5cdFx0XHR0aGlzLmRyYXdDYXJldChwdCwgdG9vbHRpcFNpemUpO1xuXHRcdH1cblx0XHRjdHgubGluZVRvKHgsIHkgKyByYWRpdXMpO1xuXHRcdGN0eC5xdWFkcmF0aWNDdXJ2ZVRvKHgsIHksIHggKyByYWRpdXMsIHkpO1xuXHRcdGN0eC5jbG9zZVBhdGgoKTtcblxuXHRcdGN0eC5maWxsKCk7XG5cblx0XHRpZiAodm0uYm9yZGVyV2lkdGggPiAwKSB7XG5cdFx0XHRjdHguc3Ryb2tlKCk7XG5cdFx0fVxuXHR9LFxuXG5cdGRyYXc6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBjdHggPSB0aGlzLl9jaGFydC5jdHg7XG5cdFx0dmFyIHZtID0gdGhpcy5fdmlldztcblxuXHRcdGlmICh2bS5vcGFjaXR5ID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIHRvb2x0aXBTaXplID0ge1xuXHRcdFx0d2lkdGg6IHZtLndpZHRoLFxuXHRcdFx0aGVpZ2h0OiB2bS5oZWlnaHRcblx0XHR9O1xuXHRcdHZhciBwdCA9IHtcblx0XHRcdHg6IHZtLngsXG5cdFx0XHR5OiB2bS55XG5cdFx0fTtcblxuXHRcdC8vIElFMTEvRWRnZSBkb2VzIG5vdCBsaWtlIHZlcnkgc21hbGwgb3BhY2l0aWVzLCBzbyBzbmFwIHRvIDBcblx0XHR2YXIgb3BhY2l0eSA9IE1hdGguYWJzKHZtLm9wYWNpdHkgPCAxZS0zKSA/IDAgOiB2bS5vcGFjaXR5O1xuXG5cdFx0Ly8gVHJ1dGh5L2ZhbHNleSB2YWx1ZSBmb3IgZW1wdHkgdG9vbHRpcFxuXHRcdHZhciBoYXNUb29sdGlwQ29udGVudCA9IHZtLnRpdGxlLmxlbmd0aCB8fCB2bS5iZWZvcmVCb2R5Lmxlbmd0aCB8fCB2bS5ib2R5Lmxlbmd0aCB8fCB2bS5hZnRlckJvZHkubGVuZ3RoIHx8IHZtLmZvb3Rlci5sZW5ndGg7XG5cblx0XHRpZiAodGhpcy5fb3B0aW9ucy5lbmFibGVkICYmIGhhc1Rvb2x0aXBDb250ZW50KSB7XG5cdFx0XHRjdHguc2F2ZSgpO1xuXHRcdFx0Y3R4Lmdsb2JhbEFscGhhID0gb3BhY2l0eTtcblxuXHRcdFx0Ly8gRHJhdyBCYWNrZ3JvdW5kXG5cdFx0XHR0aGlzLmRyYXdCYWNrZ3JvdW5kKHB0LCB2bSwgY3R4LCB0b29sdGlwU2l6ZSk7XG5cblx0XHRcdC8vIERyYXcgVGl0bGUsIEJvZHksIGFuZCBGb290ZXJcblx0XHRcdHB0LnkgKz0gdm0ueVBhZGRpbmc7XG5cblx0XHRcdC8vIFRpdGxlc1xuXHRcdFx0dGhpcy5kcmF3VGl0bGUocHQsIHZtLCBjdHgpO1xuXG5cdFx0XHQvLyBCb2R5XG5cdFx0XHR0aGlzLmRyYXdCb2R5KHB0LCB2bSwgY3R4KTtcblxuXHRcdFx0Ly8gRm9vdGVyXG5cdFx0XHR0aGlzLmRyYXdGb290ZXIocHQsIHZtLCBjdHgpO1xuXG5cdFx0XHRjdHgucmVzdG9yZSgpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogSGFuZGxlIGFuIGV2ZW50XG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7SUV2ZW50fSBldmVudCAtIFRoZSBldmVudCB0byBoYW5kbGVcblx0ICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIHRvb2x0aXAgY2hhbmdlZFxuXHQgKi9cblx0aGFuZGxlRXZlbnQ6IGZ1bmN0aW9uKGUpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciBvcHRpb25zID0gbWUuX29wdGlvbnM7XG5cdFx0dmFyIGNoYW5nZWQgPSBmYWxzZTtcblxuXHRcdG1lLl9sYXN0QWN0aXZlID0gbWUuX2xhc3RBY3RpdmUgfHwgW107XG5cblx0XHQvLyBGaW5kIEFjdGl2ZSBFbGVtZW50cyBmb3IgdG9vbHRpcHNcblx0XHRpZiAoZS50eXBlID09PSAnbW91c2VvdXQnKSB7XG5cdFx0XHRtZS5fYWN0aXZlID0gW107XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1lLl9hY3RpdmUgPSBtZS5fY2hhcnQuZ2V0RWxlbWVudHNBdEV2ZW50Rm9yTW9kZShlLCBvcHRpb25zLm1vZGUsIG9wdGlvbnMpO1xuXHRcdH1cblxuXHRcdC8vIFJlbWVtYmVyIExhc3QgQWN0aXZlc1xuXHRcdGNoYW5nZWQgPSAhaGVscGVycyQxLmFycmF5RXF1YWxzKG1lLl9hY3RpdmUsIG1lLl9sYXN0QWN0aXZlKTtcblxuXHRcdC8vIE9ubHkgaGFuZGxlIHRhcmdldCBldmVudCBvbiB0b29sdGlwIGNoYW5nZVxuXHRcdGlmIChjaGFuZ2VkKSB7XG5cdFx0XHRtZS5fbGFzdEFjdGl2ZSA9IG1lLl9hY3RpdmU7XG5cblx0XHRcdGlmIChvcHRpb25zLmVuYWJsZWQgfHwgb3B0aW9ucy5jdXN0b20pIHtcblx0XHRcdFx0bWUuX2V2ZW50UG9zaXRpb24gPSB7XG5cdFx0XHRcdFx0eDogZS54LFxuXHRcdFx0XHRcdHk6IGUueVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdG1lLnVwZGF0ZSh0cnVlKTtcblx0XHRcdFx0bWUucGl2b3QoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2hhbmdlZDtcblx0fVxufSk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBDaGFydC5Ub29sdGlwLnBvc2l0aW9uZXJzXG4gKi9cbnZhciBwb3NpdGlvbmVyc18xID0gcG9zaXRpb25lcnM7XG5cbnZhciBjb3JlX3Rvb2x0aXAgPSBleHBvcnRzJDM7XG5jb3JlX3Rvb2x0aXAucG9zaXRpb25lcnMgPSBwb3NpdGlvbmVyc18xO1xuXG52YXIgdmFsdWVPckRlZmF1bHQkOCA9IGhlbHBlcnMkMS52YWx1ZU9yRGVmYXVsdDtcblxuY29yZV9kZWZhdWx0cy5fc2V0KCdnbG9iYWwnLCB7XG5cdGVsZW1lbnRzOiB7fSxcblx0ZXZlbnRzOiBbXG5cdFx0J21vdXNlbW92ZScsXG5cdFx0J21vdXNlb3V0Jyxcblx0XHQnY2xpY2snLFxuXHRcdCd0b3VjaHN0YXJ0Jyxcblx0XHQndG91Y2htb3ZlJ1xuXHRdLFxuXHRob3Zlcjoge1xuXHRcdG9uSG92ZXI6IG51bGwsXG5cdFx0bW9kZTogJ25lYXJlc3QnLFxuXHRcdGludGVyc2VjdDogdHJ1ZSxcblx0XHRhbmltYXRpb25EdXJhdGlvbjogNDAwXG5cdH0sXG5cdG9uQ2xpY2s6IG51bGwsXG5cdG1haW50YWluQXNwZWN0UmF0aW86IHRydWUsXG5cdHJlc3BvbnNpdmU6IHRydWUsXG5cdHJlc3BvbnNpdmVBbmltYXRpb25EdXJhdGlvbjogMFxufSk7XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgbWVyZ2UgdGhlIGdpdmVuIGNvbmZpZyBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgYHNjYWxlc2Agb3B0aW9uXG4gKiBieSBpbmNvcnBvcmF0aW5nIHNjYWxlIGRlZmF1bHRzIGluIGB4QXhlc2AgYW5kIGB5QXhlc2AgYXJyYXkgaXRlbXMsIHRoZW5cbiAqIHJldHVybnMgYSBkZWVwIGNvcHkgb2YgdGhlIHJlc3VsdCwgdGh1cyBkb2Vzbid0IGFsdGVyIGlucHV0cy5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VTY2FsZUNvbmZpZygvKiBjb25maWcgb2JqZWN0cyAuLi4gKi8pIHtcblx0cmV0dXJuIGhlbHBlcnMkMS5tZXJnZSh7fSwgW10uc2xpY2UuY2FsbChhcmd1bWVudHMpLCB7XG5cdFx0bWVyZ2VyOiBmdW5jdGlvbihrZXksIHRhcmdldCwgc291cmNlLCBvcHRpb25zKSB7XG5cdFx0XHRpZiAoa2V5ID09PSAneEF4ZXMnIHx8IGtleSA9PT0gJ3lBeGVzJykge1xuXHRcdFx0XHR2YXIgc2xlbiA9IHNvdXJjZVtrZXldLmxlbmd0aDtcblx0XHRcdFx0dmFyIGksIHR5cGUsIHNjYWxlO1xuXG5cdFx0XHRcdGlmICghdGFyZ2V0W2tleV0pIHtcblx0XHRcdFx0XHR0YXJnZXRba2V5XSA9IFtdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IHNsZW47ICsraSkge1xuXHRcdFx0XHRcdHNjYWxlID0gc291cmNlW2tleV1baV07XG5cdFx0XHRcdFx0dHlwZSA9IHZhbHVlT3JEZWZhdWx0JDgoc2NhbGUudHlwZSwga2V5ID09PSAneEF4ZXMnID8gJ2NhdGVnb3J5JyA6ICdsaW5lYXInKTtcblxuXHRcdFx0XHRcdGlmIChpID49IHRhcmdldFtrZXldLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0dGFyZ2V0W2tleV0ucHVzaCh7fSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCF0YXJnZXRba2V5XVtpXS50eXBlIHx8IChzY2FsZS50eXBlICYmIHNjYWxlLnR5cGUgIT09IHRhcmdldFtrZXldW2ldLnR5cGUpKSB7XG5cdFx0XHRcdFx0XHQvLyBuZXcvdW50eXBlZCBzY2FsZSBvciB0eXBlIGNoYW5nZWQ6IGxldCdzIGFwcGx5IHRoZSBuZXcgZGVmYXVsdHNcblx0XHRcdFx0XHRcdC8vIHRoZW4gbWVyZ2Ugc291cmNlIHNjYWxlIHRvIGNvcnJlY3RseSBvdmVyd3JpdGUgdGhlIGRlZmF1bHRzLlxuXHRcdFx0XHRcdFx0aGVscGVycyQxLm1lcmdlKHRhcmdldFtrZXldW2ldLCBbY29yZV9zY2FsZVNlcnZpY2UuZ2V0U2NhbGVEZWZhdWx0cyh0eXBlKSwgc2NhbGVdKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gc2NhbGVzIHR5cGUgYXJlIHRoZSBzYW1lXG5cdFx0XHRcdFx0XHRoZWxwZXJzJDEubWVyZ2UodGFyZ2V0W2tleV1baV0sIHNjYWxlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGhlbHBlcnMkMS5fbWVyZ2VyKGtleSwgdGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgbWVyZ2UgdGhlIGdpdmVuIGNvbmZpZyBvYmplY3RzIGFzIHRoZSByb290IG9wdGlvbnMgYnkgaGFuZGxpbmdcbiAqIGRlZmF1bHQgc2NhbGUgb3B0aW9ucyBmb3IgdGhlIGBzY2FsZXNgIGFuZCBgc2NhbGVgIHByb3BlcnRpZXMsIHRoZW4gcmV0dXJuc1xuICogYSBkZWVwIGNvcHkgb2YgdGhlIHJlc3VsdCwgdGh1cyBkb2Vzbid0IGFsdGVyIGlucHV0cy5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VDb25maWcoLyogY29uZmlnIG9iamVjdHMgLi4uICovKSB7XG5cdHJldHVybiBoZWxwZXJzJDEubWVyZ2Uoe30sIFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSwge1xuXHRcdG1lcmdlcjogZnVuY3Rpb24oa2V5LCB0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucykge1xuXHRcdFx0dmFyIHR2YWwgPSB0YXJnZXRba2V5XSB8fCB7fTtcblx0XHRcdHZhciBzdmFsID0gc291cmNlW2tleV07XG5cblx0XHRcdGlmIChrZXkgPT09ICdzY2FsZXMnKSB7XG5cdFx0XHRcdC8vIHNjYWxlIGNvbmZpZyBtZXJnaW5nIGlzIGNvbXBsZXguIEFkZCBvdXIgb3duIGZ1bmN0aW9uIGhlcmUgZm9yIHRoYXRcblx0XHRcdFx0dGFyZ2V0W2tleV0gPSBtZXJnZVNjYWxlQ29uZmlnKHR2YWwsIHN2YWwpO1xuXHRcdFx0fSBlbHNlIGlmIChrZXkgPT09ICdzY2FsZScpIHtcblx0XHRcdFx0Ly8gdXNlZCBpbiBwb2xhciBhcmVhICYgcmFkYXIgY2hhcnRzIHNpbmNlIHRoZXJlIGlzIG9ubHkgb25lIHNjYWxlXG5cdFx0XHRcdHRhcmdldFtrZXldID0gaGVscGVycyQxLm1lcmdlKHR2YWwsIFtjb3JlX3NjYWxlU2VydmljZS5nZXRTY2FsZURlZmF1bHRzKHN2YWwudHlwZSksIHN2YWxdKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGhlbHBlcnMkMS5fbWVyZ2VyKGtleSwgdGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59XG5cbmZ1bmN0aW9uIGluaXRDb25maWcoY29uZmlnKSB7XG5cdGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcblxuXHQvLyBEbyBOT1QgdXNlIG1lcmdlQ29uZmlnIGZvciB0aGUgZGF0YSBvYmplY3QgYmVjYXVzZSB0aGlzIG1ldGhvZCBtZXJnZXMgYXJyYXlzXG5cdC8vIGFuZCBzbyB3b3VsZCBjaGFuZ2UgcmVmZXJlbmNlcyB0byBsYWJlbHMgYW5kIGRhdGFzZXRzLCBwcmV2ZW50aW5nIGRhdGEgdXBkYXRlcy5cblx0dmFyIGRhdGEgPSBjb25maWcuZGF0YSA9IGNvbmZpZy5kYXRhIHx8IHt9O1xuXHRkYXRhLmRhdGFzZXRzID0gZGF0YS5kYXRhc2V0cyB8fCBbXTtcblx0ZGF0YS5sYWJlbHMgPSBkYXRhLmxhYmVscyB8fCBbXTtcblxuXHRjb25maWcub3B0aW9ucyA9IG1lcmdlQ29uZmlnKFxuXHRcdGNvcmVfZGVmYXVsdHMuZ2xvYmFsLFxuXHRcdGNvcmVfZGVmYXVsdHNbY29uZmlnLnR5cGVdLFxuXHRcdGNvbmZpZy5vcHRpb25zIHx8IHt9KTtcblxuXHRyZXR1cm4gY29uZmlnO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVDb25maWcoY2hhcnQpIHtcblx0dmFyIG5ld09wdGlvbnMgPSBjaGFydC5vcHRpb25zO1xuXG5cdGhlbHBlcnMkMS5lYWNoKGNoYXJ0LnNjYWxlcywgZnVuY3Rpb24oc2NhbGUpIHtcblx0XHRjb3JlX2xheW91dHMucmVtb3ZlQm94KGNoYXJ0LCBzY2FsZSk7XG5cdH0pO1xuXG5cdG5ld09wdGlvbnMgPSBtZXJnZUNvbmZpZyhcblx0XHRjb3JlX2RlZmF1bHRzLmdsb2JhbCxcblx0XHRjb3JlX2RlZmF1bHRzW2NoYXJ0LmNvbmZpZy50eXBlXSxcblx0XHRuZXdPcHRpb25zKTtcblxuXHRjaGFydC5vcHRpb25zID0gY2hhcnQuY29uZmlnLm9wdGlvbnMgPSBuZXdPcHRpb25zO1xuXHRjaGFydC5lbnN1cmVTY2FsZXNIYXZlSURzKCk7XG5cdGNoYXJ0LmJ1aWxkT3JVcGRhdGVTY2FsZXMoKTtcblxuXHQvLyBUb29sdGlwXG5cdGNoYXJ0LnRvb2x0aXAuX29wdGlvbnMgPSBuZXdPcHRpb25zLnRvb2x0aXBzO1xuXHRjaGFydC50b29sdGlwLmluaXRpYWxpemUoKTtcbn1cblxuZnVuY3Rpb24gcG9zaXRpb25Jc0hvcml6b250YWwocG9zaXRpb24pIHtcblx0cmV0dXJuIHBvc2l0aW9uID09PSAndG9wJyB8fCBwb3NpdGlvbiA9PT0gJ2JvdHRvbSc7XG59XG5cbnZhciBDaGFydCA9IGZ1bmN0aW9uKGl0ZW0sIGNvbmZpZykge1xuXHR0aGlzLmNvbnN0cnVjdChpdGVtLCBjb25maWcpO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbmhlbHBlcnMkMS5leHRlbmQoQ2hhcnQucHJvdG90eXBlLCAvKiogQGxlbmRzIENoYXJ0ICovIHtcblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRjb25zdHJ1Y3Q6IGZ1bmN0aW9uKGl0ZW0sIGNvbmZpZykge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cblx0XHRjb25maWcgPSBpbml0Q29uZmlnKGNvbmZpZyk7XG5cblx0XHR2YXIgY29udGV4dCA9IHBsYXRmb3JtLmFjcXVpcmVDb250ZXh0KGl0ZW0sIGNvbmZpZyk7XG5cdFx0dmFyIGNhbnZhcyA9IGNvbnRleHQgJiYgY29udGV4dC5jYW52YXM7XG5cdFx0dmFyIGhlaWdodCA9IGNhbnZhcyAmJiBjYW52YXMuaGVpZ2h0O1xuXHRcdHZhciB3aWR0aCA9IGNhbnZhcyAmJiBjYW52YXMud2lkdGg7XG5cblx0XHRtZS5pZCA9IGhlbHBlcnMkMS51aWQoKTtcblx0XHRtZS5jdHggPSBjb250ZXh0O1xuXHRcdG1lLmNhbnZhcyA9IGNhbnZhcztcblx0XHRtZS5jb25maWcgPSBjb25maWc7XG5cdFx0bWUud2lkdGggPSB3aWR0aDtcblx0XHRtZS5oZWlnaHQgPSBoZWlnaHQ7XG5cdFx0bWUuYXNwZWN0UmF0aW8gPSBoZWlnaHQgPyB3aWR0aCAvIGhlaWdodCA6IG51bGw7XG5cdFx0bWUub3B0aW9ucyA9IGNvbmZpZy5vcHRpb25zO1xuXHRcdG1lLl9idWZmZXJlZFJlbmRlciA9IGZhbHNlO1xuXG5cdFx0LyoqXG5cdFx0ICogUHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIENoYXJ0IGFuZCBDaGFydC5Db250cm9sbGVyIGhhdmUgYmVlbiBtZXJnZWQsXG5cdFx0ICogdGhlIFwiaW5zdGFuY2VcIiBzdGlsbCBuZWVkIHRvIGJlIGRlZmluZWQgc2luY2UgaXQgbWlnaHQgYmUgY2FsbGVkIGZyb20gcGx1Z2lucy5cblx0XHQgKiBAcHJvcCBDaGFydCNjaGFydFxuXHRcdCAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMi42LjBcblx0XHQgKiBAdG9kbyByZW1vdmUgYXQgdmVyc2lvbiAzXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHRtZS5jaGFydCA9IG1lO1xuXHRcdG1lLmNvbnRyb2xsZXIgPSBtZTsgLy8gY2hhcnQuY2hhcnQuY29udHJvbGxlciAjaW5jZXB0aW9uXG5cblx0XHQvLyBBZGQgdGhlIGNoYXJ0IGluc3RhbmNlIHRvIHRoZSBnbG9iYWwgbmFtZXNwYWNlXG5cdFx0Q2hhcnQuaW5zdGFuY2VzW21lLmlkXSA9IG1lO1xuXG5cdFx0Ly8gRGVmaW5lIGFsaWFzIHRvIHRoZSBjb25maWcgZGF0YTogYGNoYXJ0LmRhdGEgPT09IGNoYXJ0LmNvbmZpZy5kYXRhYFxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZSwgJ2RhdGEnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbWUuY29uZmlnLmRhdGE7XG5cdFx0XHR9LFxuXHRcdFx0c2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuXHRcdFx0XHRtZS5jb25maWcuZGF0YSA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aWYgKCFjb250ZXh0IHx8ICFjYW52YXMpIHtcblx0XHRcdC8vIFRoZSBnaXZlbiBpdGVtIGlzIG5vdCBhIGNvbXBhdGlibGUgY29udGV4dDJkIGVsZW1lbnQsIGxldCdzIHJldHVybiBiZWZvcmUgZmluYWxpemluZ1xuXHRcdFx0Ly8gdGhlIGNoYXJ0IGluaXRpYWxpemF0aW9uIGJ1dCBhZnRlciBzZXR0aW5nIGJhc2ljIGNoYXJ0IC8gY29udHJvbGxlciBwcm9wZXJ0aWVzIHRoYXRcblx0XHRcdC8vIGNhbiBoZWxwIHRvIGZpZ3VyZSBvdXQgdGhhdCB0aGUgY2hhcnQgaXMgbm90IHZhbGlkIChlLmcgY2hhcnQuY2FudmFzICE9PSBudWxsKTtcblx0XHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFydGpzL0NoYXJ0LmpzL2lzc3Vlcy8yODA3XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBjaGFydDogY2FuJ3QgYWNxdWlyZSBjb250ZXh0IGZyb20gdGhlIGdpdmVuIGl0ZW1cIik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bWUuaW5pdGlhbGl6ZSgpO1xuXHRcdG1lLnVwZGF0ZSgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblxuXHRcdC8vIEJlZm9yZSBpbml0IHBsdWdpbiBub3RpZmljYXRpb25cblx0XHRjb3JlX3BsdWdpbnMubm90aWZ5KG1lLCAnYmVmb3JlSW5pdCcpO1xuXG5cdFx0aGVscGVycyQxLnJldGluYVNjYWxlKG1lLCBtZS5vcHRpb25zLmRldmljZVBpeGVsUmF0aW8pO1xuXG5cdFx0bWUuYmluZEV2ZW50cygpO1xuXG5cdFx0aWYgKG1lLm9wdGlvbnMucmVzcG9uc2l2ZSkge1xuXHRcdFx0Ly8gSW5pdGlhbCByZXNpemUgYmVmb3JlIGNoYXJ0IGRyYXdzIChtdXN0IGJlIHNpbGVudCB0byBwcmVzZXJ2ZSBpbml0aWFsIGFuaW1hdGlvbnMpLlxuXHRcdFx0bWUucmVzaXplKHRydWUpO1xuXHRcdH1cblxuXHRcdC8vIE1ha2Ugc3VyZSBzY2FsZXMgaGF2ZSBJRHMgYW5kIGFyZSBidWlsdCBiZWZvcmUgd2UgYnVpbGQgYW55IGNvbnRyb2xsZXJzLlxuXHRcdG1lLmVuc3VyZVNjYWxlc0hhdmVJRHMoKTtcblx0XHRtZS5idWlsZE9yVXBkYXRlU2NhbGVzKCk7XG5cdFx0bWUuaW5pdFRvb2xUaXAoKTtcblxuXHRcdC8vIEFmdGVyIGluaXQgcGx1Z2luIG5vdGlmaWNhdGlvblxuXHRcdGNvcmVfcGx1Z2lucy5ub3RpZnkobWUsICdhZnRlckluaXQnKTtcblxuXHRcdHJldHVybiBtZTtcblx0fSxcblxuXHRjbGVhcjogZnVuY3Rpb24oKSB7XG5cdFx0aGVscGVycyQxLmNhbnZhcy5jbGVhcih0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzdG9wOiBmdW5jdGlvbigpIHtcblx0XHQvLyBTdG9wcyBhbnkgY3VycmVudCBhbmltYXRpb24gbG9vcCBvY2N1cnJpbmdcblx0XHRjb3JlX2FuaW1hdGlvbnMuY2FuY2VsQW5pbWF0aW9uKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlc2l6ZTogZnVuY3Rpb24oc2lsZW50KSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgb3B0aW9ucyA9IG1lLm9wdGlvbnM7XG5cdFx0dmFyIGNhbnZhcyA9IG1lLmNhbnZhcztcblx0XHR2YXIgYXNwZWN0UmF0aW8gPSAob3B0aW9ucy5tYWludGFpbkFzcGVjdFJhdGlvICYmIG1lLmFzcGVjdFJhdGlvKSB8fCBudWxsO1xuXG5cdFx0Ly8gdGhlIGNhbnZhcyByZW5kZXIgd2lkdGggYW5kIGhlaWdodCB3aWxsIGJlIGNhc3RlZCB0byBpbnRlZ2VycyBzbyBtYWtlIHN1cmUgdGhhdFxuXHRcdC8vIHRoZSBjYW52YXMgZGlzcGxheSBzdHlsZSB1c2VzIHRoZSBzYW1lIGludGVnZXIgdmFsdWVzIHRvIGF2b2lkIGJsdXJyaW5nIGVmZmVjdC5cblxuXHRcdC8vIFNldCB0byAwIGluc3RlYWQgb2YgY2FudmFzLnNpemUgYmVjYXVzZSB0aGUgc2l6ZSBkZWZhdWx0cyB0byAzMDB4MTUwIGlmIHRoZSBlbGVtZW50IGlzIGNvbGxhcHNlZFxuXHRcdHZhciBuZXdXaWR0aCA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoaGVscGVycyQxLmdldE1heGltdW1XaWR0aChjYW52YXMpKSk7XG5cdFx0dmFyIG5ld0hlaWdodCA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoYXNwZWN0UmF0aW8gPyBuZXdXaWR0aCAvIGFzcGVjdFJhdGlvIDogaGVscGVycyQxLmdldE1heGltdW1IZWlnaHQoY2FudmFzKSkpO1xuXG5cdFx0aWYgKG1lLndpZHRoID09PSBuZXdXaWR0aCAmJiBtZS5oZWlnaHQgPT09IG5ld0hlaWdodCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNhbnZhcy53aWR0aCA9IG1lLndpZHRoID0gbmV3V2lkdGg7XG5cdFx0Y2FudmFzLmhlaWdodCA9IG1lLmhlaWdodCA9IG5ld0hlaWdodDtcblx0XHRjYW52YXMuc3R5bGUud2lkdGggPSBuZXdXaWR0aCArICdweCc7XG5cdFx0Y2FudmFzLnN0eWxlLmhlaWdodCA9IG5ld0hlaWdodCArICdweCc7XG5cblx0XHRoZWxwZXJzJDEucmV0aW5hU2NhbGUobWUsIG9wdGlvbnMuZGV2aWNlUGl4ZWxSYXRpbyk7XG5cblx0XHRpZiAoIXNpbGVudCkge1xuXHRcdFx0Ly8gTm90aWZ5IGFueSBwbHVnaW5zIGFib3V0IHRoZSByZXNpemVcblx0XHRcdHZhciBuZXdTaXplID0ge3dpZHRoOiBuZXdXaWR0aCwgaGVpZ2h0OiBuZXdIZWlnaHR9O1xuXHRcdFx0Y29yZV9wbHVnaW5zLm5vdGlmeShtZSwgJ3Jlc2l6ZScsIFtuZXdTaXplXSk7XG5cblx0XHRcdC8vIE5vdGlmeSBvZiByZXNpemVcblx0XHRcdGlmIChvcHRpb25zLm9uUmVzaXplKSB7XG5cdFx0XHRcdG9wdGlvbnMub25SZXNpemUobWUsIG5ld1NpemUpO1xuXHRcdFx0fVxuXG5cdFx0XHRtZS5zdG9wKCk7XG5cdFx0XHRtZS51cGRhdGUoe1xuXHRcdFx0XHRkdXJhdGlvbjogb3B0aW9ucy5yZXNwb25zaXZlQW5pbWF0aW9uRHVyYXRpb25cblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHRlbnN1cmVTY2FsZXNIYXZlSURzOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblx0XHR2YXIgc2NhbGVzT3B0aW9ucyA9IG9wdGlvbnMuc2NhbGVzIHx8IHt9O1xuXHRcdHZhciBzY2FsZU9wdGlvbnMgPSBvcHRpb25zLnNjYWxlO1xuXG5cdFx0aGVscGVycyQxLmVhY2goc2NhbGVzT3B0aW9ucy54QXhlcywgZnVuY3Rpb24oeEF4aXNPcHRpb25zLCBpbmRleCkge1xuXHRcdFx0eEF4aXNPcHRpb25zLmlkID0geEF4aXNPcHRpb25zLmlkIHx8ICgneC1heGlzLScgKyBpbmRleCk7XG5cdFx0fSk7XG5cblx0XHRoZWxwZXJzJDEuZWFjaChzY2FsZXNPcHRpb25zLnlBeGVzLCBmdW5jdGlvbih5QXhpc09wdGlvbnMsIGluZGV4KSB7XG5cdFx0XHR5QXhpc09wdGlvbnMuaWQgPSB5QXhpc09wdGlvbnMuaWQgfHwgKCd5LWF4aXMtJyArIGluZGV4KTtcblx0XHR9KTtcblxuXHRcdGlmIChzY2FsZU9wdGlvbnMpIHtcblx0XHRcdHNjYWxlT3B0aW9ucy5pZCA9IHNjYWxlT3B0aW9ucy5pZCB8fCAnc2NhbGUnO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQnVpbGRzIGEgbWFwIG9mIHNjYWxlIElEIHRvIHNjYWxlIG9iamVjdCBmb3IgZnV0dXJlIGxvb2t1cC5cblx0ICovXG5cdGJ1aWxkT3JVcGRhdGVTY2FsZXM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIG9wdGlvbnMgPSBtZS5vcHRpb25zO1xuXHRcdHZhciBzY2FsZXMgPSBtZS5zY2FsZXMgfHwge307XG5cdFx0dmFyIGl0ZW1zID0gW107XG5cdFx0dmFyIHVwZGF0ZWQgPSBPYmplY3Qua2V5cyhzY2FsZXMpLnJlZHVjZShmdW5jdGlvbihvYmosIGlkKSB7XG5cdFx0XHRvYmpbaWRdID0gZmFsc2U7XG5cdFx0XHRyZXR1cm4gb2JqO1xuXHRcdH0sIHt9KTtcblxuXHRcdGlmIChvcHRpb25zLnNjYWxlcykge1xuXHRcdFx0aXRlbXMgPSBpdGVtcy5jb25jYXQoXG5cdFx0XHRcdChvcHRpb25zLnNjYWxlcy54QXhlcyB8fCBbXSkubWFwKGZ1bmN0aW9uKHhBeGlzT3B0aW9ucykge1xuXHRcdFx0XHRcdHJldHVybiB7b3B0aW9uczogeEF4aXNPcHRpb25zLCBkdHlwZTogJ2NhdGVnb3J5JywgZHBvc2l0aW9uOiAnYm90dG9tJ307XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHQob3B0aW9ucy5zY2FsZXMueUF4ZXMgfHwgW10pLm1hcChmdW5jdGlvbih5QXhpc09wdGlvbnMpIHtcblx0XHRcdFx0XHRyZXR1cm4ge29wdGlvbnM6IHlBeGlzT3B0aW9ucywgZHR5cGU6ICdsaW5lYXInLCBkcG9zaXRpb246ICdsZWZ0J307XG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmIChvcHRpb25zLnNjYWxlKSB7XG5cdFx0XHRpdGVtcy5wdXNoKHtcblx0XHRcdFx0b3B0aW9uczogb3B0aW9ucy5zY2FsZSxcblx0XHRcdFx0ZHR5cGU6ICdyYWRpYWxMaW5lYXInLFxuXHRcdFx0XHRpc0RlZmF1bHQ6IHRydWUsXG5cdFx0XHRcdGRwb3NpdGlvbjogJ2NoYXJ0QXJlYSdcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGhlbHBlcnMkMS5lYWNoKGl0ZW1zLCBmdW5jdGlvbihpdGVtKSB7XG5cdFx0XHR2YXIgc2NhbGVPcHRpb25zID0gaXRlbS5vcHRpb25zO1xuXHRcdFx0dmFyIGlkID0gc2NhbGVPcHRpb25zLmlkO1xuXHRcdFx0dmFyIHNjYWxlVHlwZSA9IHZhbHVlT3JEZWZhdWx0JDgoc2NhbGVPcHRpb25zLnR5cGUsIGl0ZW0uZHR5cGUpO1xuXG5cdFx0XHRpZiAocG9zaXRpb25Jc0hvcml6b250YWwoc2NhbGVPcHRpb25zLnBvc2l0aW9uKSAhPT0gcG9zaXRpb25Jc0hvcml6b250YWwoaXRlbS5kcG9zaXRpb24pKSB7XG5cdFx0XHRcdHNjYWxlT3B0aW9ucy5wb3NpdGlvbiA9IGl0ZW0uZHBvc2l0aW9uO1xuXHRcdFx0fVxuXG5cdFx0XHR1cGRhdGVkW2lkXSA9IHRydWU7XG5cdFx0XHR2YXIgc2NhbGUgPSBudWxsO1xuXHRcdFx0aWYgKGlkIGluIHNjYWxlcyAmJiBzY2FsZXNbaWRdLnR5cGUgPT09IHNjYWxlVHlwZSkge1xuXHRcdFx0XHRzY2FsZSA9IHNjYWxlc1tpZF07XG5cdFx0XHRcdHNjYWxlLm9wdGlvbnMgPSBzY2FsZU9wdGlvbnM7XG5cdFx0XHRcdHNjYWxlLmN0eCA9IG1lLmN0eDtcblx0XHRcdFx0c2NhbGUuY2hhcnQgPSBtZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhciBzY2FsZUNsYXNzID0gY29yZV9zY2FsZVNlcnZpY2UuZ2V0U2NhbGVDb25zdHJ1Y3RvcihzY2FsZVR5cGUpO1xuXHRcdFx0XHRpZiAoIXNjYWxlQ2xhc3MpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0c2NhbGUgPSBuZXcgc2NhbGVDbGFzcyh7XG5cdFx0XHRcdFx0aWQ6IGlkLFxuXHRcdFx0XHRcdHR5cGU6IHNjYWxlVHlwZSxcblx0XHRcdFx0XHRvcHRpb25zOiBzY2FsZU9wdGlvbnMsXG5cdFx0XHRcdFx0Y3R4OiBtZS5jdHgsXG5cdFx0XHRcdFx0Y2hhcnQ6IG1lXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRzY2FsZXNbc2NhbGUuaWRdID0gc2NhbGU7XG5cdFx0XHR9XG5cblx0XHRcdHNjYWxlLm1lcmdlVGlja3NPcHRpb25zKCk7XG5cblx0XHRcdC8vIFRPRE8oU0IpOiBJIHRoaW5rIHdlIHNob3VsZCBiZSBhYmxlIHRvIHJlbW92ZSB0aGlzIGN1c3RvbSBjYXNlIChvcHRpb25zLnNjYWxlKVxuXHRcdFx0Ly8gYW5kIGNvbnNpZGVyIGl0IGFzIGEgcmVndWxhciBzY2FsZSBwYXJ0IG9mIHRoZSBcInNjYWxlc1wiXCIgbWFwIG9ubHkhIFRoaXMgd291bGRcblx0XHRcdC8vIG1ha2UgdGhlIGxvZ2ljIGVhc2llciBhbmQgcmVtb3ZlIHNvbWUgdXNlbGVzcz8gY3VzdG9tIGNvZGUuXG5cdFx0XHRpZiAoaXRlbS5pc0RlZmF1bHQpIHtcblx0XHRcdFx0bWUuc2NhbGUgPSBzY2FsZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHQvLyBjbGVhciB1cCBkaXNjYXJkZWQgc2NhbGVzXG5cdFx0aGVscGVycyQxLmVhY2godXBkYXRlZCwgZnVuY3Rpb24oaGFzVXBkYXRlZCwgaWQpIHtcblx0XHRcdGlmICghaGFzVXBkYXRlZCkge1xuXHRcdFx0XHRkZWxldGUgc2NhbGVzW2lkXTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdG1lLnNjYWxlcyA9IHNjYWxlcztcblxuXHRcdGNvcmVfc2NhbGVTZXJ2aWNlLmFkZFNjYWxlc1RvTGF5b3V0KHRoaXMpO1xuXHR9LFxuXG5cdGJ1aWxkT3JVcGRhdGVDb250cm9sbGVyczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgbmV3Q29udHJvbGxlcnMgPSBbXTtcblxuXHRcdGhlbHBlcnMkMS5lYWNoKG1lLmRhdGEuZGF0YXNldHMsIGZ1bmN0aW9uKGRhdGFzZXQsIGRhdGFzZXRJbmRleCkge1xuXHRcdFx0dmFyIG1ldGEgPSBtZS5nZXREYXRhc2V0TWV0YShkYXRhc2V0SW5kZXgpO1xuXHRcdFx0dmFyIHR5cGUgPSBkYXRhc2V0LnR5cGUgfHwgbWUuY29uZmlnLnR5cGU7XG5cblx0XHRcdGlmIChtZXRhLnR5cGUgJiYgbWV0YS50eXBlICE9PSB0eXBlKSB7XG5cdFx0XHRcdG1lLmRlc3Ryb3lEYXRhc2V0TWV0YShkYXRhc2V0SW5kZXgpO1xuXHRcdFx0XHRtZXRhID0gbWUuZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KTtcblx0XHRcdH1cblx0XHRcdG1ldGEudHlwZSA9IHR5cGU7XG5cblx0XHRcdGlmIChtZXRhLmNvbnRyb2xsZXIpIHtcblx0XHRcdFx0bWV0YS5jb250cm9sbGVyLnVwZGF0ZUluZGV4KGRhdGFzZXRJbmRleCk7XG5cdFx0XHRcdG1ldGEuY29udHJvbGxlci5saW5rU2NhbGVzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YXIgQ29udHJvbGxlckNsYXNzID0gY29udHJvbGxlcnNbbWV0YS50eXBlXTtcblx0XHRcdFx0aWYgKENvbnRyb2xsZXJDbGFzcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdcIicgKyBtZXRhLnR5cGUgKyAnXCIgaXMgbm90IGEgY2hhcnQgdHlwZS4nKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG1ldGEuY29udHJvbGxlciA9IG5ldyBDb250cm9sbGVyQ2xhc3MobWUsIGRhdGFzZXRJbmRleCk7XG5cdFx0XHRcdG5ld0NvbnRyb2xsZXJzLnB1c2gobWV0YS5jb250cm9sbGVyKTtcblx0XHRcdH1cblx0XHR9LCBtZSk7XG5cblx0XHRyZXR1cm4gbmV3Q29udHJvbGxlcnM7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJlc2V0IHRoZSBlbGVtZW50cyBvZiBhbGwgZGF0YXNldHNcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHJlc2V0RWxlbWVudHM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0aGVscGVycyQxLmVhY2gobWUuZGF0YS5kYXRhc2V0cywgZnVuY3Rpb24oZGF0YXNldCwgZGF0YXNldEluZGV4KSB7XG5cdFx0XHRtZS5nZXREYXRhc2V0TWV0YShkYXRhc2V0SW5kZXgpLmNvbnRyb2xsZXIucmVzZXQoKTtcblx0XHR9LCBtZSk7XG5cdH0sXG5cblx0LyoqXG5cdCogUmVzZXRzIHRoZSBjaGFydCBiYWNrIHRvIGl0J3Mgc3RhdGUgYmVmb3JlIHRoZSBpbml0aWFsIGFuaW1hdGlvblxuXHQqL1xuXHRyZXNldDogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5yZXNldEVsZW1lbnRzKCk7XG5cdFx0dGhpcy50b29sdGlwLmluaXRpYWxpemUoKTtcblx0fSxcblxuXHR1cGRhdGU6IGZ1bmN0aW9uKGNvbmZpZykge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cblx0XHRpZiAoIWNvbmZpZyB8fCB0eXBlb2YgY29uZmlnICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0Ly8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcblx0XHRcdGNvbmZpZyA9IHtcblx0XHRcdFx0ZHVyYXRpb246IGNvbmZpZyxcblx0XHRcdFx0bGF6eTogYXJndW1lbnRzWzFdXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHVwZGF0ZUNvbmZpZyhtZSk7XG5cblx0XHQvLyBwbHVnaW5zIG9wdGlvbnMgcmVmZXJlbmNlcyBtaWdodCBoYXZlIGNoYW5nZSwgbGV0J3MgaW52YWxpZGF0ZSB0aGUgY2FjaGVcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9pc3N1ZXMvNTExMSNpc3N1ZWNvbW1lbnQtMzU1OTM0MTY3XG5cdFx0Y29yZV9wbHVnaW5zLl9pbnZhbGlkYXRlKG1lKTtcblxuXHRcdGlmIChjb3JlX3BsdWdpbnMubm90aWZ5KG1lLCAnYmVmb3JlVXBkYXRlJykgPT09IGZhbHNlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSW4gY2FzZSB0aGUgZW50aXJlIGRhdGEgb2JqZWN0IGNoYW5nZWRcblx0XHRtZS50b29sdGlwLl9kYXRhID0gbWUuZGF0YTtcblxuXHRcdC8vIE1ha2Ugc3VyZSBkYXRhc2V0IGNvbnRyb2xsZXJzIGFyZSB1cGRhdGVkIGFuZCBuZXcgY29udHJvbGxlcnMgYXJlIHJlc2V0XG5cdFx0dmFyIG5ld0NvbnRyb2xsZXJzID0gbWUuYnVpbGRPclVwZGF0ZUNvbnRyb2xsZXJzKCk7XG5cblx0XHQvLyBNYWtlIHN1cmUgYWxsIGRhdGFzZXQgY29udHJvbGxlcnMgaGF2ZSBjb3JyZWN0IG1ldGEgZGF0YSBjb3VudHNcblx0XHRoZWxwZXJzJDEuZWFjaChtZS5kYXRhLmRhdGFzZXRzLCBmdW5jdGlvbihkYXRhc2V0LCBkYXRhc2V0SW5kZXgpIHtcblx0XHRcdG1lLmdldERhdGFzZXRNZXRhKGRhdGFzZXRJbmRleCkuY29udHJvbGxlci5idWlsZE9yVXBkYXRlRWxlbWVudHMoKTtcblx0XHR9LCBtZSk7XG5cblx0XHRtZS51cGRhdGVMYXlvdXQoKTtcblxuXHRcdC8vIENhbiBvbmx5IHJlc2V0IHRoZSBuZXcgY29udHJvbGxlcnMgYWZ0ZXIgdGhlIHNjYWxlcyBoYXZlIGJlZW4gdXBkYXRlZFxuXHRcdGlmIChtZS5vcHRpb25zLmFuaW1hdGlvbiAmJiBtZS5vcHRpb25zLmFuaW1hdGlvbi5kdXJhdGlvbikge1xuXHRcdFx0aGVscGVycyQxLmVhY2gobmV3Q29udHJvbGxlcnMsIGZ1bmN0aW9uKGNvbnRyb2xsZXIpIHtcblx0XHRcdFx0Y29udHJvbGxlci5yZXNldCgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0bWUudXBkYXRlRGF0YXNldHMoKTtcblxuXHRcdC8vIE5lZWQgdG8gcmVzZXQgdG9vbHRpcCBpbiBjYXNlIGl0IGlzIGRpc3BsYXllZCB3aXRoIGVsZW1lbnRzIHRoYXQgYXJlIHJlbW92ZWRcblx0XHQvLyBhZnRlciB1cGRhdGUuXG5cdFx0bWUudG9vbHRpcC5pbml0aWFsaXplKCk7XG5cblx0XHQvLyBMYXN0IGFjdGl2ZSBjb250YWlucyBpdGVtcyB0aGF0IHdlcmUgcHJldmlvdXNseSBpbiB0aGUgdG9vbHRpcC5cblx0XHQvLyBXaGVuIHdlIHJlc2V0IHRoZSB0b29sdGlwLCB3ZSBuZWVkIHRvIGNsZWFyIGl0XG5cdFx0bWUubGFzdEFjdGl2ZSA9IFtdO1xuXG5cdFx0Ly8gRG8gdGhpcyBiZWZvcmUgcmVuZGVyIHNvIHRoYXQgYW55IHBsdWdpbnMgdGhhdCBuZWVkIGZpbmFsIHNjYWxlIHVwZGF0ZXMgY2FuIHVzZSBpdFxuXHRcdGNvcmVfcGx1Z2lucy5ub3RpZnkobWUsICdhZnRlclVwZGF0ZScpO1xuXG5cdFx0aWYgKG1lLl9idWZmZXJlZFJlbmRlcikge1xuXHRcdFx0bWUuX2J1ZmZlcmVkUmVxdWVzdCA9IHtcblx0XHRcdFx0ZHVyYXRpb246IGNvbmZpZy5kdXJhdGlvbixcblx0XHRcdFx0ZWFzaW5nOiBjb25maWcuZWFzaW5nLFxuXHRcdFx0XHRsYXp5OiBjb25maWcubGF6eVxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWUucmVuZGVyKGNvbmZpZyk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBjaGFydCBsYXlvdXQgdW5sZXNzIGEgcGx1Z2luIHJldHVybnMgYGZhbHNlYCB0byB0aGUgYGJlZm9yZUxheW91dGBcblx0ICogaG9vaywgaW4gd2hpY2ggY2FzZSwgcGx1Z2lucyB3aWxsIG5vdCBiZSBjYWxsZWQgb24gYGFmdGVyTGF5b3V0YC5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdHVwZGF0ZUxheW91dDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblxuXHRcdGlmIChjb3JlX3BsdWdpbnMubm90aWZ5KG1lLCAnYmVmb3JlTGF5b3V0JykgPT09IGZhbHNlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29yZV9sYXlvdXRzLnVwZGF0ZSh0aGlzLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG5cblx0XHQvKipcblx0XHQgKiBQcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdXNlIGBhZnRlckxheW91dGAgaW5zdGVhZC5cblx0XHQgKiBAbWV0aG9kIElQbHVnaW4jYWZ0ZXJTY2FsZVVwZGF0ZVxuXHRcdCAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMi41LjBcblx0XHQgKiBAdG9kbyByZW1vdmUgYXQgdmVyc2lvbiAzXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHRjb3JlX3BsdWdpbnMubm90aWZ5KG1lLCAnYWZ0ZXJTY2FsZVVwZGF0ZScpO1xuXHRcdGNvcmVfcGx1Z2lucy5ub3RpZnkobWUsICdhZnRlckxheW91dCcpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIGFsbCBkYXRhc2V0cyB1bmxlc3MgYSBwbHVnaW4gcmV0dXJucyBgZmFsc2VgIHRvIHRoZSBgYmVmb3JlRGF0YXNldHNVcGRhdGVgXG5cdCAqIGhvb2ssIGluIHdoaWNoIGNhc2UsIHBsdWdpbnMgd2lsbCBub3QgYmUgY2FsbGVkIG9uIGBhZnRlckRhdGFzZXRzVXBkYXRlYC5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdHVwZGF0ZURhdGFzZXRzOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXG5cdFx0aWYgKGNvcmVfcGx1Z2lucy5ub3RpZnkobWUsICdiZWZvcmVEYXRhc2V0c1VwZGF0ZScpID09PSBmYWxzZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGZvciAodmFyIGkgPSAwLCBpbGVuID0gbWUuZGF0YS5kYXRhc2V0cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcblx0XHRcdG1lLnVwZGF0ZURhdGFzZXQoaSk7XG5cdFx0fVxuXG5cdFx0Y29yZV9wbHVnaW5zLm5vdGlmeShtZSwgJ2FmdGVyRGF0YXNldHNVcGRhdGUnKTtcblx0fSxcblxuXHQvKipcblx0ICogVXBkYXRlcyBkYXRhc2V0IGF0IGluZGV4IHVubGVzcyBhIHBsdWdpbiByZXR1cm5zIGBmYWxzZWAgdG8gdGhlIGBiZWZvcmVEYXRhc2V0VXBkYXRlYFxuXHQgKiBob29rLCBpbiB3aGljaCBjYXNlLCBwbHVnaW5zIHdpbGwgbm90IGJlIGNhbGxlZCBvbiBgYWZ0ZXJEYXRhc2V0VXBkYXRlYC5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdHVwZGF0ZURhdGFzZXQ6IGZ1bmN0aW9uKGluZGV4KSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgbWV0YSA9IG1lLmdldERhdGFzZXRNZXRhKGluZGV4KTtcblx0XHR2YXIgYXJncyA9IHtcblx0XHRcdG1ldGE6IG1ldGEsXG5cdFx0XHRpbmRleDogaW5kZXhcblx0XHR9O1xuXG5cdFx0aWYgKGNvcmVfcGx1Z2lucy5ub3RpZnkobWUsICdiZWZvcmVEYXRhc2V0VXBkYXRlJywgW2FyZ3NdKSA9PT0gZmFsc2UpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRtZXRhLmNvbnRyb2xsZXIudXBkYXRlKCk7XG5cblx0XHRjb3JlX3BsdWdpbnMubm90aWZ5KG1lLCAnYWZ0ZXJEYXRhc2V0VXBkYXRlJywgW2FyZ3NdKTtcblx0fSxcblxuXHRyZW5kZXI6IGZ1bmN0aW9uKGNvbmZpZykge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cblx0XHRpZiAoIWNvbmZpZyB8fCB0eXBlb2YgY29uZmlnICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0Ly8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcblx0XHRcdGNvbmZpZyA9IHtcblx0XHRcdFx0ZHVyYXRpb246IGNvbmZpZyxcblx0XHRcdFx0bGF6eTogYXJndW1lbnRzWzFdXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHZhciBhbmltYXRpb25PcHRpb25zID0gbWUub3B0aW9ucy5hbmltYXRpb247XG5cdFx0dmFyIGR1cmF0aW9uID0gdmFsdWVPckRlZmF1bHQkOChjb25maWcuZHVyYXRpb24sIGFuaW1hdGlvbk9wdGlvbnMgJiYgYW5pbWF0aW9uT3B0aW9ucy5kdXJhdGlvbik7XG5cdFx0dmFyIGxhenkgPSBjb25maWcubGF6eTtcblxuXHRcdGlmIChjb3JlX3BsdWdpbnMubm90aWZ5KG1lLCAnYmVmb3JlUmVuZGVyJykgPT09IGZhbHNlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIG9uQ29tcGxldGUgPSBmdW5jdGlvbihhbmltYXRpb24pIHtcblx0XHRcdGNvcmVfcGx1Z2lucy5ub3RpZnkobWUsICdhZnRlclJlbmRlcicpO1xuXHRcdFx0aGVscGVycyQxLmNhbGxiYWNrKGFuaW1hdGlvbk9wdGlvbnMgJiYgYW5pbWF0aW9uT3B0aW9ucy5vbkNvbXBsZXRlLCBbYW5pbWF0aW9uXSwgbWUpO1xuXHRcdH07XG5cblx0XHRpZiAoYW5pbWF0aW9uT3B0aW9ucyAmJiBkdXJhdGlvbikge1xuXHRcdFx0dmFyIGFuaW1hdGlvbiA9IG5ldyBjb3JlX2FuaW1hdGlvbih7XG5cdFx0XHRcdG51bVN0ZXBzOiBkdXJhdGlvbiAvIDE2LjY2LCAvLyA2MCBmcHNcblx0XHRcdFx0ZWFzaW5nOiBjb25maWcuZWFzaW5nIHx8IGFuaW1hdGlvbk9wdGlvbnMuZWFzaW5nLFxuXG5cdFx0XHRcdHJlbmRlcjogZnVuY3Rpb24oY2hhcnQsIGFuaW1hdGlvbk9iamVjdCkge1xuXHRcdFx0XHRcdHZhciBlYXNpbmdGdW5jdGlvbiA9IGhlbHBlcnMkMS5lYXNpbmcuZWZmZWN0c1thbmltYXRpb25PYmplY3QuZWFzaW5nXTtcblx0XHRcdFx0XHR2YXIgY3VycmVudFN0ZXAgPSBhbmltYXRpb25PYmplY3QuY3VycmVudFN0ZXA7XG5cdFx0XHRcdFx0dmFyIHN0ZXBEZWNpbWFsID0gY3VycmVudFN0ZXAgLyBhbmltYXRpb25PYmplY3QubnVtU3RlcHM7XG5cblx0XHRcdFx0XHRjaGFydC5kcmF3KGVhc2luZ0Z1bmN0aW9uKHN0ZXBEZWNpbWFsKSwgc3RlcERlY2ltYWwsIGN1cnJlbnRTdGVwKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHRvbkFuaW1hdGlvblByb2dyZXNzOiBhbmltYXRpb25PcHRpb25zLm9uUHJvZ3Jlc3MsXG5cdFx0XHRcdG9uQW5pbWF0aW9uQ29tcGxldGU6IG9uQ29tcGxldGVcblx0XHRcdH0pO1xuXG5cdFx0XHRjb3JlX2FuaW1hdGlvbnMuYWRkQW5pbWF0aW9uKG1lLCBhbmltYXRpb24sIGR1cmF0aW9uLCBsYXp5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWUuZHJhdygpO1xuXG5cdFx0XHQvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2NoYXJ0anMvQ2hhcnQuanMvaXNzdWVzLzM3ODFcblx0XHRcdG9uQ29tcGxldGUobmV3IGNvcmVfYW5pbWF0aW9uKHtudW1TdGVwczogMCwgY2hhcnQ6IG1lfSkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBtZTtcblx0fSxcblxuXHRkcmF3OiBmdW5jdGlvbihlYXNpbmdWYWx1ZSkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cblx0XHRtZS5jbGVhcigpO1xuXG5cdFx0aWYgKGhlbHBlcnMkMS5pc051bGxPclVuZGVmKGVhc2luZ1ZhbHVlKSkge1xuXHRcdFx0ZWFzaW5nVmFsdWUgPSAxO1xuXHRcdH1cblxuXHRcdG1lLnRyYW5zaXRpb24oZWFzaW5nVmFsdWUpO1xuXG5cdFx0aWYgKG1lLndpZHRoIDw9IDAgfHwgbWUuaGVpZ2h0IDw9IDApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoY29yZV9wbHVnaW5zLm5vdGlmeShtZSwgJ2JlZm9yZURyYXcnLCBbZWFzaW5nVmFsdWVdKSA9PT0gZmFsc2UpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEcmF3IGFsbCB0aGUgc2NhbGVzXG5cdFx0aGVscGVycyQxLmVhY2gobWUuYm94ZXMsIGZ1bmN0aW9uKGJveCkge1xuXHRcdFx0Ym94LmRyYXcobWUuY2hhcnRBcmVhKTtcblx0XHR9LCBtZSk7XG5cblx0XHRtZS5kcmF3RGF0YXNldHMoZWFzaW5nVmFsdWUpO1xuXHRcdG1lLl9kcmF3VG9vbHRpcChlYXNpbmdWYWx1ZSk7XG5cblx0XHRjb3JlX3BsdWdpbnMubm90aWZ5KG1lLCAnYWZ0ZXJEcmF3JywgW2Vhc2luZ1ZhbHVlXSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHR0cmFuc2l0aW9uOiBmdW5jdGlvbihlYXNpbmdWYWx1ZSkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cblx0XHRmb3IgKHZhciBpID0gMCwgaWxlbiA9IChtZS5kYXRhLmRhdGFzZXRzIHx8IFtdKS5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcblx0XHRcdGlmIChtZS5pc0RhdGFzZXRWaXNpYmxlKGkpKSB7XG5cdFx0XHRcdG1lLmdldERhdGFzZXRNZXRhKGkpLmNvbnRyb2xsZXIudHJhbnNpdGlvbihlYXNpbmdWYWx1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bWUudG9vbHRpcC50cmFuc2l0aW9uKGVhc2luZ1ZhbHVlKTtcblx0fSxcblxuXHQvKipcblx0ICogRHJhd3MgYWxsIGRhdGFzZXRzIHVubGVzcyBhIHBsdWdpbiByZXR1cm5zIGBmYWxzZWAgdG8gdGhlIGBiZWZvcmVEYXRhc2V0c0RyYXdgXG5cdCAqIGhvb2ssIGluIHdoaWNoIGNhc2UsIHBsdWdpbnMgd2lsbCBub3QgYmUgY2FsbGVkIG9uIGBhZnRlckRhdGFzZXRzRHJhd2AuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRkcmF3RGF0YXNldHM6IGZ1bmN0aW9uKGVhc2luZ1ZhbHVlKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblxuXHRcdGlmIChjb3JlX3BsdWdpbnMubm90aWZ5KG1lLCAnYmVmb3JlRGF0YXNldHNEcmF3JywgW2Vhc2luZ1ZhbHVlXSkgPT09IGZhbHNlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRHJhdyBkYXRhc2V0cyByZXZlcnNlZCB0byBzdXBwb3J0IHByb3BlciBsaW5lIHN0YWNraW5nXG5cdFx0Zm9yICh2YXIgaSA9IChtZS5kYXRhLmRhdGFzZXRzIHx8IFtdKS5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuXHRcdFx0aWYgKG1lLmlzRGF0YXNldFZpc2libGUoaSkpIHtcblx0XHRcdFx0bWUuZHJhd0RhdGFzZXQoaSwgZWFzaW5nVmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvcmVfcGx1Z2lucy5ub3RpZnkobWUsICdhZnRlckRhdGFzZXRzRHJhdycsIFtlYXNpbmdWYWx1ZV0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBEcmF3cyBkYXRhc2V0IGF0IGluZGV4IHVubGVzcyBhIHBsdWdpbiByZXR1cm5zIGBmYWxzZWAgdG8gdGhlIGBiZWZvcmVEYXRhc2V0RHJhd2Bcblx0ICogaG9vaywgaW4gd2hpY2ggY2FzZSwgcGx1Z2lucyB3aWxsIG5vdCBiZSBjYWxsZWQgb24gYGFmdGVyRGF0YXNldERyYXdgLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0ZHJhd0RhdGFzZXQ6IGZ1bmN0aW9uKGluZGV4LCBlYXNpbmdWYWx1ZSkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIG1ldGEgPSBtZS5nZXREYXRhc2V0TWV0YShpbmRleCk7XG5cdFx0dmFyIGFyZ3MgPSB7XG5cdFx0XHRtZXRhOiBtZXRhLFxuXHRcdFx0aW5kZXg6IGluZGV4LFxuXHRcdFx0ZWFzaW5nVmFsdWU6IGVhc2luZ1ZhbHVlXG5cdFx0fTtcblxuXHRcdGlmIChjb3JlX3BsdWdpbnMubm90aWZ5KG1lLCAnYmVmb3JlRGF0YXNldERyYXcnLCBbYXJnc10pID09PSBmYWxzZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdG1ldGEuY29udHJvbGxlci5kcmF3KGVhc2luZ1ZhbHVlKTtcblxuXHRcdGNvcmVfcGx1Z2lucy5ub3RpZnkobWUsICdhZnRlckRhdGFzZXREcmF3JywgW2FyZ3NdKTtcblx0fSxcblxuXHQvKipcblx0ICogRHJhd3MgdG9vbHRpcCB1bmxlc3MgYSBwbHVnaW4gcmV0dXJucyBgZmFsc2VgIHRvIHRoZSBgYmVmb3JlVG9vbHRpcERyYXdgXG5cdCAqIGhvb2ssIGluIHdoaWNoIGNhc2UsIHBsdWdpbnMgd2lsbCBub3QgYmUgY2FsbGVkIG9uIGBhZnRlclRvb2x0aXBEcmF3YC5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9kcmF3VG9vbHRpcDogZnVuY3Rpb24oZWFzaW5nVmFsdWUpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciB0b29sdGlwID0gbWUudG9vbHRpcDtcblx0XHR2YXIgYXJncyA9IHtcblx0XHRcdHRvb2x0aXA6IHRvb2x0aXAsXG5cdFx0XHRlYXNpbmdWYWx1ZTogZWFzaW5nVmFsdWVcblx0XHR9O1xuXG5cdFx0aWYgKGNvcmVfcGx1Z2lucy5ub3RpZnkobWUsICdiZWZvcmVUb29sdGlwRHJhdycsIFthcmdzXSkgPT09IGZhbHNlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dG9vbHRpcC5kcmF3KCk7XG5cblx0XHRjb3JlX3BsdWdpbnMubm90aWZ5KG1lLCAnYWZ0ZXJUb29sdGlwRHJhdycsIFthcmdzXSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc2luZ2xlIGVsZW1lbnQgdGhhdCB3YXMgY2xpY2tlZCBvblxuXHQgKiBAcmV0dXJuIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBkYXRhc2V0IGluZGV4IGFuZCBlbGVtZW50IGluZGV4IG9mIHRoZSBtYXRjaGluZyBlbGVtZW50LiBBbHNvIGNvbnRhaW5zIHRoZSByZWN0YW5nbGUgdGhhdCB3YXMgZHJhd1xuXHQgKi9cblx0Z2V0RWxlbWVudEF0RXZlbnQ6IGZ1bmN0aW9uKGUpIHtcblx0XHRyZXR1cm4gY29yZV9pbnRlcmFjdGlvbi5tb2Rlcy5zaW5nbGUodGhpcywgZSk7XG5cdH0sXG5cblx0Z2V0RWxlbWVudHNBdEV2ZW50OiBmdW5jdGlvbihlKSB7XG5cdFx0cmV0dXJuIGNvcmVfaW50ZXJhY3Rpb24ubW9kZXMubGFiZWwodGhpcywgZSwge2ludGVyc2VjdDogdHJ1ZX0pO1xuXHR9LFxuXG5cdGdldEVsZW1lbnRzQXRYQXhpczogZnVuY3Rpb24oZSkge1xuXHRcdHJldHVybiBjb3JlX2ludGVyYWN0aW9uLm1vZGVzWyd4LWF4aXMnXSh0aGlzLCBlLCB7aW50ZXJzZWN0OiB0cnVlfSk7XG5cdH0sXG5cblx0Z2V0RWxlbWVudHNBdEV2ZW50Rm9yTW9kZTogZnVuY3Rpb24oZSwgbW9kZSwgb3B0aW9ucykge1xuXHRcdHZhciBtZXRob2QgPSBjb3JlX2ludGVyYWN0aW9uLm1vZGVzW21vZGVdO1xuXHRcdGlmICh0eXBlb2YgbWV0aG9kID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRyZXR1cm4gbWV0aG9kKHRoaXMsIGUsIG9wdGlvbnMpO1xuXHRcdH1cblxuXHRcdHJldHVybiBbXTtcblx0fSxcblxuXHRnZXREYXRhc2V0QXRFdmVudDogZnVuY3Rpb24oZSkge1xuXHRcdHJldHVybiBjb3JlX2ludGVyYWN0aW9uLm1vZGVzLmRhdGFzZXQodGhpcywgZSwge2ludGVyc2VjdDogdHJ1ZX0pO1xuXHR9LFxuXG5cdGdldERhdGFzZXRNZXRhOiBmdW5jdGlvbihkYXRhc2V0SW5kZXgpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciBkYXRhc2V0ID0gbWUuZGF0YS5kYXRhc2V0c1tkYXRhc2V0SW5kZXhdO1xuXHRcdGlmICghZGF0YXNldC5fbWV0YSkge1xuXHRcdFx0ZGF0YXNldC5fbWV0YSA9IHt9O1xuXHRcdH1cblxuXHRcdHZhciBtZXRhID0gZGF0YXNldC5fbWV0YVttZS5pZF07XG5cdFx0aWYgKCFtZXRhKSB7XG5cdFx0XHRtZXRhID0gZGF0YXNldC5fbWV0YVttZS5pZF0gPSB7XG5cdFx0XHRcdHR5cGU6IG51bGwsXG5cdFx0XHRcdGRhdGE6IFtdLFxuXHRcdFx0XHRkYXRhc2V0OiBudWxsLFxuXHRcdFx0XHRjb250cm9sbGVyOiBudWxsLFxuXHRcdFx0XHRoaWRkZW46IG51bGwsXHRcdFx0Ly8gU2VlIGlzRGF0YXNldFZpc2libGUoKSBjb21tZW50XG5cdFx0XHRcdHhBeGlzSUQ6IG51bGwsXG5cdFx0XHRcdHlBeGlzSUQ6IG51bGxcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1ldGE7XG5cdH0sXG5cblx0Z2V0VmlzaWJsZURhdGFzZXRDb3VudDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNvdW50ID0gMDtcblx0XHRmb3IgKHZhciBpID0gMCwgaWxlbiA9IHRoaXMuZGF0YS5kYXRhc2V0cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcblx0XHRcdGlmICh0aGlzLmlzRGF0YXNldFZpc2libGUoaSkpIHtcblx0XHRcdFx0Y291bnQrKztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNvdW50O1xuXHR9LFxuXG5cdGlzRGF0YXNldFZpc2libGU6IGZ1bmN0aW9uKGRhdGFzZXRJbmRleCkge1xuXHRcdHZhciBtZXRhID0gdGhpcy5nZXREYXRhc2V0TWV0YShkYXRhc2V0SW5kZXgpO1xuXG5cdFx0Ly8gbWV0YS5oaWRkZW4gaXMgYSBwZXIgY2hhcnQgZGF0YXNldCBoaWRkZW4gZmxhZyBvdmVycmlkZSB3aXRoIDMgc3RhdGVzOiBpZiB0cnVlIG9yIGZhbHNlLFxuXHRcdC8vIHRoZSBkYXRhc2V0LmhpZGRlbiB2YWx1ZSBpcyBpZ25vcmVkLCBlbHNlIGlmIG51bGwsIHRoZSBkYXRhc2V0IGhpZGRlbiBzdGF0ZSBpcyByZXR1cm5lZC5cblx0XHRyZXR1cm4gdHlwZW9mIG1ldGEuaGlkZGVuID09PSAnYm9vbGVhbicgPyAhbWV0YS5oaWRkZW4gOiAhdGhpcy5kYXRhLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0uaGlkZGVuO1xuXHR9LFxuXG5cdGdlbmVyYXRlTGVnZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLmxlZ2VuZENhbGxiYWNrKHRoaXMpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0ZGVzdHJveURhdGFzZXRNZXRhOiBmdW5jdGlvbihkYXRhc2V0SW5kZXgpIHtcblx0XHR2YXIgaWQgPSB0aGlzLmlkO1xuXHRcdHZhciBkYXRhc2V0ID0gdGhpcy5kYXRhLmRhdGFzZXRzW2RhdGFzZXRJbmRleF07XG5cdFx0dmFyIG1ldGEgPSBkYXRhc2V0Ll9tZXRhICYmIGRhdGFzZXQuX21ldGFbaWRdO1xuXG5cdFx0aWYgKG1ldGEpIHtcblx0XHRcdG1ldGEuY29udHJvbGxlci5kZXN0cm95KCk7XG5cdFx0XHRkZWxldGUgZGF0YXNldC5fbWV0YVtpZF07XG5cdFx0fVxuXHR9LFxuXG5cdGRlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIGNhbnZhcyA9IG1lLmNhbnZhcztcblx0XHR2YXIgaSwgaWxlbjtcblxuXHRcdG1lLnN0b3AoKTtcblxuXHRcdC8vIGRhdGFzZXQgY29udHJvbGxlcnMgbmVlZCB0byBjbGVhbnVwIGFzc29jaWF0ZWQgZGF0YVxuXHRcdGZvciAoaSA9IDAsIGlsZW4gPSBtZS5kYXRhLmRhdGFzZXRzLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xuXHRcdFx0bWUuZGVzdHJveURhdGFzZXRNZXRhKGkpO1xuXHRcdH1cblxuXHRcdGlmIChjYW52YXMpIHtcblx0XHRcdG1lLnVuYmluZEV2ZW50cygpO1xuXHRcdFx0aGVscGVycyQxLmNhbnZhcy5jbGVhcihtZSk7XG5cdFx0XHRwbGF0Zm9ybS5yZWxlYXNlQ29udGV4dChtZS5jdHgpO1xuXHRcdFx0bWUuY2FudmFzID0gbnVsbDtcblx0XHRcdG1lLmN0eCA9IG51bGw7XG5cdFx0fVxuXG5cdFx0Y29yZV9wbHVnaW5zLm5vdGlmeShtZSwgJ2Rlc3Ryb3knKTtcblxuXHRcdGRlbGV0ZSBDaGFydC5pbnN0YW5jZXNbbWUuaWRdO1xuXHR9LFxuXG5cdHRvQmFzZTY0SW1hZ2U6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmNhbnZhcy50b0RhdGFVUkwuYXBwbHkodGhpcy5jYW52YXMsIGFyZ3VtZW50cyk7XG5cdH0sXG5cblx0aW5pdFRvb2xUaXA6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0bWUudG9vbHRpcCA9IG5ldyBjb3JlX3Rvb2x0aXAoe1xuXHRcdFx0X2NoYXJ0OiBtZSxcblx0XHRcdF9jaGFydEluc3RhbmNlOiBtZSwgLy8gZGVwcmVjYXRlZCwgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuXHRcdFx0X2RhdGE6IG1lLmRhdGEsXG5cdFx0XHRfb3B0aW9uczogbWUub3B0aW9ucy50b29sdGlwc1xuXHRcdH0sIG1lKTtcblx0fSxcblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGJpbmRFdmVudHM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIGxpc3RlbmVycyA9IG1lLl9saXN0ZW5lcnMgPSB7fTtcblx0XHR2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbigpIHtcblx0XHRcdG1lLmV2ZW50SGFuZGxlci5hcHBseShtZSwgYXJndW1lbnRzKTtcblx0XHR9O1xuXG5cdFx0aGVscGVycyQxLmVhY2gobWUub3B0aW9ucy5ldmVudHMsIGZ1bmN0aW9uKHR5cGUpIHtcblx0XHRcdHBsYXRmb3JtLmFkZEV2ZW50TGlzdGVuZXIobWUsIHR5cGUsIGxpc3RlbmVyKTtcblx0XHRcdGxpc3RlbmVyc1t0eXBlXSA9IGxpc3RlbmVyO1xuXHRcdH0pO1xuXG5cdFx0Ly8gRWxlbWVudHMgdXNlZCB0byBkZXRlY3Qgc2l6ZSBjaGFuZ2Ugc2hvdWxkIG5vdCBiZSBpbmplY3RlZCBmb3Igbm9uIHJlc3BvbnNpdmUgY2hhcnRzLlxuXHRcdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9pc3N1ZXMvMjIxMFxuXHRcdGlmIChtZS5vcHRpb25zLnJlc3BvbnNpdmUpIHtcblx0XHRcdGxpc3RlbmVyID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdG1lLnJlc2l6ZSgpO1xuXHRcdFx0fTtcblxuXHRcdFx0cGxhdGZvcm0uYWRkRXZlbnRMaXN0ZW5lcihtZSwgJ3Jlc2l6ZScsIGxpc3RlbmVyKTtcblx0XHRcdGxpc3RlbmVycy5yZXNpemUgPSBsaXN0ZW5lcjtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHR1bmJpbmRFdmVudHM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIGxpc3RlbmVycyA9IG1lLl9saXN0ZW5lcnM7XG5cdFx0aWYgKCFsaXN0ZW5lcnMpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRkZWxldGUgbWUuX2xpc3RlbmVycztcblx0XHRoZWxwZXJzJDEuZWFjaChsaXN0ZW5lcnMsIGZ1bmN0aW9uKGxpc3RlbmVyLCB0eXBlKSB7XG5cdFx0XHRwbGF0Zm9ybS5yZW1vdmVFdmVudExpc3RlbmVyKG1lLCB0eXBlLCBsaXN0ZW5lcik7XG5cdFx0fSk7XG5cdH0sXG5cblx0dXBkYXRlSG92ZXJTdHlsZTogZnVuY3Rpb24oZWxlbWVudHMsIG1vZGUsIGVuYWJsZWQpIHtcblx0XHR2YXIgbWV0aG9kID0gZW5hYmxlZCA/ICdzZXRIb3ZlclN0eWxlJyA6ICdyZW1vdmVIb3ZlclN0eWxlJztcblx0XHR2YXIgZWxlbWVudCwgaSwgaWxlbjtcblxuXHRcdGZvciAoaSA9IDAsIGlsZW4gPSBlbGVtZW50cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcblx0XHRcdGVsZW1lbnQgPSBlbGVtZW50c1tpXTtcblx0XHRcdGlmIChlbGVtZW50KSB7XG5cdFx0XHRcdHRoaXMuZ2V0RGF0YXNldE1ldGEoZWxlbWVudC5fZGF0YXNldEluZGV4KS5jb250cm9sbGVyW21ldGhvZF0oZWxlbWVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0ZXZlbnRIYW5kbGVyOiBmdW5jdGlvbihlKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgdG9vbHRpcCA9IG1lLnRvb2x0aXA7XG5cblx0XHRpZiAoY29yZV9wbHVnaW5zLm5vdGlmeShtZSwgJ2JlZm9yZUV2ZW50JywgW2VdKSA9PT0gZmFsc2UpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBCdWZmZXIgYW55IHVwZGF0ZSBjYWxscyBzbyB0aGF0IHJlbmRlcnMgZG8gbm90IG9jY3VyXG5cdFx0bWUuX2J1ZmZlcmVkUmVuZGVyID0gdHJ1ZTtcblx0XHRtZS5fYnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcblxuXHRcdHZhciBjaGFuZ2VkID0gbWUuaGFuZGxlRXZlbnQoZSk7XG5cdFx0Ly8gZm9yIHNtb290aCB0b29sdGlwIGFuaW1hdGlvbnMgaXNzdWUgIzQ5ODlcblx0XHQvLyB0aGUgdG9vbHRpcCBzaG91bGQgYmUgdGhlIHNvdXJjZSBvZiBjaGFuZ2Vcblx0XHQvLyBBbmltYXRpb24gY2hlY2sgd29ya2Fyb3VuZDpcblx0XHQvLyB0b29sdGlwLl9zdGFydCB3aWxsIGJlIG51bGwgd2hlbiB0b29sdGlwIGlzbid0IGFuaW1hdGluZ1xuXHRcdGlmICh0b29sdGlwKSB7XG5cdFx0XHRjaGFuZ2VkID0gdG9vbHRpcC5fc3RhcnRcblx0XHRcdFx0PyB0b29sdGlwLmhhbmRsZUV2ZW50KGUpXG5cdFx0XHRcdDogY2hhbmdlZCB8IHRvb2x0aXAuaGFuZGxlRXZlbnQoZSk7XG5cdFx0fVxuXG5cdFx0Y29yZV9wbHVnaW5zLm5vdGlmeShtZSwgJ2FmdGVyRXZlbnQnLCBbZV0pO1xuXG5cdFx0dmFyIGJ1ZmZlcmVkUmVxdWVzdCA9IG1lLl9idWZmZXJlZFJlcXVlc3Q7XG5cdFx0aWYgKGJ1ZmZlcmVkUmVxdWVzdCkge1xuXHRcdFx0Ly8gSWYgd2UgaGF2ZSBhbiB1cGRhdGUgdGhhdCB3YXMgdHJpZ2dlcmVkLCB3ZSBuZWVkIHRvIGRvIGEgbm9ybWFsIHJlbmRlclxuXHRcdFx0bWUucmVuZGVyKGJ1ZmZlcmVkUmVxdWVzdCk7XG5cdFx0fSBlbHNlIGlmIChjaGFuZ2VkICYmICFtZS5hbmltYXRpbmcpIHtcblx0XHRcdC8vIElmIGVudGVyaW5nLCBsZWF2aW5nLCBvciBjaGFuZ2luZyBlbGVtZW50cywgYW5pbWF0ZSB0aGUgY2hhbmdlIHZpYSBwaXZvdFxuXHRcdFx0bWUuc3RvcCgpO1xuXG5cdFx0XHQvLyBXZSBvbmx5IG5lZWQgdG8gcmVuZGVyIGF0IHRoaXMgcG9pbnQuIFVwZGF0aW5nIHdpbGwgY2F1c2Ugc2NhbGVzIHRvIGJlXG5cdFx0XHQvLyByZWNvbXB1dGVkIGdlbmVyYXRpbmcgZmxpY2tlciAmIHVzaW5nIG1vcmUgbWVtb3J5IHRoYW4gbmVjZXNzYXJ5LlxuXHRcdFx0bWUucmVuZGVyKHtcblx0XHRcdFx0ZHVyYXRpb246IG1lLm9wdGlvbnMuaG92ZXIuYW5pbWF0aW9uRHVyYXRpb24sXG5cdFx0XHRcdGxhenk6IHRydWVcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdG1lLl9idWZmZXJlZFJlbmRlciA9IGZhbHNlO1xuXHRcdG1lLl9idWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuXG5cdFx0cmV0dXJuIG1lO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBIYW5kbGUgYW4gZXZlbnRcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtJRXZlbnR9IGV2ZW50IHRoZSBldmVudCB0byBoYW5kbGVcblx0ICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgY2hhcnQgbmVlZHMgdG8gcmUtcmVuZGVyXG5cdCAqL1xuXHRoYW5kbGVFdmVudDogZnVuY3Rpb24oZSkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIG9wdGlvbnMgPSBtZS5vcHRpb25zIHx8IHt9O1xuXHRcdHZhciBob3Zlck9wdGlvbnMgPSBvcHRpb25zLmhvdmVyO1xuXHRcdHZhciBjaGFuZ2VkID0gZmFsc2U7XG5cblx0XHRtZS5sYXN0QWN0aXZlID0gbWUubGFzdEFjdGl2ZSB8fCBbXTtcblxuXHRcdC8vIEZpbmQgQWN0aXZlIEVsZW1lbnRzIGZvciBob3ZlciBhbmQgdG9vbHRpcHNcblx0XHRpZiAoZS50eXBlID09PSAnbW91c2VvdXQnKSB7XG5cdFx0XHRtZS5hY3RpdmUgPSBbXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWUuYWN0aXZlID0gbWUuZ2V0RWxlbWVudHNBdEV2ZW50Rm9yTW9kZShlLCBob3Zlck9wdGlvbnMubW9kZSwgaG92ZXJPcHRpb25zKTtcblx0XHR9XG5cblx0XHQvLyBJbnZva2Ugb25Ib3ZlciBob29rXG5cdFx0Ly8gTmVlZCB0byBjYWxsIHdpdGggbmF0aXZlIGV2ZW50IGhlcmUgdG8gbm90IGJyZWFrIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5cdFx0aGVscGVycyQxLmNhbGxiYWNrKG9wdGlvbnMub25Ib3ZlciB8fCBvcHRpb25zLmhvdmVyLm9uSG92ZXIsIFtlLm5hdGl2ZSwgbWUuYWN0aXZlXSwgbWUpO1xuXG5cdFx0aWYgKGUudHlwZSA9PT0gJ21vdXNldXAnIHx8IGUudHlwZSA9PT0gJ2NsaWNrJykge1xuXHRcdFx0aWYgKG9wdGlvbnMub25DbGljaykge1xuXHRcdFx0XHQvLyBVc2UgZS5uYXRpdmUgaGVyZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcblx0XHRcdFx0b3B0aW9ucy5vbkNsaWNrLmNhbGwobWUsIGUubmF0aXZlLCBtZS5hY3RpdmUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSBzdHlsaW5nIGZvciBsYXN0IGFjdGl2ZSAoZXZlbiBpZiBpdCBtYXkgc3RpbGwgYmUgYWN0aXZlKVxuXHRcdGlmIChtZS5sYXN0QWN0aXZlLmxlbmd0aCkge1xuXHRcdFx0bWUudXBkYXRlSG92ZXJTdHlsZShtZS5sYXN0QWN0aXZlLCBob3Zlck9wdGlvbnMubW9kZSwgZmFsc2UpO1xuXHRcdH1cblxuXHRcdC8vIEJ1aWx0IGluIGhvdmVyIHN0eWxpbmdcblx0XHRpZiAobWUuYWN0aXZlLmxlbmd0aCAmJiBob3Zlck9wdGlvbnMubW9kZSkge1xuXHRcdFx0bWUudXBkYXRlSG92ZXJTdHlsZShtZS5hY3RpdmUsIGhvdmVyT3B0aW9ucy5tb2RlLCB0cnVlKTtcblx0XHR9XG5cblx0XHRjaGFuZ2VkID0gIWhlbHBlcnMkMS5hcnJheUVxdWFscyhtZS5hY3RpdmUsIG1lLmxhc3RBY3RpdmUpO1xuXG5cdFx0Ly8gUmVtZW1iZXIgTGFzdCBBY3RpdmVzXG5cdFx0bWUubGFzdEFjdGl2ZSA9IG1lLmFjdGl2ZTtcblxuXHRcdHJldHVybiBjaGFuZ2VkO1xuXHR9XG59KTtcblxuLyoqXG4gKiBOT1RFKFNCKSBXZSBhY3R1YWxseSBkb24ndCB1c2UgdGhpcyBjb250YWluZXIgYW55bW9yZSBidXQgd2UgbmVlZCB0byBrZWVwIGl0XG4gKiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gVGhvdWdoLCBpdCBjYW4gc3RpbGwgYmUgdXNlZnVsIGZvciBwbHVnaW5zIHRoYXRcbiAqIHdvdWxkIG5lZWQgdG8gd29yayBvbiBtdWx0aXBsZSBjaGFydHM/IVxuICovXG5DaGFydC5pbnN0YW5jZXMgPSB7fTtcblxudmFyIGNvcmVfY29udHJvbGxlciA9IENoYXJ0O1xuXG4vLyBERVBSRUNBVElPTlNcblxuLyoqXG4gKiBQcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdXNlIENoYXJ0IGluc3RlYWQuXG4gKiBAY2xhc3MgQ2hhcnQuQ29udHJvbGxlclxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAyLjZcbiAqIEB0b2RvIHJlbW92ZSBhdCB2ZXJzaW9uIDNcbiAqIEBwcml2YXRlXG4gKi9cbkNoYXJ0LkNvbnRyb2xsZXIgPSBDaGFydDtcblxuLyoqXG4gKiBQcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgbm90IGF2YWlsYWJsZSBhbnltb3JlLlxuICogQG5hbWVzcGFjZSBDaGFydFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAyLjhcbiAqIEB0b2RvIHJlbW92ZSBhdCB2ZXJzaW9uIDNcbiAqIEBwcml2YXRlXG4gKi9cbkNoYXJ0LnR5cGVzID0ge307XG5cbi8qKlxuICogUHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIG5vdCBhdmFpbGFibGUgYW55bW9yZS5cbiAqIEBuYW1lc3BhY2UgQ2hhcnQuaGVscGVycy5jb25maWdNZXJnZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAyLjguMFxuICogQHRvZG8gcmVtb3ZlIGF0IHZlcnNpb24gM1xuICogQHByaXZhdGVcbiAqL1xuaGVscGVycyQxLmNvbmZpZ01lcmdlID0gbWVyZ2VDb25maWc7XG5cbi8qKlxuICogUHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIG5vdCBhdmFpbGFibGUgYW55bW9yZS5cbiAqIEBuYW1lc3BhY2UgQ2hhcnQuaGVscGVycy5zY2FsZU1lcmdlXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDIuOC4wXG4gKiBAdG9kbyByZW1vdmUgYXQgdmVyc2lvbiAzXG4gKiBAcHJpdmF0ZVxuICovXG5oZWxwZXJzJDEuc2NhbGVNZXJnZSA9IG1lcmdlU2NhbGVDb25maWc7XG5cbnZhciBjb3JlX2hlbHBlcnMgPSBmdW5jdGlvbigpIHtcblxuXHQvLyAtLSBCYXNpYyBqcyB1dGlsaXR5IG1ldGhvZHNcblxuXHRoZWxwZXJzJDEud2hlcmUgPSBmdW5jdGlvbihjb2xsZWN0aW9uLCBmaWx0ZXJDYWxsYmFjaykge1xuXHRcdGlmIChoZWxwZXJzJDEuaXNBcnJheShjb2xsZWN0aW9uKSAmJiBBcnJheS5wcm90b3R5cGUuZmlsdGVyKSB7XG5cdFx0XHRyZXR1cm4gY29sbGVjdGlvbi5maWx0ZXIoZmlsdGVyQ2FsbGJhY2spO1xuXHRcdH1cblx0XHR2YXIgZmlsdGVyZWQgPSBbXTtcblxuXHRcdGhlbHBlcnMkMS5lYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKGl0ZW0pIHtcblx0XHRcdGlmIChmaWx0ZXJDYWxsYmFjayhpdGVtKSkge1xuXHRcdFx0XHRmaWx0ZXJlZC5wdXNoKGl0ZW0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIGZpbHRlcmVkO1xuXHR9O1xuXHRoZWxwZXJzJDEuZmluZEluZGV4ID0gQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleCA/XG5cdFx0ZnVuY3Rpb24oYXJyYXksIGNhbGxiYWNrLCBzY29wZSkge1xuXHRcdFx0cmV0dXJuIGFycmF5LmZpbmRJbmRleChjYWxsYmFjaywgc2NvcGUpO1xuXHRcdH0gOlxuXHRcdGZ1bmN0aW9uKGFycmF5LCBjYWxsYmFjaywgc2NvcGUpIHtcblx0XHRcdHNjb3BlID0gc2NvcGUgPT09IHVuZGVmaW5lZCA/IGFycmF5IDogc2NvcGU7XG5cdFx0XHRmb3IgKHZhciBpID0gMCwgaWxlbiA9IGFycmF5Lmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xuXHRcdFx0XHRpZiAoY2FsbGJhY2suY2FsbChzY29wZSwgYXJyYXlbaV0sIGksIGFycmF5KSkge1xuXHRcdFx0XHRcdHJldHVybiBpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gLTE7XG5cdFx0fTtcblx0aGVscGVycyQxLmZpbmROZXh0V2hlcmUgPSBmdW5jdGlvbihhcnJheVRvU2VhcmNoLCBmaWx0ZXJDYWxsYmFjaywgc3RhcnRJbmRleCkge1xuXHRcdC8vIERlZmF1bHQgdG8gc3RhcnQgb2YgdGhlIGFycmF5XG5cdFx0aWYgKGhlbHBlcnMkMS5pc051bGxPclVuZGVmKHN0YXJ0SW5kZXgpKSB7XG5cdFx0XHRzdGFydEluZGV4ID0gLTE7XG5cdFx0fVxuXHRcdGZvciAodmFyIGkgPSBzdGFydEluZGV4ICsgMTsgaSA8IGFycmF5VG9TZWFyY2gubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBjdXJyZW50SXRlbSA9IGFycmF5VG9TZWFyY2hbaV07XG5cdFx0XHRpZiAoZmlsdGVyQ2FsbGJhY2soY3VycmVudEl0ZW0pKSB7XG5cdFx0XHRcdHJldHVybiBjdXJyZW50SXRlbTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGhlbHBlcnMkMS5maW5kUHJldmlvdXNXaGVyZSA9IGZ1bmN0aW9uKGFycmF5VG9TZWFyY2gsIGZpbHRlckNhbGxiYWNrLCBzdGFydEluZGV4KSB7XG5cdFx0Ly8gRGVmYXVsdCB0byBlbmQgb2YgdGhlIGFycmF5XG5cdFx0aWYgKGhlbHBlcnMkMS5pc051bGxPclVuZGVmKHN0YXJ0SW5kZXgpKSB7XG5cdFx0XHRzdGFydEluZGV4ID0gYXJyYXlUb1NlYXJjaC5sZW5ndGg7XG5cdFx0fVxuXHRcdGZvciAodmFyIGkgPSBzdGFydEluZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdHZhciBjdXJyZW50SXRlbSA9IGFycmF5VG9TZWFyY2hbaV07XG5cdFx0XHRpZiAoZmlsdGVyQ2FsbGJhY2soY3VycmVudEl0ZW0pKSB7XG5cdFx0XHRcdHJldHVybiBjdXJyZW50SXRlbTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0Ly8gLS0gTWF0aCBtZXRob2RzXG5cdGhlbHBlcnMkMS5pc051bWJlciA9IGZ1bmN0aW9uKG4pIHtcblx0XHRyZXR1cm4gIWlzTmFOKHBhcnNlRmxvYXQobikpICYmIGlzRmluaXRlKG4pO1xuXHR9O1xuXHRoZWxwZXJzJDEuYWxtb3N0RXF1YWxzID0gZnVuY3Rpb24oeCwgeSwgZXBzaWxvbikge1xuXHRcdHJldHVybiBNYXRoLmFicyh4IC0geSkgPCBlcHNpbG9uO1xuXHR9O1xuXHRoZWxwZXJzJDEuYWxtb3N0V2hvbGUgPSBmdW5jdGlvbih4LCBlcHNpbG9uKSB7XG5cdFx0dmFyIHJvdW5kZWQgPSBNYXRoLnJvdW5kKHgpO1xuXHRcdHJldHVybiAoKChyb3VuZGVkIC0gZXBzaWxvbikgPCB4KSAmJiAoKHJvdW5kZWQgKyBlcHNpbG9uKSA+IHgpKTtcblx0fTtcblx0aGVscGVycyQxLm1heCA9IGZ1bmN0aW9uKGFycmF5KSB7XG5cdFx0cmV0dXJuIGFycmF5LnJlZHVjZShmdW5jdGlvbihtYXgsIHZhbHVlKSB7XG5cdFx0XHRpZiAoIWlzTmFOKHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gTWF0aC5tYXgobWF4LCB2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF4O1xuXHRcdH0sIE51bWJlci5ORUdBVElWRV9JTkZJTklUWSk7XG5cdH07XG5cdGhlbHBlcnMkMS5taW4gPSBmdW5jdGlvbihhcnJheSkge1xuXHRcdHJldHVybiBhcnJheS5yZWR1Y2UoZnVuY3Rpb24obWluLCB2YWx1ZSkge1xuXHRcdFx0aWYgKCFpc05hTih2YWx1ZSkpIHtcblx0XHRcdFx0cmV0dXJuIE1hdGgubWluKG1pbiwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1pbjtcblx0XHR9LCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1xuXHR9O1xuXHRoZWxwZXJzJDEuc2lnbiA9IE1hdGguc2lnbiA/XG5cdFx0ZnVuY3Rpb24oeCkge1xuXHRcdFx0cmV0dXJuIE1hdGguc2lnbih4KTtcblx0XHR9IDpcblx0XHRmdW5jdGlvbih4KSB7XG5cdFx0XHR4ID0gK3g7IC8vIGNvbnZlcnQgdG8gYSBudW1iZXJcblx0XHRcdGlmICh4ID09PSAwIHx8IGlzTmFOKHgpKSB7XG5cdFx0XHRcdHJldHVybiB4O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHggPiAwID8gMSA6IC0xO1xuXHRcdH07XG5cdGhlbHBlcnMkMS5sb2cxMCA9IE1hdGgubG9nMTAgP1xuXHRcdGZ1bmN0aW9uKHgpIHtcblx0XHRcdHJldHVybiBNYXRoLmxvZzEwKHgpO1xuXHRcdH0gOlxuXHRcdGZ1bmN0aW9uKHgpIHtcblx0XHRcdHZhciBleHBvbmVudCA9IE1hdGgubG9nKHgpICogTWF0aC5MT0cxMEU7IC8vIE1hdGguTE9HMTBFID0gMSAvIE1hdGguTE4xMC5cblx0XHRcdC8vIENoZWNrIGZvciB3aG9sZSBwb3dlcnMgb2YgMTAsXG5cdFx0XHQvLyB3aGljaCBkdWUgdG8gZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3Igc2hvdWxkIGJlIGNvcnJlY3RlZC5cblx0XHRcdHZhciBwb3dlck9mMTAgPSBNYXRoLnJvdW5kKGV4cG9uZW50KTtcblx0XHRcdHZhciBpc1Bvd2VyT2YxMCA9IHggPT09IE1hdGgucG93KDEwLCBwb3dlck9mMTApO1xuXG5cdFx0XHRyZXR1cm4gaXNQb3dlck9mMTAgPyBwb3dlck9mMTAgOiBleHBvbmVudDtcblx0XHR9O1xuXHRoZWxwZXJzJDEudG9SYWRpYW5zID0gZnVuY3Rpb24oZGVncmVlcykge1xuXHRcdHJldHVybiBkZWdyZWVzICogKE1hdGguUEkgLyAxODApO1xuXHR9O1xuXHRoZWxwZXJzJDEudG9EZWdyZWVzID0gZnVuY3Rpb24ocmFkaWFucykge1xuXHRcdHJldHVybiByYWRpYW5zICogKDE4MCAvIE1hdGguUEkpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXNcblx0ICogaS5lLiB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCwgb2YgdGhlIHZhbHVlIG9mIHRoaXMgTnVtYmVyLlxuXHQgKiBAcGFyYW0ge251bWJlcn0geCAtIEEgbnVtYmVyLlxuXHQgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0aGVscGVycyQxLl9kZWNpbWFsUGxhY2VzID0gZnVuY3Rpb24oeCkge1xuXHRcdGlmICghaGVscGVycyQxLmlzRmluaXRlKHgpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHZhciBlID0gMTtcblx0XHR2YXIgcCA9IDA7XG5cdFx0d2hpbGUgKE1hdGgucm91bmQoeCAqIGUpIC8gZSAhPT0geCkge1xuXHRcdFx0ZSAqPSAxMDtcblx0XHRcdHArKztcblx0XHR9XG5cdFx0cmV0dXJuIHA7XG5cdH07XG5cblx0Ly8gR2V0cyB0aGUgYW5nbGUgZnJvbSB2ZXJ0aWNhbCB1cHJpZ2h0IHRvIHRoZSBwb2ludCBhYm91dCBhIGNlbnRyZS5cblx0aGVscGVycyQxLmdldEFuZ2xlRnJvbVBvaW50ID0gZnVuY3Rpb24oY2VudHJlUG9pbnQsIGFuZ2xlUG9pbnQpIHtcblx0XHR2YXIgZGlzdGFuY2VGcm9tWENlbnRlciA9IGFuZ2xlUG9pbnQueCAtIGNlbnRyZVBvaW50Lng7XG5cdFx0dmFyIGRpc3RhbmNlRnJvbVlDZW50ZXIgPSBhbmdsZVBvaW50LnkgLSBjZW50cmVQb2ludC55O1xuXHRcdHZhciByYWRpYWxEaXN0YW5jZUZyb21DZW50ZXIgPSBNYXRoLnNxcnQoZGlzdGFuY2VGcm9tWENlbnRlciAqIGRpc3RhbmNlRnJvbVhDZW50ZXIgKyBkaXN0YW5jZUZyb21ZQ2VudGVyICogZGlzdGFuY2VGcm9tWUNlbnRlcik7XG5cblx0XHR2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKGRpc3RhbmNlRnJvbVlDZW50ZXIsIGRpc3RhbmNlRnJvbVhDZW50ZXIpO1xuXG5cdFx0aWYgKGFuZ2xlIDwgKC0wLjUgKiBNYXRoLlBJKSkge1xuXHRcdFx0YW5nbGUgKz0gMi4wICogTWF0aC5QSTsgLy8gbWFrZSBzdXJlIHRoZSByZXR1cm5lZCBhbmdsZSBpcyBpbiB0aGUgcmFuZ2Ugb2YgKC1QSS8yLCAzUEkvMl1cblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0YW5nbGU6IGFuZ2xlLFxuXHRcdFx0ZGlzdGFuY2U6IHJhZGlhbERpc3RhbmNlRnJvbUNlbnRlclxuXHRcdH07XG5cdH07XG5cdGhlbHBlcnMkMS5kaXN0YW5jZUJldHdlZW5Qb2ludHMgPSBmdW5jdGlvbihwdDEsIHB0Mikge1xuXHRcdHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3cocHQyLnggLSBwdDEueCwgMikgKyBNYXRoLnBvdyhwdDIueSAtIHB0MS55LCAyKSk7XG5cdH07XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBub3QgYXZhaWxhYmxlIGFueW1vcmVcblx0ICogQGZ1bmN0aW9uIENoYXJ0LmhlbHBlcnMuYWxpYXNQaXhlbFxuXHQgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDIuOC4wXG5cdCAqIEB0b2RvIHJlbW92ZSBhdCB2ZXJzaW9uIDNcblx0ICovXG5cdGhlbHBlcnMkMS5hbGlhc1BpeGVsID0gZnVuY3Rpb24ocGl4ZWxXaWR0aCkge1xuXHRcdHJldHVybiAocGl4ZWxXaWR0aCAlIDIgPT09IDApID8gMCA6IDAuNTtcblx0fTtcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgYWxpZ25lZCBwaXhlbCB2YWx1ZSB0byBhdm9pZCBhbnRpLWFsaWFzaW5nIGJsdXJcblx0ICogQHBhcmFtIHtDaGFydH0gY2hhcnQgLSBUaGUgY2hhcnQgaW5zdGFuY2UuXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBwaXhlbCAtIEEgcGl4ZWwgdmFsdWUuXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgZWxlbWVudC5cblx0ICogQHJldHVybnMge251bWJlcn0gVGhlIGFsaWduZWQgcGl4ZWwgdmFsdWUuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRoZWxwZXJzJDEuX2FsaWduUGl4ZWwgPSBmdW5jdGlvbihjaGFydCwgcGl4ZWwsIHdpZHRoKSB7XG5cdFx0dmFyIGRldmljZVBpeGVsUmF0aW8gPSBjaGFydC5jdXJyZW50RGV2aWNlUGl4ZWxSYXRpbztcblx0XHR2YXIgaGFsZldpZHRoID0gd2lkdGggLyAyO1xuXHRcdHJldHVybiBNYXRoLnJvdW5kKChwaXhlbCAtIGhhbGZXaWR0aCkgKiBkZXZpY2VQaXhlbFJhdGlvKSAvIGRldmljZVBpeGVsUmF0aW8gKyBoYWxmV2lkdGg7XG5cdH07XG5cblx0aGVscGVycyQxLnNwbGluZUN1cnZlID0gZnVuY3Rpb24oZmlyc3RQb2ludCwgbWlkZGxlUG9pbnQsIGFmdGVyUG9pbnQsIHQpIHtcblx0XHQvLyBQcm9wcyB0byBSb2IgU3BlbmNlciBhdCBzY2FsZWQgaW5ub3ZhdGlvbiBmb3IgaGlzIHBvc3Qgb24gc3BsaW5pbmcgYmV0d2VlbiBwb2ludHNcblx0XHQvLyBodHRwOi8vc2NhbGVkaW5ub3ZhdGlvbi5jb20vYW5hbHl0aWNzL3NwbGluZXMvYWJvdXRTcGxpbmVzLmh0bWxcblxuXHRcdC8vIFRoaXMgZnVuY3Rpb24gbXVzdCBhbHNvIHJlc3BlY3QgXCJza2lwcGVkXCIgcG9pbnRzXG5cblx0XHR2YXIgcHJldmlvdXMgPSBmaXJzdFBvaW50LnNraXAgPyBtaWRkbGVQb2ludCA6IGZpcnN0UG9pbnQ7XG5cdFx0dmFyIGN1cnJlbnQgPSBtaWRkbGVQb2ludDtcblx0XHR2YXIgbmV4dCA9IGFmdGVyUG9pbnQuc2tpcCA/IG1pZGRsZVBvaW50IDogYWZ0ZXJQb2ludDtcblxuXHRcdHZhciBkMDEgPSBNYXRoLnNxcnQoTWF0aC5wb3coY3VycmVudC54IC0gcHJldmlvdXMueCwgMikgKyBNYXRoLnBvdyhjdXJyZW50LnkgLSBwcmV2aW91cy55LCAyKSk7XG5cdFx0dmFyIGQxMiA9IE1hdGguc3FydChNYXRoLnBvdyhuZXh0LnggLSBjdXJyZW50LngsIDIpICsgTWF0aC5wb3cobmV4dC55IC0gY3VycmVudC55LCAyKSk7XG5cblx0XHR2YXIgczAxID0gZDAxIC8gKGQwMSArIGQxMik7XG5cdFx0dmFyIHMxMiA9IGQxMiAvIChkMDEgKyBkMTIpO1xuXG5cdFx0Ly8gSWYgYWxsIHBvaW50cyBhcmUgdGhlIHNhbWUsIHMwMSAmIHMwMiB3aWxsIGJlIGluZlxuXHRcdHMwMSA9IGlzTmFOKHMwMSkgPyAwIDogczAxO1xuXHRcdHMxMiA9IGlzTmFOKHMxMikgPyAwIDogczEyO1xuXG5cdFx0dmFyIGZhID0gdCAqIHMwMTsgLy8gc2NhbGluZyBmYWN0b3IgZm9yIHRyaWFuZ2xlIFRhXG5cdFx0dmFyIGZiID0gdCAqIHMxMjtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRwcmV2aW91czoge1xuXHRcdFx0XHR4OiBjdXJyZW50LnggLSBmYSAqIChuZXh0LnggLSBwcmV2aW91cy54KSxcblx0XHRcdFx0eTogY3VycmVudC55IC0gZmEgKiAobmV4dC55IC0gcHJldmlvdXMueSlcblx0XHRcdH0sXG5cdFx0XHRuZXh0OiB7XG5cdFx0XHRcdHg6IGN1cnJlbnQueCArIGZiICogKG5leHQueCAtIHByZXZpb3VzLngpLFxuXHRcdFx0XHR5OiBjdXJyZW50LnkgKyBmYiAqIChuZXh0LnkgLSBwcmV2aW91cy55KVxuXHRcdFx0fVxuXHRcdH07XG5cdH07XG5cdGhlbHBlcnMkMS5FUFNJTE9OID0gTnVtYmVyLkVQU0lMT04gfHwgMWUtMTQ7XG5cdGhlbHBlcnMkMS5zcGxpbmVDdXJ2ZU1vbm90b25lID0gZnVuY3Rpb24ocG9pbnRzKSB7XG5cdFx0Ly8gVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIELDqXppZXIgY29udHJvbCBwb2ludHMgaW4gYSBzaW1pbGFyIHdheSB0aGFuIHxzcGxpbmVDdXJ2ZXwsXG5cdFx0Ly8gYnV0IHByZXNlcnZlcyBtb25vdG9uaWNpdHkgb2YgdGhlIHByb3ZpZGVkIGRhdGEgYW5kIGVuc3VyZXMgbm8gbG9jYWwgZXh0cmVtdW1zIGFyZSBhZGRlZFxuXHRcdC8vIGJldHdlZW4gdGhlIGRhdGFzZXQgZGlzY3JldGUgcG9pbnRzIGR1ZSB0byB0aGUgaW50ZXJwb2xhdGlvbi5cblx0XHQvLyBTZWUgOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Nb25vdG9uZV9jdWJpY19pbnRlcnBvbGF0aW9uXG5cblx0XHR2YXIgcG9pbnRzV2l0aFRhbmdlbnRzID0gKHBvaW50cyB8fCBbXSkubWFwKGZ1bmN0aW9uKHBvaW50KSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRtb2RlbDogcG9pbnQuX21vZGVsLFxuXHRcdFx0XHRkZWx0YUs6IDAsXG5cdFx0XHRcdG1LOiAwXG5cdFx0XHR9O1xuXHRcdH0pO1xuXG5cdFx0Ly8gQ2FsY3VsYXRlIHNsb3BlcyAoZGVsdGFLKSBhbmQgaW5pdGlhbGl6ZSB0YW5nZW50cyAobUspXG5cdFx0dmFyIHBvaW50c0xlbiA9IHBvaW50c1dpdGhUYW5nZW50cy5sZW5ndGg7XG5cdFx0dmFyIGksIHBvaW50QmVmb3JlLCBwb2ludEN1cnJlbnQsIHBvaW50QWZ0ZXI7XG5cdFx0Zm9yIChpID0gMDsgaSA8IHBvaW50c0xlbjsgKytpKSB7XG5cdFx0XHRwb2ludEN1cnJlbnQgPSBwb2ludHNXaXRoVGFuZ2VudHNbaV07XG5cdFx0XHRpZiAocG9pbnRDdXJyZW50Lm1vZGVsLnNraXApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHBvaW50QmVmb3JlID0gaSA+IDAgPyBwb2ludHNXaXRoVGFuZ2VudHNbaSAtIDFdIDogbnVsbDtcblx0XHRcdHBvaW50QWZ0ZXIgPSBpIDwgcG9pbnRzTGVuIC0gMSA/IHBvaW50c1dpdGhUYW5nZW50c1tpICsgMV0gOiBudWxsO1xuXHRcdFx0aWYgKHBvaW50QWZ0ZXIgJiYgIXBvaW50QWZ0ZXIubW9kZWwuc2tpcCkge1xuXHRcdFx0XHR2YXIgc2xvcGVEZWx0YVggPSAocG9pbnRBZnRlci5tb2RlbC54IC0gcG9pbnRDdXJyZW50Lm1vZGVsLngpO1xuXG5cdFx0XHRcdC8vIEluIHRoZSBjYXNlIG9mIHR3byBwb2ludHMgdGhhdCBhcHBlYXIgYXQgdGhlIHNhbWUgeCBwaXhlbCwgc2xvcGVEZWx0YVggaXMgMFxuXHRcdFx0XHRwb2ludEN1cnJlbnQuZGVsdGFLID0gc2xvcGVEZWx0YVggIT09IDAgPyAocG9pbnRBZnRlci5tb2RlbC55IC0gcG9pbnRDdXJyZW50Lm1vZGVsLnkpIC8gc2xvcGVEZWx0YVggOiAwO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIXBvaW50QmVmb3JlIHx8IHBvaW50QmVmb3JlLm1vZGVsLnNraXApIHtcblx0XHRcdFx0cG9pbnRDdXJyZW50Lm1LID0gcG9pbnRDdXJyZW50LmRlbHRhSztcblx0XHRcdH0gZWxzZSBpZiAoIXBvaW50QWZ0ZXIgfHwgcG9pbnRBZnRlci5tb2RlbC5za2lwKSB7XG5cdFx0XHRcdHBvaW50Q3VycmVudC5tSyA9IHBvaW50QmVmb3JlLmRlbHRhSztcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5zaWduKHBvaW50QmVmb3JlLmRlbHRhSykgIT09IHRoaXMuc2lnbihwb2ludEN1cnJlbnQuZGVsdGFLKSkge1xuXHRcdFx0XHRwb2ludEN1cnJlbnQubUsgPSAwO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cG9pbnRDdXJyZW50Lm1LID0gKHBvaW50QmVmb3JlLmRlbHRhSyArIHBvaW50Q3VycmVudC5kZWx0YUspIC8gMjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBZGp1c3QgdGFuZ2VudHMgdG8gZW5zdXJlIG1vbm90b25pYyBwcm9wZXJ0aWVzXG5cdFx0dmFyIGFscGhhSywgYmV0YUssIHRhdUssIHNxdWFyZWRNYWduaXR1ZGU7XG5cdFx0Zm9yIChpID0gMDsgaSA8IHBvaW50c0xlbiAtIDE7ICsraSkge1xuXHRcdFx0cG9pbnRDdXJyZW50ID0gcG9pbnRzV2l0aFRhbmdlbnRzW2ldO1xuXHRcdFx0cG9pbnRBZnRlciA9IHBvaW50c1dpdGhUYW5nZW50c1tpICsgMV07XG5cdFx0XHRpZiAocG9pbnRDdXJyZW50Lm1vZGVsLnNraXAgfHwgcG9pbnRBZnRlci5tb2RlbC5za2lwKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaGVscGVycyQxLmFsbW9zdEVxdWFscyhwb2ludEN1cnJlbnQuZGVsdGFLLCAwLCB0aGlzLkVQU0lMT04pKSB7XG5cdFx0XHRcdHBvaW50Q3VycmVudC5tSyA9IHBvaW50QWZ0ZXIubUsgPSAwO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0YWxwaGFLID0gcG9pbnRDdXJyZW50Lm1LIC8gcG9pbnRDdXJyZW50LmRlbHRhSztcblx0XHRcdGJldGFLID0gcG9pbnRBZnRlci5tSyAvIHBvaW50Q3VycmVudC5kZWx0YUs7XG5cdFx0XHRzcXVhcmVkTWFnbml0dWRlID0gTWF0aC5wb3coYWxwaGFLLCAyKSArIE1hdGgucG93KGJldGFLLCAyKTtcblx0XHRcdGlmIChzcXVhcmVkTWFnbml0dWRlIDw9IDkpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHRhdUsgPSAzIC8gTWF0aC5zcXJ0KHNxdWFyZWRNYWduaXR1ZGUpO1xuXHRcdFx0cG9pbnRDdXJyZW50Lm1LID0gYWxwaGFLICogdGF1SyAqIHBvaW50Q3VycmVudC5kZWx0YUs7XG5cdFx0XHRwb2ludEFmdGVyLm1LID0gYmV0YUsgKiB0YXVLICogcG9pbnRDdXJyZW50LmRlbHRhSztcblx0XHR9XG5cblx0XHQvLyBDb21wdXRlIGNvbnRyb2wgcG9pbnRzXG5cdFx0dmFyIGRlbHRhWDtcblx0XHRmb3IgKGkgPSAwOyBpIDwgcG9pbnRzTGVuOyArK2kpIHtcblx0XHRcdHBvaW50Q3VycmVudCA9IHBvaW50c1dpdGhUYW5nZW50c1tpXTtcblx0XHRcdGlmIChwb2ludEN1cnJlbnQubW9kZWwuc2tpcCkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0cG9pbnRCZWZvcmUgPSBpID4gMCA/IHBvaW50c1dpdGhUYW5nZW50c1tpIC0gMV0gOiBudWxsO1xuXHRcdFx0cG9pbnRBZnRlciA9IGkgPCBwb2ludHNMZW4gLSAxID8gcG9pbnRzV2l0aFRhbmdlbnRzW2kgKyAxXSA6IG51bGw7XG5cdFx0XHRpZiAocG9pbnRCZWZvcmUgJiYgIXBvaW50QmVmb3JlLm1vZGVsLnNraXApIHtcblx0XHRcdFx0ZGVsdGFYID0gKHBvaW50Q3VycmVudC5tb2RlbC54IC0gcG9pbnRCZWZvcmUubW9kZWwueCkgLyAzO1xuXHRcdFx0XHRwb2ludEN1cnJlbnQubW9kZWwuY29udHJvbFBvaW50UHJldmlvdXNYID0gcG9pbnRDdXJyZW50Lm1vZGVsLnggLSBkZWx0YVg7XG5cdFx0XHRcdHBvaW50Q3VycmVudC5tb2RlbC5jb250cm9sUG9pbnRQcmV2aW91c1kgPSBwb2ludEN1cnJlbnQubW9kZWwueSAtIGRlbHRhWCAqIHBvaW50Q3VycmVudC5tSztcblx0XHRcdH1cblx0XHRcdGlmIChwb2ludEFmdGVyICYmICFwb2ludEFmdGVyLm1vZGVsLnNraXApIHtcblx0XHRcdFx0ZGVsdGFYID0gKHBvaW50QWZ0ZXIubW9kZWwueCAtIHBvaW50Q3VycmVudC5tb2RlbC54KSAvIDM7XG5cdFx0XHRcdHBvaW50Q3VycmVudC5tb2RlbC5jb250cm9sUG9pbnROZXh0WCA9IHBvaW50Q3VycmVudC5tb2RlbC54ICsgZGVsdGFYO1xuXHRcdFx0XHRwb2ludEN1cnJlbnQubW9kZWwuY29udHJvbFBvaW50TmV4dFkgPSBwb2ludEN1cnJlbnQubW9kZWwueSArIGRlbHRhWCAqIHBvaW50Q3VycmVudC5tSztcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGhlbHBlcnMkMS5uZXh0SXRlbSA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGluZGV4LCBsb29wKSB7XG5cdFx0aWYgKGxvb3ApIHtcblx0XHRcdHJldHVybiBpbmRleCA+PSBjb2xsZWN0aW9uLmxlbmd0aCAtIDEgPyBjb2xsZWN0aW9uWzBdIDogY29sbGVjdGlvbltpbmRleCArIDFdO1xuXHRcdH1cblx0XHRyZXR1cm4gaW5kZXggPj0gY29sbGVjdGlvbi5sZW5ndGggLSAxID8gY29sbGVjdGlvbltjb2xsZWN0aW9uLmxlbmd0aCAtIDFdIDogY29sbGVjdGlvbltpbmRleCArIDFdO1xuXHR9O1xuXHRoZWxwZXJzJDEucHJldmlvdXNJdGVtID0gZnVuY3Rpb24oY29sbGVjdGlvbiwgaW5kZXgsIGxvb3ApIHtcblx0XHRpZiAobG9vcCkge1xuXHRcdFx0cmV0dXJuIGluZGV4IDw9IDAgPyBjb2xsZWN0aW9uW2NvbGxlY3Rpb24ubGVuZ3RoIC0gMV0gOiBjb2xsZWN0aW9uW2luZGV4IC0gMV07XG5cdFx0fVxuXHRcdHJldHVybiBpbmRleCA8PSAwID8gY29sbGVjdGlvblswXSA6IGNvbGxlY3Rpb25baW5kZXggLSAxXTtcblx0fTtcblx0Ly8gSW1wbGVtZW50YXRpb24gb2YgdGhlIG5pY2UgbnVtYmVyIGFsZ29yaXRobSB1c2VkIGluIGRldGVybWluaW5nIHdoZXJlIGF4aXMgbGFiZWxzIHdpbGwgZ29cblx0aGVscGVycyQxLm5pY2VOdW0gPSBmdW5jdGlvbihyYW5nZSwgcm91bmQpIHtcblx0XHR2YXIgZXhwb25lbnQgPSBNYXRoLmZsb29yKGhlbHBlcnMkMS5sb2cxMChyYW5nZSkpO1xuXHRcdHZhciBmcmFjdGlvbiA9IHJhbmdlIC8gTWF0aC5wb3coMTAsIGV4cG9uZW50KTtcblx0XHR2YXIgbmljZUZyYWN0aW9uO1xuXG5cdFx0aWYgKHJvdW5kKSB7XG5cdFx0XHRpZiAoZnJhY3Rpb24gPCAxLjUpIHtcblx0XHRcdFx0bmljZUZyYWN0aW9uID0gMTtcblx0XHRcdH0gZWxzZSBpZiAoZnJhY3Rpb24gPCAzKSB7XG5cdFx0XHRcdG5pY2VGcmFjdGlvbiA9IDI7XG5cdFx0XHR9IGVsc2UgaWYgKGZyYWN0aW9uIDwgNykge1xuXHRcdFx0XHRuaWNlRnJhY3Rpb24gPSA1O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmljZUZyYWN0aW9uID0gMTA7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChmcmFjdGlvbiA8PSAxLjApIHtcblx0XHRcdG5pY2VGcmFjdGlvbiA9IDE7XG5cdFx0fSBlbHNlIGlmIChmcmFjdGlvbiA8PSAyKSB7XG5cdFx0XHRuaWNlRnJhY3Rpb24gPSAyO1xuXHRcdH0gZWxzZSBpZiAoZnJhY3Rpb24gPD0gNSkge1xuXHRcdFx0bmljZUZyYWN0aW9uID0gNTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bmljZUZyYWN0aW9uID0gMTA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5pY2VGcmFjdGlvbiAqIE1hdGgucG93KDEwLCBleHBvbmVudCk7XG5cdH07XG5cdC8vIFJlcXVlc3QgYW5pbWF0aW9uIHBvbHlmaWxsIC0gaHR0cHM6Ly93d3cucGF1bGlyaXNoLmNvbS8yMDExL3JlcXVlc3RhbmltYXRpb25mcmFtZS1mb3Itc21hcnQtYW5pbWF0aW5nL1xuXHRoZWxwZXJzJDEucmVxdWVzdEFuaW1GcmFtZSA9IChmdW5jdGlvbigpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbihjYWxsYmFjaykge1xuXHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcblx0XHRcdHdpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcblx0XHRcdHdpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcblx0XHRcdHdpbmRvdy5vUmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG5cdFx0XHR3aW5kb3cubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcblx0XHRcdGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG5cdFx0XHRcdHJldHVybiB3aW5kb3cuc2V0VGltZW91dChjYWxsYmFjaywgMTAwMCAvIDYwKTtcblx0XHRcdH07XG5cdH0oKSk7XG5cdC8vIC0tIERPTSBtZXRob2RzXG5cdGhlbHBlcnMkMS5nZXRSZWxhdGl2ZVBvc2l0aW9uID0gZnVuY3Rpb24oZXZ0LCBjaGFydCkge1xuXHRcdHZhciBtb3VzZVgsIG1vdXNlWTtcblx0XHR2YXIgZSA9IGV2dC5vcmlnaW5hbEV2ZW50IHx8IGV2dDtcblx0XHR2YXIgY2FudmFzID0gZXZ0LnRhcmdldCB8fCBldnQuc3JjRWxlbWVudDtcblx0XHR2YXIgYm91bmRpbmdSZWN0ID0gY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG5cdFx0dmFyIHRvdWNoZXMgPSBlLnRvdWNoZXM7XG5cdFx0aWYgKHRvdWNoZXMgJiYgdG91Y2hlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRtb3VzZVggPSB0b3VjaGVzWzBdLmNsaWVudFg7XG5cdFx0XHRtb3VzZVkgPSB0b3VjaGVzWzBdLmNsaWVudFk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0bW91c2VYID0gZS5jbGllbnRYO1xuXHRcdFx0bW91c2VZID0gZS5jbGllbnRZO1xuXHRcdH1cblxuXHRcdC8vIFNjYWxlIG1vdXNlIGNvb3JkaW5hdGVzIGludG8gY2FudmFzIGNvb3JkaW5hdGVzXG5cdFx0Ly8gYnkgZm9sbG93aW5nIHRoZSBwYXR0ZXJuIGxhaWQgb3V0IGJ5ICdqZXJyeWonIGluIHRoZSBjb21tZW50cyBvZlxuXHRcdC8vIGh0dHBzOi8vd3d3Lmh0bWw1Y2FudmFzdHV0b3JpYWxzLmNvbS9hZHZhbmNlZC9odG1sNS1jYW52YXMtbW91c2UtY29vcmRpbmF0ZXMvXG5cdFx0dmFyIHBhZGRpbmdMZWZ0ID0gcGFyc2VGbG9hdChoZWxwZXJzJDEuZ2V0U3R5bGUoY2FudmFzLCAncGFkZGluZy1sZWZ0JykpO1xuXHRcdHZhciBwYWRkaW5nVG9wID0gcGFyc2VGbG9hdChoZWxwZXJzJDEuZ2V0U3R5bGUoY2FudmFzLCAncGFkZGluZy10b3AnKSk7XG5cdFx0dmFyIHBhZGRpbmdSaWdodCA9IHBhcnNlRmxvYXQoaGVscGVycyQxLmdldFN0eWxlKGNhbnZhcywgJ3BhZGRpbmctcmlnaHQnKSk7XG5cdFx0dmFyIHBhZGRpbmdCb3R0b20gPSBwYXJzZUZsb2F0KGhlbHBlcnMkMS5nZXRTdHlsZShjYW52YXMsICdwYWRkaW5nLWJvdHRvbScpKTtcblx0XHR2YXIgd2lkdGggPSBib3VuZGluZ1JlY3QucmlnaHQgLSBib3VuZGluZ1JlY3QubGVmdCAtIHBhZGRpbmdMZWZ0IC0gcGFkZGluZ1JpZ2h0O1xuXHRcdHZhciBoZWlnaHQgPSBib3VuZGluZ1JlY3QuYm90dG9tIC0gYm91bmRpbmdSZWN0LnRvcCAtIHBhZGRpbmdUb3AgLSBwYWRkaW5nQm90dG9tO1xuXG5cdFx0Ly8gV2UgZGl2aWRlIGJ5IHRoZSBjdXJyZW50IGRldmljZSBwaXhlbCByYXRpbywgYmVjYXVzZSB0aGUgY2FudmFzIGlzIHNjYWxlZCB1cCBieSB0aGF0IGFtb3VudCBpbiBlYWNoIGRpcmVjdGlvbi4gSG93ZXZlclxuXHRcdC8vIHRoZSBiYWNrZW5kIG1vZGVsIGlzIGluIHVuc2NhbGVkIGNvb3JkaW5hdGVzLiBTaW5jZSB3ZSBhcmUgZ29pbmcgdG8gZGVhbCB3aXRoIG91ciBtb2RlbCBjb29yZGluYXRlcywgd2UgZ28gYmFjayBoZXJlXG5cdFx0bW91c2VYID0gTWF0aC5yb3VuZCgobW91c2VYIC0gYm91bmRpbmdSZWN0LmxlZnQgLSBwYWRkaW5nTGVmdCkgLyAod2lkdGgpICogY2FudmFzLndpZHRoIC8gY2hhcnQuY3VycmVudERldmljZVBpeGVsUmF0aW8pO1xuXHRcdG1vdXNlWSA9IE1hdGgucm91bmQoKG1vdXNlWSAtIGJvdW5kaW5nUmVjdC50b3AgLSBwYWRkaW5nVG9wKSAvIChoZWlnaHQpICogY2FudmFzLmhlaWdodCAvIGNoYXJ0LmN1cnJlbnREZXZpY2VQaXhlbFJhdGlvKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHR4OiBtb3VzZVgsXG5cdFx0XHR5OiBtb3VzZVlcblx0XHR9O1xuXG5cdH07XG5cblx0Ly8gUHJpdmF0ZSBoZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBtYXgtd2lkdGgvbWF4LWhlaWdodCB2YWx1ZXMgdGhhdCBtYXkgYmUgcGVyY2VudGFnZXMgaW50byBhIG51bWJlclxuXHRmdW5jdGlvbiBwYXJzZU1heFN0eWxlKHN0eWxlVmFsdWUsIG5vZGUsIHBhcmVudFByb3BlcnR5KSB7XG5cdFx0dmFyIHZhbHVlSW5QaXhlbHM7XG5cdFx0aWYgKHR5cGVvZiBzdHlsZVZhbHVlID09PSAnc3RyaW5nJykge1xuXHRcdFx0dmFsdWVJblBpeGVscyA9IHBhcnNlSW50KHN0eWxlVmFsdWUsIDEwKTtcblxuXHRcdFx0aWYgKHN0eWxlVmFsdWUuaW5kZXhPZignJScpICE9PSAtMSkge1xuXHRcdFx0XHQvLyBwZXJjZW50YWdlICogc2l6ZSBpbiBkaW1lbnNpb25cblx0XHRcdFx0dmFsdWVJblBpeGVscyA9IHZhbHVlSW5QaXhlbHMgLyAxMDAgKiBub2RlLnBhcmVudE5vZGVbcGFyZW50UHJvcGVydHldO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YWx1ZUluUGl4ZWxzID0gc3R5bGVWYWx1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsdWVJblBpeGVscztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGlmIHRoZSBnaXZlbiB2YWx1ZSBjb250YWlucyBhbiBlZmZlY3RpdmUgY29uc3RyYWludC5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGlzQ29uc3RyYWluZWRWYWx1ZSh2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSAnbm9uZSc7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbWF4IHdpZHRoIG9yIGhlaWdodCBvZiB0aGUgZ2l2ZW4gRE9NIG5vZGUgaW4gYSBjcm9zcy1icm93c2VyIGNvbXBhdGlibGUgZmFzaGlvblxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBkb21Ob2RlIC0gdGhlIG5vZGUgdG8gY2hlY2sgdGhlIGNvbnN0cmFpbnQgb25cblx0ICogQHBhcmFtIHtzdHJpbmd9IG1heFN0eWxlIC0gdGhlIHN0eWxlIHRoYXQgZGVmaW5lcyB0aGUgbWF4aW11bSBmb3IgdGhlIGRpcmVjdGlvbiB3ZSBhcmUgdXNpbmcgKCdtYXgtd2lkdGgnIC8gJ21heC1oZWlnaHQnKVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGVyY2VudGFnZVByb3BlcnR5IC0gcHJvcGVydHkgb2YgcGFyZW50IHRvIHVzZSB3aGVuIGNhbGN1bGF0aW5nIHdpZHRoIGFzIGEgcGVyY2VudGFnZVxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5uYXRoYW5hZWxqb25lcy5jb20vYmxvZy8yMDEzL3JlYWRpbmctbWF4LXdpZHRoLWNyb3NzLWJyb3dzZXJ9XG5cdCAqL1xuXHRmdW5jdGlvbiBnZXRDb25zdHJhaW50RGltZW5zaW9uKGRvbU5vZGUsIG1heFN0eWxlLCBwZXJjZW50YWdlUHJvcGVydHkpIHtcblx0XHR2YXIgdmlldyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3O1xuXHRcdHZhciBwYXJlbnROb2RlID0gaGVscGVycyQxLl9nZXRQYXJlbnROb2RlKGRvbU5vZGUpO1xuXHRcdHZhciBjb25zdHJhaW5lZE5vZGUgPSB2aWV3LmdldENvbXB1dGVkU3R5bGUoZG9tTm9kZSlbbWF4U3R5bGVdO1xuXHRcdHZhciBjb25zdHJhaW5lZENvbnRhaW5lciA9IHZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnROb2RlKVttYXhTdHlsZV07XG5cdFx0dmFyIGhhc0NOb2RlID0gaXNDb25zdHJhaW5lZFZhbHVlKGNvbnN0cmFpbmVkTm9kZSk7XG5cdFx0dmFyIGhhc0NDb250YWluZXIgPSBpc0NvbnN0cmFpbmVkVmFsdWUoY29uc3RyYWluZWRDb250YWluZXIpO1xuXHRcdHZhciBpbmZpbml0eSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcblxuXHRcdGlmIChoYXNDTm9kZSB8fCBoYXNDQ29udGFpbmVyKSB7XG5cdFx0XHRyZXR1cm4gTWF0aC5taW4oXG5cdFx0XHRcdGhhc0NOb2RlID8gcGFyc2VNYXhTdHlsZShjb25zdHJhaW5lZE5vZGUsIGRvbU5vZGUsIHBlcmNlbnRhZ2VQcm9wZXJ0eSkgOiBpbmZpbml0eSxcblx0XHRcdFx0aGFzQ0NvbnRhaW5lciA/IHBhcnNlTWF4U3R5bGUoY29uc3RyYWluZWRDb250YWluZXIsIHBhcmVudE5vZGUsIHBlcmNlbnRhZ2VQcm9wZXJ0eSkgOiBpbmZpbml0eSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICdub25lJztcblx0fVxuXHQvLyByZXR1cm5zIE51bWJlciBvciB1bmRlZmluZWQgaWYgbm8gY29uc3RyYWludFxuXHRoZWxwZXJzJDEuZ2V0Q29uc3RyYWludFdpZHRoID0gZnVuY3Rpb24oZG9tTm9kZSkge1xuXHRcdHJldHVybiBnZXRDb25zdHJhaW50RGltZW5zaW9uKGRvbU5vZGUsICdtYXgtd2lkdGgnLCAnY2xpZW50V2lkdGgnKTtcblx0fTtcblx0Ly8gcmV0dXJucyBOdW1iZXIgb3IgdW5kZWZpbmVkIGlmIG5vIGNvbnN0cmFpbnRcblx0aGVscGVycyQxLmdldENvbnN0cmFpbnRIZWlnaHQgPSBmdW5jdGlvbihkb21Ob2RlKSB7XG5cdFx0cmV0dXJuIGdldENvbnN0cmFpbnREaW1lbnNpb24oZG9tTm9kZSwgJ21heC1oZWlnaHQnLCAnY2xpZW50SGVpZ2h0Jyk7XG5cdH07XG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuIFx0ICovXG5cdGhlbHBlcnMkMS5fY2FsY3VsYXRlUGFkZGluZyA9IGZ1bmN0aW9uKGNvbnRhaW5lciwgcGFkZGluZywgcGFyZW50RGltZW5zaW9uKSB7XG5cdFx0cGFkZGluZyA9IGhlbHBlcnMkMS5nZXRTdHlsZShjb250YWluZXIsIHBhZGRpbmcpO1xuXG5cdFx0cmV0dXJuIHBhZGRpbmcuaW5kZXhPZignJScpID4gLTEgPyBwYXJlbnREaW1lbnNpb24gKiBwYXJzZUludChwYWRkaW5nLCAxMCkgLyAxMDAgOiBwYXJzZUludChwYWRkaW5nLCAxMCk7XG5cdH07XG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0aGVscGVycyQxLl9nZXRQYXJlbnROb2RlID0gZnVuY3Rpb24oZG9tTm9kZSkge1xuXHRcdHZhciBwYXJlbnQgPSBkb21Ob2RlLnBhcmVudE5vZGU7XG5cdFx0aWYgKHBhcmVudCAmJiBwYXJlbnQudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgU2hhZG93Um9vdF0nKSB7XG5cdFx0XHRwYXJlbnQgPSBwYXJlbnQuaG9zdDtcblx0XHR9XG5cdFx0cmV0dXJuIHBhcmVudDtcblx0fTtcblx0aGVscGVycyQxLmdldE1heGltdW1XaWR0aCA9IGZ1bmN0aW9uKGRvbU5vZGUpIHtcblx0XHR2YXIgY29udGFpbmVyID0gaGVscGVycyQxLl9nZXRQYXJlbnROb2RlKGRvbU5vZGUpO1xuXHRcdGlmICghY29udGFpbmVyKSB7XG5cdFx0XHRyZXR1cm4gZG9tTm9kZS5jbGllbnRXaWR0aDtcblx0XHR9XG5cblx0XHR2YXIgY2xpZW50V2lkdGggPSBjb250YWluZXIuY2xpZW50V2lkdGg7XG5cdFx0dmFyIHBhZGRpbmdMZWZ0ID0gaGVscGVycyQxLl9jYWxjdWxhdGVQYWRkaW5nKGNvbnRhaW5lciwgJ3BhZGRpbmctbGVmdCcsIGNsaWVudFdpZHRoKTtcblx0XHR2YXIgcGFkZGluZ1JpZ2h0ID0gaGVscGVycyQxLl9jYWxjdWxhdGVQYWRkaW5nKGNvbnRhaW5lciwgJ3BhZGRpbmctcmlnaHQnLCBjbGllbnRXaWR0aCk7XG5cblx0XHR2YXIgdyA9IGNsaWVudFdpZHRoIC0gcGFkZGluZ0xlZnQgLSBwYWRkaW5nUmlnaHQ7XG5cdFx0dmFyIGN3ID0gaGVscGVycyQxLmdldENvbnN0cmFpbnRXaWR0aChkb21Ob2RlKTtcblx0XHRyZXR1cm4gaXNOYU4oY3cpID8gdyA6IE1hdGgubWluKHcsIGN3KTtcblx0fTtcblx0aGVscGVycyQxLmdldE1heGltdW1IZWlnaHQgPSBmdW5jdGlvbihkb21Ob2RlKSB7XG5cdFx0dmFyIGNvbnRhaW5lciA9IGhlbHBlcnMkMS5fZ2V0UGFyZW50Tm9kZShkb21Ob2RlKTtcblx0XHRpZiAoIWNvbnRhaW5lcikge1xuXHRcdFx0cmV0dXJuIGRvbU5vZGUuY2xpZW50SGVpZ2h0O1xuXHRcdH1cblxuXHRcdHZhciBjbGllbnRIZWlnaHQgPSBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xuXHRcdHZhciBwYWRkaW5nVG9wID0gaGVscGVycyQxLl9jYWxjdWxhdGVQYWRkaW5nKGNvbnRhaW5lciwgJ3BhZGRpbmctdG9wJywgY2xpZW50SGVpZ2h0KTtcblx0XHR2YXIgcGFkZGluZ0JvdHRvbSA9IGhlbHBlcnMkMS5fY2FsY3VsYXRlUGFkZGluZyhjb250YWluZXIsICdwYWRkaW5nLWJvdHRvbScsIGNsaWVudEhlaWdodCk7XG5cblx0XHR2YXIgaCA9IGNsaWVudEhlaWdodCAtIHBhZGRpbmdUb3AgLSBwYWRkaW5nQm90dG9tO1xuXHRcdHZhciBjaCA9IGhlbHBlcnMkMS5nZXRDb25zdHJhaW50SGVpZ2h0KGRvbU5vZGUpO1xuXHRcdHJldHVybiBpc05hTihjaCkgPyBoIDogTWF0aC5taW4oaCwgY2gpO1xuXHR9O1xuXHRoZWxwZXJzJDEuZ2V0U3R5bGUgPSBmdW5jdGlvbihlbCwgcHJvcGVydHkpIHtcblx0XHRyZXR1cm4gZWwuY3VycmVudFN0eWxlID9cblx0XHRcdGVsLmN1cnJlbnRTdHlsZVtwcm9wZXJ0eV0gOlxuXHRcdFx0ZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbCwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eSk7XG5cdH07XG5cdGhlbHBlcnMkMS5yZXRpbmFTY2FsZSA9IGZ1bmN0aW9uKGNoYXJ0LCBmb3JjZVJhdGlvKSB7XG5cdFx0dmFyIHBpeGVsUmF0aW8gPSBjaGFydC5jdXJyZW50RGV2aWNlUGl4ZWxSYXRpbyA9IGZvcmNlUmF0aW8gfHwgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSB8fCAxO1xuXHRcdGlmIChwaXhlbFJhdGlvID09PSAxKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIGNhbnZhcyA9IGNoYXJ0LmNhbnZhcztcblx0XHR2YXIgaGVpZ2h0ID0gY2hhcnQuaGVpZ2h0O1xuXHRcdHZhciB3aWR0aCA9IGNoYXJ0LndpZHRoO1xuXG5cdFx0Y2FudmFzLmhlaWdodCA9IGhlaWdodCAqIHBpeGVsUmF0aW87XG5cdFx0Y2FudmFzLndpZHRoID0gd2lkdGggKiBwaXhlbFJhdGlvO1xuXHRcdGNoYXJ0LmN0eC5zY2FsZShwaXhlbFJhdGlvLCBwaXhlbFJhdGlvKTtcblxuXHRcdC8vIElmIG5vIHN0eWxlIGhhcyBiZWVuIHNldCBvbiB0aGUgY2FudmFzLCB0aGUgcmVuZGVyIHNpemUgaXMgdXNlZCBhcyBkaXNwbGF5IHNpemUsXG5cdFx0Ly8gbWFraW5nIHRoZSBjaGFydCB2aXN1YWxseSBiaWdnZXIsIHNvIGxldCdzIGVuZm9yY2UgaXQgdG8gdGhlIFwiY29ycmVjdFwiIHZhbHVlcy5cblx0XHQvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2NoYXJ0anMvQ2hhcnQuanMvaXNzdWVzLzM1NzVcblx0XHRpZiAoIWNhbnZhcy5zdHlsZS5oZWlnaHQgJiYgIWNhbnZhcy5zdHlsZS53aWR0aCkge1xuXHRcdFx0Y2FudmFzLnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XG5cdFx0XHRjYW52YXMuc3R5bGUud2lkdGggPSB3aWR0aCArICdweCc7XG5cdFx0fVxuXHR9O1xuXHQvLyAtLSBDYW52YXMgbWV0aG9kc1xuXHRoZWxwZXJzJDEuZm9udFN0cmluZyA9IGZ1bmN0aW9uKHBpeGVsU2l6ZSwgZm9udFN0eWxlLCBmb250RmFtaWx5KSB7XG5cdFx0cmV0dXJuIGZvbnRTdHlsZSArICcgJyArIHBpeGVsU2l6ZSArICdweCAnICsgZm9udEZhbWlseTtcblx0fTtcblx0aGVscGVycyQxLmxvbmdlc3RUZXh0ID0gZnVuY3Rpb24oY3R4LCBmb250LCBhcnJheU9mVGhpbmdzLCBjYWNoZSkge1xuXHRcdGNhY2hlID0gY2FjaGUgfHwge307XG5cdFx0dmFyIGRhdGEgPSBjYWNoZS5kYXRhID0gY2FjaGUuZGF0YSB8fCB7fTtcblx0XHR2YXIgZ2MgPSBjYWNoZS5nYXJiYWdlQ29sbGVjdCA9IGNhY2hlLmdhcmJhZ2VDb2xsZWN0IHx8IFtdO1xuXG5cdFx0aWYgKGNhY2hlLmZvbnQgIT09IGZvbnQpIHtcblx0XHRcdGRhdGEgPSBjYWNoZS5kYXRhID0ge307XG5cdFx0XHRnYyA9IGNhY2hlLmdhcmJhZ2VDb2xsZWN0ID0gW107XG5cdFx0XHRjYWNoZS5mb250ID0gZm9udDtcblx0XHR9XG5cblx0XHRjdHguZm9udCA9IGZvbnQ7XG5cdFx0dmFyIGxvbmdlc3QgPSAwO1xuXHRcdGhlbHBlcnMkMS5lYWNoKGFycmF5T2ZUaGluZ3MsIGZ1bmN0aW9uKHRoaW5nKSB7XG5cdFx0XHQvLyBVbmRlZmluZWQgc3RyaW5ncyBhbmQgYXJyYXlzIHNob3VsZCBub3QgYmUgbWVhc3VyZWRcblx0XHRcdGlmICh0aGluZyAhPT0gdW5kZWZpbmVkICYmIHRoaW5nICE9PSBudWxsICYmIGhlbHBlcnMkMS5pc0FycmF5KHRoaW5nKSAhPT0gdHJ1ZSkge1xuXHRcdFx0XHRsb25nZXN0ID0gaGVscGVycyQxLm1lYXN1cmVUZXh0KGN0eCwgZGF0YSwgZ2MsIGxvbmdlc3QsIHRoaW5nKTtcblx0XHRcdH0gZWxzZSBpZiAoaGVscGVycyQxLmlzQXJyYXkodGhpbmcpKSB7XG5cdFx0XHRcdC8vIGlmIGl0IGlzIGFuIGFycmF5IGxldHMgbWVhc3VyZSBlYWNoIGVsZW1lbnRcblx0XHRcdFx0Ly8gdG8gZG8gbWF5YmUgc2ltcGxpZnkgdGhpcyBmdW5jdGlvbiBhIGJpdCBzbyB3ZSBjYW4gZG8gdGhpcyBtb3JlIHJlY3Vyc2l2ZWx5P1xuXHRcdFx0XHRoZWxwZXJzJDEuZWFjaCh0aGluZywgZnVuY3Rpb24obmVzdGVkVGhpbmcpIHtcblx0XHRcdFx0XHQvLyBVbmRlZmluZWQgc3RyaW5ncyBhbmQgYXJyYXlzIHNob3VsZCBub3QgYmUgbWVhc3VyZWRcblx0XHRcdFx0XHRpZiAobmVzdGVkVGhpbmcgIT09IHVuZGVmaW5lZCAmJiBuZXN0ZWRUaGluZyAhPT0gbnVsbCAmJiAhaGVscGVycyQxLmlzQXJyYXkobmVzdGVkVGhpbmcpKSB7XG5cdFx0XHRcdFx0XHRsb25nZXN0ID0gaGVscGVycyQxLm1lYXN1cmVUZXh0KGN0eCwgZGF0YSwgZ2MsIGxvbmdlc3QsIG5lc3RlZFRoaW5nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dmFyIGdjTGVuID0gZ2MubGVuZ3RoIC8gMjtcblx0XHRpZiAoZ2NMZW4gPiBhcnJheU9mVGhpbmdzLmxlbmd0aCkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBnY0xlbjsgaSsrKSB7XG5cdFx0XHRcdGRlbGV0ZSBkYXRhW2djW2ldXTtcblx0XHRcdH1cblx0XHRcdGdjLnNwbGljZSgwLCBnY0xlbik7XG5cdFx0fVxuXHRcdHJldHVybiBsb25nZXN0O1xuXHR9O1xuXHRoZWxwZXJzJDEubWVhc3VyZVRleHQgPSBmdW5jdGlvbihjdHgsIGRhdGEsIGdjLCBsb25nZXN0LCBzdHJpbmcpIHtcblx0XHR2YXIgdGV4dFdpZHRoID0gZGF0YVtzdHJpbmddO1xuXHRcdGlmICghdGV4dFdpZHRoKSB7XG5cdFx0XHR0ZXh0V2lkdGggPSBkYXRhW3N0cmluZ10gPSBjdHgubWVhc3VyZVRleHQoc3RyaW5nKS53aWR0aDtcblx0XHRcdGdjLnB1c2goc3RyaW5nKTtcblx0XHR9XG5cdFx0aWYgKHRleHRXaWR0aCA+IGxvbmdlc3QpIHtcblx0XHRcdGxvbmdlc3QgPSB0ZXh0V2lkdGg7XG5cdFx0fVxuXHRcdHJldHVybiBsb25nZXN0O1xuXHR9O1xuXHRoZWxwZXJzJDEubnVtYmVyT2ZMYWJlbExpbmVzID0gZnVuY3Rpb24oYXJyYXlPZlRoaW5ncykge1xuXHRcdHZhciBudW1iZXJPZkxpbmVzID0gMTtcblx0XHRoZWxwZXJzJDEuZWFjaChhcnJheU9mVGhpbmdzLCBmdW5jdGlvbih0aGluZykge1xuXHRcdFx0aWYgKGhlbHBlcnMkMS5pc0FycmF5KHRoaW5nKSkge1xuXHRcdFx0XHRpZiAodGhpbmcubGVuZ3RoID4gbnVtYmVyT2ZMaW5lcykge1xuXHRcdFx0XHRcdG51bWJlck9mTGluZXMgPSB0aGluZy5sZW5ndGg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gbnVtYmVyT2ZMaW5lcztcblx0fTtcblxuXHRoZWxwZXJzJDEuY29sb3IgPSAhY2hhcnRqc0NvbG9yID9cblx0XHRmdW5jdGlvbih2YWx1ZSkge1xuXHRcdFx0Y29uc29sZS5lcnJvcignQ29sb3IuanMgbm90IGZvdW5kIScpO1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH0gOlxuXHRcdGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHQvKiBnbG9iYWwgQ2FudmFzR3JhZGllbnQgKi9cblx0XHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIENhbnZhc0dyYWRpZW50KSB7XG5cdFx0XHRcdHZhbHVlID0gY29yZV9kZWZhdWx0cy5nbG9iYWwuZGVmYXVsdENvbG9yO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gY2hhcnRqc0NvbG9yKHZhbHVlKTtcblx0XHR9O1xuXG5cdGhlbHBlcnMkMS5nZXRIb3ZlckNvbG9yID0gZnVuY3Rpb24oY29sb3JWYWx1ZSkge1xuXHRcdC8qIGdsb2JhbCBDYW52YXNQYXR0ZXJuICovXG5cdFx0cmV0dXJuIChjb2xvclZhbHVlIGluc3RhbmNlb2YgQ2FudmFzUGF0dGVybiB8fCBjb2xvclZhbHVlIGluc3RhbmNlb2YgQ2FudmFzR3JhZGllbnQpID9cblx0XHRcdGNvbG9yVmFsdWUgOlxuXHRcdFx0aGVscGVycyQxLmNvbG9yKGNvbG9yVmFsdWUpLnNhdHVyYXRlKDAuNSkuZGFya2VuKDAuMSkucmdiU3RyaW5nKCk7XG5cdH07XG59O1xuXG5mdW5jdGlvbiBhYnN0cmFjdCgpIHtcblx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdCdUaGlzIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQ6IGVpdGhlciBubyBhZGFwdGVyIGNhbiAnICtcblx0XHQnYmUgZm91bmQgb3IgYW4gaW5jb21wbGV0ZSBpbnRlZ3JhdGlvbiB3YXMgcHJvdmlkZWQuJ1xuXHQpO1xufVxuXG4vKipcbiAqIERhdGUgYWRhcHRlciAoY3VycmVudCB1c2VkIGJ5IHRoZSB0aW1lIHNjYWxlKVxuICogQG5hbWVzcGFjZSBDaGFydC5fYWRhcHRlcnMuX2RhdGVcbiAqIEBtZW1iZXJvZiBDaGFydC5fYWRhcHRlcnNcbiAqIEBwcml2YXRlXG4gKi9cblxuLyoqXG4gKiBDdXJyZW50bHkgc3VwcG9ydGVkIHVuaXQgc3RyaW5nIHZhbHVlcy5cbiAqIEB0eXBlZGVmIHsoJ21pbGxpc2Vjb25kJ3wnc2Vjb25kJ3wnbWludXRlJ3wnaG91cid8J2RheSd8J3dlZWsnfCdtb250aCd8J3F1YXJ0ZXInfCd5ZWFyJyl9XG4gKiBAbWVtYmVyb2YgQ2hhcnQuX2FkYXB0ZXJzLl9kYXRlXG4gKiBAbmFtZSBVbml0XG4gKi9cblxuLyoqXG4gKiBAY2xhc3NcbiAqL1xuZnVuY3Rpb24gRGF0ZUFkYXB0ZXIob3B0aW9ucykge1xuXHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xufVxuXG5oZWxwZXJzJDEuZXh0ZW5kKERhdGVBZGFwdGVyLnByb3RvdHlwZSwgLyoqIEBsZW5kcyBEYXRlQWRhcHRlciAqLyB7XG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgbWFwIG9mIHRpbWUgZm9ybWF0cyBmb3IgdGhlIHN1cHBvcnRlZCBmb3JtYXR0aW5nIHVuaXRzIGRlZmluZWRcblx0ICogaW4gVW5pdCBhcyB3ZWxsIGFzICdkYXRldGltZScgcmVwcmVzZW50aW5nIGEgZGV0YWlsZWQgZGF0ZS90aW1lIHN0cmluZy5cblx0ICogQHJldHVybnMge3tzdHJpbmc6IHN0cmluZ319XG5cdCAqL1xuXHRmb3JtYXRzOiBhYnN0cmFjdCxcblxuXHQvKipcblx0ICogUGFyc2VzIHRoZSBnaXZlbiBgdmFsdWVgIGFuZCByZXR1cm4gdGhlIGFzc29jaWF0ZWQgdGltZXN0YW1wLlxuXHQgKiBAcGFyYW0ge2FueX0gdmFsdWUgLSB0aGUgdmFsdWUgdG8gcGFyc2UgKHVzdWFsbHkgY29tZXMgZnJvbSB0aGUgZGF0YSlcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtmb3JtYXRdIC0gdGhlIGV4cGVjdGVkIGRhdGEgZm9ybWF0XG5cdCAqIEByZXR1cm5zIHsobnVtYmVyfG51bGwpfVxuXHQgKiBAZnVuY3Rpb25cblx0ICovXG5cdHBhcnNlOiBhYnN0cmFjdCxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZm9ybWF0dGVkIGRhdGUgaW4gdGhlIHNwZWNpZmllZCBgZm9ybWF0YCBmb3IgYSBnaXZlbiBgdGltZXN0YW1wYC5cblx0ICogQHBhcmFtIHtudW1iZXJ9IHRpbWVzdGFtcCAtIHRoZSB0aW1lc3RhbXAgdG8gZm9ybWF0XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgLSB0aGUgZGF0ZS90aW1lIHRva2VuXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICogQGZ1bmN0aW9uXG5cdCAqL1xuXHRmb3JtYXQ6IGFic3RyYWN0LFxuXG5cdC8qKlxuXHQgKiBBZGRzIHRoZSBzcGVjaWZpZWQgYGFtb3VudGAgb2YgYHVuaXRgIHRvIHRoZSBnaXZlbiBgdGltZXN0YW1wYC5cblx0ICogQHBhcmFtIHtudW1iZXJ9IHRpbWVzdGFtcCAtIHRoZSBpbnB1dCB0aW1lc3RhbXBcblx0ICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgdG8gYWRkXG5cdCAqIEBwYXJhbSB7VW5pdH0gdW5pdCAtIHRoZSB1bml0IGFzIHN0cmluZ1xuXHQgKiBAcmV0dXJuIHtudW1iZXJ9XG5cdCAqIEBmdW5jdGlvblxuXHQgKi9cblx0YWRkOiBhYnN0cmFjdCxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGB1bml0YCBiZXR3ZWVuIHRoZSBnaXZlbiB0aW1lc3RhbXBzLlxuXHQgKiBAcGFyYW0ge251bWJlcn0gbWF4IC0gdGhlIGlucHV0IHRpbWVzdGFtcCAocmVmZXJlbmNlKVxuXHQgKiBAcGFyYW0ge251bWJlcn0gbWluIC0gdGhlIHRpbWVzdGFtcCB0byBzdWJzdHJhY3Rcblx0ICogQHBhcmFtIHtVbml0fSB1bml0IC0gdGhlIHVuaXQgYXMgc3RyaW5nXG5cdCAqIEByZXR1cm4ge251bWJlcn1cblx0ICogQGZ1bmN0aW9uXG5cdCAqL1xuXHRkaWZmOiBhYnN0cmFjdCxcblxuXHQvKipcblx0ICogUmV0dXJucyBzdGFydCBvZiBgdW5pdGAgZm9yIHRoZSBnaXZlbiBgdGltZXN0YW1wYC5cblx0ICogQHBhcmFtIHtudW1iZXJ9IHRpbWVzdGFtcCAtIHRoZSBpbnB1dCB0aW1lc3RhbXBcblx0ICogQHBhcmFtIHtVbml0fSB1bml0IC0gdGhlIHVuaXQgYXMgc3RyaW5nXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBbd2Vla2RheV0gLSB0aGUgSVNPIGRheSBvZiB0aGUgd2VlayB3aXRoIDEgYmVpbmcgTW9uZGF5XG5cdCAqIGFuZCA3IGJlaW5nIFN1bmRheSAob25seSBuZWVkZWQgaWYgcGFyYW0gKnVuaXQqIGlzIGBpc29XZWVrYCkuXG5cdCAqIEBmdW5jdGlvblxuXHQgKi9cblx0c3RhcnRPZjogYWJzdHJhY3QsXG5cblx0LyoqXG5cdCAqIFJldHVybnMgZW5kIG9mIGB1bml0YCBmb3IgdGhlIGdpdmVuIGB0aW1lc3RhbXBgLlxuXHQgKiBAcGFyYW0ge251bWJlcn0gdGltZXN0YW1wIC0gdGhlIGlucHV0IHRpbWVzdGFtcFxuXHQgKiBAcGFyYW0ge1VuaXR9IHVuaXQgLSB0aGUgdW5pdCBhcyBzdHJpbmdcblx0ICogQGZ1bmN0aW9uXG5cdCAqL1xuXHRlbmRPZjogYWJzdHJhY3QsXG5cblx0Ly8gREVQUkVDQVRJT05TXG5cblx0LyoqXG5cdCAqIFByb3ZpZGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvciBzY2FsZS5nZXRWYWx1ZUZvclBpeGVsKCksXG5cdCAqIHRoaXMgbWV0aG9kIHNob3VsZCBiZSBvdmVycmlkZGVuIG9ubHkgYnkgdGhlIG1vbWVudCBhZGFwdGVyLlxuXHQgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDIuOC4wXG5cdCAqIEB0b2RvIHJlbW92ZSBhdCB2ZXJzaW9uIDNcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9jcmVhdGU6IGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59KTtcblxuRGF0ZUFkYXB0ZXIub3ZlcnJpZGUgPSBmdW5jdGlvbihtZW1iZXJzKSB7XG5cdGhlbHBlcnMkMS5leHRlbmQoRGF0ZUFkYXB0ZXIucHJvdG90eXBlLCBtZW1iZXJzKTtcbn07XG5cbnZhciBfZGF0ZSA9IERhdGVBZGFwdGVyO1xuXG52YXIgY29yZV9hZGFwdGVycyA9IHtcblx0X2RhdGU6IF9kYXRlXG59O1xuXG4vKipcbiAqIE5hbWVzcGFjZSB0byBob2xkIHN0YXRpYyB0aWNrIGdlbmVyYXRpb24gZnVuY3Rpb25zXG4gKiBAbmFtZXNwYWNlIENoYXJ0LlRpY2tzXG4gKi9cbnZhciBjb3JlX3RpY2tzID0ge1xuXHQvKipcblx0ICogTmFtZXNwYWNlIHRvIGhvbGQgZm9ybWF0dGVycyBmb3IgZGlmZmVyZW50IHR5cGVzIG9mIHRpY2tzXG5cdCAqIEBuYW1lc3BhY2UgQ2hhcnQuVGlja3MuZm9ybWF0dGVyc1xuXHQgKi9cblx0Zm9ybWF0dGVyczoge1xuXHRcdC8qKlxuXHRcdCAqIEZvcm1hdHRlciBmb3IgdmFsdWUgbGFiZWxzXG5cdFx0ICogQG1ldGhvZCBDaGFydC5UaWNrcy5mb3JtYXR0ZXJzLnZhbHVlc1xuXHRcdCAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gZGlzcGxheVxuXHRcdCAqIEByZXR1cm4ge3N0cmluZ3xzdHJpbmdbXX0gdGhlIGxhYmVsIHRvIGRpc3BsYXlcblx0XHQgKi9cblx0XHR2YWx1ZXM6IGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gaGVscGVycyQxLmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiAnJyArIHZhbHVlO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBGb3JtYXR0ZXIgZm9yIGxpbmVhciBudW1lcmljIHRpY2tzXG5cdFx0ICogQG1ldGhvZCBDaGFydC5UaWNrcy5mb3JtYXR0ZXJzLmxpbmVhclxuXHRcdCAqIEBwYXJhbSB0aWNrVmFsdWUge251bWJlcn0gdGhlIHZhbHVlIHRvIGJlIGZvcm1hdHRlZFxuXHRcdCAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSB0aGUgcG9zaXRpb24gb2YgdGhlIHRpY2tWYWx1ZSBwYXJhbWV0ZXIgaW4gdGhlIHRpY2tzIGFycmF5XG5cdFx0ICogQHBhcmFtIHRpY2tzIHtudW1iZXJbXX0gdGhlIGxpc3Qgb2YgdGlja3MgYmVpbmcgY29udmVydGVkXG5cdFx0ICogQHJldHVybiB7c3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRpY2tWYWx1ZSBwYXJhbWV0ZXJcblx0XHQgKi9cblx0XHRsaW5lYXI6IGZ1bmN0aW9uKHRpY2tWYWx1ZSwgaW5kZXgsIHRpY2tzKSB7XG5cdFx0XHQvLyBJZiB3ZSBoYXZlIGxvdHMgb2YgdGlja3MsIGRvbid0IHVzZSB0aGUgb25lc1xuXHRcdFx0dmFyIGRlbHRhID0gdGlja3MubGVuZ3RoID4gMyA/IHRpY2tzWzJdIC0gdGlja3NbMV0gOiB0aWNrc1sxXSAtIHRpY2tzWzBdO1xuXG5cdFx0XHQvLyBJZiB3ZSBoYXZlIGEgbnVtYmVyIGxpa2UgMi41IGFzIHRoZSBkZWx0YSwgZmlndXJlIG91dCBob3cgbWFueSBkZWNpbWFsIHBsYWNlcyB3ZSBuZWVkXG5cdFx0XHRpZiAoTWF0aC5hYnMoZGVsdGEpID4gMSkge1xuXHRcdFx0XHRpZiAodGlja1ZhbHVlICE9PSBNYXRoLmZsb29yKHRpY2tWYWx1ZSkpIHtcblx0XHRcdFx0XHQvLyBub3QgYW4gaW50ZWdlclxuXHRcdFx0XHRcdGRlbHRhID0gdGlja1ZhbHVlIC0gTWF0aC5mbG9vcih0aWNrVmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHZhciBsb2dEZWx0YSA9IGhlbHBlcnMkMS5sb2cxMChNYXRoLmFicyhkZWx0YSkpO1xuXHRcdFx0dmFyIHRpY2tTdHJpbmcgPSAnJztcblxuXHRcdFx0aWYgKHRpY2tWYWx1ZSAhPT0gMCkge1xuXHRcdFx0XHR2YXIgbWF4VGljayA9IE1hdGgubWF4KE1hdGguYWJzKHRpY2tzWzBdKSwgTWF0aC5hYnModGlja3NbdGlja3MubGVuZ3RoIC0gMV0pKTtcblx0XHRcdFx0aWYgKG1heFRpY2sgPCAxZS00KSB7IC8vIGFsbCB0aWNrcyBhcmUgc21hbGwgbnVtYmVyczsgdXNlIHNjaWVudGlmaWMgbm90YXRpb25cblx0XHRcdFx0XHR2YXIgbG9nVGljayA9IGhlbHBlcnMkMS5sb2cxMChNYXRoLmFicyh0aWNrVmFsdWUpKTtcblx0XHRcdFx0XHR0aWNrU3RyaW5nID0gdGlja1ZhbHVlLnRvRXhwb25lbnRpYWwoTWF0aC5mbG9vcihsb2dUaWNrKSAtIE1hdGguZmxvb3IobG9nRGVsdGEpKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgbnVtRGVjaW1hbCA9IC0xICogTWF0aC5mbG9vcihsb2dEZWx0YSk7XG5cdFx0XHRcdFx0bnVtRGVjaW1hbCA9IE1hdGgubWF4KE1hdGgubWluKG51bURlY2ltYWwsIDIwKSwgMCk7IC8vIHRvRml4ZWQgaGFzIGEgbWF4IG9mIDIwIGRlY2ltYWwgcGxhY2VzXG5cdFx0XHRcdFx0dGlja1N0cmluZyA9IHRpY2tWYWx1ZS50b0ZpeGVkKG51bURlY2ltYWwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aWNrU3RyaW5nID0gJzAnOyAvLyBuZXZlciBzaG93IGRlY2ltYWwgcGxhY2VzIGZvciAwXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aWNrU3RyaW5nO1xuXHRcdH0sXG5cblx0XHRsb2dhcml0aG1pYzogZnVuY3Rpb24odGlja1ZhbHVlLCBpbmRleCwgdGlja3MpIHtcblx0XHRcdHZhciByZW1haW4gPSB0aWNrVmFsdWUgLyAoTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoaGVscGVycyQxLmxvZzEwKHRpY2tWYWx1ZSkpKSk7XG5cblx0XHRcdGlmICh0aWNrVmFsdWUgPT09IDApIHtcblx0XHRcdFx0cmV0dXJuICcwJztcblx0XHRcdH0gZWxzZSBpZiAocmVtYWluID09PSAxIHx8IHJlbWFpbiA9PT0gMiB8fCByZW1haW4gPT09IDUgfHwgaW5kZXggPT09IDAgfHwgaW5kZXggPT09IHRpY2tzLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0cmV0dXJuIHRpY2tWYWx1ZS50b0V4cG9uZW50aWFsKCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgdmFsdWVPckRlZmF1bHQkOSA9IGhlbHBlcnMkMS52YWx1ZU9yRGVmYXVsdDtcbnZhciB2YWx1ZUF0SW5kZXhPckRlZmF1bHQgPSBoZWxwZXJzJDEudmFsdWVBdEluZGV4T3JEZWZhdWx0O1xuXG5jb3JlX2RlZmF1bHRzLl9zZXQoJ3NjYWxlJywge1xuXHRkaXNwbGF5OiB0cnVlLFxuXHRwb3NpdGlvbjogJ2xlZnQnLFxuXHRvZmZzZXQ6IGZhbHNlLFxuXG5cdC8vIGdyaWQgbGluZSBzZXR0aW5nc1xuXHRncmlkTGluZXM6IHtcblx0XHRkaXNwbGF5OiB0cnVlLFxuXHRcdGNvbG9yOiAncmdiYSgwLCAwLCAwLCAwLjEpJyxcblx0XHRsaW5lV2lkdGg6IDEsXG5cdFx0ZHJhd0JvcmRlcjogdHJ1ZSxcblx0XHRkcmF3T25DaGFydEFyZWE6IHRydWUsXG5cdFx0ZHJhd1RpY2tzOiB0cnVlLFxuXHRcdHRpY2tNYXJrTGVuZ3RoOiAxMCxcblx0XHR6ZXJvTGluZVdpZHRoOiAxLFxuXHRcdHplcm9MaW5lQ29sb3I6ICdyZ2JhKDAsMCwwLDAuMjUpJyxcblx0XHR6ZXJvTGluZUJvcmRlckRhc2g6IFtdLFxuXHRcdHplcm9MaW5lQm9yZGVyRGFzaE9mZnNldDogMC4wLFxuXHRcdG9mZnNldEdyaWRMaW5lczogZmFsc2UsXG5cdFx0Ym9yZGVyRGFzaDogW10sXG5cdFx0Ym9yZGVyRGFzaE9mZnNldDogMC4wXG5cdH0sXG5cblx0Ly8gc2NhbGUgbGFiZWxcblx0c2NhbGVMYWJlbDoge1xuXHRcdC8vIGRpc3BsYXkgcHJvcGVydHlcblx0XHRkaXNwbGF5OiBmYWxzZSxcblxuXHRcdC8vIGFjdHVhbCBsYWJlbFxuXHRcdGxhYmVsU3RyaW5nOiAnJyxcblxuXHRcdC8vIHRvcC9ib3R0b20gcGFkZGluZ1xuXHRcdHBhZGRpbmc6IHtcblx0XHRcdHRvcDogNCxcblx0XHRcdGJvdHRvbTogNFxuXHRcdH1cblx0fSxcblxuXHQvLyBsYWJlbCBzZXR0aW5nc1xuXHR0aWNrczoge1xuXHRcdGJlZ2luQXRaZXJvOiBmYWxzZSxcblx0XHRtaW5Sb3RhdGlvbjogMCxcblx0XHRtYXhSb3RhdGlvbjogNTAsXG5cdFx0bWlycm9yOiBmYWxzZSxcblx0XHRwYWRkaW5nOiAwLFxuXHRcdHJldmVyc2U6IGZhbHNlLFxuXHRcdGRpc3BsYXk6IHRydWUsXG5cdFx0YXV0b1NraXA6IHRydWUsXG5cdFx0YXV0b1NraXBQYWRkaW5nOiAwLFxuXHRcdGxhYmVsT2Zmc2V0OiAwLFxuXHRcdC8vIFdlIHBhc3MgdGhyb3VnaCBhcnJheXMgdG8gYmUgcmVuZGVyZWQgYXMgbXVsdGlsaW5lIGxhYmVscywgd2UgY29udmVydCBPdGhlcnMgdG8gc3RyaW5ncyBoZXJlLlxuXHRcdGNhbGxiYWNrOiBjb3JlX3RpY2tzLmZvcm1hdHRlcnMudmFsdWVzLFxuXHRcdG1pbm9yOiB7fSxcblx0XHRtYWpvcjoge31cblx0fVxufSk7XG5cbmZ1bmN0aW9uIGxhYmVsc0Zyb21UaWNrcyh0aWNrcykge1xuXHR2YXIgbGFiZWxzID0gW107XG5cdHZhciBpLCBpbGVuO1xuXG5cdGZvciAoaSA9IDAsIGlsZW4gPSB0aWNrcy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcblx0XHRsYWJlbHMucHVzaCh0aWNrc1tpXS5sYWJlbCk7XG5cdH1cblxuXHRyZXR1cm4gbGFiZWxzO1xufVxuXG5mdW5jdGlvbiBnZXRQaXhlbEZvckdyaWRMaW5lKHNjYWxlLCBpbmRleCwgb2Zmc2V0R3JpZExpbmVzKSB7XG5cdHZhciBsaW5lVmFsdWUgPSBzY2FsZS5nZXRQaXhlbEZvclRpY2soaW5kZXgpO1xuXG5cdGlmIChvZmZzZXRHcmlkTGluZXMpIHtcblx0XHRpZiAoc2NhbGUuZ2V0VGlja3MoKS5sZW5ndGggPT09IDEpIHtcblx0XHRcdGxpbmVWYWx1ZSAtPSBzY2FsZS5pc0hvcml6b250YWwoKSA/XG5cdFx0XHRcdE1hdGgubWF4KGxpbmVWYWx1ZSAtIHNjYWxlLmxlZnQsIHNjYWxlLnJpZ2h0IC0gbGluZVZhbHVlKSA6XG5cdFx0XHRcdE1hdGgubWF4KGxpbmVWYWx1ZSAtIHNjYWxlLnRvcCwgc2NhbGUuYm90dG9tIC0gbGluZVZhbHVlKTtcblx0XHR9IGVsc2UgaWYgKGluZGV4ID09PSAwKSB7XG5cdFx0XHRsaW5lVmFsdWUgLT0gKHNjYWxlLmdldFBpeGVsRm9yVGljaygxKSAtIGxpbmVWYWx1ZSkgLyAyO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsaW5lVmFsdWUgLT0gKGxpbmVWYWx1ZSAtIHNjYWxlLmdldFBpeGVsRm9yVGljayhpbmRleCAtIDEpKSAvIDI7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBsaW5lVmFsdWU7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVUZXh0U2l6ZShjb250ZXh0LCB0aWNrLCBmb250KSB7XG5cdHJldHVybiBoZWxwZXJzJDEuaXNBcnJheSh0aWNrKSA/XG5cdFx0aGVscGVycyQxLmxvbmdlc3RUZXh0KGNvbnRleHQsIGZvbnQsIHRpY2spIDpcblx0XHRjb250ZXh0Lm1lYXN1cmVUZXh0KHRpY2spLndpZHRoO1xufVxuXG52YXIgY29yZV9zY2FsZSA9IGNvcmVfZWxlbWVudC5leHRlbmQoe1xuXHQvKipcblx0ICogR2V0IHRoZSBwYWRkaW5nIG5lZWRlZCBmb3IgdGhlIHNjYWxlXG5cdCAqIEBtZXRob2QgZ2V0UGFkZGluZ1xuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcmV0dXJucyB7UGFkZGluZ30gdGhlIG5lY2Vzc2FyeSBwYWRkaW5nXG5cdCAqL1xuXHRnZXRQYWRkaW5nOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHJldHVybiB7XG5cdFx0XHRsZWZ0OiBtZS5wYWRkaW5nTGVmdCB8fCAwLFxuXHRcdFx0dG9wOiBtZS5wYWRkaW5nVG9wIHx8IDAsXG5cdFx0XHRyaWdodDogbWUucGFkZGluZ1JpZ2h0IHx8IDAsXG5cdFx0XHRib3R0b206IG1lLnBhZGRpbmdCb3R0b20gfHwgMFxuXHRcdH07XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHNjYWxlIHRpY2sgb2JqZWN0cyAoe2xhYmVsLCBtYWpvcn0pXG5cdCAqIEBzaW5jZSAyLjdcblx0ICovXG5cdGdldFRpY2tzOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5fdGlja3M7XG5cdH0sXG5cblx0Ly8gVGhlc2UgbWV0aG9kcyBhcmUgb3JkZXJlZCBieSBsaWZlY3lsZS4gVXRpbGl0aWVzIHRoZW4gZm9sbG93LlxuXHQvLyBBbnkgZnVuY3Rpb24gZGVmaW5lZCBoZXJlIGlzIGluaGVyaXRlZCBieSBhbGwgc2NhbGUgdHlwZXMuXG5cdC8vIEFueSBmdW5jdGlvbiBjYW4gYmUgZXh0ZW5kZWQgYnkgdGhlIHNjYWxlIHR5cGVcblxuXHRtZXJnZVRpY2tzT3B0aW9uczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRpY2tzID0gdGhpcy5vcHRpb25zLnRpY2tzO1xuXHRcdGlmICh0aWNrcy5taW5vciA9PT0gZmFsc2UpIHtcblx0XHRcdHRpY2tzLm1pbm9yID0ge1xuXHRcdFx0XHRkaXNwbGF5OiBmYWxzZVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aWYgKHRpY2tzLm1ham9yID09PSBmYWxzZSkge1xuXHRcdFx0dGlja3MubWFqb3IgPSB7XG5cdFx0XHRcdGRpc3BsYXk6IGZhbHNlXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRmb3IgKHZhciBrZXkgaW4gdGlja3MpIHtcblx0XHRcdGlmIChrZXkgIT09ICdtYWpvcicgJiYga2V5ICE9PSAnbWlub3InKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgdGlja3MubWlub3Jba2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdFx0XHR0aWNrcy5taW5vcltrZXldID0gdGlja3Nba2V5XTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodHlwZW9mIHRpY2tzLm1ham9yW2tleV0gPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdFx0dGlja3MubWFqb3Jba2V5XSA9IHRpY2tzW2tleV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdGJlZm9yZVVwZGF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0aGVscGVycyQxLmNhbGxiYWNrKHRoaXMub3B0aW9ucy5iZWZvcmVVcGRhdGUsIFt0aGlzXSk7XG5cdH0sXG5cblx0dXBkYXRlOiBmdW5jdGlvbihtYXhXaWR0aCwgbWF4SGVpZ2h0LCBtYXJnaW5zKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgaSwgaWxlbiwgbGFiZWxzLCBsYWJlbCwgdGlja3MsIHRpY2s7XG5cblx0XHQvLyBVcGRhdGUgTGlmZWN5Y2xlIC0gUHJvYmFibHkgZG9uJ3Qgd2FudCB0byBldmVyIGV4dGVuZCBvciBvdmVyd3JpdGUgdGhpcyBmdW5jdGlvbiA7KVxuXHRcdG1lLmJlZm9yZVVwZGF0ZSgpO1xuXG5cdFx0Ly8gQWJzb3JiIHRoZSBtYXN0ZXIgbWVhc3VyZW1lbnRzXG5cdFx0bWUubWF4V2lkdGggPSBtYXhXaWR0aDtcblx0XHRtZS5tYXhIZWlnaHQgPSBtYXhIZWlnaHQ7XG5cdFx0bWUubWFyZ2lucyA9IGhlbHBlcnMkMS5leHRlbmQoe1xuXHRcdFx0bGVmdDogMCxcblx0XHRcdHJpZ2h0OiAwLFxuXHRcdFx0dG9wOiAwLFxuXHRcdFx0Ym90dG9tOiAwXG5cdFx0fSwgbWFyZ2lucyk7XG5cblx0XHRtZS5fbWF4TGFiZWxMaW5lcyA9IDA7XG5cdFx0bWUubG9uZ2VzdExhYmVsV2lkdGggPSAwO1xuXHRcdG1lLmxvbmdlc3RUZXh0Q2FjaGUgPSBtZS5sb25nZXN0VGV4dENhY2hlIHx8IHt9O1xuXG5cdFx0Ly8gRGltZW5zaW9uc1xuXHRcdG1lLmJlZm9yZVNldERpbWVuc2lvbnMoKTtcblx0XHRtZS5zZXREaW1lbnNpb25zKCk7XG5cdFx0bWUuYWZ0ZXJTZXREaW1lbnNpb25zKCk7XG5cblx0XHQvLyBEYXRhIG1pbi9tYXhcblx0XHRtZS5iZWZvcmVEYXRhTGltaXRzKCk7XG5cdFx0bWUuZGV0ZXJtaW5lRGF0YUxpbWl0cygpO1xuXHRcdG1lLmFmdGVyRGF0YUxpbWl0cygpO1xuXG5cdFx0Ly8gVGlja3MgLSBgdGhpcy50aWNrc2AgaXMgbm93IERFUFJFQ0FURUQhXG5cdFx0Ly8gSW50ZXJuYWwgdGlja3MgYXJlIG5vdyBzdG9yZWQgYXMgb2JqZWN0cyBpbiB0aGUgUFJJVkFURSBgdGhpcy5fdGlja3NgIG1lbWJlclxuXHRcdC8vIGFuZCBtdXN0IG5vdCBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIG91dHNpZGUgdGhpcyBjbGFzcy4gYHRoaXMudGlja3NgIGJlaW5nXG5cdFx0Ly8gYXJvdW5kIGZvciBsb25nIHRpbWUgYW5kIG5vdCBtYXJrZWQgYXMgcHJpdmF0ZSwgd2UgY2FuJ3QgY2hhbmdlIGl0cyBzdHJ1Y3R1cmVcblx0XHQvLyB3aXRob3V0IHVuZXhwZWN0ZWQgYnJlYWtpbmcgY2hhbmdlcy4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzY2FsZSB0aWNrcyxcblx0XHQvLyB1c2Ugc2NhbGUuZ2V0VGlja3MoKSBpbnN0ZWFkLlxuXG5cdFx0bWUuYmVmb3JlQnVpbGRUaWNrcygpO1xuXG5cdFx0Ly8gTmV3IGltcGxlbWVudGF0aW9ucyBzaG91bGQgcmV0dXJuIGFuIGFycmF5IG9mIG9iamVjdHMgYnV0IGZvciBCQUNLV0FSRCBDT01QQVQsXG5cdFx0Ly8gd2Ugc3RpbGwgc3VwcG9ydCBubyByZXR1cm4gKGB0aGlzLnRpY2tzYCBpbnRlcm5hbGx5IHNldCBieSBjYWxsaW5nIHRoaXMgbWV0aG9kKS5cblx0XHR0aWNrcyA9IG1lLmJ1aWxkVGlja3MoKSB8fCBbXTtcblxuXHRcdC8vIEFsbG93IG1vZGlmaWNhdGlvbiBvZiB0aWNrcyBpbiBjYWxsYmFjay5cblx0XHR0aWNrcyA9IG1lLmFmdGVyQnVpbGRUaWNrcyh0aWNrcykgfHwgdGlja3M7XG5cblx0XHRtZS5iZWZvcmVUaWNrVG9MYWJlbENvbnZlcnNpb24oKTtcblxuXHRcdC8vIE5ldyBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkIHJldHVybiB0aGUgZm9ybWF0dGVkIHRpY2sgbGFiZWxzIGJ1dCBmb3IgQkFDS1dBUkRcblx0XHQvLyBDT01QQVQsIHdlIHN0aWxsIHN1cHBvcnQgbm8gcmV0dXJuIChgdGhpcy50aWNrc2AgaW50ZXJuYWxseSBjaGFuZ2VkIGJ5IGNhbGxpbmdcblx0XHQvLyB0aGlzIG1ldGhvZCBhbmQgc3VwcG9zZWQgdG8gY29udGFpbiBvbmx5IHN0cmluZyB2YWx1ZXMpLlxuXHRcdGxhYmVscyA9IG1lLmNvbnZlcnRUaWNrc1RvTGFiZWxzKHRpY2tzKSB8fCBtZS50aWNrcztcblxuXHRcdG1lLmFmdGVyVGlja1RvTGFiZWxDb252ZXJzaW9uKCk7XG5cblx0XHRtZS50aWNrcyA9IGxhYmVsczsgICAvLyBCQUNLV0FSRCBDT01QQVRJQklMSVRZXG5cblx0XHQvLyBJTVBPUlRBTlQ6IGZyb20gdGhpcyBwb2ludCwgd2UgY29uc2lkZXIgdGhhdCBgdGhpcy50aWNrc2Agd2lsbCBORVZFUiBjaGFuZ2UhXG5cblx0XHQvLyBCQUNLV0FSRCBDT01QQVQ6IHN5bmNocm9uaXplIGBfdGlja3NgIHdpdGggbGFiZWxzIChzbyBwb3RlbnRpYWxseSBgdGhpcy50aWNrc2ApXG5cdFx0Zm9yIChpID0gMCwgaWxlbiA9IGxhYmVscy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcblx0XHRcdGxhYmVsID0gbGFiZWxzW2ldO1xuXHRcdFx0dGljayA9IHRpY2tzW2ldO1xuXHRcdFx0aWYgKCF0aWNrKSB7XG5cdFx0XHRcdHRpY2tzLnB1c2godGljayA9IHtcblx0XHRcdFx0XHRsYWJlbDogbGFiZWwsXG5cdFx0XHRcdFx0bWFqb3I6IGZhbHNlXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGljay5sYWJlbCA9IGxhYmVsO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdG1lLl90aWNrcyA9IHRpY2tzO1xuXG5cdFx0Ly8gVGljayBSb3RhdGlvblxuXHRcdG1lLmJlZm9yZUNhbGN1bGF0ZVRpY2tSb3RhdGlvbigpO1xuXHRcdG1lLmNhbGN1bGF0ZVRpY2tSb3RhdGlvbigpO1xuXHRcdG1lLmFmdGVyQ2FsY3VsYXRlVGlja1JvdGF0aW9uKCk7XG5cdFx0Ly8gRml0XG5cdFx0bWUuYmVmb3JlRml0KCk7XG5cdFx0bWUuZml0KCk7XG5cdFx0bWUuYWZ0ZXJGaXQoKTtcblx0XHQvL1xuXHRcdG1lLmFmdGVyVXBkYXRlKCk7XG5cblx0XHRyZXR1cm4gbWUubWluU2l6ZTtcblxuXHR9LFxuXHRhZnRlclVwZGF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0aGVscGVycyQxLmNhbGxiYWNrKHRoaXMub3B0aW9ucy5hZnRlclVwZGF0ZSwgW3RoaXNdKTtcblx0fSxcblxuXHQvL1xuXG5cdGJlZm9yZVNldERpbWVuc2lvbnM6IGZ1bmN0aW9uKCkge1xuXHRcdGhlbHBlcnMkMS5jYWxsYmFjayh0aGlzLm9wdGlvbnMuYmVmb3JlU2V0RGltZW5zaW9ucywgW3RoaXNdKTtcblx0fSxcblx0c2V0RGltZW5zaW9uczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHQvLyBTZXQgdGhlIHVuY29uc3RyYWluZWQgZGltZW5zaW9uIGJlZm9yZSBsYWJlbCByb3RhdGlvblxuXHRcdGlmIChtZS5pc0hvcml6b250YWwoKSkge1xuXHRcdFx0Ly8gUmVzZXQgcG9zaXRpb24gYmVmb3JlIGNhbGN1bGF0aW5nIHJvdGF0aW9uXG5cdFx0XHRtZS53aWR0aCA9IG1lLm1heFdpZHRoO1xuXHRcdFx0bWUubGVmdCA9IDA7XG5cdFx0XHRtZS5yaWdodCA9IG1lLndpZHRoO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtZS5oZWlnaHQgPSBtZS5tYXhIZWlnaHQ7XG5cblx0XHRcdC8vIFJlc2V0IHBvc2l0aW9uIGJlZm9yZSBjYWxjdWxhdGluZyByb3RhdGlvblxuXHRcdFx0bWUudG9wID0gMDtcblx0XHRcdG1lLmJvdHRvbSA9IG1lLmhlaWdodDtcblx0XHR9XG5cblx0XHQvLyBSZXNldCBwYWRkaW5nXG5cdFx0bWUucGFkZGluZ0xlZnQgPSAwO1xuXHRcdG1lLnBhZGRpbmdUb3AgPSAwO1xuXHRcdG1lLnBhZGRpbmdSaWdodCA9IDA7XG5cdFx0bWUucGFkZGluZ0JvdHRvbSA9IDA7XG5cdH0sXG5cdGFmdGVyU2V0RGltZW5zaW9uczogZnVuY3Rpb24oKSB7XG5cdFx0aGVscGVycyQxLmNhbGxiYWNrKHRoaXMub3B0aW9ucy5hZnRlclNldERpbWVuc2lvbnMsIFt0aGlzXSk7XG5cdH0sXG5cblx0Ly8gRGF0YSBsaW1pdHNcblx0YmVmb3JlRGF0YUxpbWl0czogZnVuY3Rpb24oKSB7XG5cdFx0aGVscGVycyQxLmNhbGxiYWNrKHRoaXMub3B0aW9ucy5iZWZvcmVEYXRhTGltaXRzLCBbdGhpc10pO1xuXHR9LFxuXHRkZXRlcm1pbmVEYXRhTGltaXRzOiBoZWxwZXJzJDEubm9vcCxcblx0YWZ0ZXJEYXRhTGltaXRzOiBmdW5jdGlvbigpIHtcblx0XHRoZWxwZXJzJDEuY2FsbGJhY2sodGhpcy5vcHRpb25zLmFmdGVyRGF0YUxpbWl0cywgW3RoaXNdKTtcblx0fSxcblxuXHQvL1xuXHRiZWZvcmVCdWlsZFRpY2tzOiBmdW5jdGlvbigpIHtcblx0XHRoZWxwZXJzJDEuY2FsbGJhY2sodGhpcy5vcHRpb25zLmJlZm9yZUJ1aWxkVGlja3MsIFt0aGlzXSk7XG5cdH0sXG5cdGJ1aWxkVGlja3M6IGhlbHBlcnMkMS5ub29wLFxuXHRhZnRlckJ1aWxkVGlja3M6IGZ1bmN0aW9uKHRpY2tzKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHQvLyB0aWNrcyBpcyBlbXB0eSBmb3Igb2xkIGF4aXMgaW1wbGVtZW50YXRpb25zIGhlcmVcblx0XHRpZiAoaGVscGVycyQxLmlzQXJyYXkodGlja3MpICYmIHRpY2tzLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIGhlbHBlcnMkMS5jYWxsYmFjayhtZS5vcHRpb25zLmFmdGVyQnVpbGRUaWNrcywgW21lLCB0aWNrc10pO1xuXHRcdH1cblx0XHQvLyBTdXBwb3J0IG9sZCBpbXBsZW1lbnRhdGlvbnMgKHRoYXQgbW9kaWZpZWQgYHRoaXMudGlja3NgIGRpcmVjdGx5IGluIGJ1aWxkVGlja3MpXG5cdFx0bWUudGlja3MgPSBoZWxwZXJzJDEuY2FsbGJhY2sobWUub3B0aW9ucy5hZnRlckJ1aWxkVGlja3MsIFttZSwgbWUudGlja3NdKSB8fCBtZS50aWNrcztcblx0XHRyZXR1cm4gdGlja3M7XG5cdH0sXG5cblx0YmVmb3JlVGlja1RvTGFiZWxDb252ZXJzaW9uOiBmdW5jdGlvbigpIHtcblx0XHRoZWxwZXJzJDEuY2FsbGJhY2sodGhpcy5vcHRpb25zLmJlZm9yZVRpY2tUb0xhYmVsQ29udmVyc2lvbiwgW3RoaXNdKTtcblx0fSxcblx0Y29udmVydFRpY2tzVG9MYWJlbHM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0Ly8gQ29udmVydCB0aWNrcyB0byBzdHJpbmdzXG5cdFx0dmFyIHRpY2tPcHRzID0gbWUub3B0aW9ucy50aWNrcztcblx0XHRtZS50aWNrcyA9IG1lLnRpY2tzLm1hcCh0aWNrT3B0cy51c2VyQ2FsbGJhY2sgfHwgdGlja09wdHMuY2FsbGJhY2ssIHRoaXMpO1xuXHR9LFxuXHRhZnRlclRpY2tUb0xhYmVsQ29udmVyc2lvbjogZnVuY3Rpb24oKSB7XG5cdFx0aGVscGVycyQxLmNhbGxiYWNrKHRoaXMub3B0aW9ucy5hZnRlclRpY2tUb0xhYmVsQ29udmVyc2lvbiwgW3RoaXNdKTtcblx0fSxcblxuXHQvL1xuXG5cdGJlZm9yZUNhbGN1bGF0ZVRpY2tSb3RhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0aGVscGVycyQxLmNhbGxiYWNrKHRoaXMub3B0aW9ucy5iZWZvcmVDYWxjdWxhdGVUaWNrUm90YXRpb24sIFt0aGlzXSk7XG5cdH0sXG5cdGNhbGN1bGF0ZVRpY2tSb3RhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgY29udGV4dCA9IG1lLmN0eDtcblx0XHR2YXIgdGlja09wdHMgPSBtZS5vcHRpb25zLnRpY2tzO1xuXHRcdHZhciBsYWJlbHMgPSBsYWJlbHNGcm9tVGlja3MobWUuX3RpY2tzKTtcblxuXHRcdC8vIEdldCB0aGUgd2lkdGggb2YgZWFjaCBncmlkIGJ5IGNhbGN1bGF0aW5nIHRoZSBkaWZmZXJlbmNlXG5cdFx0Ly8gYmV0d2VlbiB4IG9mZnNldHMgYmV0d2VlbiAwIGFuZCAxLlxuXHRcdHZhciB0aWNrRm9udCA9IGhlbHBlcnMkMS5vcHRpb25zLl9wYXJzZUZvbnQodGlja09wdHMpO1xuXHRcdGNvbnRleHQuZm9udCA9IHRpY2tGb250LnN0cmluZztcblxuXHRcdHZhciBsYWJlbFJvdGF0aW9uID0gdGlja09wdHMubWluUm90YXRpb24gfHwgMDtcblxuXHRcdGlmIChsYWJlbHMubGVuZ3RoICYmIG1lLm9wdGlvbnMuZGlzcGxheSAmJiBtZS5pc0hvcml6b250YWwoKSkge1xuXHRcdFx0dmFyIG9yaWdpbmFsTGFiZWxXaWR0aCA9IGhlbHBlcnMkMS5sb25nZXN0VGV4dChjb250ZXh0LCB0aWNrRm9udC5zdHJpbmcsIGxhYmVscywgbWUubG9uZ2VzdFRleHRDYWNoZSk7XG5cdFx0XHR2YXIgbGFiZWxXaWR0aCA9IG9yaWdpbmFsTGFiZWxXaWR0aDtcblx0XHRcdHZhciBjb3NSb3RhdGlvbiwgc2luUm90YXRpb247XG5cblx0XHRcdC8vIEFsbG93IDMgcGl4ZWxzIHgyIHBhZGRpbmcgZWl0aGVyIHNpZGUgZm9yIGxhYmVsIHJlYWRhYmlsaXR5XG5cdFx0XHR2YXIgdGlja1dpZHRoID0gbWUuZ2V0UGl4ZWxGb3JUaWNrKDEpIC0gbWUuZ2V0UGl4ZWxGb3JUaWNrKDApIC0gNjtcblxuXHRcdFx0Ly8gTWF4IGxhYmVsIHJvdGF0aW9uIGNhbiBiZSBzZXQgb3IgZGVmYXVsdCB0byA5MCAtIGFsc28gYWN0IGFzIGEgbG9vcCBjb3VudGVyXG5cdFx0XHR3aGlsZSAobGFiZWxXaWR0aCA+IHRpY2tXaWR0aCAmJiBsYWJlbFJvdGF0aW9uIDwgdGlja09wdHMubWF4Um90YXRpb24pIHtcblx0XHRcdFx0dmFyIGFuZ2xlUmFkaWFucyA9IGhlbHBlcnMkMS50b1JhZGlhbnMobGFiZWxSb3RhdGlvbik7XG5cdFx0XHRcdGNvc1JvdGF0aW9uID0gTWF0aC5jb3MoYW5nbGVSYWRpYW5zKTtcblx0XHRcdFx0c2luUm90YXRpb24gPSBNYXRoLnNpbihhbmdsZVJhZGlhbnMpO1xuXG5cdFx0XHRcdGlmIChzaW5Sb3RhdGlvbiAqIG9yaWdpbmFsTGFiZWxXaWR0aCA+IG1lLm1heEhlaWdodCkge1xuXHRcdFx0XHRcdC8vIGdvIGJhY2sgb25lIHN0ZXBcblx0XHRcdFx0XHRsYWJlbFJvdGF0aW9uLS07XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsYWJlbFJvdGF0aW9uKys7XG5cdFx0XHRcdGxhYmVsV2lkdGggPSBjb3NSb3RhdGlvbiAqIG9yaWdpbmFsTGFiZWxXaWR0aDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRtZS5sYWJlbFJvdGF0aW9uID0gbGFiZWxSb3RhdGlvbjtcblx0fSxcblx0YWZ0ZXJDYWxjdWxhdGVUaWNrUm90YXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdGhlbHBlcnMkMS5jYWxsYmFjayh0aGlzLm9wdGlvbnMuYWZ0ZXJDYWxjdWxhdGVUaWNrUm90YXRpb24sIFt0aGlzXSk7XG5cdH0sXG5cblx0Ly9cblxuXHRiZWZvcmVGaXQ6IGZ1bmN0aW9uKCkge1xuXHRcdGhlbHBlcnMkMS5jYWxsYmFjayh0aGlzLm9wdGlvbnMuYmVmb3JlRml0LCBbdGhpc10pO1xuXHR9LFxuXHRmaXQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0Ly8gUmVzZXRcblx0XHR2YXIgbWluU2l6ZSA9IG1lLm1pblNpemUgPSB7XG5cdFx0XHR3aWR0aDogMCxcblx0XHRcdGhlaWdodDogMFxuXHRcdH07XG5cblx0XHR2YXIgbGFiZWxzID0gbGFiZWxzRnJvbVRpY2tzKG1lLl90aWNrcyk7XG5cblx0XHR2YXIgb3B0cyA9IG1lLm9wdGlvbnM7XG5cdFx0dmFyIHRpY2tPcHRzID0gb3B0cy50aWNrcztcblx0XHR2YXIgc2NhbGVMYWJlbE9wdHMgPSBvcHRzLnNjYWxlTGFiZWw7XG5cdFx0dmFyIGdyaWRMaW5lT3B0cyA9IG9wdHMuZ3JpZExpbmVzO1xuXHRcdHZhciBkaXNwbGF5ID0gbWUuX2lzVmlzaWJsZSgpO1xuXHRcdHZhciBwb3NpdGlvbiA9IG9wdHMucG9zaXRpb247XG5cdFx0dmFyIGlzSG9yaXpvbnRhbCA9IG1lLmlzSG9yaXpvbnRhbCgpO1xuXG5cdFx0dmFyIHBhcnNlRm9udCA9IGhlbHBlcnMkMS5vcHRpb25zLl9wYXJzZUZvbnQ7XG5cdFx0dmFyIHRpY2tGb250ID0gcGFyc2VGb250KHRpY2tPcHRzKTtcblx0XHR2YXIgdGlja01hcmtMZW5ndGggPSBvcHRzLmdyaWRMaW5lcy50aWNrTWFya0xlbmd0aDtcblxuXHRcdC8vIFdpZHRoXG5cdFx0aWYgKGlzSG9yaXpvbnRhbCkge1xuXHRcdFx0Ly8gc3VidHJhY3QgdGhlIG1hcmdpbnMgdG8gbGluZSB1cCB3aXRoIHRoZSBjaGFydEFyZWEgaWYgd2UgYXJlIGEgZnVsbCB3aWR0aCBzY2FsZVxuXHRcdFx0bWluU2l6ZS53aWR0aCA9IG1lLmlzRnVsbFdpZHRoKCkgPyBtZS5tYXhXaWR0aCAtIG1lLm1hcmdpbnMubGVmdCAtIG1lLm1hcmdpbnMucmlnaHQgOiBtZS5tYXhXaWR0aDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWluU2l6ZS53aWR0aCA9IGRpc3BsYXkgJiYgZ3JpZExpbmVPcHRzLmRyYXdUaWNrcyA/IHRpY2tNYXJrTGVuZ3RoIDogMDtcblx0XHR9XG5cblx0XHQvLyBoZWlnaHRcblx0XHRpZiAoaXNIb3Jpem9udGFsKSB7XG5cdFx0XHRtaW5TaXplLmhlaWdodCA9IGRpc3BsYXkgJiYgZ3JpZExpbmVPcHRzLmRyYXdUaWNrcyA/IHRpY2tNYXJrTGVuZ3RoIDogMDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWluU2l6ZS5oZWlnaHQgPSBtZS5tYXhIZWlnaHQ7IC8vIGZpbGwgYWxsIHRoZSBoZWlnaHRcblx0XHR9XG5cblx0XHQvLyBBcmUgd2Ugc2hvd2luZyBhIHRpdGxlIGZvciB0aGUgc2NhbGU/XG5cdFx0aWYgKHNjYWxlTGFiZWxPcHRzLmRpc3BsYXkgJiYgZGlzcGxheSkge1xuXHRcdFx0dmFyIHNjYWxlTGFiZWxGb250ID0gcGFyc2VGb250KHNjYWxlTGFiZWxPcHRzKTtcblx0XHRcdHZhciBzY2FsZUxhYmVsUGFkZGluZyA9IGhlbHBlcnMkMS5vcHRpb25zLnRvUGFkZGluZyhzY2FsZUxhYmVsT3B0cy5wYWRkaW5nKTtcblx0XHRcdHZhciBkZWx0YUhlaWdodCA9IHNjYWxlTGFiZWxGb250LmxpbmVIZWlnaHQgKyBzY2FsZUxhYmVsUGFkZGluZy5oZWlnaHQ7XG5cblx0XHRcdGlmIChpc0hvcml6b250YWwpIHtcblx0XHRcdFx0bWluU2l6ZS5oZWlnaHQgKz0gZGVsdGFIZWlnaHQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtaW5TaXplLndpZHRoICs9IGRlbHRhSGVpZ2h0O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIERvbid0IGJvdGhlciBmaXR0aW5nIHRoZSB0aWNrcyBpZiB3ZSBhcmUgbm90IHNob3dpbmcgdGhlIGxhYmVsc1xuXHRcdGlmICh0aWNrT3B0cy5kaXNwbGF5ICYmIGRpc3BsYXkpIHtcblx0XHRcdHZhciBsYXJnZXN0VGV4dFdpZHRoID0gaGVscGVycyQxLmxvbmdlc3RUZXh0KG1lLmN0eCwgdGlja0ZvbnQuc3RyaW5nLCBsYWJlbHMsIG1lLmxvbmdlc3RUZXh0Q2FjaGUpO1xuXHRcdFx0dmFyIHRhbGxlc3RMYWJlbEhlaWdodEluTGluZXMgPSBoZWxwZXJzJDEubnVtYmVyT2ZMYWJlbExpbmVzKGxhYmVscyk7XG5cdFx0XHR2YXIgbGluZVNwYWNlID0gdGlja0ZvbnQuc2l6ZSAqIDAuNTtcblx0XHRcdHZhciB0aWNrUGFkZGluZyA9IG1lLm9wdGlvbnMudGlja3MucGFkZGluZztcblxuXHRcdFx0Ly8gU3RvcmUgbWF4IG51bWJlciBvZiBsaW5lcyBhbmQgd2lkZXN0IGxhYmVsIGZvciBfYXV0b1NraXBcblx0XHRcdG1lLl9tYXhMYWJlbExpbmVzID0gdGFsbGVzdExhYmVsSGVpZ2h0SW5MaW5lcztcblx0XHRcdG1lLmxvbmdlc3RMYWJlbFdpZHRoID0gbGFyZ2VzdFRleHRXaWR0aDtcblxuXHRcdFx0aWYgKGlzSG9yaXpvbnRhbCkge1xuXHRcdFx0XHR2YXIgYW5nbGVSYWRpYW5zID0gaGVscGVycyQxLnRvUmFkaWFucyhtZS5sYWJlbFJvdGF0aW9uKTtcblx0XHRcdFx0dmFyIGNvc1JvdGF0aW9uID0gTWF0aC5jb3MoYW5nbGVSYWRpYW5zKTtcblx0XHRcdFx0dmFyIHNpblJvdGF0aW9uID0gTWF0aC5zaW4oYW5nbGVSYWRpYW5zKTtcblxuXHRcdFx0XHQvLyBUT0RPIC0gaW1wcm92ZSB0aGlzIGNhbGN1bGF0aW9uXG5cdFx0XHRcdHZhciBsYWJlbEhlaWdodCA9IChzaW5Sb3RhdGlvbiAqIGxhcmdlc3RUZXh0V2lkdGgpXG5cdFx0XHRcdFx0KyAodGlja0ZvbnQubGluZUhlaWdodCAqIHRhbGxlc3RMYWJlbEhlaWdodEluTGluZXMpXG5cdFx0XHRcdFx0KyBsaW5lU3BhY2U7IC8vIHBhZGRpbmdcblxuXHRcdFx0XHRtaW5TaXplLmhlaWdodCA9IE1hdGgubWluKG1lLm1heEhlaWdodCwgbWluU2l6ZS5oZWlnaHQgKyBsYWJlbEhlaWdodCArIHRpY2tQYWRkaW5nKTtcblxuXHRcdFx0XHRtZS5jdHguZm9udCA9IHRpY2tGb250LnN0cmluZztcblx0XHRcdFx0dmFyIGZpcnN0TGFiZWxXaWR0aCA9IGNvbXB1dGVUZXh0U2l6ZShtZS5jdHgsIGxhYmVsc1swXSwgdGlja0ZvbnQuc3RyaW5nKTtcblx0XHRcdFx0dmFyIGxhc3RMYWJlbFdpZHRoID0gY29tcHV0ZVRleHRTaXplKG1lLmN0eCwgbGFiZWxzW2xhYmVscy5sZW5ndGggLSAxXSwgdGlja0ZvbnQuc3RyaW5nKTtcblx0XHRcdFx0dmFyIG9mZnNldExlZnQgPSBtZS5nZXRQaXhlbEZvclRpY2soMCkgLSBtZS5sZWZ0O1xuXHRcdFx0XHR2YXIgb2Zmc2V0UmlnaHQgPSBtZS5yaWdodCAtIG1lLmdldFBpeGVsRm9yVGljayhsYWJlbHMubGVuZ3RoIC0gMSk7XG5cdFx0XHRcdHZhciBwYWRkaW5nTGVmdCwgcGFkZGluZ1JpZ2h0O1xuXG5cdFx0XHRcdC8vIEVuc3VyZSB0aGF0IG91ciB0aWNrcyBhcmUgYWx3YXlzIGluc2lkZSB0aGUgY2FudmFzLiBXaGVuIHJvdGF0ZWQsIHRpY2tzIGFyZSByaWdodCBhbGlnbmVkXG5cdFx0XHRcdC8vIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHJpZ2h0IHBhZGRpbmcgaXMgZG9taW5hdGVkIGJ5IHRoZSBmb250IGhlaWdodFxuXHRcdFx0XHRpZiAobWUubGFiZWxSb3RhdGlvbiAhPT0gMCkge1xuXHRcdFx0XHRcdHBhZGRpbmdMZWZ0ID0gcG9zaXRpb24gPT09ICdib3R0b20nID8gKGNvc1JvdGF0aW9uICogZmlyc3RMYWJlbFdpZHRoKSA6IChjb3NSb3RhdGlvbiAqIGxpbmVTcGFjZSk7XG5cdFx0XHRcdFx0cGFkZGluZ1JpZ2h0ID0gcG9zaXRpb24gPT09ICdib3R0b20nID8gKGNvc1JvdGF0aW9uICogbGluZVNwYWNlKSA6IChjb3NSb3RhdGlvbiAqIGxhc3RMYWJlbFdpZHRoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRwYWRkaW5nTGVmdCA9IGZpcnN0TGFiZWxXaWR0aCAvIDI7XG5cdFx0XHRcdFx0cGFkZGluZ1JpZ2h0ID0gbGFzdExhYmVsV2lkdGggLyAyO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG1lLnBhZGRpbmdMZWZ0ID0gTWF0aC5tYXgocGFkZGluZ0xlZnQgLSBvZmZzZXRMZWZ0LCAwKSArIDM7IC8vIGFkZCAzIHB4IHRvIG1vdmUgYXdheSBmcm9tIGNhbnZhcyBlZGdlc1xuXHRcdFx0XHRtZS5wYWRkaW5nUmlnaHQgPSBNYXRoLm1heChwYWRkaW5nUmlnaHQgLSBvZmZzZXRSaWdodCwgMCkgKyAzO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQSB2ZXJ0aWNhbCBheGlzIGlzIG1vcmUgY29uc3RyYWluZWQgYnkgdGhlIHdpZHRoLiBMYWJlbHMgYXJlIHRoZVxuXHRcdFx0XHQvLyBkb21pbmFudCBmYWN0b3IgaGVyZSwgc28gZ2V0IHRoYXQgbGVuZ3RoIGZpcnN0IGFuZCBhY2NvdW50IGZvciBwYWRkaW5nXG5cdFx0XHRcdGlmICh0aWNrT3B0cy5taXJyb3IpIHtcblx0XHRcdFx0XHRsYXJnZXN0VGV4dFdpZHRoID0gMDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1c2UgbGluZVNwYWNlIGZvciBjb25zaXN0ZW5jeSB3aXRoIGhvcml6b250YWwgYXhpc1xuXHRcdFx0XHRcdC8vIHRpY2tQYWRkaW5nIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgaG9yaXpvbnRhbFxuXHRcdFx0XHRcdGxhcmdlc3RUZXh0V2lkdGggKz0gdGlja1BhZGRpbmcgKyBsaW5lU3BhY2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRtaW5TaXplLndpZHRoID0gTWF0aC5taW4obWUubWF4V2lkdGgsIG1pblNpemUud2lkdGggKyBsYXJnZXN0VGV4dFdpZHRoKTtcblxuXHRcdFx0XHRtZS5wYWRkaW5nVG9wID0gdGlja0ZvbnQuc2l6ZSAvIDI7XG5cdFx0XHRcdG1lLnBhZGRpbmdCb3R0b20gPSB0aWNrRm9udC5zaXplIC8gMjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRtZS5oYW5kbGVNYXJnaW5zKCk7XG5cblx0XHRtZS53aWR0aCA9IG1pblNpemUud2lkdGg7XG5cdFx0bWUuaGVpZ2h0ID0gbWluU2l6ZS5oZWlnaHQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEhhbmRsZSBtYXJnaW5zIGFuZCBwYWRkaW5nIGludGVyYWN0aW9uc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0aGFuZGxlTWFyZ2luczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHRpZiAobWUubWFyZ2lucykge1xuXHRcdFx0bWUucGFkZGluZ0xlZnQgPSBNYXRoLm1heChtZS5wYWRkaW5nTGVmdCAtIG1lLm1hcmdpbnMubGVmdCwgMCk7XG5cdFx0XHRtZS5wYWRkaW5nVG9wID0gTWF0aC5tYXgobWUucGFkZGluZ1RvcCAtIG1lLm1hcmdpbnMudG9wLCAwKTtcblx0XHRcdG1lLnBhZGRpbmdSaWdodCA9IE1hdGgubWF4KG1lLnBhZGRpbmdSaWdodCAtIG1lLm1hcmdpbnMucmlnaHQsIDApO1xuXHRcdFx0bWUucGFkZGluZ0JvdHRvbSA9IE1hdGgubWF4KG1lLnBhZGRpbmdCb3R0b20gLSBtZS5tYXJnaW5zLmJvdHRvbSwgMCk7XG5cdFx0fVxuXHR9LFxuXG5cdGFmdGVyRml0OiBmdW5jdGlvbigpIHtcblx0XHRoZWxwZXJzJDEuY2FsbGJhY2sodGhpcy5vcHRpb25zLmFmdGVyRml0LCBbdGhpc10pO1xuXHR9LFxuXG5cdC8vIFNoYXJlZCBNZXRob2RzXG5cdGlzSG9yaXpvbnRhbDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5wb3NpdGlvbiA9PT0gJ3RvcCcgfHwgdGhpcy5vcHRpb25zLnBvc2l0aW9uID09PSAnYm90dG9tJztcblx0fSxcblx0aXNGdWxsV2lkdGg6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiAodGhpcy5vcHRpb25zLmZ1bGxXaWR0aCk7XG5cdH0sXG5cblx0Ly8gR2V0IHRoZSBjb3JyZWN0IHZhbHVlLiBOYU4gYmFkIGlucHV0cywgSWYgdGhlIHZhbHVlIHR5cGUgaXMgb2JqZWN0IGdldCB0aGUgeCBvciB5IGJhc2VkIG9uIHdoZXRoZXIgd2UgYXJlIGhvcml6b250YWwgb3Igbm90XG5cdGdldFJpZ2h0VmFsdWU6IGZ1bmN0aW9uKHJhd1ZhbHVlKSB7XG5cdFx0Ly8gTnVsbCBhbmQgdW5kZWZpbmVkIHZhbHVlcyBmaXJzdFxuXHRcdGlmIChoZWxwZXJzJDEuaXNOdWxsT3JVbmRlZihyYXdWYWx1ZSkpIHtcblx0XHRcdHJldHVybiBOYU47XG5cdFx0fVxuXHRcdC8vIGlzTmFOKG9iamVjdCkgcmV0dXJucyB0cnVlLCBzbyBtYWtlIHN1cmUgTmFOIGlzIGNoZWNraW5nIGZvciBhIG51bWJlcjsgRGlzY2FyZCBJbmZpbml0ZSB2YWx1ZXNcblx0XHRpZiAoKHR5cGVvZiByYXdWYWx1ZSA9PT0gJ251bWJlcicgfHwgcmF3VmFsdWUgaW5zdGFuY2VvZiBOdW1iZXIpICYmICFpc0Zpbml0ZShyYXdWYWx1ZSkpIHtcblx0XHRcdHJldHVybiBOYU47XG5cdFx0fVxuXHRcdC8vIElmIGl0IGlzIGluIGZhY3QgYW4gb2JqZWN0LCBkaXZlIGluIG9uZSBtb3JlIGxldmVsXG5cdFx0aWYgKHJhd1ZhbHVlKSB7XG5cdFx0XHRpZiAodGhpcy5pc0hvcml6b250YWwoKSkge1xuXHRcdFx0XHRpZiAocmF3VmFsdWUueCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0UmlnaHRWYWx1ZShyYXdWYWx1ZS54KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChyYXdWYWx1ZS55ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0UmlnaHRWYWx1ZShyYXdWYWx1ZS55KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBWYWx1ZSBpcyBnb29kLCByZXR1cm4gaXRcblx0XHRyZXR1cm4gcmF3VmFsdWU7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFVzZWQgdG8gZ2V0IHRoZSB2YWx1ZSB0byBkaXNwbGF5IGluIHRoZSB0b29sdGlwIGZvciB0aGUgZGF0YSBhdCB0aGUgZ2l2ZW4gaW5kZXhcblx0ICogQHBhcmFtIGluZGV4XG5cdCAqIEBwYXJhbSBkYXRhc2V0SW5kZXhcblx0ICovXG5cdGdldExhYmVsRm9ySW5kZXg6IGhlbHBlcnMkMS5ub29wLFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBsb2NhdGlvbiBvZiB0aGUgZ2l2ZW4gZGF0YSBwb2ludC4gVmFsdWUgY2FuIGVpdGhlciBiZSBhbiBpbmRleCBvciBhIG51bWVyaWNhbCB2YWx1ZVxuXHQgKiBUaGUgY29vcmRpbmF0ZSAoMCwgMCkgaXMgYXQgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSBjYW52YXNcblx0ICogQHBhcmFtIHZhbHVlXG5cdCAqIEBwYXJhbSBpbmRleFxuXHQgKiBAcGFyYW0gZGF0YXNldEluZGV4XG5cdCAqL1xuXHRnZXRQaXhlbEZvclZhbHVlOiBoZWxwZXJzJDEubm9vcCxcblxuXHQvKipcblx0ICogVXNlZCB0byBnZXQgdGhlIGRhdGEgdmFsdWUgZnJvbSBhIGdpdmVuIHBpeGVsLiBUaGlzIGlzIHRoZSBpbnZlcnNlIG9mIGdldFBpeGVsRm9yVmFsdWVcblx0ICogVGhlIGNvb3JkaW5hdGUgKDAsIDApIGlzIGF0IHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgY2FudmFzXG5cdCAqIEBwYXJhbSBwaXhlbFxuXHQgKi9cblx0Z2V0VmFsdWVGb3JQaXhlbDogaGVscGVycyQxLm5vb3AsXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGxvY2F0aW9uIG9mIHRoZSB0aWNrIGF0IHRoZSBnaXZlbiBpbmRleFxuXHQgKiBUaGUgY29vcmRpbmF0ZSAoMCwgMCkgaXMgYXQgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSBjYW52YXNcblx0ICovXG5cdGdldFBpeGVsRm9yVGljazogZnVuY3Rpb24oaW5kZXgpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciBvZmZzZXQgPSBtZS5vcHRpb25zLm9mZnNldDtcblx0XHRpZiAobWUuaXNIb3Jpem9udGFsKCkpIHtcblx0XHRcdHZhciBpbm5lcldpZHRoID0gbWUud2lkdGggLSAobWUucGFkZGluZ0xlZnQgKyBtZS5wYWRkaW5nUmlnaHQpO1xuXHRcdFx0dmFyIHRpY2tXaWR0aCA9IGlubmVyV2lkdGggLyBNYXRoLm1heCgobWUuX3RpY2tzLmxlbmd0aCAtIChvZmZzZXQgPyAwIDogMSkpLCAxKTtcblx0XHRcdHZhciBwaXhlbCA9ICh0aWNrV2lkdGggKiBpbmRleCkgKyBtZS5wYWRkaW5nTGVmdDtcblxuXHRcdFx0aWYgKG9mZnNldCkge1xuXHRcdFx0XHRwaXhlbCArPSB0aWNrV2lkdGggLyAyO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgZmluYWxWYWwgPSBtZS5sZWZ0ICsgcGl4ZWw7XG5cdFx0XHRmaW5hbFZhbCArPSBtZS5pc0Z1bGxXaWR0aCgpID8gbWUubWFyZ2lucy5sZWZ0IDogMDtcblx0XHRcdHJldHVybiBmaW5hbFZhbDtcblx0XHR9XG5cdFx0dmFyIGlubmVySGVpZ2h0ID0gbWUuaGVpZ2h0IC0gKG1lLnBhZGRpbmdUb3AgKyBtZS5wYWRkaW5nQm90dG9tKTtcblx0XHRyZXR1cm4gbWUudG9wICsgKGluZGV4ICogKGlubmVySGVpZ2h0IC8gKG1lLl90aWNrcy5sZW5ndGggLSAxKSkpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBVdGlsaXR5IGZvciBnZXR0aW5nIHRoZSBwaXhlbCBsb2NhdGlvbiBvZiBhIHBlcmNlbnRhZ2Ugb2Ygc2NhbGVcblx0ICogVGhlIGNvb3JkaW5hdGUgKDAsIDApIGlzIGF0IHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgY2FudmFzXG5cdCAqL1xuXHRnZXRQaXhlbEZvckRlY2ltYWw6IGZ1bmN0aW9uKGRlY2ltYWwpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdGlmIChtZS5pc0hvcml6b250YWwoKSkge1xuXHRcdFx0dmFyIGlubmVyV2lkdGggPSBtZS53aWR0aCAtIChtZS5wYWRkaW5nTGVmdCArIG1lLnBhZGRpbmdSaWdodCk7XG5cdFx0XHR2YXIgdmFsdWVPZmZzZXQgPSAoaW5uZXJXaWR0aCAqIGRlY2ltYWwpICsgbWUucGFkZGluZ0xlZnQ7XG5cblx0XHRcdHZhciBmaW5hbFZhbCA9IG1lLmxlZnQgKyB2YWx1ZU9mZnNldDtcblx0XHRcdGZpbmFsVmFsICs9IG1lLmlzRnVsbFdpZHRoKCkgPyBtZS5tYXJnaW5zLmxlZnQgOiAwO1xuXHRcdFx0cmV0dXJuIGZpbmFsVmFsO1xuXHRcdH1cblx0XHRyZXR1cm4gbWUudG9wICsgKGRlY2ltYWwgKiBtZS5oZWlnaHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBwaXhlbCBmb3IgdGhlIG1pbmltdW0gY2hhcnQgdmFsdWVcblx0ICogVGhlIGNvb3JkaW5hdGUgKDAsIDApIGlzIGF0IHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgY2FudmFzXG5cdCAqL1xuXHRnZXRCYXNlUGl4ZWw6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmdldFBpeGVsRm9yVmFsdWUodGhpcy5nZXRCYXNlVmFsdWUoKSk7XG5cdH0sXG5cblx0Z2V0QmFzZVZhbHVlOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciBtaW4gPSBtZS5taW47XG5cdFx0dmFyIG1heCA9IG1lLm1heDtcblxuXHRcdHJldHVybiBtZS5iZWdpbkF0WmVybyA/IDAgOlxuXHRcdFx0bWluIDwgMCAmJiBtYXggPCAwID8gbWF4IDpcblx0XHRcdG1pbiA+IDAgJiYgbWF4ID4gMCA/IG1pbiA6XG5cdFx0XHQwO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgc3Vic2V0IG9mIHRpY2tzIHRvIGJlIHBsb3R0ZWQgdG8gYXZvaWQgb3ZlcmxhcHBpbmcgbGFiZWxzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2F1dG9Ta2lwOiBmdW5jdGlvbih0aWNrcykge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIGlzSG9yaXpvbnRhbCA9IG1lLmlzSG9yaXpvbnRhbCgpO1xuXHRcdHZhciBvcHRpb25UaWNrcyA9IG1lLm9wdGlvbnMudGlja3MubWlub3I7XG5cdFx0dmFyIHRpY2tDb3VudCA9IHRpY2tzLmxlbmd0aDtcblx0XHR2YXIgc2tpcFJhdGlvID0gZmFsc2U7XG5cdFx0dmFyIG1heFRpY2tzID0gb3B0aW9uVGlja3MubWF4VGlja3NMaW1pdDtcblxuXHRcdC8vIFRvdGFsIHNwYWNlIG5lZWRlZCB0byBkaXNwbGF5IGFsbCB0aWNrcy4gRmlyc3QgYW5kIGxhc3QgdGlja3MgYXJlXG5cdFx0Ly8gZHJhd24gYXMgdGhlaXIgY2VudGVyIGF0IGVuZCBvZiBheGlzLCBzbyB0aWNrQ291bnQtMVxuXHRcdHZhciB0aWNrc0xlbmd0aCA9IG1lLl90aWNrU2l6ZSgpICogKHRpY2tDb3VudCAtIDEpO1xuXG5cdFx0Ly8gQXhpcyBsZW5ndGhcblx0XHR2YXIgYXhpc0xlbmd0aCA9IGlzSG9yaXpvbnRhbFxuXHRcdFx0PyBtZS53aWR0aCAtIChtZS5wYWRkaW5nTGVmdCArIG1lLnBhZGRpbmdSaWdodClcblx0XHRcdDogbWUuaGVpZ2h0IC0gKG1lLnBhZGRpbmdUb3AgKyBtZS5QYWRkaW5nQm90dG9tKTtcblxuXHRcdHZhciByZXN1bHQgPSBbXTtcblx0XHR2YXIgaSwgdGljaztcblxuXHRcdGlmICh0aWNrc0xlbmd0aCA+IGF4aXNMZW5ndGgpIHtcblx0XHRcdHNraXBSYXRpbyA9IDEgKyBNYXRoLmZsb29yKHRpY2tzTGVuZ3RoIC8gYXhpc0xlbmd0aCk7XG5cdFx0fVxuXG5cdFx0Ly8gaWYgdGhleSBkZWZpbmVkIGEgbWF4IG51bWJlciBvZiBvcHRpb25UaWNrcyxcblx0XHQvLyBpbmNyZWFzZSBza2lwUmF0aW8gdW50aWwgdGhhdCBudW1iZXIgaXMgbWV0XG5cdFx0aWYgKHRpY2tDb3VudCA+IG1heFRpY2tzKSB7XG5cdFx0XHRza2lwUmF0aW8gPSBNYXRoLm1heChza2lwUmF0aW8sIDEgKyBNYXRoLmZsb29yKHRpY2tDb3VudCAvIG1heFRpY2tzKSk7XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMDsgaSA8IHRpY2tDb3VudDsgaSsrKSB7XG5cdFx0XHR0aWNrID0gdGlja3NbaV07XG5cblx0XHRcdGlmIChza2lwUmF0aW8gPiAxICYmIGkgJSBza2lwUmF0aW8gPiAwKSB7XG5cdFx0XHRcdC8vIGxlYXZlIHRpY2sgaW4gcGxhY2UgYnV0IG1ha2Ugc3VyZSBpdCdzIG5vdCBkaXNwbGF5ZWQgKCM0NjM1KVxuXHRcdFx0XHRkZWxldGUgdGljay5sYWJlbDtcblx0XHRcdH1cblx0XHRcdHJlc3VsdC5wdXNoKHRpY2spO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X3RpY2tTaXplOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciBpc0hvcml6b250YWwgPSBtZS5pc0hvcml6b250YWwoKTtcblx0XHR2YXIgb3B0aW9uVGlja3MgPSBtZS5vcHRpb25zLnRpY2tzLm1pbm9yO1xuXG5cdFx0Ly8gQ2FsY3VsYXRlIHNwYWNlIG5lZWRlZCBieSBsYWJlbCBpbiBheGlzIGRpcmVjdGlvbi5cblx0XHR2YXIgcm90ID0gaGVscGVycyQxLnRvUmFkaWFucyhtZS5sYWJlbFJvdGF0aW9uKTtcblx0XHR2YXIgY29zID0gTWF0aC5hYnMoTWF0aC5jb3Mocm90KSk7XG5cdFx0dmFyIHNpbiA9IE1hdGguYWJzKE1hdGguc2luKHJvdCkpO1xuXG5cdFx0dmFyIHBhZGRpbmcgPSBvcHRpb25UaWNrcy5hdXRvU2tpcFBhZGRpbmcgfHwgMDtcblx0XHR2YXIgdyA9IChtZS5sb25nZXN0TGFiZWxXaWR0aCArIHBhZGRpbmcpIHx8IDA7XG5cblx0XHR2YXIgdGlja0ZvbnQgPSBoZWxwZXJzJDEub3B0aW9ucy5fcGFyc2VGb250KG9wdGlvblRpY2tzKTtcblx0XHR2YXIgaCA9IChtZS5fbWF4TGFiZWxMaW5lcyAqIHRpY2tGb250LmxpbmVIZWlnaHQgKyBwYWRkaW5nKSB8fCAwO1xuXG5cdFx0Ly8gQ2FsY3VsYXRlIHNwYWNlIG5lZWRlZCBmb3IgMSB0aWNrIGluIGF4aXMgZGlyZWN0aW9uLlxuXHRcdHJldHVybiBpc0hvcml6b250YWxcblx0XHRcdD8gaCAqIGNvcyA+IHcgKiBzaW4gPyB3IC8gY29zIDogaCAvIHNpblxuXHRcdFx0OiBoICogc2luIDwgdyAqIGNvcyA/IGggLyBjb3MgOiB3IC8gc2luO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2lzVmlzaWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgY2hhcnQgPSBtZS5jaGFydDtcblx0XHR2YXIgZGlzcGxheSA9IG1lLm9wdGlvbnMuZGlzcGxheTtcblx0XHR2YXIgaSwgaWxlbiwgbWV0YTtcblxuXHRcdGlmIChkaXNwbGF5ICE9PSAnYXV0bycpIHtcblx0XHRcdHJldHVybiAhIWRpc3BsYXk7XG5cdFx0fVxuXG5cdFx0Ly8gV2hlbiAnYXV0bycsIHRoZSBzY2FsZSBpcyB2aXNpYmxlIGlmIGF0IGxlYXN0IG9uZSBhc3NvY2lhdGVkIGRhdGFzZXQgaXMgdmlzaWJsZS5cblx0XHRmb3IgKGkgPSAwLCBpbGVuID0gY2hhcnQuZGF0YS5kYXRhc2V0cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcblx0XHRcdGlmIChjaGFydC5pc0RhdGFzZXRWaXNpYmxlKGkpKSB7XG5cdFx0XHRcdG1ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YShpKTtcblx0XHRcdFx0aWYgKG1ldGEueEF4aXNJRCA9PT0gbWUuaWQgfHwgbWV0YS55QXhpc0lEID09PSBtZS5pZCkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBBY3R1YWxseSBkcmF3IHRoZSBzY2FsZSBvbiB0aGUgY2FudmFzXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBjaGFydEFyZWEgLSB0aGUgYXJlYSBvZiB0aGUgY2hhcnQgdG8gZHJhdyBmdWxsIGdyaWQgbGluZXMgb25cblx0ICovXG5cdGRyYXc6IGZ1bmN0aW9uKGNoYXJ0QXJlYSkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIG9wdGlvbnMgPSBtZS5vcHRpb25zO1xuXG5cdFx0aWYgKCFtZS5faXNWaXNpYmxlKCkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgY2hhcnQgPSBtZS5jaGFydDtcblx0XHR2YXIgY29udGV4dCA9IG1lLmN0eDtcblx0XHR2YXIgZ2xvYmFsRGVmYXVsdHMgPSBjb3JlX2RlZmF1bHRzLmdsb2JhbDtcblx0XHR2YXIgZGVmYXVsdEZvbnRDb2xvciA9IGdsb2JhbERlZmF1bHRzLmRlZmF1bHRGb250Q29sb3I7XG5cdFx0dmFyIG9wdGlvblRpY2tzID0gb3B0aW9ucy50aWNrcy5taW5vcjtcblx0XHR2YXIgb3B0aW9uTWFqb3JUaWNrcyA9IG9wdGlvbnMudGlja3MubWFqb3IgfHwgb3B0aW9uVGlja3M7XG5cdFx0dmFyIGdyaWRMaW5lcyA9IG9wdGlvbnMuZ3JpZExpbmVzO1xuXHRcdHZhciBzY2FsZUxhYmVsID0gb3B0aW9ucy5zY2FsZUxhYmVsO1xuXHRcdHZhciBwb3NpdGlvbiA9IG9wdGlvbnMucG9zaXRpb247XG5cblx0XHR2YXIgaXNSb3RhdGVkID0gbWUubGFiZWxSb3RhdGlvbiAhPT0gMDtcblx0XHR2YXIgaXNNaXJyb3JlZCA9IG9wdGlvblRpY2tzLm1pcnJvcjtcblx0XHR2YXIgaXNIb3Jpem9udGFsID0gbWUuaXNIb3Jpem9udGFsKCk7XG5cblx0XHR2YXIgcGFyc2VGb250ID0gaGVscGVycyQxLm9wdGlvbnMuX3BhcnNlRm9udDtcblx0XHR2YXIgdGlja3MgPSBvcHRpb25UaWNrcy5kaXNwbGF5ICYmIG9wdGlvblRpY2tzLmF1dG9Ta2lwID8gbWUuX2F1dG9Ta2lwKG1lLmdldFRpY2tzKCkpIDogbWUuZ2V0VGlja3MoKTtcblx0XHR2YXIgdGlja0ZvbnRDb2xvciA9IHZhbHVlT3JEZWZhdWx0JDkob3B0aW9uVGlja3MuZm9udENvbG9yLCBkZWZhdWx0Rm9udENvbG9yKTtcblx0XHR2YXIgdGlja0ZvbnQgPSBwYXJzZUZvbnQob3B0aW9uVGlja3MpO1xuXHRcdHZhciBsaW5lSGVpZ2h0ID0gdGlja0ZvbnQubGluZUhlaWdodDtcblx0XHR2YXIgbWFqb3JUaWNrRm9udENvbG9yID0gdmFsdWVPckRlZmF1bHQkOShvcHRpb25NYWpvclRpY2tzLmZvbnRDb2xvciwgZGVmYXVsdEZvbnRDb2xvcik7XG5cdFx0dmFyIG1ham9yVGlja0ZvbnQgPSBwYXJzZUZvbnQob3B0aW9uTWFqb3JUaWNrcyk7XG5cdFx0dmFyIHRpY2tQYWRkaW5nID0gb3B0aW9uVGlja3MucGFkZGluZztcblx0XHR2YXIgbGFiZWxPZmZzZXQgPSBvcHRpb25UaWNrcy5sYWJlbE9mZnNldDtcblxuXHRcdHZhciB0bCA9IGdyaWRMaW5lcy5kcmF3VGlja3MgPyBncmlkTGluZXMudGlja01hcmtMZW5ndGggOiAwO1xuXG5cdFx0dmFyIHNjYWxlTGFiZWxGb250Q29sb3IgPSB2YWx1ZU9yRGVmYXVsdCQ5KHNjYWxlTGFiZWwuZm9udENvbG9yLCBkZWZhdWx0Rm9udENvbG9yKTtcblx0XHR2YXIgc2NhbGVMYWJlbEZvbnQgPSBwYXJzZUZvbnQoc2NhbGVMYWJlbCk7XG5cdFx0dmFyIHNjYWxlTGFiZWxQYWRkaW5nID0gaGVscGVycyQxLm9wdGlvbnMudG9QYWRkaW5nKHNjYWxlTGFiZWwucGFkZGluZyk7XG5cdFx0dmFyIGxhYmVsUm90YXRpb25SYWRpYW5zID0gaGVscGVycyQxLnRvUmFkaWFucyhtZS5sYWJlbFJvdGF0aW9uKTtcblxuXHRcdHZhciBpdGVtc1RvRHJhdyA9IFtdO1xuXG5cdFx0dmFyIGF4aXNXaWR0aCA9IGdyaWRMaW5lcy5kcmF3Qm9yZGVyID8gdmFsdWVBdEluZGV4T3JEZWZhdWx0KGdyaWRMaW5lcy5saW5lV2lkdGgsIDAsIDApIDogMDtcblx0XHR2YXIgYWxpZ25QaXhlbCA9IGhlbHBlcnMkMS5fYWxpZ25QaXhlbDtcblx0XHR2YXIgYm9yZGVyVmFsdWUsIHRpY2tTdGFydCwgdGlja0VuZDtcblxuXHRcdGlmIChwb3NpdGlvbiA9PT0gJ3RvcCcpIHtcblx0XHRcdGJvcmRlclZhbHVlID0gYWxpZ25QaXhlbChjaGFydCwgbWUuYm90dG9tLCBheGlzV2lkdGgpO1xuXHRcdFx0dGlja1N0YXJ0ID0gbWUuYm90dG9tIC0gdGw7XG5cdFx0XHR0aWNrRW5kID0gYm9yZGVyVmFsdWUgLSBheGlzV2lkdGggLyAyO1xuXHRcdH0gZWxzZSBpZiAocG9zaXRpb24gPT09ICdib3R0b20nKSB7XG5cdFx0XHRib3JkZXJWYWx1ZSA9IGFsaWduUGl4ZWwoY2hhcnQsIG1lLnRvcCwgYXhpc1dpZHRoKTtcblx0XHRcdHRpY2tTdGFydCA9IGJvcmRlclZhbHVlICsgYXhpc1dpZHRoIC8gMjtcblx0XHRcdHRpY2tFbmQgPSBtZS50b3AgKyB0bDtcblx0XHR9IGVsc2UgaWYgKHBvc2l0aW9uID09PSAnbGVmdCcpIHtcblx0XHRcdGJvcmRlclZhbHVlID0gYWxpZ25QaXhlbChjaGFydCwgbWUucmlnaHQsIGF4aXNXaWR0aCk7XG5cdFx0XHR0aWNrU3RhcnQgPSBtZS5yaWdodCAtIHRsO1xuXHRcdFx0dGlja0VuZCA9IGJvcmRlclZhbHVlIC0gYXhpc1dpZHRoIC8gMjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ym9yZGVyVmFsdWUgPSBhbGlnblBpeGVsKGNoYXJ0LCBtZS5sZWZ0LCBheGlzV2lkdGgpO1xuXHRcdFx0dGlja1N0YXJ0ID0gYm9yZGVyVmFsdWUgKyBheGlzV2lkdGggLyAyO1xuXHRcdFx0dGlja0VuZCA9IG1lLmxlZnQgKyB0bDtcblx0XHR9XG5cblx0XHR2YXIgZXBzaWxvbiA9IDAuMDAwMDAwMTsgLy8gMC4wMDAwMDAxIGlzIG1hcmdpbiBpbiBwaXhlbHMgZm9yIEFjY3VtdWxhdGVkIGVycm9yLlxuXG5cdFx0aGVscGVycyQxLmVhY2godGlja3MsIGZ1bmN0aW9uKHRpY2ssIGluZGV4KSB7XG5cdFx0XHQvLyBhdXRvc2tpcHBlciBza2lwcGVkIHRoaXMgdGljayAoIzQ2MzUpXG5cdFx0XHRpZiAoaGVscGVycyQxLmlzTnVsbE9yVW5kZWYodGljay5sYWJlbCkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgbGFiZWwgPSB0aWNrLmxhYmVsO1xuXHRcdFx0dmFyIGxpbmVXaWR0aCwgbGluZUNvbG9yLCBib3JkZXJEYXNoLCBib3JkZXJEYXNoT2Zmc2V0O1xuXHRcdFx0aWYgKGluZGV4ID09PSBtZS56ZXJvTGluZUluZGV4ICYmIG9wdGlvbnMub2Zmc2V0ID09PSBncmlkTGluZXMub2Zmc2V0R3JpZExpbmVzKSB7XG5cdFx0XHRcdC8vIERyYXcgdGhlIGZpcnN0IGluZGV4IHNwZWNpYWxseVxuXHRcdFx0XHRsaW5lV2lkdGggPSBncmlkTGluZXMuemVyb0xpbmVXaWR0aDtcblx0XHRcdFx0bGluZUNvbG9yID0gZ3JpZExpbmVzLnplcm9MaW5lQ29sb3I7XG5cdFx0XHRcdGJvcmRlckRhc2ggPSBncmlkTGluZXMuemVyb0xpbmVCb3JkZXJEYXNoIHx8IFtdO1xuXHRcdFx0XHRib3JkZXJEYXNoT2Zmc2V0ID0gZ3JpZExpbmVzLnplcm9MaW5lQm9yZGVyRGFzaE9mZnNldCB8fCAwLjA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRsaW5lV2lkdGggPSB2YWx1ZUF0SW5kZXhPckRlZmF1bHQoZ3JpZExpbmVzLmxpbmVXaWR0aCwgaW5kZXgpO1xuXHRcdFx0XHRsaW5lQ29sb3IgPSB2YWx1ZUF0SW5kZXhPckRlZmF1bHQoZ3JpZExpbmVzLmNvbG9yLCBpbmRleCk7XG5cdFx0XHRcdGJvcmRlckRhc2ggPSBncmlkTGluZXMuYm9yZGVyRGFzaCB8fCBbXTtcblx0XHRcdFx0Ym9yZGVyRGFzaE9mZnNldCA9IGdyaWRMaW5lcy5ib3JkZXJEYXNoT2Zmc2V0IHx8IDAuMDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29tbW9uIHByb3BlcnRpZXNcblx0XHRcdHZhciB0eDEsIHR5MSwgdHgyLCB0eTIsIHgxLCB5MSwgeDIsIHkyLCBsYWJlbFgsIGxhYmVsWSwgdGV4dE9mZnNldCwgdGV4dEFsaWduO1xuXHRcdFx0dmFyIGxhYmVsQ291bnQgPSBoZWxwZXJzJDEuaXNBcnJheShsYWJlbCkgPyBsYWJlbC5sZW5ndGggOiAxO1xuXHRcdFx0dmFyIGxpbmVWYWx1ZSA9IGdldFBpeGVsRm9yR3JpZExpbmUobWUsIGluZGV4LCBncmlkTGluZXMub2Zmc2V0R3JpZExpbmVzKTtcblxuXHRcdFx0aWYgKGlzSG9yaXpvbnRhbCkge1xuXHRcdFx0XHR2YXIgbGFiZWxZT2Zmc2V0ID0gdGwgKyB0aWNrUGFkZGluZztcblxuXHRcdFx0XHRpZiAobGluZVZhbHVlIDwgbWUubGVmdCAtIGVwc2lsb24pIHtcblx0XHRcdFx0XHRsaW5lQ29sb3IgPSAncmdiYSgwLDAsMCwwKSc7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0eDEgPSB0eDIgPSB4MSA9IHgyID0gYWxpZ25QaXhlbChjaGFydCwgbGluZVZhbHVlLCBsaW5lV2lkdGgpO1xuXHRcdFx0XHR0eTEgPSB0aWNrU3RhcnQ7XG5cdFx0XHRcdHR5MiA9IHRpY2tFbmQ7XG5cdFx0XHRcdGxhYmVsWCA9IG1lLmdldFBpeGVsRm9yVGljayhpbmRleCkgKyBsYWJlbE9mZnNldDsgLy8geCB2YWx1ZXMgZm9yIG9wdGlvblRpY2tzIChuZWVkIHRvIGNvbnNpZGVyIG9mZnNldExhYmVsIG9wdGlvbilcblxuXHRcdFx0XHRpZiAocG9zaXRpb24gPT09ICd0b3AnKSB7XG5cdFx0XHRcdFx0eTEgPSBhbGlnblBpeGVsKGNoYXJ0LCBjaGFydEFyZWEudG9wLCBheGlzV2lkdGgpICsgYXhpc1dpZHRoIC8gMjtcblx0XHRcdFx0XHR5MiA9IGNoYXJ0QXJlYS5ib3R0b207XG5cdFx0XHRcdFx0dGV4dE9mZnNldCA9ICgoIWlzUm90YXRlZCA/IDAuNSA6IDEpIC0gbGFiZWxDb3VudCkgKiBsaW5lSGVpZ2h0O1xuXHRcdFx0XHRcdHRleHRBbGlnbiA9ICFpc1JvdGF0ZWQgPyAnY2VudGVyJyA6ICdsZWZ0Jztcblx0XHRcdFx0XHRsYWJlbFkgPSBtZS5ib3R0b20gLSBsYWJlbFlPZmZzZXQ7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0eTEgPSBjaGFydEFyZWEudG9wO1xuXHRcdFx0XHRcdHkyID0gYWxpZ25QaXhlbChjaGFydCwgY2hhcnRBcmVhLmJvdHRvbSwgYXhpc1dpZHRoKSAtIGF4aXNXaWR0aCAvIDI7XG5cdFx0XHRcdFx0dGV4dE9mZnNldCA9ICghaXNSb3RhdGVkID8gMC41IDogMCkgKiBsaW5lSGVpZ2h0O1xuXHRcdFx0XHRcdHRleHRBbGlnbiA9ICFpc1JvdGF0ZWQgPyAnY2VudGVyJyA6ICdyaWdodCc7XG5cdFx0XHRcdFx0bGFiZWxZID0gbWUudG9wICsgbGFiZWxZT2Zmc2V0O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YXIgbGFiZWxYT2Zmc2V0ID0gKGlzTWlycm9yZWQgPyAwIDogdGwpICsgdGlja1BhZGRpbmc7XG5cblx0XHRcdFx0aWYgKGxpbmVWYWx1ZSA8IG1lLnRvcCAtIGVwc2lsb24pIHtcblx0XHRcdFx0XHRsaW5lQ29sb3IgPSAncmdiYSgwLDAsMCwwKSc7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0eDEgPSB0aWNrU3RhcnQ7XG5cdFx0XHRcdHR4MiA9IHRpY2tFbmQ7XG5cdFx0XHRcdHR5MSA9IHR5MiA9IHkxID0geTIgPSBhbGlnblBpeGVsKGNoYXJ0LCBsaW5lVmFsdWUsIGxpbmVXaWR0aCk7XG5cdFx0XHRcdGxhYmVsWSA9IG1lLmdldFBpeGVsRm9yVGljayhpbmRleCkgKyBsYWJlbE9mZnNldDtcblx0XHRcdFx0dGV4dE9mZnNldCA9ICgxIC0gbGFiZWxDb3VudCkgKiBsaW5lSGVpZ2h0IC8gMjtcblxuXHRcdFx0XHRpZiAocG9zaXRpb24gPT09ICdsZWZ0Jykge1xuXHRcdFx0XHRcdHgxID0gYWxpZ25QaXhlbChjaGFydCwgY2hhcnRBcmVhLmxlZnQsIGF4aXNXaWR0aCkgKyBheGlzV2lkdGggLyAyO1xuXHRcdFx0XHRcdHgyID0gY2hhcnRBcmVhLnJpZ2h0O1xuXHRcdFx0XHRcdHRleHRBbGlnbiA9IGlzTWlycm9yZWQgPyAnbGVmdCcgOiAncmlnaHQnO1xuXHRcdFx0XHRcdGxhYmVsWCA9IG1lLnJpZ2h0IC0gbGFiZWxYT2Zmc2V0O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHgxID0gY2hhcnRBcmVhLmxlZnQ7XG5cdFx0XHRcdFx0eDIgPSBhbGlnblBpeGVsKGNoYXJ0LCBjaGFydEFyZWEucmlnaHQsIGF4aXNXaWR0aCkgLSBheGlzV2lkdGggLyAyO1xuXHRcdFx0XHRcdHRleHRBbGlnbiA9IGlzTWlycm9yZWQgPyAncmlnaHQnIDogJ2xlZnQnO1xuXHRcdFx0XHRcdGxhYmVsWCA9IG1lLmxlZnQgKyBsYWJlbFhPZmZzZXQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aXRlbXNUb0RyYXcucHVzaCh7XG5cdFx0XHRcdHR4MTogdHgxLFxuXHRcdFx0XHR0eTE6IHR5MSxcblx0XHRcdFx0dHgyOiB0eDIsXG5cdFx0XHRcdHR5MjogdHkyLFxuXHRcdFx0XHR4MTogeDEsXG5cdFx0XHRcdHkxOiB5MSxcblx0XHRcdFx0eDI6IHgyLFxuXHRcdFx0XHR5MjogeTIsXG5cdFx0XHRcdGxhYmVsWDogbGFiZWxYLFxuXHRcdFx0XHRsYWJlbFk6IGxhYmVsWSxcblx0XHRcdFx0Z2xXaWR0aDogbGluZVdpZHRoLFxuXHRcdFx0XHRnbENvbG9yOiBsaW5lQ29sb3IsXG5cdFx0XHRcdGdsQm9yZGVyRGFzaDogYm9yZGVyRGFzaCxcblx0XHRcdFx0Z2xCb3JkZXJEYXNoT2Zmc2V0OiBib3JkZXJEYXNoT2Zmc2V0LFxuXHRcdFx0XHRyb3RhdGlvbjogLTEgKiBsYWJlbFJvdGF0aW9uUmFkaWFucyxcblx0XHRcdFx0bGFiZWw6IGxhYmVsLFxuXHRcdFx0XHRtYWpvcjogdGljay5tYWpvcixcblx0XHRcdFx0dGV4dE9mZnNldDogdGV4dE9mZnNldCxcblx0XHRcdFx0dGV4dEFsaWduOiB0ZXh0QWxpZ25cblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0Ly8gRHJhdyBhbGwgb2YgdGhlIHRpY2sgbGFiZWxzLCB0aWNrIG1hcmtzLCBhbmQgZ3JpZCBsaW5lcyBhdCB0aGUgY29ycmVjdCBwbGFjZXNcblx0XHRoZWxwZXJzJDEuZWFjaChpdGVtc1RvRHJhdywgZnVuY3Rpb24oaXRlbVRvRHJhdykge1xuXHRcdFx0dmFyIGdsV2lkdGggPSBpdGVtVG9EcmF3LmdsV2lkdGg7XG5cdFx0XHR2YXIgZ2xDb2xvciA9IGl0ZW1Ub0RyYXcuZ2xDb2xvcjtcblxuXHRcdFx0aWYgKGdyaWRMaW5lcy5kaXNwbGF5ICYmIGdsV2lkdGggJiYgZ2xDb2xvcikge1xuXHRcdFx0XHRjb250ZXh0LnNhdmUoKTtcblx0XHRcdFx0Y29udGV4dC5saW5lV2lkdGggPSBnbFdpZHRoO1xuXHRcdFx0XHRjb250ZXh0LnN0cm9rZVN0eWxlID0gZ2xDb2xvcjtcblx0XHRcdFx0aWYgKGNvbnRleHQuc2V0TGluZURhc2gpIHtcblx0XHRcdFx0XHRjb250ZXh0LnNldExpbmVEYXNoKGl0ZW1Ub0RyYXcuZ2xCb3JkZXJEYXNoKTtcblx0XHRcdFx0XHRjb250ZXh0LmxpbmVEYXNoT2Zmc2V0ID0gaXRlbVRvRHJhdy5nbEJvcmRlckRhc2hPZmZzZXQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG5cdFx0XHRcdGlmIChncmlkTGluZXMuZHJhd1RpY2tzKSB7XG5cdFx0XHRcdFx0Y29udGV4dC5tb3ZlVG8oaXRlbVRvRHJhdy50eDEsIGl0ZW1Ub0RyYXcudHkxKTtcblx0XHRcdFx0XHRjb250ZXh0LmxpbmVUbyhpdGVtVG9EcmF3LnR4MiwgaXRlbVRvRHJhdy50eTIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGdyaWRMaW5lcy5kcmF3T25DaGFydEFyZWEpIHtcblx0XHRcdFx0XHRjb250ZXh0Lm1vdmVUbyhpdGVtVG9EcmF3LngxLCBpdGVtVG9EcmF3LnkxKTtcblx0XHRcdFx0XHRjb250ZXh0LmxpbmVUbyhpdGVtVG9EcmF3LngyLCBpdGVtVG9EcmF3LnkyKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnRleHQuc3Ryb2tlKCk7XG5cdFx0XHRcdGNvbnRleHQucmVzdG9yZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob3B0aW9uVGlja3MuZGlzcGxheSkge1xuXHRcdFx0XHQvLyBNYWtlIHN1cmUgd2UgZHJhdyB0ZXh0IGluIHRoZSBjb3JyZWN0IGNvbG9yIGFuZCBmb250XG5cdFx0XHRcdGNvbnRleHQuc2F2ZSgpO1xuXHRcdFx0XHRjb250ZXh0LnRyYW5zbGF0ZShpdGVtVG9EcmF3LmxhYmVsWCwgaXRlbVRvRHJhdy5sYWJlbFkpO1xuXHRcdFx0XHRjb250ZXh0LnJvdGF0ZShpdGVtVG9EcmF3LnJvdGF0aW9uKTtcblx0XHRcdFx0Y29udGV4dC5mb250ID0gaXRlbVRvRHJhdy5tYWpvciA/IG1ham9yVGlja0ZvbnQuc3RyaW5nIDogdGlja0ZvbnQuc3RyaW5nO1xuXHRcdFx0XHRjb250ZXh0LmZpbGxTdHlsZSA9IGl0ZW1Ub0RyYXcubWFqb3IgPyBtYWpvclRpY2tGb250Q29sb3IgOiB0aWNrRm9udENvbG9yO1xuXHRcdFx0XHRjb250ZXh0LnRleHRCYXNlbGluZSA9ICdtaWRkbGUnO1xuXHRcdFx0XHRjb250ZXh0LnRleHRBbGlnbiA9IGl0ZW1Ub0RyYXcudGV4dEFsaWduO1xuXG5cdFx0XHRcdHZhciBsYWJlbCA9IGl0ZW1Ub0RyYXcubGFiZWw7XG5cdFx0XHRcdHZhciB5ID0gaXRlbVRvRHJhdy50ZXh0T2Zmc2V0O1xuXHRcdFx0XHRpZiAoaGVscGVycyQxLmlzQXJyYXkobGFiZWwpKSB7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsYWJlbC5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRcdFx0Ly8gV2UganVzdCBtYWtlIHN1cmUgdGhlIG11bHRpbGluZSBlbGVtZW50IGlzIGEgc3RyaW5nIGhlcmUuLlxuXHRcdFx0XHRcdFx0Y29udGV4dC5maWxsVGV4dCgnJyArIGxhYmVsW2ldLCAwLCB5KTtcblx0XHRcdFx0XHRcdHkgKz0gbGluZUhlaWdodDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29udGV4dC5maWxsVGV4dChsYWJlbCwgMCwgeSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGV4dC5yZXN0b3JlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRpZiAoc2NhbGVMYWJlbC5kaXNwbGF5KSB7XG5cdFx0XHQvLyBEcmF3IHRoZSBzY2FsZSBsYWJlbFxuXHRcdFx0dmFyIHNjYWxlTGFiZWxYO1xuXHRcdFx0dmFyIHNjYWxlTGFiZWxZO1xuXHRcdFx0dmFyIHJvdGF0aW9uID0gMDtcblx0XHRcdHZhciBoYWxmTGluZUhlaWdodCA9IHNjYWxlTGFiZWxGb250LmxpbmVIZWlnaHQgLyAyO1xuXG5cdFx0XHRpZiAoaXNIb3Jpem9udGFsKSB7XG5cdFx0XHRcdHNjYWxlTGFiZWxYID0gbWUubGVmdCArICgobWUucmlnaHQgLSBtZS5sZWZ0KSAvIDIpOyAvLyBtaWRwb2ludCBvZiB0aGUgd2lkdGhcblx0XHRcdFx0c2NhbGVMYWJlbFkgPSBwb3NpdGlvbiA9PT0gJ2JvdHRvbSdcblx0XHRcdFx0XHQ/IG1lLmJvdHRvbSAtIGhhbGZMaW5lSGVpZ2h0IC0gc2NhbGVMYWJlbFBhZGRpbmcuYm90dG9tXG5cdFx0XHRcdFx0OiBtZS50b3AgKyBoYWxmTGluZUhlaWdodCArIHNjYWxlTGFiZWxQYWRkaW5nLnRvcDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhciBpc0xlZnQgPSBwb3NpdGlvbiA9PT0gJ2xlZnQnO1xuXHRcdFx0XHRzY2FsZUxhYmVsWCA9IGlzTGVmdFxuXHRcdFx0XHRcdD8gbWUubGVmdCArIGhhbGZMaW5lSGVpZ2h0ICsgc2NhbGVMYWJlbFBhZGRpbmcudG9wXG5cdFx0XHRcdFx0OiBtZS5yaWdodCAtIGhhbGZMaW5lSGVpZ2h0IC0gc2NhbGVMYWJlbFBhZGRpbmcudG9wO1xuXHRcdFx0XHRzY2FsZUxhYmVsWSA9IG1lLnRvcCArICgobWUuYm90dG9tIC0gbWUudG9wKSAvIDIpO1xuXHRcdFx0XHRyb3RhdGlvbiA9IGlzTGVmdCA/IC0wLjUgKiBNYXRoLlBJIDogMC41ICogTWF0aC5QSTtcblx0XHRcdH1cblxuXHRcdFx0Y29udGV4dC5zYXZlKCk7XG5cdFx0XHRjb250ZXh0LnRyYW5zbGF0ZShzY2FsZUxhYmVsWCwgc2NhbGVMYWJlbFkpO1xuXHRcdFx0Y29udGV4dC5yb3RhdGUocm90YXRpb24pO1xuXHRcdFx0Y29udGV4dC50ZXh0QWxpZ24gPSAnY2VudGVyJztcblx0XHRcdGNvbnRleHQudGV4dEJhc2VsaW5lID0gJ21pZGRsZSc7XG5cdFx0XHRjb250ZXh0LmZpbGxTdHlsZSA9IHNjYWxlTGFiZWxGb250Q29sb3I7IC8vIHJlbmRlciBpbiBjb3JyZWN0IGNvbG91clxuXHRcdFx0Y29udGV4dC5mb250ID0gc2NhbGVMYWJlbEZvbnQuc3RyaW5nO1xuXHRcdFx0Y29udGV4dC5maWxsVGV4dChzY2FsZUxhYmVsLmxhYmVsU3RyaW5nLCAwLCAwKTtcblx0XHRcdGNvbnRleHQucmVzdG9yZSgpO1xuXHRcdH1cblxuXHRcdGlmIChheGlzV2lkdGgpIHtcblx0XHRcdC8vIERyYXcgdGhlIGxpbmUgYXQgdGhlIGVkZ2Ugb2YgdGhlIGF4aXNcblx0XHRcdHZhciBmaXJzdExpbmVXaWR0aCA9IGF4aXNXaWR0aDtcblx0XHRcdHZhciBsYXN0TGluZVdpZHRoID0gdmFsdWVBdEluZGV4T3JEZWZhdWx0KGdyaWRMaW5lcy5saW5lV2lkdGgsIHRpY2tzLmxlbmd0aCAtIDEsIDApO1xuXHRcdFx0dmFyIHgxLCB4MiwgeTEsIHkyO1xuXG5cdFx0XHRpZiAoaXNIb3Jpem9udGFsKSB7XG5cdFx0XHRcdHgxID0gYWxpZ25QaXhlbChjaGFydCwgbWUubGVmdCwgZmlyc3RMaW5lV2lkdGgpIC0gZmlyc3RMaW5lV2lkdGggLyAyO1xuXHRcdFx0XHR4MiA9IGFsaWduUGl4ZWwoY2hhcnQsIG1lLnJpZ2h0LCBsYXN0TGluZVdpZHRoKSArIGxhc3RMaW5lV2lkdGggLyAyO1xuXHRcdFx0XHR5MSA9IHkyID0gYm9yZGVyVmFsdWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR5MSA9IGFsaWduUGl4ZWwoY2hhcnQsIG1lLnRvcCwgZmlyc3RMaW5lV2lkdGgpIC0gZmlyc3RMaW5lV2lkdGggLyAyO1xuXHRcdFx0XHR5MiA9IGFsaWduUGl4ZWwoY2hhcnQsIG1lLmJvdHRvbSwgbGFzdExpbmVXaWR0aCkgKyBsYXN0TGluZVdpZHRoIC8gMjtcblx0XHRcdFx0eDEgPSB4MiA9IGJvcmRlclZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb250ZXh0LmxpbmVXaWR0aCA9IGF4aXNXaWR0aDtcblx0XHRcdGNvbnRleHQuc3Ryb2tlU3R5bGUgPSB2YWx1ZUF0SW5kZXhPckRlZmF1bHQoZ3JpZExpbmVzLmNvbG9yLCAwKTtcblx0XHRcdGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cdFx0XHRjb250ZXh0Lm1vdmVUbyh4MSwgeTEpO1xuXHRcdFx0Y29udGV4dC5saW5lVG8oeDIsIHkyKTtcblx0XHRcdGNvbnRleHQuc3Ryb2tlKCk7XG5cdFx0fVxuXHR9XG59KTtcblxudmFyIGRlZmF1bHRDb25maWcgPSB7XG5cdHBvc2l0aW9uOiAnYm90dG9tJ1xufTtcblxudmFyIHNjYWxlX2NhdGVnb3J5ID0gY29yZV9zY2FsZS5leHRlbmQoe1xuXHQvKipcblx0KiBJbnRlcm5hbCBmdW5jdGlvbiB0byBnZXQgdGhlIGNvcnJlY3QgbGFiZWxzLiBJZiBkYXRhLnhMYWJlbHMgb3IgZGF0YS55TGFiZWxzIGFyZSBkZWZpbmVkLCB1c2UgdGhvc2Vcblx0KiBlbHNlIGZhbGwgYmFjayB0byBkYXRhLmxhYmVsc1xuXHQqIEBwcml2YXRlXG5cdCovXG5cdGdldExhYmVsczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGRhdGEgPSB0aGlzLmNoYXJ0LmRhdGE7XG5cdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5sYWJlbHMgfHwgKHRoaXMuaXNIb3Jpem9udGFsKCkgPyBkYXRhLnhMYWJlbHMgOiBkYXRhLnlMYWJlbHMpIHx8IGRhdGEubGFiZWxzO1xuXHR9LFxuXG5cdGRldGVybWluZURhdGFMaW1pdHM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIGxhYmVscyA9IG1lLmdldExhYmVscygpO1xuXHRcdG1lLm1pbkluZGV4ID0gMDtcblx0XHRtZS5tYXhJbmRleCA9IGxhYmVscy5sZW5ndGggLSAxO1xuXHRcdHZhciBmaW5kSW5kZXg7XG5cblx0XHRpZiAobWUub3B0aW9ucy50aWNrcy5taW4gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gdXNlciBzcGVjaWZpZWQgbWluIHZhbHVlXG5cdFx0XHRmaW5kSW5kZXggPSBsYWJlbHMuaW5kZXhPZihtZS5vcHRpb25zLnRpY2tzLm1pbik7XG5cdFx0XHRtZS5taW5JbmRleCA9IGZpbmRJbmRleCAhPT0gLTEgPyBmaW5kSW5kZXggOiBtZS5taW5JbmRleDtcblx0XHR9XG5cblx0XHRpZiAobWUub3B0aW9ucy50aWNrcy5tYXggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gdXNlciBzcGVjaWZpZWQgbWF4IHZhbHVlXG5cdFx0XHRmaW5kSW5kZXggPSBsYWJlbHMuaW5kZXhPZihtZS5vcHRpb25zLnRpY2tzLm1heCk7XG5cdFx0XHRtZS5tYXhJbmRleCA9IGZpbmRJbmRleCAhPT0gLTEgPyBmaW5kSW5kZXggOiBtZS5tYXhJbmRleDtcblx0XHR9XG5cblx0XHRtZS5taW4gPSBsYWJlbHNbbWUubWluSW5kZXhdO1xuXHRcdG1lLm1heCA9IGxhYmVsc1ttZS5tYXhJbmRleF07XG5cdH0sXG5cblx0YnVpbGRUaWNrczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgbGFiZWxzID0gbWUuZ2V0TGFiZWxzKCk7XG5cdFx0Ly8gSWYgd2UgYXJlIHZpZXdpbmcgc29tZSBzdWJzZXQgb2YgbGFiZWxzLCBzbGljZSB0aGUgb3JpZ2luYWwgYXJyYXlcblx0XHRtZS50aWNrcyA9IChtZS5taW5JbmRleCA9PT0gMCAmJiBtZS5tYXhJbmRleCA9PT0gbGFiZWxzLmxlbmd0aCAtIDEpID8gbGFiZWxzIDogbGFiZWxzLnNsaWNlKG1lLm1pbkluZGV4LCBtZS5tYXhJbmRleCArIDEpO1xuXHR9LFxuXG5cdGdldExhYmVsRm9ySW5kZXg6IGZ1bmN0aW9uKGluZGV4LCBkYXRhc2V0SW5kZXgpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciBjaGFydCA9IG1lLmNoYXJ0O1xuXG5cdFx0aWYgKGNoYXJ0LmdldERhdGFzZXRNZXRhKGRhdGFzZXRJbmRleCkuY29udHJvbGxlci5fZ2V0VmFsdWVTY2FsZUlkKCkgPT09IG1lLmlkKSB7XG5cdFx0XHRyZXR1cm4gbWUuZ2V0UmlnaHRWYWx1ZShjaGFydC5kYXRhLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0uZGF0YVtpbmRleF0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBtZS50aWNrc1tpbmRleCAtIG1lLm1pbkluZGV4XTtcblx0fSxcblxuXHQvLyBVc2VkIHRvIGdldCBkYXRhIHZhbHVlIGxvY2F0aW9ucy4gIFZhbHVlIGNhbiBlaXRoZXIgYmUgYW4gaW5kZXggb3IgYSBudW1lcmljYWwgdmFsdWVcblx0Z2V0UGl4ZWxGb3JWYWx1ZTogZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgb2Zmc2V0ID0gbWUub3B0aW9ucy5vZmZzZXQ7XG5cdFx0Ly8gMSBpcyBhZGRlZCBiZWNhdXNlIHdlIG5lZWQgdGhlIGxlbmd0aCBidXQgd2UgaGF2ZSB0aGUgaW5kZXhlc1xuXHRcdHZhciBvZmZzZXRBbXQgPSBNYXRoLm1heCgobWUubWF4SW5kZXggKyAxIC0gbWUubWluSW5kZXggLSAob2Zmc2V0ID8gMCA6IDEpKSwgMSk7XG5cblx0XHQvLyBJZiB2YWx1ZSBpcyBhIGRhdGEgb2JqZWN0LCB0aGVuIGluZGV4IGlzIHRoZSBpbmRleCBpbiB0aGUgZGF0YSBhcnJheSxcblx0XHQvLyBub3QgdGhlIGluZGV4IG9mIHRoZSBzY2FsZS4gV2UgbmVlZCB0byBjaGFuZ2UgdGhhdC5cblx0XHR2YXIgdmFsdWVDYXRlZ29yeTtcblx0XHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuXHRcdFx0dmFsdWVDYXRlZ29yeSA9IG1lLmlzSG9yaXpvbnRhbCgpID8gdmFsdWUueCA6IHZhbHVlLnk7XG5cdFx0fVxuXHRcdGlmICh2YWx1ZUNhdGVnb3J5ICE9PSB1bmRlZmluZWQgfHwgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgaXNOYU4oaW5kZXgpKSkge1xuXHRcdFx0dmFyIGxhYmVscyA9IG1lLmdldExhYmVscygpO1xuXHRcdFx0dmFsdWUgPSB2YWx1ZUNhdGVnb3J5IHx8IHZhbHVlO1xuXHRcdFx0dmFyIGlkeCA9IGxhYmVscy5pbmRleE9mKHZhbHVlKTtcblx0XHRcdGluZGV4ID0gaWR4ICE9PSAtMSA/IGlkeCA6IGluZGV4O1xuXHRcdH1cblxuXHRcdGlmIChtZS5pc0hvcml6b250YWwoKSkge1xuXHRcdFx0dmFyIHZhbHVlV2lkdGggPSBtZS53aWR0aCAvIG9mZnNldEFtdDtcblx0XHRcdHZhciB3aWR0aE9mZnNldCA9ICh2YWx1ZVdpZHRoICogKGluZGV4IC0gbWUubWluSW5kZXgpKTtcblxuXHRcdFx0aWYgKG9mZnNldCkge1xuXHRcdFx0XHR3aWR0aE9mZnNldCArPSAodmFsdWVXaWR0aCAvIDIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWUubGVmdCArIHdpZHRoT2Zmc2V0O1xuXHRcdH1cblx0XHR2YXIgdmFsdWVIZWlnaHQgPSBtZS5oZWlnaHQgLyBvZmZzZXRBbXQ7XG5cdFx0dmFyIGhlaWdodE9mZnNldCA9ICh2YWx1ZUhlaWdodCAqIChpbmRleCAtIG1lLm1pbkluZGV4KSk7XG5cblx0XHRpZiAob2Zmc2V0KSB7XG5cdFx0XHRoZWlnaHRPZmZzZXQgKz0gKHZhbHVlSGVpZ2h0IC8gMik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1lLnRvcCArIGhlaWdodE9mZnNldDtcblx0fSxcblxuXHRnZXRQaXhlbEZvclRpY2s6IGZ1bmN0aW9uKGluZGV4KSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UGl4ZWxGb3JWYWx1ZSh0aGlzLnRpY2tzW2luZGV4XSwgaW5kZXggKyB0aGlzLm1pbkluZGV4LCBudWxsKTtcblx0fSxcblxuXHRnZXRWYWx1ZUZvclBpeGVsOiBmdW5jdGlvbihwaXhlbCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIG9mZnNldCA9IG1lLm9wdGlvbnMub2Zmc2V0O1xuXHRcdHZhciB2YWx1ZTtcblx0XHR2YXIgb2Zmc2V0QW10ID0gTWF0aC5tYXgoKG1lLl90aWNrcy5sZW5ndGggLSAob2Zmc2V0ID8gMCA6IDEpKSwgMSk7XG5cdFx0dmFyIGhvcnogPSBtZS5pc0hvcml6b250YWwoKTtcblx0XHR2YXIgdmFsdWVEaW1lbnNpb24gPSAoaG9yeiA/IG1lLndpZHRoIDogbWUuaGVpZ2h0KSAvIG9mZnNldEFtdDtcblxuXHRcdHBpeGVsIC09IGhvcnogPyBtZS5sZWZ0IDogbWUudG9wO1xuXG5cdFx0aWYgKG9mZnNldCkge1xuXHRcdFx0cGl4ZWwgLT0gKHZhbHVlRGltZW5zaW9uIC8gMik7XG5cdFx0fVxuXG5cdFx0aWYgKHBpeGVsIDw9IDApIHtcblx0XHRcdHZhbHVlID0gMDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFsdWUgPSBNYXRoLnJvdW5kKHBpeGVsIC8gdmFsdWVEaW1lbnNpb24pO1xuXHRcdH1cblxuXHRcdHJldHVybiB2YWx1ZSArIG1lLm1pbkluZGV4O1xuXHR9LFxuXG5cdGdldEJhc2VQaXhlbDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuYm90dG9tO1xuXHR9XG59KTtcblxuLy8gSU5URVJOQUw6IHN0YXRpYyBkZWZhdWx0IG9wdGlvbnMsIHJlZ2lzdGVyZWQgaW4gc3JjL2luZGV4LmpzXG52YXIgX2RlZmF1bHRzID0gZGVmYXVsdENvbmZpZztcbnNjYWxlX2NhdGVnb3J5Ll9kZWZhdWx0cyA9IF9kZWZhdWx0cztcblxudmFyIG5vb3AgPSBoZWxwZXJzJDEubm9vcDtcbnZhciBpc051bGxPclVuZGVmID0gaGVscGVycyQxLmlzTnVsbE9yVW5kZWY7XG5cbi8qKlxuICogR2VuZXJhdGUgYSBzZXQgb2YgbGluZWFyIHRpY2tzXG4gKiBAcGFyYW0gZ2VuZXJhdGlvbk9wdGlvbnMgdGhlIG9wdGlvbnMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGlja3NcbiAqIEBwYXJhbSBkYXRhUmFuZ2UgdGhlIHJhbmdlIG9mIHRoZSBkYXRhXG4gKiBAcmV0dXJucyB7bnVtYmVyW119IGFycmF5IG9mIHRpY2sgdmFsdWVzXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlVGlja3MoZ2VuZXJhdGlvbk9wdGlvbnMsIGRhdGFSYW5nZSkge1xuXHR2YXIgdGlja3MgPSBbXTtcblx0Ly8gVG8gZ2V0IGEgXCJuaWNlXCIgdmFsdWUgZm9yIHRoZSB0aWNrIHNwYWNpbmcsIHdlIHdpbGwgdXNlIHRoZSBhcHByb3ByaWF0ZWx5IG5hbWVkXG5cdC8vIFwibmljZSBudW1iZXJcIiBhbGdvcml0aG0uIFNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy84NTA2ODgxL25pY2UtbGFiZWwtYWxnb3JpdGhtLWZvci1jaGFydHMtd2l0aC1taW5pbXVtLXRpY2tzXG5cdC8vIGZvciBkZXRhaWxzLlxuXG5cdHZhciBNSU5fU1BBQ0lORyA9IDFlLTE0O1xuXHR2YXIgc3RlcFNpemUgPSBnZW5lcmF0aW9uT3B0aW9ucy5zdGVwU2l6ZTtcblx0dmFyIHVuaXQgPSBzdGVwU2l6ZSB8fCAxO1xuXHR2YXIgbWF4TnVtU3BhY2VzID0gZ2VuZXJhdGlvbk9wdGlvbnMubWF4VGlja3MgLSAxO1xuXHR2YXIgbWluID0gZ2VuZXJhdGlvbk9wdGlvbnMubWluO1xuXHR2YXIgbWF4ID0gZ2VuZXJhdGlvbk9wdGlvbnMubWF4O1xuXHR2YXIgcHJlY2lzaW9uID0gZ2VuZXJhdGlvbk9wdGlvbnMucHJlY2lzaW9uO1xuXHR2YXIgcm1pbiA9IGRhdGFSYW5nZS5taW47XG5cdHZhciBybWF4ID0gZGF0YVJhbmdlLm1heDtcblx0dmFyIHNwYWNpbmcgPSBoZWxwZXJzJDEubmljZU51bSgocm1heCAtIHJtaW4pIC8gbWF4TnVtU3BhY2VzIC8gdW5pdCkgKiB1bml0O1xuXHR2YXIgZmFjdG9yLCBuaWNlTWluLCBuaWNlTWF4LCBudW1TcGFjZXM7XG5cblx0Ly8gQmV5b25kIE1JTl9TUEFDSU5HIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgYmVpbmcgdG8gbG9zZSBwcmVjaXNpb25cblx0Ly8gc3VjaCB0aGF0IHdlIGNhbid0IGRvIHRoZSBtYXRoIG5lY2Vzc2FyeSB0byBnZW5lcmF0ZSB0aWNrc1xuXHRpZiAoc3BhY2luZyA8IE1JTl9TUEFDSU5HICYmIGlzTnVsbE9yVW5kZWYobWluKSAmJiBpc051bGxPclVuZGVmKG1heCkpIHtcblx0XHRyZXR1cm4gW3JtaW4sIHJtYXhdO1xuXHR9XG5cblx0bnVtU3BhY2VzID0gTWF0aC5jZWlsKHJtYXggLyBzcGFjaW5nKSAtIE1hdGguZmxvb3Iocm1pbiAvIHNwYWNpbmcpO1xuXHRpZiAobnVtU3BhY2VzID4gbWF4TnVtU3BhY2VzKSB7XG5cdFx0Ly8gSWYgdGhlIGNhbGN1bGF0ZWQgbnVtIG9mIHNwYWNlcyBleGNlZWRzIG1heE51bVNwYWNlcywgcmVjYWxjdWxhdGUgaXRcblx0XHRzcGFjaW5nID0gaGVscGVycyQxLm5pY2VOdW0obnVtU3BhY2VzICogc3BhY2luZyAvIG1heE51bVNwYWNlcyAvIHVuaXQpICogdW5pdDtcblx0fVxuXG5cdGlmIChzdGVwU2l6ZSB8fCBpc051bGxPclVuZGVmKHByZWNpc2lvbikpIHtcblx0XHQvLyBJZiBhIHByZWNpc2lvbiBpcyBub3Qgc3BlY2lmaWVkLCBjYWxjdWxhdGUgZmFjdG9yIGJhc2VkIG9uIHNwYWNpbmdcblx0XHRmYWN0b3IgPSBNYXRoLnBvdygxMCwgaGVscGVycyQxLl9kZWNpbWFsUGxhY2VzKHNwYWNpbmcpKTtcblx0fSBlbHNlIHtcblx0XHQvLyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYSBwcmVjaXNpb24sIHJvdW5kIHRvIHRoYXQgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzXG5cdFx0ZmFjdG9yID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbik7XG5cdFx0c3BhY2luZyA9IE1hdGguY2VpbChzcGFjaW5nICogZmFjdG9yKSAvIGZhY3Rvcjtcblx0fVxuXG5cdG5pY2VNaW4gPSBNYXRoLmZsb29yKHJtaW4gLyBzcGFjaW5nKSAqIHNwYWNpbmc7XG5cdG5pY2VNYXggPSBNYXRoLmNlaWwocm1heCAvIHNwYWNpbmcpICogc3BhY2luZztcblxuXHQvLyBJZiBtaW4sIG1heCBhbmQgc3RlcFNpemUgaXMgc2V0IGFuZCB0aGV5IG1ha2UgYW4gZXZlbmx5IHNwYWNlZCBzY2FsZSB1c2UgaXQuXG5cdGlmIChzdGVwU2l6ZSkge1xuXHRcdC8vIElmIHZlcnkgY2xvc2UgdG8gb3VyIHdob2xlIG51bWJlciwgdXNlIGl0LlxuXHRcdGlmICghaXNOdWxsT3JVbmRlZihtaW4pICYmIGhlbHBlcnMkMS5hbG1vc3RXaG9sZShtaW4gLyBzcGFjaW5nLCBzcGFjaW5nIC8gMTAwMCkpIHtcblx0XHRcdG5pY2VNaW4gPSBtaW47XG5cdFx0fVxuXHRcdGlmICghaXNOdWxsT3JVbmRlZihtYXgpICYmIGhlbHBlcnMkMS5hbG1vc3RXaG9sZShtYXggLyBzcGFjaW5nLCBzcGFjaW5nIC8gMTAwMCkpIHtcblx0XHRcdG5pY2VNYXggPSBtYXg7XG5cdFx0fVxuXHR9XG5cblx0bnVtU3BhY2VzID0gKG5pY2VNYXggLSBuaWNlTWluKSAvIHNwYWNpbmc7XG5cdC8vIElmIHZlcnkgY2xvc2UgdG8gb3VyIHJvdW5kZWQgdmFsdWUsIHVzZSBpdC5cblx0aWYgKGhlbHBlcnMkMS5hbG1vc3RFcXVhbHMobnVtU3BhY2VzLCBNYXRoLnJvdW5kKG51bVNwYWNlcyksIHNwYWNpbmcgLyAxMDAwKSkge1xuXHRcdG51bVNwYWNlcyA9IE1hdGgucm91bmQobnVtU3BhY2VzKTtcblx0fSBlbHNlIHtcblx0XHRudW1TcGFjZXMgPSBNYXRoLmNlaWwobnVtU3BhY2VzKTtcblx0fVxuXG5cdG5pY2VNaW4gPSBNYXRoLnJvdW5kKG5pY2VNaW4gKiBmYWN0b3IpIC8gZmFjdG9yO1xuXHRuaWNlTWF4ID0gTWF0aC5yb3VuZChuaWNlTWF4ICogZmFjdG9yKSAvIGZhY3Rvcjtcblx0dGlja3MucHVzaChpc051bGxPclVuZGVmKG1pbikgPyBuaWNlTWluIDogbWluKTtcblx0Zm9yICh2YXIgaiA9IDE7IGogPCBudW1TcGFjZXM7ICsraikge1xuXHRcdHRpY2tzLnB1c2goTWF0aC5yb3VuZCgobmljZU1pbiArIGogKiBzcGFjaW5nKSAqIGZhY3RvcikgLyBmYWN0b3IpO1xuXHR9XG5cdHRpY2tzLnB1c2goaXNOdWxsT3JVbmRlZihtYXgpID8gbmljZU1heCA6IG1heCk7XG5cblx0cmV0dXJuIHRpY2tzO1xufVxuXG52YXIgc2NhbGVfbGluZWFyYmFzZSA9IGNvcmVfc2NhbGUuZXh0ZW5kKHtcblx0Z2V0UmlnaHRWYWx1ZTogZnVuY3Rpb24odmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuXHRcdFx0cmV0dXJuICt2YWx1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvcmVfc2NhbGUucHJvdG90eXBlLmdldFJpZ2h0VmFsdWUuY2FsbCh0aGlzLCB2YWx1ZSk7XG5cdH0sXG5cblx0aGFuZGxlVGlja1JhbmdlT3B0aW9uczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgb3B0cyA9IG1lLm9wdGlvbnM7XG5cdFx0dmFyIHRpY2tPcHRzID0gb3B0cy50aWNrcztcblxuXHRcdC8vIElmIHdlIGFyZSBmb3JjaW5nIGl0IHRvIGJlZ2luIGF0IDAsIGJ1dCAwIHdpbGwgYWxyZWFkeSBiZSByZW5kZXJlZCBvbiB0aGUgY2hhcnQsXG5cdFx0Ly8gZG8gbm90aGluZyBzaW5jZSB0aGF0IHdvdWxkIG1ha2UgdGhlIGNoYXJ0IHdlaXJkLiBJZiB0aGUgdXNlciByZWFsbHkgd2FudHMgYSB3ZWlyZCBjaGFydFxuXHRcdC8vIGF4aXMsIHRoZXkgY2FuIG1hbnVhbGx5IG92ZXJyaWRlIGl0XG5cdFx0aWYgKHRpY2tPcHRzLmJlZ2luQXRaZXJvKSB7XG5cdFx0XHR2YXIgbWluU2lnbiA9IGhlbHBlcnMkMS5zaWduKG1lLm1pbik7XG5cdFx0XHR2YXIgbWF4U2lnbiA9IGhlbHBlcnMkMS5zaWduKG1lLm1heCk7XG5cblx0XHRcdGlmIChtaW5TaWduIDwgMCAmJiBtYXhTaWduIDwgMCkge1xuXHRcdFx0XHQvLyBtb3ZlIHRoZSB0b3AgdXAgdG8gMFxuXHRcdFx0XHRtZS5tYXggPSAwO1xuXHRcdFx0fSBlbHNlIGlmIChtaW5TaWduID4gMCAmJiBtYXhTaWduID4gMCkge1xuXHRcdFx0XHQvLyBtb3ZlIHRoZSBib3R0b20gZG93biB0byAwXG5cdFx0XHRcdG1lLm1pbiA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHNldE1pbiA9IHRpY2tPcHRzLm1pbiAhPT0gdW5kZWZpbmVkIHx8IHRpY2tPcHRzLnN1Z2dlc3RlZE1pbiAhPT0gdW5kZWZpbmVkO1xuXHRcdHZhciBzZXRNYXggPSB0aWNrT3B0cy5tYXggIT09IHVuZGVmaW5lZCB8fCB0aWNrT3B0cy5zdWdnZXN0ZWRNYXggIT09IHVuZGVmaW5lZDtcblxuXHRcdGlmICh0aWNrT3B0cy5taW4gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bWUubWluID0gdGlja09wdHMubWluO1xuXHRcdH0gZWxzZSBpZiAodGlja09wdHMuc3VnZ2VzdGVkTWluICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChtZS5taW4gPT09IG51bGwpIHtcblx0XHRcdFx0bWUubWluID0gdGlja09wdHMuc3VnZ2VzdGVkTWluO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWUubWluID0gTWF0aC5taW4obWUubWluLCB0aWNrT3B0cy5zdWdnZXN0ZWRNaW4pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0aWNrT3B0cy5tYXggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bWUubWF4ID0gdGlja09wdHMubWF4O1xuXHRcdH0gZWxzZSBpZiAodGlja09wdHMuc3VnZ2VzdGVkTWF4ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChtZS5tYXggPT09IG51bGwpIHtcblx0XHRcdFx0bWUubWF4ID0gdGlja09wdHMuc3VnZ2VzdGVkTWF4O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWUubWF4ID0gTWF0aC5tYXgobWUubWF4LCB0aWNrT3B0cy5zdWdnZXN0ZWRNYXgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChzZXRNaW4gIT09IHNldE1heCkge1xuXHRcdFx0Ly8gV2Ugc2V0IHRoZSBtaW4gb3IgdGhlIG1heCBidXQgbm90IGJvdGguXG5cdFx0XHQvLyBTbyBlbnN1cmUgdGhhdCBvdXIgcmFuZ2UgaXMgZ29vZFxuXHRcdFx0Ly8gSW52ZXJ0ZWQgb3IgMCBsZW5ndGggcmFuZ2UgY2FuIGhhcHBlbiB3aGVuXG5cdFx0XHQvLyB0aWNrcy5taW4gaXMgc2V0LCBhbmQgbm8gZGF0YXNldHMgYXJlIHZpc2libGVcblx0XHRcdGlmIChtZS5taW4gPj0gbWUubWF4KSB7XG5cdFx0XHRcdGlmIChzZXRNaW4pIHtcblx0XHRcdFx0XHRtZS5tYXggPSBtZS5taW4gKyAxO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG1lLm1pbiA9IG1lLm1heCAtIDE7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAobWUubWluID09PSBtZS5tYXgpIHtcblx0XHRcdG1lLm1heCsrO1xuXG5cdFx0XHRpZiAoIXRpY2tPcHRzLmJlZ2luQXRaZXJvKSB7XG5cdFx0XHRcdG1lLm1pbi0tO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRnZXRUaWNrTGltaXQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIHRpY2tPcHRzID0gbWUub3B0aW9ucy50aWNrcztcblx0XHR2YXIgc3RlcFNpemUgPSB0aWNrT3B0cy5zdGVwU2l6ZTtcblx0XHR2YXIgbWF4VGlja3NMaW1pdCA9IHRpY2tPcHRzLm1heFRpY2tzTGltaXQ7XG5cdFx0dmFyIG1heFRpY2tzO1xuXG5cdFx0aWYgKHN0ZXBTaXplKSB7XG5cdFx0XHRtYXhUaWNrcyA9IE1hdGguY2VpbChtZS5tYXggLyBzdGVwU2l6ZSkgLSBNYXRoLmZsb29yKG1lLm1pbiAvIHN0ZXBTaXplKSArIDE7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1heFRpY2tzID0gbWUuX2NvbXB1dGVUaWNrTGltaXQoKTtcblx0XHRcdG1heFRpY2tzTGltaXQgPSBtYXhUaWNrc0xpbWl0IHx8IDExO1xuXHRcdH1cblxuXHRcdGlmIChtYXhUaWNrc0xpbWl0KSB7XG5cdFx0XHRtYXhUaWNrcyA9IE1hdGgubWluKG1heFRpY2tzTGltaXQsIG1heFRpY2tzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWF4VGlja3M7XG5cdH0sXG5cblx0X2NvbXB1dGVUaWNrTGltaXQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG5cdH0sXG5cblx0aGFuZGxlRGlyZWN0aW9uYWxDaGFuZ2VzOiBub29wLFxuXG5cdGJ1aWxkVGlja3M6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIG9wdHMgPSBtZS5vcHRpb25zO1xuXHRcdHZhciB0aWNrT3B0cyA9IG9wdHMudGlja3M7XG5cblx0XHQvLyBGaWd1cmUgb3V0IHdoYXQgdGhlIG1heCBudW1iZXIgb2YgdGlja3Mgd2UgY2FuIHN1cHBvcnQgaXQgaXMgYmFzZWQgb24gdGhlIHNpemUgb2Zcblx0XHQvLyB0aGUgYXhpcyBhcmVhLiBGb3Igbm93LCB3ZSBzYXkgdGhhdCB0aGUgbWluaW11bSB0aWNrIHNwYWNpbmcgaW4gcGl4ZWxzIG11c3QgYmUgNDBcblx0XHQvLyBXZSBhbHNvIGxpbWl0IHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aWNrcyB0byAxMSB3aGljaCBnaXZlcyBhIG5pY2UgMTAgc3F1YXJlcyBvblxuXHRcdC8vIHRoZSBncmFwaC4gTWFrZSBzdXJlIHdlIGFsd2F5cyBoYXZlIGF0IGxlYXN0IDIgdGlja3Ncblx0XHR2YXIgbWF4VGlja3MgPSBtZS5nZXRUaWNrTGltaXQoKTtcblx0XHRtYXhUaWNrcyA9IE1hdGgubWF4KDIsIG1heFRpY2tzKTtcblxuXHRcdHZhciBudW1lcmljR2VuZXJhdG9yT3B0aW9ucyA9IHtcblx0XHRcdG1heFRpY2tzOiBtYXhUaWNrcyxcblx0XHRcdG1pbjogdGlja09wdHMubWluLFxuXHRcdFx0bWF4OiB0aWNrT3B0cy5tYXgsXG5cdFx0XHRwcmVjaXNpb246IHRpY2tPcHRzLnByZWNpc2lvbixcblx0XHRcdHN0ZXBTaXplOiBoZWxwZXJzJDEudmFsdWVPckRlZmF1bHQodGlja09wdHMuZml4ZWRTdGVwU2l6ZSwgdGlja09wdHMuc3RlcFNpemUpXG5cdFx0fTtcblx0XHR2YXIgdGlja3MgPSBtZS50aWNrcyA9IGdlbmVyYXRlVGlja3MobnVtZXJpY0dlbmVyYXRvck9wdGlvbnMsIG1lKTtcblxuXHRcdG1lLmhhbmRsZURpcmVjdGlvbmFsQ2hhbmdlcygpO1xuXG5cdFx0Ly8gQXQgdGhpcyBwb2ludCwgd2UgbmVlZCB0byB1cGRhdGUgb3VyIG1heCBhbmQgbWluIGdpdmVuIHRoZSB0aWNrIHZhbHVlcyBzaW5jZSB3ZSBoYXZlIGV4cGFuZGVkIHRoZVxuXHRcdC8vIHJhbmdlIG9mIHRoZSBzY2FsZVxuXHRcdG1lLm1heCA9IGhlbHBlcnMkMS5tYXgodGlja3MpO1xuXHRcdG1lLm1pbiA9IGhlbHBlcnMkMS5taW4odGlja3MpO1xuXG5cdFx0aWYgKHRpY2tPcHRzLnJldmVyc2UpIHtcblx0XHRcdHRpY2tzLnJldmVyc2UoKTtcblxuXHRcdFx0bWUuc3RhcnQgPSBtZS5tYXg7XG5cdFx0XHRtZS5lbmQgPSBtZS5taW47XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1lLnN0YXJ0ID0gbWUubWluO1xuXHRcdFx0bWUuZW5kID0gbWUubWF4O1xuXHRcdH1cblx0fSxcblxuXHRjb252ZXJ0VGlja3NUb0xhYmVsczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHRtZS50aWNrc0FzTnVtYmVycyA9IG1lLnRpY2tzLnNsaWNlKCk7XG5cdFx0bWUuemVyb0xpbmVJbmRleCA9IG1lLnRpY2tzLmluZGV4T2YoMCk7XG5cblx0XHRjb3JlX3NjYWxlLnByb3RvdHlwZS5jb252ZXJ0VGlja3NUb0xhYmVscy5jYWxsKG1lKTtcblx0fVxufSk7XG5cbnZhciBkZWZhdWx0Q29uZmlnJDEgPSB7XG5cdHBvc2l0aW9uOiAnbGVmdCcsXG5cdHRpY2tzOiB7XG5cdFx0Y2FsbGJhY2s6IGNvcmVfdGlja3MuZm9ybWF0dGVycy5saW5lYXJcblx0fVxufTtcblxudmFyIHNjYWxlX2xpbmVhciA9IHNjYWxlX2xpbmVhcmJhc2UuZXh0ZW5kKHtcblx0ZGV0ZXJtaW5lRGF0YUxpbWl0czogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgb3B0cyA9IG1lLm9wdGlvbnM7XG5cdFx0dmFyIGNoYXJ0ID0gbWUuY2hhcnQ7XG5cdFx0dmFyIGRhdGEgPSBjaGFydC5kYXRhO1xuXHRcdHZhciBkYXRhc2V0cyA9IGRhdGEuZGF0YXNldHM7XG5cdFx0dmFyIGlzSG9yaXpvbnRhbCA9IG1lLmlzSG9yaXpvbnRhbCgpO1xuXHRcdHZhciBERUZBVUxUX01JTiA9IDA7XG5cdFx0dmFyIERFRkFVTFRfTUFYID0gMTtcblxuXHRcdGZ1bmN0aW9uIElETWF0Y2hlcyhtZXRhKSB7XG5cdFx0XHRyZXR1cm4gaXNIb3Jpem9udGFsID8gbWV0YS54QXhpc0lEID09PSBtZS5pZCA6IG1ldGEueUF4aXNJRCA9PT0gbWUuaWQ7XG5cdFx0fVxuXG5cdFx0Ly8gRmlyc3QgQ2FsY3VsYXRlIHRoZSByYW5nZVxuXHRcdG1lLm1pbiA9IG51bGw7XG5cdFx0bWUubWF4ID0gbnVsbDtcblxuXHRcdHZhciBoYXNTdGFja3MgPSBvcHRzLnN0YWNrZWQ7XG5cdFx0aWYgKGhhc1N0YWNrcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRoZWxwZXJzJDEuZWFjaChkYXRhc2V0cywgZnVuY3Rpb24oZGF0YXNldCwgZGF0YXNldEluZGV4KSB7XG5cdFx0XHRcdGlmIChoYXNTdGFja3MpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgbWV0YSA9IGNoYXJ0LmdldERhdGFzZXRNZXRhKGRhdGFzZXRJbmRleCk7XG5cdFx0XHRcdGlmIChjaGFydC5pc0RhdGFzZXRWaXNpYmxlKGRhdGFzZXRJbmRleCkgJiYgSURNYXRjaGVzKG1ldGEpICYmXG5cdFx0XHRcdFx0bWV0YS5zdGFjayAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0aGFzU3RhY2tzID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKG9wdHMuc3RhY2tlZCB8fCBoYXNTdGFja3MpIHtcblx0XHRcdHZhciB2YWx1ZXNQZXJTdGFjayA9IHt9O1xuXG5cdFx0XHRoZWxwZXJzJDEuZWFjaChkYXRhc2V0cywgZnVuY3Rpb24oZGF0YXNldCwgZGF0YXNldEluZGV4KSB7XG5cdFx0XHRcdHZhciBtZXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KTtcblx0XHRcdFx0dmFyIGtleSA9IFtcblx0XHRcdFx0XHRtZXRhLnR5cGUsXG5cdFx0XHRcdFx0Ly8gd2UgaGF2ZSBhIHNlcGFyYXRlIHN0YWNrIGZvciBzdGFjaz11bmRlZmluZWQgZGF0YXNldHMgd2hlbiB0aGUgb3B0cy5zdGFja2VkIGlzIHVuZGVmaW5lZFxuXHRcdFx0XHRcdCgob3B0cy5zdGFja2VkID09PSB1bmRlZmluZWQgJiYgbWV0YS5zdGFjayA9PT0gdW5kZWZpbmVkKSA/IGRhdGFzZXRJbmRleCA6ICcnKSxcblx0XHRcdFx0XHRtZXRhLnN0YWNrXG5cdFx0XHRcdF0uam9pbignLicpO1xuXG5cdFx0XHRcdGlmICh2YWx1ZXNQZXJTdGFja1trZXldID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR2YWx1ZXNQZXJTdGFja1trZXldID0ge1xuXHRcdFx0XHRcdFx0cG9zaXRpdmVWYWx1ZXM6IFtdLFxuXHRcdFx0XHRcdFx0bmVnYXRpdmVWYWx1ZXM6IFtdXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN0b3JlIHRoZXNlIHBlciB0eXBlXG5cdFx0XHRcdHZhciBwb3NpdGl2ZVZhbHVlcyA9IHZhbHVlc1BlclN0YWNrW2tleV0ucG9zaXRpdmVWYWx1ZXM7XG5cdFx0XHRcdHZhciBuZWdhdGl2ZVZhbHVlcyA9IHZhbHVlc1BlclN0YWNrW2tleV0ubmVnYXRpdmVWYWx1ZXM7XG5cblx0XHRcdFx0aWYgKGNoYXJ0LmlzRGF0YXNldFZpc2libGUoZGF0YXNldEluZGV4KSAmJiBJRE1hdGNoZXMobWV0YSkpIHtcblx0XHRcdFx0XHRoZWxwZXJzJDEuZWFjaChkYXRhc2V0LmRhdGEsIGZ1bmN0aW9uKHJhd1ZhbHVlLCBpbmRleCkge1xuXHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gK21lLmdldFJpZ2h0VmFsdWUocmF3VmFsdWUpO1xuXHRcdFx0XHRcdFx0aWYgKGlzTmFOKHZhbHVlKSB8fCBtZXRhLmRhdGFbaW5kZXhdLmhpZGRlbikge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHBvc2l0aXZlVmFsdWVzW2luZGV4XSA9IHBvc2l0aXZlVmFsdWVzW2luZGV4XSB8fCAwO1xuXHRcdFx0XHRcdFx0bmVnYXRpdmVWYWx1ZXNbaW5kZXhdID0gbmVnYXRpdmVWYWx1ZXNbaW5kZXhdIHx8IDA7XG5cblx0XHRcdFx0XHRcdGlmIChvcHRzLnJlbGF0aXZlUG9pbnRzKSB7XG5cdFx0XHRcdFx0XHRcdHBvc2l0aXZlVmFsdWVzW2luZGV4XSA9IDEwMDtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAodmFsdWUgPCAwKSB7XG5cdFx0XHRcdFx0XHRcdG5lZ2F0aXZlVmFsdWVzW2luZGV4XSArPSB2YWx1ZTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHBvc2l0aXZlVmFsdWVzW2luZGV4XSArPSB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGhlbHBlcnMkMS5lYWNoKHZhbHVlc1BlclN0YWNrLCBmdW5jdGlvbih2YWx1ZXNGb3JUeXBlKSB7XG5cdFx0XHRcdHZhciB2YWx1ZXMgPSB2YWx1ZXNGb3JUeXBlLnBvc2l0aXZlVmFsdWVzLmNvbmNhdCh2YWx1ZXNGb3JUeXBlLm5lZ2F0aXZlVmFsdWVzKTtcblx0XHRcdFx0dmFyIG1pblZhbCA9IGhlbHBlcnMkMS5taW4odmFsdWVzKTtcblx0XHRcdFx0dmFyIG1heFZhbCA9IGhlbHBlcnMkMS5tYXgodmFsdWVzKTtcblx0XHRcdFx0bWUubWluID0gbWUubWluID09PSBudWxsID8gbWluVmFsIDogTWF0aC5taW4obWUubWluLCBtaW5WYWwpO1xuXHRcdFx0XHRtZS5tYXggPSBtZS5tYXggPT09IG51bGwgPyBtYXhWYWwgOiBNYXRoLm1heChtZS5tYXgsIG1heFZhbCk7XG5cdFx0XHR9KTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRoZWxwZXJzJDEuZWFjaChkYXRhc2V0cywgZnVuY3Rpb24oZGF0YXNldCwgZGF0YXNldEluZGV4KSB7XG5cdFx0XHRcdHZhciBtZXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KTtcblx0XHRcdFx0aWYgKGNoYXJ0LmlzRGF0YXNldFZpc2libGUoZGF0YXNldEluZGV4KSAmJiBJRE1hdGNoZXMobWV0YSkpIHtcblx0XHRcdFx0XHRoZWxwZXJzJDEuZWFjaChkYXRhc2V0LmRhdGEsIGZ1bmN0aW9uKHJhd1ZhbHVlLCBpbmRleCkge1xuXHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gK21lLmdldFJpZ2h0VmFsdWUocmF3VmFsdWUpO1xuXHRcdFx0XHRcdFx0aWYgKGlzTmFOKHZhbHVlKSB8fCBtZXRhLmRhdGFbaW5kZXhdLmhpZGRlbikge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChtZS5taW4gPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0bWUubWluID0gdmFsdWU7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHZhbHVlIDwgbWUubWluKSB7XG5cdFx0XHRcdFx0XHRcdG1lLm1pbiA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAobWUubWF4ID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRcdG1lLm1heCA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICh2YWx1ZSA+IG1lLm1heCkge1xuXHRcdFx0XHRcdFx0XHRtZS5tYXggPSB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0bWUubWluID0gaXNGaW5pdGUobWUubWluKSAmJiAhaXNOYU4obWUubWluKSA/IG1lLm1pbiA6IERFRkFVTFRfTUlOO1xuXHRcdG1lLm1heCA9IGlzRmluaXRlKG1lLm1heCkgJiYgIWlzTmFOKG1lLm1heCkgPyBtZS5tYXggOiBERUZBVUxUX01BWDtcblxuXHRcdC8vIENvbW1vbiBiYXNlIGltcGxlbWVudGF0aW9uIHRvIGhhbmRsZSB0aWNrcy5taW4sIHRpY2tzLm1heCwgdGlja3MuYmVnaW5BdFplcm9cblx0XHR0aGlzLmhhbmRsZVRpY2tSYW5nZU9wdGlvbnMoKTtcblx0fSxcblxuXHQvLyBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aWNrcyBiYXNlZCBvbiB0aGUgc2NhbGUgZGltZW5zaW9uXG5cdF9jb21wdXRlVGlja0xpbWl0OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciB0aWNrRm9udDtcblxuXHRcdGlmIChtZS5pc0hvcml6b250YWwoKSkge1xuXHRcdFx0cmV0dXJuIE1hdGguY2VpbChtZS53aWR0aCAvIDQwKTtcblx0XHR9XG5cdFx0dGlja0ZvbnQgPSBoZWxwZXJzJDEub3B0aW9ucy5fcGFyc2VGb250KG1lLm9wdGlvbnMudGlja3MpO1xuXHRcdHJldHVybiBNYXRoLmNlaWwobWUuaGVpZ2h0IC8gdGlja0ZvbnQubGluZUhlaWdodCk7XG5cdH0sXG5cblx0Ly8gQ2FsbGVkIGFmdGVyIHRoZSB0aWNrcyBhcmUgYnVpbHQuIFdlIG5lZWRcblx0aGFuZGxlRGlyZWN0aW9uYWxDaGFuZ2VzOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoIXRoaXMuaXNIb3Jpem9udGFsKCkpIHtcblx0XHRcdC8vIFdlIGFyZSBpbiBhIHZlcnRpY2FsIG9yaWVudGF0aW9uLiBUaGUgdG9wIHZhbHVlIGlzIHRoZSBoaWdoZXN0LiBTbyByZXZlcnNlIHRoZSBhcnJheVxuXHRcdFx0dGhpcy50aWNrcy5yZXZlcnNlKCk7XG5cdFx0fVxuXHR9LFxuXG5cdGdldExhYmVsRm9ySW5kZXg6IGZ1bmN0aW9uKGluZGV4LCBkYXRhc2V0SW5kZXgpIHtcblx0XHRyZXR1cm4gK3RoaXMuZ2V0UmlnaHRWYWx1ZSh0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHNbZGF0YXNldEluZGV4XS5kYXRhW2luZGV4XSk7XG5cdH0sXG5cblx0Ly8gVXRpbHNcblx0Z2V0UGl4ZWxGb3JWYWx1ZTogZnVuY3Rpb24odmFsdWUpIHtcblx0XHQvLyBUaGlzIG11c3QgYmUgY2FsbGVkIGFmdGVyIGZpdCBoYXMgYmVlbiBydW4gc28gdGhhdFxuXHRcdC8vIHRoaXMubGVmdCwgdGhpcy50b3AsIHRoaXMucmlnaHQsIGFuZCB0aGlzLmJvdHRvbSBoYXZlIGJlZW4gZGVmaW5lZFxuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIHN0YXJ0ID0gbWUuc3RhcnQ7XG5cblx0XHR2YXIgcmlnaHRWYWx1ZSA9ICttZS5nZXRSaWdodFZhbHVlKHZhbHVlKTtcblx0XHR2YXIgcGl4ZWw7XG5cdFx0dmFyIHJhbmdlID0gbWUuZW5kIC0gc3RhcnQ7XG5cblx0XHRpZiAobWUuaXNIb3Jpem9udGFsKCkpIHtcblx0XHRcdHBpeGVsID0gbWUubGVmdCArIChtZS53aWR0aCAvIHJhbmdlICogKHJpZ2h0VmFsdWUgLSBzdGFydCkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwaXhlbCA9IG1lLmJvdHRvbSAtIChtZS5oZWlnaHQgLyByYW5nZSAqIChyaWdodFZhbHVlIC0gc3RhcnQpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHBpeGVsO1xuXHR9LFxuXG5cdGdldFZhbHVlRm9yUGl4ZWw6IGZ1bmN0aW9uKHBpeGVsKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgaXNIb3Jpem9udGFsID0gbWUuaXNIb3Jpem9udGFsKCk7XG5cdFx0dmFyIGlubmVyRGltZW5zaW9uID0gaXNIb3Jpem9udGFsID8gbWUud2lkdGggOiBtZS5oZWlnaHQ7XG5cdFx0dmFyIG9mZnNldCA9IChpc0hvcml6b250YWwgPyBwaXhlbCAtIG1lLmxlZnQgOiBtZS5ib3R0b20gLSBwaXhlbCkgLyBpbm5lckRpbWVuc2lvbjtcblx0XHRyZXR1cm4gbWUuc3RhcnQgKyAoKG1lLmVuZCAtIG1lLnN0YXJ0KSAqIG9mZnNldCk7XG5cdH0sXG5cblx0Z2V0UGl4ZWxGb3JUaWNrOiBmdW5jdGlvbihpbmRleCkge1xuXHRcdHJldHVybiB0aGlzLmdldFBpeGVsRm9yVmFsdWUodGhpcy50aWNrc0FzTnVtYmVyc1tpbmRleF0pO1xuXHR9XG59KTtcblxuLy8gSU5URVJOQUw6IHN0YXRpYyBkZWZhdWx0IG9wdGlvbnMsIHJlZ2lzdGVyZWQgaW4gc3JjL2luZGV4LmpzXG52YXIgX2RlZmF1bHRzJDEgPSBkZWZhdWx0Q29uZmlnJDE7XG5zY2FsZV9saW5lYXIuX2RlZmF1bHRzID0gX2RlZmF1bHRzJDE7XG5cbnZhciB2YWx1ZU9yRGVmYXVsdCRhID0gaGVscGVycyQxLnZhbHVlT3JEZWZhdWx0O1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgc2V0IG9mIGxvZ2FyaXRobWljIHRpY2tzXG4gKiBAcGFyYW0gZ2VuZXJhdGlvbk9wdGlvbnMgdGhlIG9wdGlvbnMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGlja3NcbiAqIEBwYXJhbSBkYXRhUmFuZ2UgdGhlIHJhbmdlIG9mIHRoZSBkYXRhXG4gKiBAcmV0dXJucyB7bnVtYmVyW119IGFycmF5IG9mIHRpY2sgdmFsdWVzXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlVGlja3MkMShnZW5lcmF0aW9uT3B0aW9ucywgZGF0YVJhbmdlKSB7XG5cdHZhciB0aWNrcyA9IFtdO1xuXG5cdHZhciB0aWNrVmFsID0gdmFsdWVPckRlZmF1bHQkYShnZW5lcmF0aW9uT3B0aW9ucy5taW4sIE1hdGgucG93KDEwLCBNYXRoLmZsb29yKGhlbHBlcnMkMS5sb2cxMChkYXRhUmFuZ2UubWluKSkpKTtcblxuXHR2YXIgZW5kRXhwID0gTWF0aC5mbG9vcihoZWxwZXJzJDEubG9nMTAoZGF0YVJhbmdlLm1heCkpO1xuXHR2YXIgZW5kU2lnbmlmaWNhbmQgPSBNYXRoLmNlaWwoZGF0YVJhbmdlLm1heCAvIE1hdGgucG93KDEwLCBlbmRFeHApKTtcblx0dmFyIGV4cCwgc2lnbmlmaWNhbmQ7XG5cblx0aWYgKHRpY2tWYWwgPT09IDApIHtcblx0XHRleHAgPSBNYXRoLmZsb29yKGhlbHBlcnMkMS5sb2cxMChkYXRhUmFuZ2UubWluTm90WmVybykpO1xuXHRcdHNpZ25pZmljYW5kID0gTWF0aC5mbG9vcihkYXRhUmFuZ2UubWluTm90WmVybyAvIE1hdGgucG93KDEwLCBleHApKTtcblxuXHRcdHRpY2tzLnB1c2godGlja1ZhbCk7XG5cdFx0dGlja1ZhbCA9IHNpZ25pZmljYW5kICogTWF0aC5wb3coMTAsIGV4cCk7XG5cdH0gZWxzZSB7XG5cdFx0ZXhwID0gTWF0aC5mbG9vcihoZWxwZXJzJDEubG9nMTAodGlja1ZhbCkpO1xuXHRcdHNpZ25pZmljYW5kID0gTWF0aC5mbG9vcih0aWNrVmFsIC8gTWF0aC5wb3coMTAsIGV4cCkpO1xuXHR9XG5cdHZhciBwcmVjaXNpb24gPSBleHAgPCAwID8gTWF0aC5wb3coMTAsIE1hdGguYWJzKGV4cCkpIDogMTtcblxuXHRkbyB7XG5cdFx0dGlja3MucHVzaCh0aWNrVmFsKTtcblxuXHRcdCsrc2lnbmlmaWNhbmQ7XG5cdFx0aWYgKHNpZ25pZmljYW5kID09PSAxMCkge1xuXHRcdFx0c2lnbmlmaWNhbmQgPSAxO1xuXHRcdFx0KytleHA7XG5cdFx0XHRwcmVjaXNpb24gPSBleHAgPj0gMCA/IDEgOiBwcmVjaXNpb247XG5cdFx0fVxuXG5cdFx0dGlja1ZhbCA9IE1hdGgucm91bmQoc2lnbmlmaWNhbmQgKiBNYXRoLnBvdygxMCwgZXhwKSAqIHByZWNpc2lvbikgLyBwcmVjaXNpb247XG5cdH0gd2hpbGUgKGV4cCA8IGVuZEV4cCB8fCAoZXhwID09PSBlbmRFeHAgJiYgc2lnbmlmaWNhbmQgPCBlbmRTaWduaWZpY2FuZCkpO1xuXG5cdHZhciBsYXN0VGljayA9IHZhbHVlT3JEZWZhdWx0JGEoZ2VuZXJhdGlvbk9wdGlvbnMubWF4LCB0aWNrVmFsKTtcblx0dGlja3MucHVzaChsYXN0VGljayk7XG5cblx0cmV0dXJuIHRpY2tzO1xufVxuXG52YXIgZGVmYXVsdENvbmZpZyQyID0ge1xuXHRwb3NpdGlvbjogJ2xlZnQnLFxuXG5cdC8vIGxhYmVsIHNldHRpbmdzXG5cdHRpY2tzOiB7XG5cdFx0Y2FsbGJhY2s6IGNvcmVfdGlja3MuZm9ybWF0dGVycy5sb2dhcml0aG1pY1xuXHR9XG59O1xuXG4vLyBUT0RPKHYzKTogY2hhbmdlIHRoaXMgdG8gcG9zaXRpdmVPckRlZmF1bHRcbmZ1bmN0aW9uIG5vbk5lZ2F0aXZlT3JEZWZhdWx0KHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcblx0cmV0dXJuIGhlbHBlcnMkMS5pc0Zpbml0ZSh2YWx1ZSkgJiYgdmFsdWUgPj0gMCA/IHZhbHVlIDogZGVmYXVsdFZhbHVlO1xufVxuXG52YXIgc2NhbGVfbG9nYXJpdGhtaWMgPSBjb3JlX3NjYWxlLmV4dGVuZCh7XG5cdGRldGVybWluZURhdGFMaW1pdHM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIG9wdHMgPSBtZS5vcHRpb25zO1xuXHRcdHZhciBjaGFydCA9IG1lLmNoYXJ0O1xuXHRcdHZhciBkYXRhID0gY2hhcnQuZGF0YTtcblx0XHR2YXIgZGF0YXNldHMgPSBkYXRhLmRhdGFzZXRzO1xuXHRcdHZhciBpc0hvcml6b250YWwgPSBtZS5pc0hvcml6b250YWwoKTtcblx0XHRmdW5jdGlvbiBJRE1hdGNoZXMobWV0YSkge1xuXHRcdFx0cmV0dXJuIGlzSG9yaXpvbnRhbCA/IG1ldGEueEF4aXNJRCA9PT0gbWUuaWQgOiBtZXRhLnlBeGlzSUQgPT09IG1lLmlkO1xuXHRcdH1cblxuXHRcdC8vIENhbGN1bGF0ZSBSYW5nZVxuXHRcdG1lLm1pbiA9IG51bGw7XG5cdFx0bWUubWF4ID0gbnVsbDtcblx0XHRtZS5taW5Ob3RaZXJvID0gbnVsbDtcblxuXHRcdHZhciBoYXNTdGFja3MgPSBvcHRzLnN0YWNrZWQ7XG5cdFx0aWYgKGhhc1N0YWNrcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRoZWxwZXJzJDEuZWFjaChkYXRhc2V0cywgZnVuY3Rpb24oZGF0YXNldCwgZGF0YXNldEluZGV4KSB7XG5cdFx0XHRcdGlmIChoYXNTdGFja3MpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgbWV0YSA9IGNoYXJ0LmdldERhdGFzZXRNZXRhKGRhdGFzZXRJbmRleCk7XG5cdFx0XHRcdGlmIChjaGFydC5pc0RhdGFzZXRWaXNpYmxlKGRhdGFzZXRJbmRleCkgJiYgSURNYXRjaGVzKG1ldGEpICYmXG5cdFx0XHRcdFx0bWV0YS5zdGFjayAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0aGFzU3RhY2tzID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKG9wdHMuc3RhY2tlZCB8fCBoYXNTdGFja3MpIHtcblx0XHRcdHZhciB2YWx1ZXNQZXJTdGFjayA9IHt9O1xuXG5cdFx0XHRoZWxwZXJzJDEuZWFjaChkYXRhc2V0cywgZnVuY3Rpb24oZGF0YXNldCwgZGF0YXNldEluZGV4KSB7XG5cdFx0XHRcdHZhciBtZXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KTtcblx0XHRcdFx0dmFyIGtleSA9IFtcblx0XHRcdFx0XHRtZXRhLnR5cGUsXG5cdFx0XHRcdFx0Ly8gd2UgaGF2ZSBhIHNlcGFyYXRlIHN0YWNrIGZvciBzdGFjaz11bmRlZmluZWQgZGF0YXNldHMgd2hlbiB0aGUgb3B0cy5zdGFja2VkIGlzIHVuZGVmaW5lZFxuXHRcdFx0XHRcdCgob3B0cy5zdGFja2VkID09PSB1bmRlZmluZWQgJiYgbWV0YS5zdGFjayA9PT0gdW5kZWZpbmVkKSA/IGRhdGFzZXRJbmRleCA6ICcnKSxcblx0XHRcdFx0XHRtZXRhLnN0YWNrXG5cdFx0XHRcdF0uam9pbignLicpO1xuXG5cdFx0XHRcdGlmIChjaGFydC5pc0RhdGFzZXRWaXNpYmxlKGRhdGFzZXRJbmRleCkgJiYgSURNYXRjaGVzKG1ldGEpKSB7XG5cdFx0XHRcdFx0aWYgKHZhbHVlc1BlclN0YWNrW2tleV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0dmFsdWVzUGVyU3RhY2tba2V5XSA9IFtdO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGhlbHBlcnMkMS5lYWNoKGRhdGFzZXQuZGF0YSwgZnVuY3Rpb24ocmF3VmFsdWUsIGluZGV4KSB7XG5cdFx0XHRcdFx0XHR2YXIgdmFsdWVzID0gdmFsdWVzUGVyU3RhY2tba2V5XTtcblx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9ICttZS5nZXRSaWdodFZhbHVlKHJhd1ZhbHVlKTtcblx0XHRcdFx0XHRcdC8vIGludmFsaWQsIGhpZGRlbiBhbmQgbmVnYXRpdmUgdmFsdWVzIGFyZSBpZ25vcmVkXG5cdFx0XHRcdFx0XHRpZiAoaXNOYU4odmFsdWUpIHx8IG1ldGEuZGF0YVtpbmRleF0uaGlkZGVuIHx8IHZhbHVlIDwgMCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR2YWx1ZXNbaW5kZXhdID0gdmFsdWVzW2luZGV4XSB8fCAwO1xuXHRcdFx0XHRcdFx0dmFsdWVzW2luZGV4XSArPSB2YWx1ZTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGhlbHBlcnMkMS5lYWNoKHZhbHVlc1BlclN0YWNrLCBmdW5jdGlvbih2YWx1ZXNGb3JUeXBlKSB7XG5cdFx0XHRcdGlmICh2YWx1ZXNGb3JUeXBlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHR2YXIgbWluVmFsID0gaGVscGVycyQxLm1pbih2YWx1ZXNGb3JUeXBlKTtcblx0XHRcdFx0XHR2YXIgbWF4VmFsID0gaGVscGVycyQxLm1heCh2YWx1ZXNGb3JUeXBlKTtcblx0XHRcdFx0XHRtZS5taW4gPSBtZS5taW4gPT09IG51bGwgPyBtaW5WYWwgOiBNYXRoLm1pbihtZS5taW4sIG1pblZhbCk7XG5cdFx0XHRcdFx0bWUubWF4ID0gbWUubWF4ID09PSBudWxsID8gbWF4VmFsIDogTWF0aC5tYXgobWUubWF4LCBtYXhWYWwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRoZWxwZXJzJDEuZWFjaChkYXRhc2V0cywgZnVuY3Rpb24oZGF0YXNldCwgZGF0YXNldEluZGV4KSB7XG5cdFx0XHRcdHZhciBtZXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KTtcblx0XHRcdFx0aWYgKGNoYXJ0LmlzRGF0YXNldFZpc2libGUoZGF0YXNldEluZGV4KSAmJiBJRE1hdGNoZXMobWV0YSkpIHtcblx0XHRcdFx0XHRoZWxwZXJzJDEuZWFjaChkYXRhc2V0LmRhdGEsIGZ1bmN0aW9uKHJhd1ZhbHVlLCBpbmRleCkge1xuXHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gK21lLmdldFJpZ2h0VmFsdWUocmF3VmFsdWUpO1xuXHRcdFx0XHRcdFx0Ly8gaW52YWxpZCwgaGlkZGVuIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgYXJlIGlnbm9yZWRcblx0XHRcdFx0XHRcdGlmIChpc05hTih2YWx1ZSkgfHwgbWV0YS5kYXRhW2luZGV4XS5oaWRkZW4gfHwgdmFsdWUgPCAwKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKG1lLm1pbiA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0XHRtZS5taW4gPSB2YWx1ZTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAodmFsdWUgPCBtZS5taW4pIHtcblx0XHRcdFx0XHRcdFx0bWUubWluID0gdmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChtZS5tYXggPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0bWUubWF4ID0gdmFsdWU7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHZhbHVlID4gbWUubWF4KSB7XG5cdFx0XHRcdFx0XHRcdG1lLm1heCA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAodmFsdWUgIT09IDAgJiYgKG1lLm1pbk5vdFplcm8gPT09IG51bGwgfHwgdmFsdWUgPCBtZS5taW5Ob3RaZXJvKSkge1xuXHRcdFx0XHRcdFx0XHRtZS5taW5Ob3RaZXJvID0gdmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8vIENvbW1vbiBiYXNlIGltcGxlbWVudGF0aW9uIHRvIGhhbmRsZSB0aWNrcy5taW4sIHRpY2tzLm1heFxuXHRcdHRoaXMuaGFuZGxlVGlja1JhbmdlT3B0aW9ucygpO1xuXHR9LFxuXG5cdGhhbmRsZVRpY2tSYW5nZU9wdGlvbnM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIHRpY2tPcHRzID0gbWUub3B0aW9ucy50aWNrcztcblx0XHR2YXIgREVGQVVMVF9NSU4gPSAxO1xuXHRcdHZhciBERUZBVUxUX01BWCA9IDEwO1xuXG5cdFx0bWUubWluID0gbm9uTmVnYXRpdmVPckRlZmF1bHQodGlja09wdHMubWluLCBtZS5taW4pO1xuXHRcdG1lLm1heCA9IG5vbk5lZ2F0aXZlT3JEZWZhdWx0KHRpY2tPcHRzLm1heCwgbWUubWF4KTtcblxuXHRcdGlmIChtZS5taW4gPT09IG1lLm1heCkge1xuXHRcdFx0aWYgKG1lLm1pbiAhPT0gMCAmJiBtZS5taW4gIT09IG51bGwpIHtcblx0XHRcdFx0bWUubWluID0gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoaGVscGVycyQxLmxvZzEwKG1lLm1pbikpIC0gMSk7XG5cdFx0XHRcdG1lLm1heCA9IE1hdGgucG93KDEwLCBNYXRoLmZsb29yKGhlbHBlcnMkMS5sb2cxMChtZS5tYXgpKSArIDEpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWUubWluID0gREVGQVVMVF9NSU47XG5cdFx0XHRcdG1lLm1heCA9IERFRkFVTFRfTUFYO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAobWUubWluID09PSBudWxsKSB7XG5cdFx0XHRtZS5taW4gPSBNYXRoLnBvdygxMCwgTWF0aC5mbG9vcihoZWxwZXJzJDEubG9nMTAobWUubWF4KSkgLSAxKTtcblx0XHR9XG5cdFx0aWYgKG1lLm1heCA9PT0gbnVsbCkge1xuXHRcdFx0bWUubWF4ID0gbWUubWluICE9PSAwXG5cdFx0XHRcdD8gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoaGVscGVycyQxLmxvZzEwKG1lLm1pbikpICsgMSlcblx0XHRcdFx0OiBERUZBVUxUX01BWDtcblx0XHR9XG5cdFx0aWYgKG1lLm1pbk5vdFplcm8gPT09IG51bGwpIHtcblx0XHRcdGlmIChtZS5taW4gPiAwKSB7XG5cdFx0XHRcdG1lLm1pbk5vdFplcm8gPSBtZS5taW47XG5cdFx0XHR9IGVsc2UgaWYgKG1lLm1heCA8IDEpIHtcblx0XHRcdFx0bWUubWluTm90WmVybyA9IE1hdGgucG93KDEwLCBNYXRoLmZsb29yKGhlbHBlcnMkMS5sb2cxMChtZS5tYXgpKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtZS5taW5Ob3RaZXJvID0gREVGQVVMVF9NSU47XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdGJ1aWxkVGlja3M6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIHRpY2tPcHRzID0gbWUub3B0aW9ucy50aWNrcztcblx0XHR2YXIgcmV2ZXJzZSA9ICFtZS5pc0hvcml6b250YWwoKTtcblxuXHRcdHZhciBnZW5lcmF0aW9uT3B0aW9ucyA9IHtcblx0XHRcdG1pbjogbm9uTmVnYXRpdmVPckRlZmF1bHQodGlja09wdHMubWluKSxcblx0XHRcdG1heDogbm9uTmVnYXRpdmVPckRlZmF1bHQodGlja09wdHMubWF4KVxuXHRcdH07XG5cdFx0dmFyIHRpY2tzID0gbWUudGlja3MgPSBnZW5lcmF0ZVRpY2tzJDEoZ2VuZXJhdGlvbk9wdGlvbnMsIG1lKTtcblxuXHRcdC8vIEF0IHRoaXMgcG9pbnQsIHdlIG5lZWQgdG8gdXBkYXRlIG91ciBtYXggYW5kIG1pbiBnaXZlbiB0aGUgdGljayB2YWx1ZXMgc2luY2Ugd2UgaGF2ZSBleHBhbmRlZCB0aGVcblx0XHQvLyByYW5nZSBvZiB0aGUgc2NhbGVcblx0XHRtZS5tYXggPSBoZWxwZXJzJDEubWF4KHRpY2tzKTtcblx0XHRtZS5taW4gPSBoZWxwZXJzJDEubWluKHRpY2tzKTtcblxuXHRcdGlmICh0aWNrT3B0cy5yZXZlcnNlKSB7XG5cdFx0XHRyZXZlcnNlID0gIXJldmVyc2U7XG5cdFx0XHRtZS5zdGFydCA9IG1lLm1heDtcblx0XHRcdG1lLmVuZCA9IG1lLm1pbjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWUuc3RhcnQgPSBtZS5taW47XG5cdFx0XHRtZS5lbmQgPSBtZS5tYXg7XG5cdFx0fVxuXHRcdGlmIChyZXZlcnNlKSB7XG5cdFx0XHR0aWNrcy5yZXZlcnNlKCk7XG5cdFx0fVxuXHR9LFxuXG5cdGNvbnZlcnRUaWNrc1RvTGFiZWxzOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnRpY2tWYWx1ZXMgPSB0aGlzLnRpY2tzLnNsaWNlKCk7XG5cblx0XHRjb3JlX3NjYWxlLnByb3RvdHlwZS5jb252ZXJ0VGlja3NUb0xhYmVscy5jYWxsKHRoaXMpO1xuXHR9LFxuXG5cdC8vIEdldCB0aGUgY29ycmVjdCB0b29sdGlwIGxhYmVsXG5cdGdldExhYmVsRm9ySW5kZXg6IGZ1bmN0aW9uKGluZGV4LCBkYXRhc2V0SW5kZXgpIHtcblx0XHRyZXR1cm4gK3RoaXMuZ2V0UmlnaHRWYWx1ZSh0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHNbZGF0YXNldEluZGV4XS5kYXRhW2luZGV4XSk7XG5cdH0sXG5cblx0Z2V0UGl4ZWxGb3JUaWNrOiBmdW5jdGlvbihpbmRleCkge1xuXHRcdHJldHVybiB0aGlzLmdldFBpeGVsRm9yVmFsdWUodGhpcy50aWNrVmFsdWVzW2luZGV4XSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCB0aWNrLlxuXHQgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgbWluaW11bSBub3QgemVybyB2YWx1ZS5cblx0ICogQHJldHVybiB7bnVtYmVyfSBUaGUgZmlyc3QgdGljayB2YWx1ZS5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9nZXRGaXJzdFRpY2tWYWx1ZTogZnVuY3Rpb24odmFsdWUpIHtcblx0XHR2YXIgZXhwID0gTWF0aC5mbG9vcihoZWxwZXJzJDEubG9nMTAodmFsdWUpKTtcblx0XHR2YXIgc2lnbmlmaWNhbmQgPSBNYXRoLmZsb29yKHZhbHVlIC8gTWF0aC5wb3coMTAsIGV4cCkpO1xuXG5cdFx0cmV0dXJuIHNpZ25pZmljYW5kICogTWF0aC5wb3coMTAsIGV4cCk7XG5cdH0sXG5cblx0Z2V0UGl4ZWxGb3JWYWx1ZTogZnVuY3Rpb24odmFsdWUpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciB0aWNrT3B0cyA9IG1lLm9wdGlvbnMudGlja3M7XG5cdFx0dmFyIHJldmVyc2UgPSB0aWNrT3B0cy5yZXZlcnNlO1xuXHRcdHZhciBsb2cxMCA9IGhlbHBlcnMkMS5sb2cxMDtcblx0XHR2YXIgZmlyc3RUaWNrVmFsdWUgPSBtZS5fZ2V0Rmlyc3RUaWNrVmFsdWUobWUubWluTm90WmVybyk7XG5cdFx0dmFyIG9mZnNldCA9IDA7XG5cdFx0dmFyIGlubmVyRGltZW5zaW9uLCBwaXhlbCwgc3RhcnQsIGVuZCwgc2lnbjtcblxuXHRcdHZhbHVlID0gK21lLmdldFJpZ2h0VmFsdWUodmFsdWUpO1xuXHRcdGlmIChyZXZlcnNlKSB7XG5cdFx0XHRzdGFydCA9IG1lLmVuZDtcblx0XHRcdGVuZCA9IG1lLnN0YXJ0O1xuXHRcdFx0c2lnbiA9IC0xO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdGFydCA9IG1lLnN0YXJ0O1xuXHRcdFx0ZW5kID0gbWUuZW5kO1xuXHRcdFx0c2lnbiA9IDE7XG5cdFx0fVxuXHRcdGlmIChtZS5pc0hvcml6b250YWwoKSkge1xuXHRcdFx0aW5uZXJEaW1lbnNpb24gPSBtZS53aWR0aDtcblx0XHRcdHBpeGVsID0gcmV2ZXJzZSA/IG1lLnJpZ2h0IDogbWUubGVmdDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aW5uZXJEaW1lbnNpb24gPSBtZS5oZWlnaHQ7XG5cdFx0XHRzaWduICo9IC0xOyAvLyBpbnZlcnQsIHNpbmNlIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgY2FudmFzIGlzIGF0IHBpeGVsICgwLCAwKVxuXHRcdFx0cGl4ZWwgPSByZXZlcnNlID8gbWUudG9wIDogbWUuYm90dG9tO1xuXHRcdH1cblx0XHRpZiAodmFsdWUgIT09IHN0YXJ0KSB7XG5cdFx0XHRpZiAoc3RhcnQgPT09IDApIHsgLy8gaW5jbHVkZSB6ZXJvIHRpY2tcblx0XHRcdFx0b2Zmc2V0ID0gdmFsdWVPckRlZmF1bHQkYSh0aWNrT3B0cy5mb250U2l6ZSwgY29yZV9kZWZhdWx0cy5nbG9iYWwuZGVmYXVsdEZvbnRTaXplKTtcblx0XHRcdFx0aW5uZXJEaW1lbnNpb24gLT0gb2Zmc2V0O1xuXHRcdFx0XHRzdGFydCA9IGZpcnN0VGlja1ZhbHVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHZhbHVlICE9PSAwKSB7XG5cdFx0XHRcdG9mZnNldCArPSBpbm5lckRpbWVuc2lvbiAvIChsb2cxMChlbmQpIC0gbG9nMTAoc3RhcnQpKSAqIChsb2cxMCh2YWx1ZSkgLSBsb2cxMChzdGFydCkpO1xuXHRcdFx0fVxuXHRcdFx0cGl4ZWwgKz0gc2lnbiAqIG9mZnNldDtcblx0XHR9XG5cdFx0cmV0dXJuIHBpeGVsO1xuXHR9LFxuXG5cdGdldFZhbHVlRm9yUGl4ZWw6IGZ1bmN0aW9uKHBpeGVsKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgdGlja09wdHMgPSBtZS5vcHRpb25zLnRpY2tzO1xuXHRcdHZhciByZXZlcnNlID0gdGlja09wdHMucmV2ZXJzZTtcblx0XHR2YXIgbG9nMTAgPSBoZWxwZXJzJDEubG9nMTA7XG5cdFx0dmFyIGZpcnN0VGlja1ZhbHVlID0gbWUuX2dldEZpcnN0VGlja1ZhbHVlKG1lLm1pbk5vdFplcm8pO1xuXHRcdHZhciBpbm5lckRpbWVuc2lvbiwgc3RhcnQsIGVuZCwgdmFsdWU7XG5cblx0XHRpZiAocmV2ZXJzZSkge1xuXHRcdFx0c3RhcnQgPSBtZS5lbmQ7XG5cdFx0XHRlbmQgPSBtZS5zdGFydDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3RhcnQgPSBtZS5zdGFydDtcblx0XHRcdGVuZCA9IG1lLmVuZDtcblx0XHR9XG5cdFx0aWYgKG1lLmlzSG9yaXpvbnRhbCgpKSB7XG5cdFx0XHRpbm5lckRpbWVuc2lvbiA9IG1lLndpZHRoO1xuXHRcdFx0dmFsdWUgPSByZXZlcnNlID8gbWUucmlnaHQgLSBwaXhlbCA6IHBpeGVsIC0gbWUubGVmdDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aW5uZXJEaW1lbnNpb24gPSBtZS5oZWlnaHQ7XG5cdFx0XHR2YWx1ZSA9IHJldmVyc2UgPyBwaXhlbCAtIG1lLnRvcCA6IG1lLmJvdHRvbSAtIHBpeGVsO1xuXHRcdH1cblx0XHRpZiAodmFsdWUgIT09IHN0YXJ0KSB7XG5cdFx0XHRpZiAoc3RhcnQgPT09IDApIHsgLy8gaW5jbHVkZSB6ZXJvIHRpY2tcblx0XHRcdFx0dmFyIG9mZnNldCA9IHZhbHVlT3JEZWZhdWx0JGEodGlja09wdHMuZm9udFNpemUsIGNvcmVfZGVmYXVsdHMuZ2xvYmFsLmRlZmF1bHRGb250U2l6ZSk7XG5cdFx0XHRcdHZhbHVlIC09IG9mZnNldDtcblx0XHRcdFx0aW5uZXJEaW1lbnNpb24gLT0gb2Zmc2V0O1xuXHRcdFx0XHRzdGFydCA9IGZpcnN0VGlja1ZhbHVlO1xuXHRcdFx0fVxuXHRcdFx0dmFsdWUgKj0gbG9nMTAoZW5kKSAtIGxvZzEwKHN0YXJ0KTtcblx0XHRcdHZhbHVlIC89IGlubmVyRGltZW5zaW9uO1xuXHRcdFx0dmFsdWUgPSBNYXRoLnBvdygxMCwgbG9nMTAoc3RhcnQpICsgdmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cbn0pO1xuXG4vLyBJTlRFUk5BTDogc3RhdGljIGRlZmF1bHQgb3B0aW9ucywgcmVnaXN0ZXJlZCBpbiBzcmMvaW5kZXguanNcbnZhciBfZGVmYXVsdHMkMiA9IGRlZmF1bHRDb25maWckMjtcbnNjYWxlX2xvZ2FyaXRobWljLl9kZWZhdWx0cyA9IF9kZWZhdWx0cyQyO1xuXG52YXIgdmFsdWVPckRlZmF1bHQkYiA9IGhlbHBlcnMkMS52YWx1ZU9yRGVmYXVsdDtcbnZhciB2YWx1ZUF0SW5kZXhPckRlZmF1bHQkMSA9IGhlbHBlcnMkMS52YWx1ZUF0SW5kZXhPckRlZmF1bHQ7XG52YXIgcmVzb2x2ZSQ3ID0gaGVscGVycyQxLm9wdGlvbnMucmVzb2x2ZTtcblxudmFyIGRlZmF1bHRDb25maWckMyA9IHtcblx0ZGlzcGxheTogdHJ1ZSxcblxuXHQvLyBCb29sZWFuIC0gV2hldGhlciB0byBhbmltYXRlIHNjYWxpbmcgdGhlIGNoYXJ0IGZyb20gdGhlIGNlbnRyZVxuXHRhbmltYXRlOiB0cnVlLFxuXHRwb3NpdGlvbjogJ2NoYXJ0QXJlYScsXG5cblx0YW5nbGVMaW5lczoge1xuXHRcdGRpc3BsYXk6IHRydWUsXG5cdFx0Y29sb3I6ICdyZ2JhKDAsIDAsIDAsIDAuMSknLFxuXHRcdGxpbmVXaWR0aDogMSxcblx0XHRib3JkZXJEYXNoOiBbXSxcblx0XHRib3JkZXJEYXNoT2Zmc2V0OiAwLjBcblx0fSxcblxuXHRncmlkTGluZXM6IHtcblx0XHRjaXJjdWxhcjogZmFsc2Vcblx0fSxcblxuXHQvLyBsYWJlbCBzZXR0aW5nc1xuXHR0aWNrczoge1xuXHRcdC8vIEJvb2xlYW4gLSBTaG93IGEgYmFja2Ryb3AgdG8gdGhlIHNjYWxlIGxhYmVsXG5cdFx0c2hvd0xhYmVsQmFja2Ryb3A6IHRydWUsXG5cblx0XHQvLyBTdHJpbmcgLSBUaGUgY29sb3VyIG9mIHRoZSBsYWJlbCBiYWNrZHJvcFxuXHRcdGJhY2tkcm9wQ29sb3I6ICdyZ2JhKDI1NSwyNTUsMjU1LDAuNzUpJyxcblxuXHRcdC8vIE51bWJlciAtIFRoZSBiYWNrZHJvcCBwYWRkaW5nIGFib3ZlICYgYmVsb3cgdGhlIGxhYmVsIGluIHBpeGVsc1xuXHRcdGJhY2tkcm9wUGFkZGluZ1k6IDIsXG5cblx0XHQvLyBOdW1iZXIgLSBUaGUgYmFja2Ryb3AgcGFkZGluZyB0byB0aGUgc2lkZSBvZiB0aGUgbGFiZWwgaW4gcGl4ZWxzXG5cdFx0YmFja2Ryb3BQYWRkaW5nWDogMixcblxuXHRcdGNhbGxiYWNrOiBjb3JlX3RpY2tzLmZvcm1hdHRlcnMubGluZWFyXG5cdH0sXG5cblx0cG9pbnRMYWJlbHM6IHtcblx0XHQvLyBCb29sZWFuIC0gaWYgdHJ1ZSwgc2hvdyBwb2ludCBsYWJlbHNcblx0XHRkaXNwbGF5OiB0cnVlLFxuXG5cdFx0Ly8gTnVtYmVyIC0gUG9pbnQgbGFiZWwgZm9udCBzaXplIGluIHBpeGVsc1xuXHRcdGZvbnRTaXplOiAxMCxcblxuXHRcdC8vIEZ1bmN0aW9uIC0gVXNlZCB0byBjb252ZXJ0IHBvaW50IGxhYmVsc1xuXHRcdGNhbGxiYWNrOiBmdW5jdGlvbihsYWJlbCkge1xuXHRcdFx0cmV0dXJuIGxhYmVsO1xuXHRcdH1cblx0fVxufTtcblxuZnVuY3Rpb24gZ2V0VmFsdWVDb3VudChzY2FsZSkge1xuXHR2YXIgb3B0cyA9IHNjYWxlLm9wdGlvbnM7XG5cdHJldHVybiBvcHRzLmFuZ2xlTGluZXMuZGlzcGxheSB8fCBvcHRzLnBvaW50TGFiZWxzLmRpc3BsYXkgPyBzY2FsZS5jaGFydC5kYXRhLmxhYmVscy5sZW5ndGggOiAwO1xufVxuXG5mdW5jdGlvbiBnZXRUaWNrQmFja2Ryb3BIZWlnaHQob3B0cykge1xuXHR2YXIgdGlja09wdHMgPSBvcHRzLnRpY2tzO1xuXG5cdGlmICh0aWNrT3B0cy5kaXNwbGF5ICYmIG9wdHMuZGlzcGxheSkge1xuXHRcdHJldHVybiB2YWx1ZU9yRGVmYXVsdCRiKHRpY2tPcHRzLmZvbnRTaXplLCBjb3JlX2RlZmF1bHRzLmdsb2JhbC5kZWZhdWx0Rm9udFNpemUpICsgdGlja09wdHMuYmFja2Ryb3BQYWRkaW5nWSAqIDI7XG5cdH1cblx0cmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIG1lYXN1cmVMYWJlbFNpemUoY3R4LCBsaW5lSGVpZ2h0LCBsYWJlbCkge1xuXHRpZiAoaGVscGVycyQxLmlzQXJyYXkobGFiZWwpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHc6IGhlbHBlcnMkMS5sb25nZXN0VGV4dChjdHgsIGN0eC5mb250LCBsYWJlbCksXG5cdFx0XHRoOiBsYWJlbC5sZW5ndGggKiBsaW5lSGVpZ2h0XG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0dzogY3R4Lm1lYXN1cmVUZXh0KGxhYmVsKS53aWR0aCxcblx0XHRoOiBsaW5lSGVpZ2h0XG5cdH07XG59XG5cbmZ1bmN0aW9uIGRldGVybWluZUxpbWl0cyhhbmdsZSwgcG9zLCBzaXplLCBtaW4sIG1heCkge1xuXHRpZiAoYW5nbGUgPT09IG1pbiB8fCBhbmdsZSA9PT0gbWF4KSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHN0YXJ0OiBwb3MgLSAoc2l6ZSAvIDIpLFxuXHRcdFx0ZW5kOiBwb3MgKyAoc2l6ZSAvIDIpXG5cdFx0fTtcblx0fSBlbHNlIGlmIChhbmdsZSA8IG1pbiB8fCBhbmdsZSA+IG1heCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzdGFydDogcG9zIC0gc2l6ZSxcblx0XHRcdGVuZDogcG9zXG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0c3RhcnQ6IHBvcyxcblx0XHRlbmQ6IHBvcyArIHNpemVcblx0fTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZml0IGEgcmFkaWFsIGxpbmVhciBzY2FsZSB3aXRoIHBvaW50IGxhYmVsc1xuICovXG5mdW5jdGlvbiBmaXRXaXRoUG9pbnRMYWJlbHMoc2NhbGUpIHtcblxuXHQvLyBSaWdodCwgdGhpcyBpcyByZWFsbHkgY29uZnVzaW5nIGFuZCB0aGVyZSBpcyBhIGxvdCBvZiBtYXRocyBnb2luZyBvbiBoZXJlXG5cdC8vIFRoZSBnaXN0IG9mIHRoZSBwcm9ibGVtIGlzIGhlcmU6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL25ubmljay82OTZjYzljNTVmNGIwYmViOGZlOVxuXHQvL1xuXHQvLyBSZWFjdGlvbjogaHR0cHM6Ly9kbC5kcm9wYm94dXNlcmNvbnRlbnQuY29tL3UvMzQ2MDEzNjMvdG9vbXVjaHNjaWVuY2UuZ2lmXG5cdC8vXG5cdC8vIFNvbHV0aW9uOlxuXHQvL1xuXHQvLyBXZSBhc3N1bWUgdGhlIHJhZGl1cyBvZiB0aGUgcG9seWdvbiBpcyBoYWxmIHRoZSBzaXplIG9mIHRoZSBjYW52YXMgYXQgZmlyc3Rcblx0Ly8gYXQgZWFjaCBpbmRleCB3ZSBjaGVjayBpZiB0aGUgdGV4dCBvdmVybGFwcy5cblx0Ly9cblx0Ly8gV2hlcmUgaXQgZG9lcywgd2Ugc3RvcmUgdGhhdCBhbmdsZSBhbmQgdGhhdCBpbmRleC5cblx0Ly9cblx0Ly8gQWZ0ZXIgZmluZGluZyB0aGUgbGFyZ2VzdCBpbmRleCBhbmQgYW5nbGUgd2UgY2FsY3VsYXRlIGhvdyBtdWNoIHdlIG5lZWQgdG8gcmVtb3ZlXG5cdC8vIGZyb20gdGhlIHNoYXBlIHJhZGl1cyB0byBtb3ZlIHRoZSBwb2ludCBpbndhcmRzIGJ5IHRoYXQgeC5cblx0Ly9cblx0Ly8gV2UgYXZlcmFnZSB0aGUgbGVmdCBhbmQgcmlnaHQgZGlzdGFuY2VzIHRvIGdldCB0aGUgbWF4aW11bSBzaGFwZSByYWRpdXMgdGhhdCBjYW4gZml0IGluIHRoZSBib3hcblx0Ly8gYWxvbmcgd2l0aCBsYWJlbHMuXG5cdC8vXG5cdC8vIE9uY2Ugd2UgaGF2ZSB0aGF0LCB3ZSBjYW4gZmluZCB0aGUgY2VudHJlIHBvaW50IGZvciB0aGUgY2hhcnQsIGJ5IHRha2luZyB0aGUgeCB0ZXh0IHByb3RydXNpb25cblx0Ly8gb24gZWFjaCBzaWRlLCByZW1vdmluZyB0aGF0IGZyb20gdGhlIHNpemUsIGhhbHZpbmcgaXQgYW5kIGFkZGluZyB0aGUgbGVmdCB4IHByb3RydXNpb24gd2lkdGguXG5cdC8vXG5cdC8vIFRoaXMgd2lsbCBtZWFuIHdlIGhhdmUgYSBzaGFwZSBmaXR0ZWQgdG8gdGhlIGNhbnZhcywgYXMgbGFyZ2UgYXMgaXQgY2FuIGJlIHdpdGggdGhlIGxhYmVsc1xuXHQvLyBhbmQgcG9zaXRpb24gaXQgaW4gdGhlIG1vc3Qgc3BhY2UgZWZmaWNpZW50IG1hbm5lclxuXHQvL1xuXHQvLyBodHRwczovL2RsLmRyb3Bib3h1c2VyY29udGVudC5jb20vdS8zNDYwMTM2My95ZWFoc2NpZW5jZS5naWZcblxuXHR2YXIgcGxGb250ID0gaGVscGVycyQxLm9wdGlvbnMuX3BhcnNlRm9udChzY2FsZS5vcHRpb25zLnBvaW50TGFiZWxzKTtcblxuXHQvLyBHZXQgbWF4aW11bSByYWRpdXMgb2YgdGhlIHBvbHlnb24uIEVpdGhlciBoYWxmIHRoZSBoZWlnaHQgKG1pbnVzIHRoZSB0ZXh0IHdpZHRoKSBvciBoYWxmIHRoZSB3aWR0aC5cblx0Ly8gVXNlIHRoaXMgdG8gY2FsY3VsYXRlIHRoZSBvZmZzZXQgKyBjaGFuZ2UuIC0gTWFrZSBzdXJlIEwvUiBwcm90cnVzaW9uIGlzIGF0IGxlYXN0IDAgdG8gc3RvcCBpc3N1ZXMgd2l0aCBjZW50cmUgcG9pbnRzXG5cdHZhciBmdXJ0aGVzdExpbWl0cyA9IHtcblx0XHRsOiAwLFxuXHRcdHI6IHNjYWxlLndpZHRoLFxuXHRcdHQ6IDAsXG5cdFx0Yjogc2NhbGUuaGVpZ2h0IC0gc2NhbGUucGFkZGluZ1RvcFxuXHR9O1xuXHR2YXIgZnVydGhlc3RBbmdsZXMgPSB7fTtcblx0dmFyIGksIHRleHRTaXplLCBwb2ludFBvc2l0aW9uO1xuXG5cdHNjYWxlLmN0eC5mb250ID0gcGxGb250LnN0cmluZztcblx0c2NhbGUuX3BvaW50TGFiZWxTaXplcyA9IFtdO1xuXG5cdHZhciB2YWx1ZUNvdW50ID0gZ2V0VmFsdWVDb3VudChzY2FsZSk7XG5cdGZvciAoaSA9IDA7IGkgPCB2YWx1ZUNvdW50OyBpKyspIHtcblx0XHRwb2ludFBvc2l0aW9uID0gc2NhbGUuZ2V0UG9pbnRQb3NpdGlvbihpLCBzY2FsZS5kcmF3aW5nQXJlYSArIDUpO1xuXHRcdHRleHRTaXplID0gbWVhc3VyZUxhYmVsU2l6ZShzY2FsZS5jdHgsIHBsRm9udC5saW5lSGVpZ2h0LCBzY2FsZS5wb2ludExhYmVsc1tpXSB8fCAnJyk7XG5cdFx0c2NhbGUuX3BvaW50TGFiZWxTaXplc1tpXSA9IHRleHRTaXplO1xuXG5cdFx0Ly8gQWRkIHF1YXJ0ZXIgY2lyY2xlIHRvIG1ha2UgZGVncmVlIDAgbWVhbiB0b3Agb2YgY2lyY2xlXG5cdFx0dmFyIGFuZ2xlUmFkaWFucyA9IHNjYWxlLmdldEluZGV4QW5nbGUoaSk7XG5cdFx0dmFyIGFuZ2xlID0gaGVscGVycyQxLnRvRGVncmVlcyhhbmdsZVJhZGlhbnMpICUgMzYwO1xuXHRcdHZhciBoTGltaXRzID0gZGV0ZXJtaW5lTGltaXRzKGFuZ2xlLCBwb2ludFBvc2l0aW9uLngsIHRleHRTaXplLncsIDAsIDE4MCk7XG5cdFx0dmFyIHZMaW1pdHMgPSBkZXRlcm1pbmVMaW1pdHMoYW5nbGUsIHBvaW50UG9zaXRpb24ueSwgdGV4dFNpemUuaCwgOTAsIDI3MCk7XG5cblx0XHRpZiAoaExpbWl0cy5zdGFydCA8IGZ1cnRoZXN0TGltaXRzLmwpIHtcblx0XHRcdGZ1cnRoZXN0TGltaXRzLmwgPSBoTGltaXRzLnN0YXJ0O1xuXHRcdFx0ZnVydGhlc3RBbmdsZXMubCA9IGFuZ2xlUmFkaWFucztcblx0XHR9XG5cblx0XHRpZiAoaExpbWl0cy5lbmQgPiBmdXJ0aGVzdExpbWl0cy5yKSB7XG5cdFx0XHRmdXJ0aGVzdExpbWl0cy5yID0gaExpbWl0cy5lbmQ7XG5cdFx0XHRmdXJ0aGVzdEFuZ2xlcy5yID0gYW5nbGVSYWRpYW5zO1xuXHRcdH1cblxuXHRcdGlmICh2TGltaXRzLnN0YXJ0IDwgZnVydGhlc3RMaW1pdHMudCkge1xuXHRcdFx0ZnVydGhlc3RMaW1pdHMudCA9IHZMaW1pdHMuc3RhcnQ7XG5cdFx0XHRmdXJ0aGVzdEFuZ2xlcy50ID0gYW5nbGVSYWRpYW5zO1xuXHRcdH1cblxuXHRcdGlmICh2TGltaXRzLmVuZCA+IGZ1cnRoZXN0TGltaXRzLmIpIHtcblx0XHRcdGZ1cnRoZXN0TGltaXRzLmIgPSB2TGltaXRzLmVuZDtcblx0XHRcdGZ1cnRoZXN0QW5nbGVzLmIgPSBhbmdsZVJhZGlhbnM7XG5cdFx0fVxuXHR9XG5cblx0c2NhbGUuc2V0UmVkdWN0aW9ucyhzY2FsZS5kcmF3aW5nQXJlYSwgZnVydGhlc3RMaW1pdHMsIGZ1cnRoZXN0QW5nbGVzKTtcbn1cblxuZnVuY3Rpb24gZ2V0VGV4dEFsaWduRm9yQW5nbGUoYW5nbGUpIHtcblx0aWYgKGFuZ2xlID09PSAwIHx8IGFuZ2xlID09PSAxODApIHtcblx0XHRyZXR1cm4gJ2NlbnRlcic7XG5cdH0gZWxzZSBpZiAoYW5nbGUgPCAxODApIHtcblx0XHRyZXR1cm4gJ2xlZnQnO1xuXHR9XG5cblx0cmV0dXJuICdyaWdodCc7XG59XG5cbmZ1bmN0aW9uIGZpbGxUZXh0KGN0eCwgdGV4dCwgcG9zaXRpb24sIGxpbmVIZWlnaHQpIHtcblx0dmFyIHkgPSBwb3NpdGlvbi55ICsgbGluZUhlaWdodCAvIDI7XG5cdHZhciBpLCBpbGVuO1xuXG5cdGlmIChoZWxwZXJzJDEuaXNBcnJheSh0ZXh0KSkge1xuXHRcdGZvciAoaSA9IDAsIGlsZW4gPSB0ZXh0Lmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xuXHRcdFx0Y3R4LmZpbGxUZXh0KHRleHRbaV0sIHBvc2l0aW9uLngsIHkpO1xuXHRcdFx0eSArPSBsaW5lSGVpZ2h0O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjdHguZmlsbFRleHQodGV4dCwgcG9zaXRpb24ueCwgeSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gYWRqdXN0UG9pbnRQb3NpdGlvbkZvckxhYmVsSGVpZ2h0KGFuZ2xlLCB0ZXh0U2l6ZSwgcG9zaXRpb24pIHtcblx0aWYgKGFuZ2xlID09PSA5MCB8fCBhbmdsZSA9PT0gMjcwKSB7XG5cdFx0cG9zaXRpb24ueSAtPSAodGV4dFNpemUuaCAvIDIpO1xuXHR9IGVsc2UgaWYgKGFuZ2xlID4gMjcwIHx8IGFuZ2xlIDwgOTApIHtcblx0XHRwb3NpdGlvbi55IC09IHRleHRTaXplLmg7XG5cdH1cbn1cblxuZnVuY3Rpb24gZHJhd1BvaW50TGFiZWxzKHNjYWxlKSB7XG5cdHZhciBjdHggPSBzY2FsZS5jdHg7XG5cdHZhciBvcHRzID0gc2NhbGUub3B0aW9ucztcblx0dmFyIGFuZ2xlTGluZU9wdHMgPSBvcHRzLmFuZ2xlTGluZXM7XG5cdHZhciBncmlkTGluZU9wdHMgPSBvcHRzLmdyaWRMaW5lcztcblx0dmFyIHBvaW50TGFiZWxPcHRzID0gb3B0cy5wb2ludExhYmVscztcblx0dmFyIGxpbmVXaWR0aCA9IHZhbHVlT3JEZWZhdWx0JGIoYW5nbGVMaW5lT3B0cy5saW5lV2lkdGgsIGdyaWRMaW5lT3B0cy5saW5lV2lkdGgpO1xuXHR2YXIgbGluZUNvbG9yID0gdmFsdWVPckRlZmF1bHQkYihhbmdsZUxpbmVPcHRzLmNvbG9yLCBncmlkTGluZU9wdHMuY29sb3IpO1xuXHR2YXIgdGlja0JhY2tkcm9wSGVpZ2h0ID0gZ2V0VGlja0JhY2tkcm9wSGVpZ2h0KG9wdHMpO1xuXG5cdGN0eC5zYXZlKCk7XG5cdGN0eC5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG5cdGN0eC5zdHJva2VTdHlsZSA9IGxpbmVDb2xvcjtcblx0aWYgKGN0eC5zZXRMaW5lRGFzaCkge1xuXHRcdGN0eC5zZXRMaW5lRGFzaChyZXNvbHZlJDcoW2FuZ2xlTGluZU9wdHMuYm9yZGVyRGFzaCwgZ3JpZExpbmVPcHRzLmJvcmRlckRhc2gsIFtdXSkpO1xuXHRcdGN0eC5saW5lRGFzaE9mZnNldCA9IHJlc29sdmUkNyhbYW5nbGVMaW5lT3B0cy5ib3JkZXJEYXNoT2Zmc2V0LCBncmlkTGluZU9wdHMuYm9yZGVyRGFzaE9mZnNldCwgMC4wXSk7XG5cdH1cblxuXHR2YXIgb3V0ZXJEaXN0YW5jZSA9IHNjYWxlLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKG9wdHMudGlja3MucmV2ZXJzZSA/IHNjYWxlLm1pbiA6IHNjYWxlLm1heCk7XG5cblx0Ly8gUG9pbnQgTGFiZWwgRm9udFxuXHR2YXIgcGxGb250ID0gaGVscGVycyQxLm9wdGlvbnMuX3BhcnNlRm9udChwb2ludExhYmVsT3B0cyk7XG5cblx0Y3R4LmZvbnQgPSBwbEZvbnQuc3RyaW5nO1xuXHRjdHgudGV4dEJhc2VsaW5lID0gJ21pZGRsZSc7XG5cblx0Zm9yICh2YXIgaSA9IGdldFZhbHVlQ291bnQoc2NhbGUpIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRpZiAoYW5nbGVMaW5lT3B0cy5kaXNwbGF5ICYmIGxpbmVXaWR0aCAmJiBsaW5lQ29sb3IpIHtcblx0XHRcdHZhciBvdXRlclBvc2l0aW9uID0gc2NhbGUuZ2V0UG9pbnRQb3NpdGlvbihpLCBvdXRlckRpc3RhbmNlKTtcblx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdGN0eC5tb3ZlVG8oc2NhbGUueENlbnRlciwgc2NhbGUueUNlbnRlcik7XG5cdFx0XHRjdHgubGluZVRvKG91dGVyUG9zaXRpb24ueCwgb3V0ZXJQb3NpdGlvbi55KTtcblx0XHRcdGN0eC5zdHJva2UoKTtcblx0XHR9XG5cblx0XHRpZiAocG9pbnRMYWJlbE9wdHMuZGlzcGxheSkge1xuXHRcdFx0Ly8gRXh0cmEgcGl4ZWxzIG91dCBmb3Igc29tZSBsYWJlbCBzcGFjaW5nXG5cdFx0XHR2YXIgZXh0cmEgPSAoaSA9PT0gMCA/IHRpY2tCYWNrZHJvcEhlaWdodCAvIDIgOiAwKTtcblx0XHRcdHZhciBwb2ludExhYmVsUG9zaXRpb24gPSBzY2FsZS5nZXRQb2ludFBvc2l0aW9uKGksIG91dGVyRGlzdGFuY2UgKyBleHRyYSArIDUpO1xuXG5cdFx0XHQvLyBLZWVwIHRoaXMgaW4gbG9vcCBzaW5jZSB3ZSBtYXkgc3VwcG9ydCBhcnJheSBwcm9wZXJ0aWVzIGhlcmVcblx0XHRcdHZhciBwb2ludExhYmVsRm9udENvbG9yID0gdmFsdWVBdEluZGV4T3JEZWZhdWx0JDEocG9pbnRMYWJlbE9wdHMuZm9udENvbG9yLCBpLCBjb3JlX2RlZmF1bHRzLmdsb2JhbC5kZWZhdWx0Rm9udENvbG9yKTtcblx0XHRcdGN0eC5maWxsU3R5bGUgPSBwb2ludExhYmVsRm9udENvbG9yO1xuXG5cdFx0XHR2YXIgYW5nbGVSYWRpYW5zID0gc2NhbGUuZ2V0SW5kZXhBbmdsZShpKTtcblx0XHRcdHZhciBhbmdsZSA9IGhlbHBlcnMkMS50b0RlZ3JlZXMoYW5nbGVSYWRpYW5zKTtcblx0XHRcdGN0eC50ZXh0QWxpZ24gPSBnZXRUZXh0QWxpZ25Gb3JBbmdsZShhbmdsZSk7XG5cdFx0XHRhZGp1c3RQb2ludFBvc2l0aW9uRm9yTGFiZWxIZWlnaHQoYW5nbGUsIHNjYWxlLl9wb2ludExhYmVsU2l6ZXNbaV0sIHBvaW50TGFiZWxQb3NpdGlvbik7XG5cdFx0XHRmaWxsVGV4dChjdHgsIHNjYWxlLnBvaW50TGFiZWxzW2ldIHx8ICcnLCBwb2ludExhYmVsUG9zaXRpb24sIHBsRm9udC5saW5lSGVpZ2h0KTtcblx0XHR9XG5cdH1cblx0Y3R4LnJlc3RvcmUoKTtcbn1cblxuZnVuY3Rpb24gZHJhd1JhZGl1c0xpbmUoc2NhbGUsIGdyaWRMaW5lT3B0cywgcmFkaXVzLCBpbmRleCkge1xuXHR2YXIgY3R4ID0gc2NhbGUuY3R4O1xuXHR2YXIgY2lyY3VsYXIgPSBncmlkTGluZU9wdHMuY2lyY3VsYXI7XG5cdHZhciB2YWx1ZUNvdW50ID0gZ2V0VmFsdWVDb3VudChzY2FsZSk7XG5cdHZhciBsaW5lQ29sb3IgPSB2YWx1ZUF0SW5kZXhPckRlZmF1bHQkMShncmlkTGluZU9wdHMuY29sb3IsIGluZGV4IC0gMSk7XG5cdHZhciBsaW5lV2lkdGggPSB2YWx1ZUF0SW5kZXhPckRlZmF1bHQkMShncmlkTGluZU9wdHMubGluZVdpZHRoLCBpbmRleCAtIDEpO1xuXHR2YXIgcG9pbnRQb3NpdGlvbjtcblxuXHRpZiAoKCFjaXJjdWxhciAmJiAhdmFsdWVDb3VudCkgfHwgIWxpbmVDb2xvciB8fCAhbGluZVdpZHRoKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y3R4LnNhdmUoKTtcblx0Y3R4LnN0cm9rZVN0eWxlID0gbGluZUNvbG9yO1xuXHRjdHgubGluZVdpZHRoID0gbGluZVdpZHRoO1xuXHRpZiAoY3R4LnNldExpbmVEYXNoKSB7XG5cdFx0Y3R4LnNldExpbmVEYXNoKGdyaWRMaW5lT3B0cy5ib3JkZXJEYXNoIHx8IFtdKTtcblx0XHRjdHgubGluZURhc2hPZmZzZXQgPSBncmlkTGluZU9wdHMuYm9yZGVyRGFzaE9mZnNldCB8fCAwLjA7XG5cdH1cblxuXHRjdHguYmVnaW5QYXRoKCk7XG5cdGlmIChjaXJjdWxhcikge1xuXHRcdC8vIERyYXcgY2lyY3VsYXIgYXJjcyBiZXR3ZWVuIHRoZSBwb2ludHNcblx0XHRjdHguYXJjKHNjYWxlLnhDZW50ZXIsIHNjYWxlLnlDZW50ZXIsIHJhZGl1cywgMCwgTWF0aC5QSSAqIDIpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIERyYXcgc3RyYWlnaHQgbGluZXMgY29ubmVjdGluZyBlYWNoIGluZGV4XG5cdFx0cG9pbnRQb3NpdGlvbiA9IHNjYWxlLmdldFBvaW50UG9zaXRpb24oMCwgcmFkaXVzKTtcblx0XHRjdHgubW92ZVRvKHBvaW50UG9zaXRpb24ueCwgcG9pbnRQb3NpdGlvbi55KTtcblxuXHRcdGZvciAodmFyIGkgPSAxOyBpIDwgdmFsdWVDb3VudDsgaSsrKSB7XG5cdFx0XHRwb2ludFBvc2l0aW9uID0gc2NhbGUuZ2V0UG9pbnRQb3NpdGlvbihpLCByYWRpdXMpO1xuXHRcdFx0Y3R4LmxpbmVUbyhwb2ludFBvc2l0aW9uLngsIHBvaW50UG9zaXRpb24ueSk7XG5cdFx0fVxuXHR9XG5cdGN0eC5jbG9zZVBhdGgoKTtcblx0Y3R4LnN0cm9rZSgpO1xuXHRjdHgucmVzdG9yZSgpO1xufVxuXG5mdW5jdGlvbiBudW1iZXJPclplcm8ocGFyYW0pIHtcblx0cmV0dXJuIGhlbHBlcnMkMS5pc051bWJlcihwYXJhbSkgPyBwYXJhbSA6IDA7XG59XG5cbnZhciBzY2FsZV9yYWRpYWxMaW5lYXIgPSBzY2FsZV9saW5lYXJiYXNlLmV4dGVuZCh7XG5cdHNldERpbWVuc2lvbnM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cblx0XHQvLyBTZXQgdGhlIHVuY29uc3RyYWluZWQgZGltZW5zaW9uIGJlZm9yZSBsYWJlbCByb3RhdGlvblxuXHRcdG1lLndpZHRoID0gbWUubWF4V2lkdGg7XG5cdFx0bWUuaGVpZ2h0ID0gbWUubWF4SGVpZ2h0O1xuXHRcdG1lLnBhZGRpbmdUb3AgPSBnZXRUaWNrQmFja2Ryb3BIZWlnaHQobWUub3B0aW9ucykgLyAyO1xuXHRcdG1lLnhDZW50ZXIgPSBNYXRoLmZsb29yKG1lLndpZHRoIC8gMik7XG5cdFx0bWUueUNlbnRlciA9IE1hdGguZmxvb3IoKG1lLmhlaWdodCAtIG1lLnBhZGRpbmdUb3ApIC8gMik7XG5cdFx0bWUuZHJhd2luZ0FyZWEgPSBNYXRoLm1pbihtZS5oZWlnaHQgLSBtZS5wYWRkaW5nVG9wLCBtZS53aWR0aCkgLyAyO1xuXHR9LFxuXG5cdGRldGVybWluZURhdGFMaW1pdHM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIGNoYXJ0ID0gbWUuY2hhcnQ7XG5cdFx0dmFyIG1pbiA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcblx0XHR2YXIgbWF4ID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuXG5cdFx0aGVscGVycyQxLmVhY2goY2hhcnQuZGF0YS5kYXRhc2V0cywgZnVuY3Rpb24oZGF0YXNldCwgZGF0YXNldEluZGV4KSB7XG5cdFx0XHRpZiAoY2hhcnQuaXNEYXRhc2V0VmlzaWJsZShkYXRhc2V0SW5kZXgpKSB7XG5cdFx0XHRcdHZhciBtZXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KTtcblxuXHRcdFx0XHRoZWxwZXJzJDEuZWFjaChkYXRhc2V0LmRhdGEsIGZ1bmN0aW9uKHJhd1ZhbHVlLCBpbmRleCkge1xuXHRcdFx0XHRcdHZhciB2YWx1ZSA9ICttZS5nZXRSaWdodFZhbHVlKHJhd1ZhbHVlKTtcblx0XHRcdFx0XHRpZiAoaXNOYU4odmFsdWUpIHx8IG1ldGEuZGF0YVtpbmRleF0uaGlkZGVuKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0bWluID0gTWF0aC5taW4odmFsdWUsIG1pbik7XG5cdFx0XHRcdFx0bWF4ID0gTWF0aC5tYXgodmFsdWUsIG1heCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0bWUubWluID0gKG1pbiA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZID8gMCA6IG1pbik7XG5cdFx0bWUubWF4ID0gKG1heCA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZID8gMCA6IG1heCk7XG5cblx0XHQvLyBDb21tb24gYmFzZSBpbXBsZW1lbnRhdGlvbiB0byBoYW5kbGUgdGlja3MubWluLCB0aWNrcy5tYXgsIHRpY2tzLmJlZ2luQXRaZXJvXG5cdFx0bWUuaGFuZGxlVGlja1JhbmdlT3B0aW9ucygpO1xuXHR9LFxuXG5cdC8vIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRpY2tzIGJhc2VkIG9uIHRoZSBzY2FsZSBkaW1lbnNpb25cblx0X2NvbXB1dGVUaWNrTGltaXQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBNYXRoLmNlaWwodGhpcy5kcmF3aW5nQXJlYSAvIGdldFRpY2tCYWNrZHJvcEhlaWdodCh0aGlzLm9wdGlvbnMpKTtcblx0fSxcblxuXHRjb252ZXJ0VGlja3NUb0xhYmVsczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblxuXHRcdHNjYWxlX2xpbmVhcmJhc2UucHJvdG90eXBlLmNvbnZlcnRUaWNrc1RvTGFiZWxzLmNhbGwobWUpO1xuXG5cdFx0Ly8gUG9pbnQgbGFiZWxzXG5cdFx0bWUucG9pbnRMYWJlbHMgPSBtZS5jaGFydC5kYXRhLmxhYmVscy5tYXAobWUub3B0aW9ucy5wb2ludExhYmVscy5jYWxsYmFjaywgbWUpO1xuXHR9LFxuXG5cdGdldExhYmVsRm9ySW5kZXg6IGZ1bmN0aW9uKGluZGV4LCBkYXRhc2V0SW5kZXgpIHtcblx0XHRyZXR1cm4gK3RoaXMuZ2V0UmlnaHRWYWx1ZSh0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHNbZGF0YXNldEluZGV4XS5kYXRhW2luZGV4XSk7XG5cdH0sXG5cblx0Zml0OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciBvcHRzID0gbWUub3B0aW9ucztcblxuXHRcdGlmIChvcHRzLmRpc3BsYXkgJiYgb3B0cy5wb2ludExhYmVscy5kaXNwbGF5KSB7XG5cdFx0XHRmaXRXaXRoUG9pbnRMYWJlbHMobWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtZS5zZXRDZW50ZXJQb2ludCgwLCAwLCAwLCAwKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFNldCByYWRpdXMgcmVkdWN0aW9ucyBhbmQgZGV0ZXJtaW5lIG5ldyByYWRpdXMgYW5kIGNlbnRlciBwb2ludFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0c2V0UmVkdWN0aW9uczogZnVuY3Rpb24obGFyZ2VzdFBvc3NpYmxlUmFkaXVzLCBmdXJ0aGVzdExpbWl0cywgZnVydGhlc3RBbmdsZXMpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciByYWRpdXNSZWR1Y3Rpb25MZWZ0ID0gZnVydGhlc3RMaW1pdHMubCAvIE1hdGguc2luKGZ1cnRoZXN0QW5nbGVzLmwpO1xuXHRcdHZhciByYWRpdXNSZWR1Y3Rpb25SaWdodCA9IE1hdGgubWF4KGZ1cnRoZXN0TGltaXRzLnIgLSBtZS53aWR0aCwgMCkgLyBNYXRoLnNpbihmdXJ0aGVzdEFuZ2xlcy5yKTtcblx0XHR2YXIgcmFkaXVzUmVkdWN0aW9uVG9wID0gLWZ1cnRoZXN0TGltaXRzLnQgLyBNYXRoLmNvcyhmdXJ0aGVzdEFuZ2xlcy50KTtcblx0XHR2YXIgcmFkaXVzUmVkdWN0aW9uQm90dG9tID0gLU1hdGgubWF4KGZ1cnRoZXN0TGltaXRzLmIgLSAobWUuaGVpZ2h0IC0gbWUucGFkZGluZ1RvcCksIDApIC8gTWF0aC5jb3MoZnVydGhlc3RBbmdsZXMuYik7XG5cblx0XHRyYWRpdXNSZWR1Y3Rpb25MZWZ0ID0gbnVtYmVyT3JaZXJvKHJhZGl1c1JlZHVjdGlvbkxlZnQpO1xuXHRcdHJhZGl1c1JlZHVjdGlvblJpZ2h0ID0gbnVtYmVyT3JaZXJvKHJhZGl1c1JlZHVjdGlvblJpZ2h0KTtcblx0XHRyYWRpdXNSZWR1Y3Rpb25Ub3AgPSBudW1iZXJPclplcm8ocmFkaXVzUmVkdWN0aW9uVG9wKTtcblx0XHRyYWRpdXNSZWR1Y3Rpb25Cb3R0b20gPSBudW1iZXJPclplcm8ocmFkaXVzUmVkdWN0aW9uQm90dG9tKTtcblxuXHRcdG1lLmRyYXdpbmdBcmVhID0gTWF0aC5taW4oXG5cdFx0XHRNYXRoLmZsb29yKGxhcmdlc3RQb3NzaWJsZVJhZGl1cyAtIChyYWRpdXNSZWR1Y3Rpb25MZWZ0ICsgcmFkaXVzUmVkdWN0aW9uUmlnaHQpIC8gMiksXG5cdFx0XHRNYXRoLmZsb29yKGxhcmdlc3RQb3NzaWJsZVJhZGl1cyAtIChyYWRpdXNSZWR1Y3Rpb25Ub3AgKyByYWRpdXNSZWR1Y3Rpb25Cb3R0b20pIC8gMikpO1xuXHRcdG1lLnNldENlbnRlclBvaW50KHJhZGl1c1JlZHVjdGlvbkxlZnQsIHJhZGl1c1JlZHVjdGlvblJpZ2h0LCByYWRpdXNSZWR1Y3Rpb25Ub3AsIHJhZGl1c1JlZHVjdGlvbkJvdHRvbSk7XG5cdH0sXG5cblx0c2V0Q2VudGVyUG9pbnQ6IGZ1bmN0aW9uKGxlZnRNb3ZlbWVudCwgcmlnaHRNb3ZlbWVudCwgdG9wTW92ZW1lbnQsIGJvdHRvbU1vdmVtZW50KSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgbWF4UmlnaHQgPSBtZS53aWR0aCAtIHJpZ2h0TW92ZW1lbnQgLSBtZS5kcmF3aW5nQXJlYTtcblx0XHR2YXIgbWF4TGVmdCA9IGxlZnRNb3ZlbWVudCArIG1lLmRyYXdpbmdBcmVhO1xuXHRcdHZhciBtYXhUb3AgPSB0b3BNb3ZlbWVudCArIG1lLmRyYXdpbmdBcmVhO1xuXHRcdHZhciBtYXhCb3R0b20gPSAobWUuaGVpZ2h0IC0gbWUucGFkZGluZ1RvcCkgLSBib3R0b21Nb3ZlbWVudCAtIG1lLmRyYXdpbmdBcmVhO1xuXG5cdFx0bWUueENlbnRlciA9IE1hdGguZmxvb3IoKChtYXhMZWZ0ICsgbWF4UmlnaHQpIC8gMikgKyBtZS5sZWZ0KTtcblx0XHRtZS55Q2VudGVyID0gTWF0aC5mbG9vcigoKG1heFRvcCArIG1heEJvdHRvbSkgLyAyKSArIG1lLnRvcCArIG1lLnBhZGRpbmdUb3ApO1xuXHR9LFxuXG5cdGdldEluZGV4QW5nbGU6IGZ1bmN0aW9uKGluZGV4KSB7XG5cdFx0dmFyIGFuZ2xlTXVsdGlwbGllciA9IChNYXRoLlBJICogMikgLyBnZXRWYWx1ZUNvdW50KHRoaXMpO1xuXHRcdHZhciBzdGFydEFuZ2xlID0gdGhpcy5jaGFydC5vcHRpb25zICYmIHRoaXMuY2hhcnQub3B0aW9ucy5zdGFydEFuZ2xlID9cblx0XHRcdHRoaXMuY2hhcnQub3B0aW9ucy5zdGFydEFuZ2xlIDpcblx0XHRcdDA7XG5cblx0XHR2YXIgc3RhcnRBbmdsZVJhZGlhbnMgPSBzdGFydEFuZ2xlICogTWF0aC5QSSAqIDIgLyAzNjA7XG5cblx0XHQvLyBTdGFydCBmcm9tIHRoZSB0b3AgaW5zdGVhZCBvZiByaWdodCwgc28gcmVtb3ZlIGEgcXVhcnRlciBvZiB0aGUgY2lyY2xlXG5cdFx0cmV0dXJuIGluZGV4ICogYW5nbGVNdWx0aXBsaWVyICsgc3RhcnRBbmdsZVJhZGlhbnM7XG5cdH0sXG5cblx0Z2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWU6IGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblxuXHRcdGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIDA7IC8vIG51bGwgYWx3YXlzIGluIGNlbnRlclxuXHRcdH1cblxuXHRcdC8vIFRha2UgaW50byBhY2NvdW50IGhhbGYgZm9udCBzaXplICsgdGhlIHlQYWRkaW5nIG9mIHRoZSB0b3AgdmFsdWVcblx0XHR2YXIgc2NhbGluZ0ZhY3RvciA9IG1lLmRyYXdpbmdBcmVhIC8gKG1lLm1heCAtIG1lLm1pbik7XG5cdFx0aWYgKG1lLm9wdGlvbnMudGlja3MucmV2ZXJzZSkge1xuXHRcdFx0cmV0dXJuIChtZS5tYXggLSB2YWx1ZSkgKiBzY2FsaW5nRmFjdG9yO1xuXHRcdH1cblx0XHRyZXR1cm4gKHZhbHVlIC0gbWUubWluKSAqIHNjYWxpbmdGYWN0b3I7XG5cdH0sXG5cblx0Z2V0UG9pbnRQb3NpdGlvbjogZnVuY3Rpb24oaW5kZXgsIGRpc3RhbmNlRnJvbUNlbnRlcikge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIHRoaXNBbmdsZSA9IG1lLmdldEluZGV4QW5nbGUoaW5kZXgpIC0gKE1hdGguUEkgLyAyKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0eDogTWF0aC5jb3ModGhpc0FuZ2xlKSAqIGRpc3RhbmNlRnJvbUNlbnRlciArIG1lLnhDZW50ZXIsXG5cdFx0XHR5OiBNYXRoLnNpbih0aGlzQW5nbGUpICogZGlzdGFuY2VGcm9tQ2VudGVyICsgbWUueUNlbnRlclxuXHRcdH07XG5cdH0sXG5cblx0Z2V0UG9pbnRQb3NpdGlvbkZvclZhbHVlOiBmdW5jdGlvbihpbmRleCwgdmFsdWUpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRQb2ludFBvc2l0aW9uKGluZGV4LCB0aGlzLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKHZhbHVlKSk7XG5cdH0sXG5cblx0Z2V0QmFzZVBvc2l0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciBtaW4gPSBtZS5taW47XG5cdFx0dmFyIG1heCA9IG1lLm1heDtcblxuXHRcdHJldHVybiBtZS5nZXRQb2ludFBvc2l0aW9uRm9yVmFsdWUoMCxcblx0XHRcdG1lLmJlZ2luQXRaZXJvID8gMCA6XG5cdFx0XHRtaW4gPCAwICYmIG1heCA8IDAgPyBtYXggOlxuXHRcdFx0bWluID4gMCAmJiBtYXggPiAwID8gbWluIDpcblx0XHRcdDApO1xuXHR9LFxuXG5cdGRyYXc6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIG9wdHMgPSBtZS5vcHRpb25zO1xuXHRcdHZhciBncmlkTGluZU9wdHMgPSBvcHRzLmdyaWRMaW5lcztcblx0XHR2YXIgdGlja09wdHMgPSBvcHRzLnRpY2tzO1xuXG5cdFx0aWYgKG9wdHMuZGlzcGxheSkge1xuXHRcdFx0dmFyIGN0eCA9IG1lLmN0eDtcblx0XHRcdHZhciBzdGFydEFuZ2xlID0gdGhpcy5nZXRJbmRleEFuZ2xlKDApO1xuXHRcdFx0dmFyIHRpY2tGb250ID0gaGVscGVycyQxLm9wdGlvbnMuX3BhcnNlRm9udCh0aWNrT3B0cyk7XG5cblx0XHRcdGlmIChvcHRzLmFuZ2xlTGluZXMuZGlzcGxheSB8fCBvcHRzLnBvaW50TGFiZWxzLmRpc3BsYXkpIHtcblx0XHRcdFx0ZHJhd1BvaW50TGFiZWxzKG1lKTtcblx0XHRcdH1cblxuXHRcdFx0aGVscGVycyQxLmVhY2gobWUudGlja3MsIGZ1bmN0aW9uKGxhYmVsLCBpbmRleCkge1xuXHRcdFx0XHQvLyBEb24ndCBkcmF3IGEgY2VudHJlIHZhbHVlIChpZiBpdCBpcyBtaW5pbXVtKVxuXHRcdFx0XHRpZiAoaW5kZXggPiAwIHx8IHRpY2tPcHRzLnJldmVyc2UpIHtcblx0XHRcdFx0XHR2YXIgeUNlbnRlck9mZnNldCA9IG1lLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKG1lLnRpY2tzQXNOdW1iZXJzW2luZGV4XSk7XG5cblx0XHRcdFx0XHQvLyBEcmF3IGNpcmN1bGFyIGxpbmVzIGFyb3VuZCB0aGUgc2NhbGVcblx0XHRcdFx0XHRpZiAoZ3JpZExpbmVPcHRzLmRpc3BsYXkgJiYgaW5kZXggIT09IDApIHtcblx0XHRcdFx0XHRcdGRyYXdSYWRpdXNMaW5lKG1lLCBncmlkTGluZU9wdHMsIHlDZW50ZXJPZmZzZXQsIGluZGV4KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAodGlja09wdHMuZGlzcGxheSkge1xuXHRcdFx0XHRcdFx0dmFyIHRpY2tGb250Q29sb3IgPSB2YWx1ZU9yRGVmYXVsdCRiKHRpY2tPcHRzLmZvbnRDb2xvciwgY29yZV9kZWZhdWx0cy5nbG9iYWwuZGVmYXVsdEZvbnRDb2xvcik7XG5cdFx0XHRcdFx0XHRjdHguZm9udCA9IHRpY2tGb250LnN0cmluZztcblxuXHRcdFx0XHRcdFx0Y3R4LnNhdmUoKTtcblx0XHRcdFx0XHRcdGN0eC50cmFuc2xhdGUobWUueENlbnRlciwgbWUueUNlbnRlcik7XG5cdFx0XHRcdFx0XHRjdHgucm90YXRlKHN0YXJ0QW5nbGUpO1xuXG5cdFx0XHRcdFx0XHRpZiAodGlja09wdHMuc2hvd0xhYmVsQmFja2Ryb3ApIHtcblx0XHRcdFx0XHRcdFx0dmFyIGxhYmVsV2lkdGggPSBjdHgubWVhc3VyZVRleHQobGFiZWwpLndpZHRoO1xuXHRcdFx0XHRcdFx0XHRjdHguZmlsbFN0eWxlID0gdGlja09wdHMuYmFja2Ryb3BDb2xvcjtcblx0XHRcdFx0XHRcdFx0Y3R4LmZpbGxSZWN0KFxuXHRcdFx0XHRcdFx0XHRcdC1sYWJlbFdpZHRoIC8gMiAtIHRpY2tPcHRzLmJhY2tkcm9wUGFkZGluZ1gsXG5cdFx0XHRcdFx0XHRcdFx0LXlDZW50ZXJPZmZzZXQgLSB0aWNrRm9udC5zaXplIC8gMiAtIHRpY2tPcHRzLmJhY2tkcm9wUGFkZGluZ1ksXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWxXaWR0aCArIHRpY2tPcHRzLmJhY2tkcm9wUGFkZGluZ1ggKiAyLFxuXHRcdFx0XHRcdFx0XHRcdHRpY2tGb250LnNpemUgKyB0aWNrT3B0cy5iYWNrZHJvcFBhZGRpbmdZICogMlxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjdHgudGV4dEFsaWduID0gJ2NlbnRlcic7XG5cdFx0XHRcdFx0XHRjdHgudGV4dEJhc2VsaW5lID0gJ21pZGRsZSc7XG5cdFx0XHRcdFx0XHRjdHguZmlsbFN0eWxlID0gdGlja0ZvbnRDb2xvcjtcblx0XHRcdFx0XHRcdGN0eC5maWxsVGV4dChsYWJlbCwgMCwgLXlDZW50ZXJPZmZzZXQpO1xuXHRcdFx0XHRcdFx0Y3R4LnJlc3RvcmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufSk7XG5cbi8vIElOVEVSTkFMOiBzdGF0aWMgZGVmYXVsdCBvcHRpb25zLCByZWdpc3RlcmVkIGluIHNyYy9pbmRleC5qc1xudmFyIF9kZWZhdWx0cyQzID0gZGVmYXVsdENvbmZpZyQzO1xuc2NhbGVfcmFkaWFsTGluZWFyLl9kZWZhdWx0cyA9IF9kZWZhdWx0cyQzO1xuXG52YXIgdmFsdWVPckRlZmF1bHQkYyA9IGhlbHBlcnMkMS52YWx1ZU9yRGVmYXVsdDtcblxuLy8gSW50ZWdlciBjb25zdGFudHMgYXJlIGZyb20gdGhlIEVTNiBzcGVjLlxudmFyIE1JTl9JTlRFR0VSID0gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIgfHwgLTkwMDcxOTkyNTQ3NDA5OTE7XG52YXIgTUFYX0lOVEVHRVIgPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiB8fCA5MDA3MTk5MjU0NzQwOTkxO1xuXG52YXIgSU5URVJWQUxTID0ge1xuXHRtaWxsaXNlY29uZDoge1xuXHRcdGNvbW1vbjogdHJ1ZSxcblx0XHRzaXplOiAxLFxuXHRcdHN0ZXBzOiBbMSwgMiwgNSwgMTAsIDIwLCA1MCwgMTAwLCAyNTAsIDUwMF1cblx0fSxcblx0c2Vjb25kOiB7XG5cdFx0Y29tbW9uOiB0cnVlLFxuXHRcdHNpemU6IDEwMDAsXG5cdFx0c3RlcHM6IFsxLCAyLCA1LCAxMCwgMTUsIDMwXVxuXHR9LFxuXHRtaW51dGU6IHtcblx0XHRjb21tb246IHRydWUsXG5cdFx0c2l6ZTogNjAwMDAsXG5cdFx0c3RlcHM6IFsxLCAyLCA1LCAxMCwgMTUsIDMwXVxuXHR9LFxuXHRob3VyOiB7XG5cdFx0Y29tbW9uOiB0cnVlLFxuXHRcdHNpemU6IDM2MDAwMDAsXG5cdFx0c3RlcHM6IFsxLCAyLCAzLCA2LCAxMl1cblx0fSxcblx0ZGF5OiB7XG5cdFx0Y29tbW9uOiB0cnVlLFxuXHRcdHNpemU6IDg2NDAwMDAwLFxuXHRcdHN0ZXBzOiBbMSwgMiwgNV1cblx0fSxcblx0d2Vlazoge1xuXHRcdGNvbW1vbjogZmFsc2UsXG5cdFx0c2l6ZTogNjA0ODAwMDAwLFxuXHRcdHN0ZXBzOiBbMSwgMiwgMywgNF1cblx0fSxcblx0bW9udGg6IHtcblx0XHRjb21tb246IHRydWUsXG5cdFx0c2l6ZTogMi42MjhlOSxcblx0XHRzdGVwczogWzEsIDIsIDNdXG5cdH0sXG5cdHF1YXJ0ZXI6IHtcblx0XHRjb21tb246IGZhbHNlLFxuXHRcdHNpemU6IDcuODg0ZTksXG5cdFx0c3RlcHM6IFsxLCAyLCAzLCA0XVxuXHR9LFxuXHR5ZWFyOiB7XG5cdFx0Y29tbW9uOiB0cnVlLFxuXHRcdHNpemU6IDMuMTU0ZTEwXG5cdH1cbn07XG5cbnZhciBVTklUUyA9IE9iamVjdC5rZXlzKElOVEVSVkFMUyk7XG5cbmZ1bmN0aW9uIHNvcnRlcihhLCBiKSB7XG5cdHJldHVybiBhIC0gYjtcbn1cblxuZnVuY3Rpb24gYXJyYXlVbmlxdWUoaXRlbXMpIHtcblx0dmFyIGhhc2ggPSB7fTtcblx0dmFyIG91dCA9IFtdO1xuXHR2YXIgaSwgaWxlbiwgaXRlbTtcblxuXHRmb3IgKGkgPSAwLCBpbGVuID0gaXRlbXMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XG5cdFx0aXRlbSA9IGl0ZW1zW2ldO1xuXHRcdGlmICghaGFzaFtpdGVtXSkge1xuXHRcdFx0aGFzaFtpdGVtXSA9IHRydWU7XG5cdFx0XHRvdXQucHVzaChpdGVtKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2Yge3RpbWUsIHBvc30gb2JqZWN0cyB1c2VkIHRvIGludGVycG9sYXRlIGEgc3BlY2lmaWMgYHRpbWVgIG9yIHBvc2l0aW9uXG4gKiAoYHBvc2ApIG9uIHRoZSBzY2FsZSwgYnkgc2VhcmNoaW5nIGVudHJpZXMgYmVmb3JlIGFuZCBhZnRlciB0aGUgcmVxdWVzdGVkIHZhbHVlLiBgcG9zYCBpc1xuICogYSBkZWNpbWFsIGJldHdlZW4gMCBhbmQgMTogMCBiZWluZyB0aGUgc3RhcnQgb2YgdGhlIHNjYWxlIChsZWZ0IG9yIHRvcCkgYW5kIDEgdGhlIG90aGVyXG4gKiBleHRyZW1pdHkgKGxlZnQgKyB3aWR0aCBvciB0b3AgKyBoZWlnaHQpLiBOb3RlIHRoYXQgaXQgd291bGQgYmUgbW9yZSBvcHRpbWl6ZWQgdG8gZGlyZWN0bHlcbiAqIHN0b3JlIHByZS1jb21wdXRlZCBwaXhlbHMsIGJ1dCB0aGUgc2NhbGUgZGltZW5zaW9ucyBhcmUgbm90IGd1YXJhbnRlZWQgYXQgdGhlIHRpbWUgd2UgbmVlZFxuICogdG8gY3JlYXRlIHRoZSBsb29rdXAgdGFibGUuIFRoZSB0YWJsZSBBTFdBWVMgY29udGFpbnMgYXQgbGVhc3QgdHdvIGl0ZW1zOiBtaW4gYW5kIG1heC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcltdfSB0aW1lc3RhbXBzIC0gdGltZXN0YW1wcyBzb3J0ZWQgZnJvbSBsb3dlc3QgdG8gaGlnaGVzdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXN0cmlidXRpb24gLSBJZiAnbGluZWFyJywgdGltZXN0YW1wcyB3aWxsIGJlIHNwcmVhZCBsaW5lYXJseSBhbG9uZyB0aGUgbWluXG4gKiBhbmQgbWF4IHJhbmdlLCBzbyBiYXNpY2FsbHksIHRoZSB0YWJsZSB3aWxsIGNvbnRhaW5zIG9ubHkgdHdvIGl0ZW1zOiB7bWluLCAwfSBhbmQge21heCwgMX0uXG4gKiBJZiAnc2VyaWVzJywgdGltZXN0YW1wcyB3aWxsIGJlIHBvc2l0aW9uZWQgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSBlYWNoIG90aGVyLiBJbiB0aGlzXG4gKiBjYXNlLCBvbmx5IHRpbWVzdGFtcHMgdGhhdCBicmVhayB0aGUgdGltZSBsaW5lYXJpdHkgYXJlIHJlZ2lzdGVyZWQsIG1lYW5pbmcgdGhhdCBpbiB0aGVcbiAqIGJlc3QgY2FzZSwgYWxsIHRpbWVzdGFtcHMgYXJlIGxpbmVhciwgdGhlIHRhYmxlIGNvbnRhaW5zIG9ubHkgbWluIGFuZCBtYXguXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkTG9va3VwVGFibGUodGltZXN0YW1wcywgbWluLCBtYXgsIGRpc3RyaWJ1dGlvbikge1xuXHRpZiAoZGlzdHJpYnV0aW9uID09PSAnbGluZWFyJyB8fCAhdGltZXN0YW1wcy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e3RpbWU6IG1pbiwgcG9zOiAwfSxcblx0XHRcdHt0aW1lOiBtYXgsIHBvczogMX1cblx0XHRdO1xuXHR9XG5cblx0dmFyIHRhYmxlID0gW107XG5cdHZhciBpdGVtcyA9IFttaW5dO1xuXHR2YXIgaSwgaWxlbiwgcHJldiwgY3VyciwgbmV4dDtcblxuXHRmb3IgKGkgPSAwLCBpbGVuID0gdGltZXN0YW1wcy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcblx0XHRjdXJyID0gdGltZXN0YW1wc1tpXTtcblx0XHRpZiAoY3VyciA+IG1pbiAmJiBjdXJyIDwgbWF4KSB7XG5cdFx0XHRpdGVtcy5wdXNoKGN1cnIpO1xuXHRcdH1cblx0fVxuXG5cdGl0ZW1zLnB1c2gobWF4KTtcblxuXHRmb3IgKGkgPSAwLCBpbGVuID0gaXRlbXMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XG5cdFx0bmV4dCA9IGl0ZW1zW2kgKyAxXTtcblx0XHRwcmV2ID0gaXRlbXNbaSAtIDFdO1xuXHRcdGN1cnIgPSBpdGVtc1tpXTtcblxuXHRcdC8vIG9ubHkgYWRkIHBvaW50cyB0aGF0IGJyZWFrcyB0aGUgc2NhbGUgbGluZWFyaXR5XG5cdFx0aWYgKHByZXYgPT09IHVuZGVmaW5lZCB8fCBuZXh0ID09PSB1bmRlZmluZWQgfHwgTWF0aC5yb3VuZCgobmV4dCArIHByZXYpIC8gMikgIT09IGN1cnIpIHtcblx0XHRcdHRhYmxlLnB1c2goe3RpbWU6IGN1cnIsIHBvczogaSAvIChpbGVuIC0gMSl9KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGFibGU7XG59XG5cbi8vIEBzZWUgYWRhcHRlZCBmcm9tIGh0dHBzOi8vd3d3LmFudWpnYWtoYXIuY29tLzIwMTQvMDMvMDEvYmluYXJ5LXNlYXJjaC1pbi1qYXZhc2NyaXB0L1xuZnVuY3Rpb24gbG9va3VwKHRhYmxlLCBrZXksIHZhbHVlKSB7XG5cdHZhciBsbyA9IDA7XG5cdHZhciBoaSA9IHRhYmxlLmxlbmd0aCAtIDE7XG5cdHZhciBtaWQsIGkwLCBpMTtcblxuXHR3aGlsZSAobG8gPj0gMCAmJiBsbyA8PSBoaSkge1xuXHRcdG1pZCA9IChsbyArIGhpKSA+PiAxO1xuXHRcdGkwID0gdGFibGVbbWlkIC0gMV0gfHwgbnVsbDtcblx0XHRpMSA9IHRhYmxlW21pZF07XG5cblx0XHRpZiAoIWkwKSB7XG5cdFx0XHQvLyBnaXZlbiB2YWx1ZSBpcyBvdXRzaWRlIHRhYmxlIChiZWZvcmUgZmlyc3QgaXRlbSlcblx0XHRcdHJldHVybiB7bG86IG51bGwsIGhpOiBpMX07XG5cdFx0fSBlbHNlIGlmIChpMVtrZXldIDwgdmFsdWUpIHtcblx0XHRcdGxvID0gbWlkICsgMTtcblx0XHR9IGVsc2UgaWYgKGkwW2tleV0gPiB2YWx1ZSkge1xuXHRcdFx0aGkgPSBtaWQgLSAxO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4ge2xvOiBpMCwgaGk6IGkxfTtcblx0XHR9XG5cdH1cblxuXHQvLyBnaXZlbiB2YWx1ZSBpcyBvdXRzaWRlIHRhYmxlIChhZnRlciBsYXN0IGl0ZW0pXG5cdHJldHVybiB7bG86IGkxLCBoaTogbnVsbH07XG59XG5cbi8qKlxuICogTGluZWFybHkgaW50ZXJwb2xhdGVzIHRoZSBnaXZlbiBzb3VyY2UgYHZhbHVlYCB1c2luZyB0aGUgdGFibGUgaXRlbXMgYHNrZXlgIHZhbHVlcyBhbmRcbiAqIHJldHVybnMgdGhlIGFzc29jaWF0ZWQgYHRrZXlgIHZhbHVlLiBGb3IgZXhhbXBsZSwgaW50ZXJwb2xhdGUodGFibGUsICd0aW1lJywgNDIsICdwb3MnKVxuICogcmV0dXJucyB0aGUgcG9zaXRpb24gZm9yIGEgdGltZXN0YW1wIGVxdWFsIHRvIDQyLiBJZiB2YWx1ZSBpcyBvdXQgb2YgYm91bmRzLCB2YWx1ZXMgYXRcbiAqIGluZGV4IFswLCAxXSBvciBbbiAtIDEsIG5dIGFyZSB1c2VkIGZvciB0aGUgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gaW50ZXJwb2xhdGUkMSh0YWJsZSwgc2tleSwgc3ZhbCwgdGtleSkge1xuXHR2YXIgcmFuZ2UgPSBsb29rdXAodGFibGUsIHNrZXksIHN2YWwpO1xuXG5cdC8vIE5vdGU6IHRoZSBsb29rdXAgdGFibGUgQUxXQVlTIGNvbnRhaW5zIGF0IGxlYXN0IDIgaXRlbXMgKG1pbiBhbmQgbWF4KVxuXHR2YXIgcHJldiA9ICFyYW5nZS5sbyA/IHRhYmxlWzBdIDogIXJhbmdlLmhpID8gdGFibGVbdGFibGUubGVuZ3RoIC0gMl0gOiByYW5nZS5sbztcblx0dmFyIG5leHQgPSAhcmFuZ2UubG8gPyB0YWJsZVsxXSA6ICFyYW5nZS5oaSA/IHRhYmxlW3RhYmxlLmxlbmd0aCAtIDFdIDogcmFuZ2UuaGk7XG5cblx0dmFyIHNwYW4gPSBuZXh0W3NrZXldIC0gcHJldltza2V5XTtcblx0dmFyIHJhdGlvID0gc3BhbiA/IChzdmFsIC0gcHJldltza2V5XSkgLyBzcGFuIDogMDtcblx0dmFyIG9mZnNldCA9IChuZXh0W3RrZXldIC0gcHJldlt0a2V5XSkgKiByYXRpbztcblxuXHRyZXR1cm4gcHJldlt0a2V5XSArIG9mZnNldDtcbn1cblxuZnVuY3Rpb24gdG9UaW1lc3RhbXAoc2NhbGUsIGlucHV0KSB7XG5cdHZhciBhZGFwdGVyID0gc2NhbGUuX2FkYXB0ZXI7XG5cdHZhciBvcHRpb25zID0gc2NhbGUub3B0aW9ucy50aW1lO1xuXHR2YXIgcGFyc2VyID0gb3B0aW9ucy5wYXJzZXI7XG5cdHZhciBmb3JtYXQgPSBwYXJzZXIgfHwgb3B0aW9ucy5mb3JtYXQ7XG5cdHZhciB2YWx1ZSA9IGlucHV0O1xuXG5cdGlmICh0eXBlb2YgcGFyc2VyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFsdWUgPSBwYXJzZXIodmFsdWUpO1xuXHR9XG5cblx0Ly8gT25seSBwYXJzZSBpZiBpdHMgbm90IGEgdGltZXN0YW1wIGFscmVhZHlcblx0aWYgKCFoZWxwZXJzJDEuaXNGaW5pdGUodmFsdWUpKSB7XG5cdFx0dmFsdWUgPSB0eXBlb2YgZm9ybWF0ID09PSAnc3RyaW5nJ1xuXHRcdFx0PyBhZGFwdGVyLnBhcnNlKHZhbHVlLCBmb3JtYXQpXG5cdFx0XHQ6IGFkYXB0ZXIucGFyc2UodmFsdWUpO1xuXHR9XG5cblx0aWYgKHZhbHVlICE9PSBudWxsKSB7XG5cdFx0cmV0dXJuICt2YWx1ZTtcblx0fVxuXG5cdC8vIExhYmVscyBhcmUgaW4gYW4gaW5jb21wYXRpYmxlIGZvcm1hdCBhbmQgbm8gYHBhcnNlcmAgaGFzIGJlZW4gcHJvdmlkZWQuXG5cdC8vIFRoZSB1c2VyIG1pZ2h0IHN0aWxsIHVzZSB0aGUgZGVwcmVjYXRlZCBgZm9ybWF0YCBvcHRpb24gZm9yIHBhcnNpbmcuXG5cdGlmICghcGFyc2VyICYmIHR5cGVvZiBmb3JtYXQgPT09ICdmdW5jdGlvbicpIHtcblx0XHR2YWx1ZSA9IGZvcm1hdChpbnB1dCk7XG5cblx0XHQvLyBgZm9ybWF0YCBjb3VsZCByZXR1cm4gc29tZXRoaW5nIGVsc2UgdGhhbiBhIHRpbWVzdGFtcCwgaWYgc28sIHBhcnNlIGl0XG5cdFx0aWYgKCFoZWxwZXJzJDEuaXNGaW5pdGUodmFsdWUpKSB7XG5cdFx0XHR2YWx1ZSA9IGFkYXB0ZXIucGFyc2UodmFsdWUpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gcGFyc2Uoc2NhbGUsIGlucHV0KSB7XG5cdGlmIChoZWxwZXJzJDEuaXNOdWxsT3JVbmRlZihpbnB1dCkpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHZhciBvcHRpb25zID0gc2NhbGUub3B0aW9ucy50aW1lO1xuXHR2YXIgdmFsdWUgPSB0b1RpbWVzdGFtcChzY2FsZSwgc2NhbGUuZ2V0UmlnaHRWYWx1ZShpbnB1dCkpO1xuXHRpZiAodmFsdWUgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblxuXHRpZiAob3B0aW9ucy5yb3VuZCkge1xuXHRcdHZhbHVlID0gK3NjYWxlLl9hZGFwdGVyLnN0YXJ0T2YodmFsdWUsIG9wdGlvbnMucm91bmQpO1xuXHR9XG5cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG51bWJlciBvZiB1bml0IHRvIHNraXAgdG8gYmUgYWJsZSB0byBkaXNwbGF5IHVwIHRvIGBjYXBhY2l0eWAgbnVtYmVyIG9mIHRpY2tzXG4gKiBpbiBgdW5pdGAgZm9yIHRoZSBnaXZlbiBgbWluYCAvIGBtYXhgIHJhbmdlIGFuZCByZXNwZWN0aW5nIHRoZSBpbnRlcnZhbCBzdGVwcyBjb25zdHJhaW50cy5cbiAqL1xuZnVuY3Rpb24gZGV0ZXJtaW5lU3RlcFNpemUobWluLCBtYXgsIHVuaXQsIGNhcGFjaXR5KSB7XG5cdHZhciByYW5nZSA9IG1heCAtIG1pbjtcblx0dmFyIGludGVydmFsID0gSU5URVJWQUxTW3VuaXRdO1xuXHR2YXIgbWlsbGlzZWNvbmRzID0gaW50ZXJ2YWwuc2l6ZTtcblx0dmFyIHN0ZXBzID0gaW50ZXJ2YWwuc3RlcHM7XG5cdHZhciBpLCBpbGVuLCBmYWN0b3I7XG5cblx0aWYgKCFzdGVwcykge1xuXHRcdHJldHVybiBNYXRoLmNlaWwocmFuZ2UgLyAoY2FwYWNpdHkgKiBtaWxsaXNlY29uZHMpKTtcblx0fVxuXG5cdGZvciAoaSA9IDAsIGlsZW4gPSBzdGVwcy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcblx0XHRmYWN0b3IgPSBzdGVwc1tpXTtcblx0XHRpZiAoTWF0aC5jZWlsKHJhbmdlIC8gKG1pbGxpc2Vjb25kcyAqIGZhY3RvcikpIDw9IGNhcGFjaXR5KSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZmFjdG9yO1xufVxuXG4vKipcbiAqIEZpZ3VyZXMgb3V0IHdoYXQgdW5pdCByZXN1bHRzIGluIGFuIGFwcHJvcHJpYXRlIG51bWJlciBvZiBhdXRvLWdlbmVyYXRlZCB0aWNrc1xuICovXG5mdW5jdGlvbiBkZXRlcm1pbmVVbml0Rm9yQXV0b1RpY2tzKG1pblVuaXQsIG1pbiwgbWF4LCBjYXBhY2l0eSkge1xuXHR2YXIgaWxlbiA9IFVOSVRTLmxlbmd0aDtcblx0dmFyIGksIGludGVydmFsLCBmYWN0b3I7XG5cblx0Zm9yIChpID0gVU5JVFMuaW5kZXhPZihtaW5Vbml0KTsgaSA8IGlsZW4gLSAxOyArK2kpIHtcblx0XHRpbnRlcnZhbCA9IElOVEVSVkFMU1tVTklUU1tpXV07XG5cdFx0ZmFjdG9yID0gaW50ZXJ2YWwuc3RlcHMgPyBpbnRlcnZhbC5zdGVwc1tpbnRlcnZhbC5zdGVwcy5sZW5ndGggLSAxXSA6IE1BWF9JTlRFR0VSO1xuXG5cdFx0aWYgKGludGVydmFsLmNvbW1vbiAmJiBNYXRoLmNlaWwoKG1heCAtIG1pbikgLyAoZmFjdG9yICogaW50ZXJ2YWwuc2l6ZSkpIDw9IGNhcGFjaXR5KSB7XG5cdFx0XHRyZXR1cm4gVU5JVFNbaV07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIFVOSVRTW2lsZW4gLSAxXTtcbn1cblxuLyoqXG4gKiBGaWd1cmVzIG91dCB3aGF0IHVuaXQgdG8gZm9ybWF0IGEgc2V0IG9mIHRpY2tzIHdpdGhcbiAqL1xuZnVuY3Rpb24gZGV0ZXJtaW5lVW5pdEZvckZvcm1hdHRpbmcoc2NhbGUsIHRpY2tzLCBtaW5Vbml0LCBtaW4sIG1heCkge1xuXHR2YXIgaWxlbiA9IFVOSVRTLmxlbmd0aDtcblx0dmFyIGksIHVuaXQ7XG5cblx0Zm9yIChpID0gaWxlbiAtIDE7IGkgPj0gVU5JVFMuaW5kZXhPZihtaW5Vbml0KTsgaS0tKSB7XG5cdFx0dW5pdCA9IFVOSVRTW2ldO1xuXHRcdGlmIChJTlRFUlZBTFNbdW5pdF0uY29tbW9uICYmIHNjYWxlLl9hZGFwdGVyLmRpZmYobWF4LCBtaW4sIHVuaXQpID49IHRpY2tzLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIHVuaXQ7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIFVOSVRTW21pblVuaXQgPyBVTklUUy5pbmRleE9mKG1pblVuaXQpIDogMF07XG59XG5cbmZ1bmN0aW9uIGRldGVybWluZU1ham9yVW5pdCh1bml0KSB7XG5cdGZvciAodmFyIGkgPSBVTklUUy5pbmRleE9mKHVuaXQpICsgMSwgaWxlbiA9IFVOSVRTLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xuXHRcdGlmIChJTlRFUlZBTFNbVU5JVFNbaV1dLmNvbW1vbikge1xuXHRcdFx0cmV0dXJuIFVOSVRTW2ldO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIG1heGltdW0gb2YgYGNhcGFjaXR5YCB0aW1lc3RhbXBzIGJldHdlZW4gbWluIGFuZCBtYXgsIHJvdW5kZWQgdG8gdGhlXG4gKiBgbWlub3JgIHVuaXQsIGFsaWduZWQgb24gdGhlIGBtYWpvcmAgdW5pdCBhbmQgdXNpbmcgdGhlIGdpdmVuIHNjYWxlIHRpbWUgYG9wdGlvbnNgLlxuICogSW1wb3J0YW50OiB0aGlzIG1ldGhvZCBjYW4gcmV0dXJuIHRpY2tzIG91dHNpZGUgdGhlIG1pbiBhbmQgbWF4IHJhbmdlLCBpdCdzIHRoZVxuICogcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxpbmcgY29kZSB0byBjbGFtcCB2YWx1ZXMgaWYgbmVlZGVkLlxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZShzY2FsZSwgbWluLCBtYXgsIGNhcGFjaXR5KSB7XG5cdHZhciBhZGFwdGVyID0gc2NhbGUuX2FkYXB0ZXI7XG5cdHZhciBvcHRpb25zID0gc2NhbGUub3B0aW9ucztcblx0dmFyIHRpbWVPcHRzID0gb3B0aW9ucy50aW1lO1xuXHR2YXIgbWlub3IgPSB0aW1lT3B0cy51bml0IHx8IGRldGVybWluZVVuaXRGb3JBdXRvVGlja3ModGltZU9wdHMubWluVW5pdCwgbWluLCBtYXgsIGNhcGFjaXR5KTtcblx0dmFyIG1ham9yID0gZGV0ZXJtaW5lTWFqb3JVbml0KG1pbm9yKTtcblx0dmFyIHN0ZXBTaXplID0gdmFsdWVPckRlZmF1bHQkYyh0aW1lT3B0cy5zdGVwU2l6ZSwgdGltZU9wdHMudW5pdFN0ZXBTaXplKTtcblx0dmFyIHdlZWtkYXkgPSBtaW5vciA9PT0gJ3dlZWsnID8gdGltZU9wdHMuaXNvV2Vla2RheSA6IGZhbHNlO1xuXHR2YXIgbWFqb3JUaWNrc0VuYWJsZWQgPSBvcHRpb25zLnRpY2tzLm1ham9yLmVuYWJsZWQ7XG5cdHZhciBpbnRlcnZhbCA9IElOVEVSVkFMU1ttaW5vcl07XG5cdHZhciBmaXJzdCA9IG1pbjtcblx0dmFyIGxhc3QgPSBtYXg7XG5cdHZhciB0aWNrcyA9IFtdO1xuXHR2YXIgdGltZTtcblxuXHRpZiAoIXN0ZXBTaXplKSB7XG5cdFx0c3RlcFNpemUgPSBkZXRlcm1pbmVTdGVwU2l6ZShtaW4sIG1heCwgbWlub3IsIGNhcGFjaXR5KTtcblx0fVxuXG5cdC8vIEZvciAnd2VlaycgdW5pdCwgaGFuZGxlIHRoZSBmaXJzdCBkYXkgb2Ygd2VlayBvcHRpb25cblx0aWYgKHdlZWtkYXkpIHtcblx0XHRmaXJzdCA9ICthZGFwdGVyLnN0YXJ0T2YoZmlyc3QsICdpc29XZWVrJywgd2Vla2RheSk7XG5cdFx0bGFzdCA9ICthZGFwdGVyLnN0YXJ0T2YobGFzdCwgJ2lzb1dlZWsnLCB3ZWVrZGF5KTtcblx0fVxuXG5cdC8vIEFsaWduIGZpcnN0L2xhc3QgdGlja3Mgb24gdW5pdFxuXHRmaXJzdCA9ICthZGFwdGVyLnN0YXJ0T2YoZmlyc3QsIHdlZWtkYXkgPyAnZGF5JyA6IG1pbm9yKTtcblx0bGFzdCA9ICthZGFwdGVyLnN0YXJ0T2YobGFzdCwgd2Vla2RheSA/ICdkYXknIDogbWlub3IpO1xuXG5cdC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBsYXN0IHRpY2sgaW5jbHVkZSBtYXhcblx0aWYgKGxhc3QgPCBtYXgpIHtcblx0XHRsYXN0ID0gK2FkYXB0ZXIuYWRkKGxhc3QsIDEsIG1pbm9yKTtcblx0fVxuXG5cdHRpbWUgPSBmaXJzdDtcblxuXHRpZiAobWFqb3JUaWNrc0VuYWJsZWQgJiYgbWFqb3IgJiYgIXdlZWtkYXkgJiYgIXRpbWVPcHRzLnJvdW5kKSB7XG5cdFx0Ly8gQWxpZ24gdGhlIGZpcnN0IHRpY2sgb24gdGhlIHByZXZpb3VzIGBtaW5vcmAgdW5pdCBhbGlnbmVkIG9uIHRoZSBgbWFqb3JgIHVuaXQ6XG5cdFx0Ly8gd2UgZmlyc3QgYWxpZ25lZCB0aW1lIG9uIHRoZSBwcmV2aW91cyBgbWFqb3JgIHVuaXQgdGhlbiBhZGQgdGhlIG51bWJlciBvZiBmdWxsXG5cdFx0Ly8gc3RlcFNpemUgdGhlcmUgaXMgYmV0d2VlbiBmaXJzdCBhbmQgdGhlIHByZXZpb3VzIG1ham9yIHRpbWUuXG5cdFx0dGltZSA9ICthZGFwdGVyLnN0YXJ0T2YodGltZSwgbWFqb3IpO1xuXHRcdHRpbWUgPSArYWRhcHRlci5hZGQodGltZSwgfn4oKGZpcnN0IC0gdGltZSkgLyAoaW50ZXJ2YWwuc2l6ZSAqIHN0ZXBTaXplKSkgKiBzdGVwU2l6ZSwgbWlub3IpO1xuXHR9XG5cblx0Zm9yICg7IHRpbWUgPCBsYXN0OyB0aW1lID0gK2FkYXB0ZXIuYWRkKHRpbWUsIHN0ZXBTaXplLCBtaW5vcikpIHtcblx0XHR0aWNrcy5wdXNoKCt0aW1lKTtcblx0fVxuXG5cdHRpY2tzLnB1c2goK3RpbWUpO1xuXG5cdHJldHVybiB0aWNrcztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzdGFydCBhbmQgZW5kIG9mZnNldHMgZnJvbSBlZGdlcyBpbiB0aGUgZm9ybSBvZiB7c3RhcnQsIGVuZH1cbiAqIHdoZXJlIGVhY2ggdmFsdWUgaXMgYSByZWxhdGl2ZSB3aWR0aCB0byB0aGUgc2NhbGUgYW5kIHJhbmdlcyBiZXR3ZWVuIDAgYW5kIDEuXG4gKiBUaGV5IGFkZCBleHRyYSBtYXJnaW5zIG9uIHRoZSBib3RoIHNpZGVzIGJ5IHNjYWxpbmcgZG93biB0aGUgb3JpZ2luYWwgc2NhbGUuXG4gKiBPZmZzZXRzIGFyZSBhZGRlZCB3aGVuIHRoZSBgb2Zmc2V0YCBvcHRpb24gaXMgdHJ1ZS5cbiAqL1xuZnVuY3Rpb24gY29tcHV0ZU9mZnNldHModGFibGUsIHRpY2tzLCBtaW4sIG1heCwgb3B0aW9ucykge1xuXHR2YXIgc3RhcnQgPSAwO1xuXHR2YXIgZW5kID0gMDtcblx0dmFyIGZpcnN0LCBsYXN0O1xuXG5cdGlmIChvcHRpb25zLm9mZnNldCAmJiB0aWNrcy5sZW5ndGgpIHtcblx0XHRpZiAoIW9wdGlvbnMudGltZS5taW4pIHtcblx0XHRcdGZpcnN0ID0gaW50ZXJwb2xhdGUkMSh0YWJsZSwgJ3RpbWUnLCB0aWNrc1swXSwgJ3BvcycpO1xuXHRcdFx0aWYgKHRpY2tzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRzdGFydCA9IDEgLSBmaXJzdDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHN0YXJ0ID0gKGludGVycG9sYXRlJDEodGFibGUsICd0aW1lJywgdGlja3NbMV0sICdwb3MnKSAtIGZpcnN0KSAvIDI7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghb3B0aW9ucy50aW1lLm1heCkge1xuXHRcdFx0bGFzdCA9IGludGVycG9sYXRlJDEodGFibGUsICd0aW1lJywgdGlja3NbdGlja3MubGVuZ3RoIC0gMV0sICdwb3MnKTtcblx0XHRcdGlmICh0aWNrcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0ZW5kID0gbGFzdDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVuZCA9IChsYXN0IC0gaW50ZXJwb2xhdGUkMSh0YWJsZSwgJ3RpbWUnLCB0aWNrc1t0aWNrcy5sZW5ndGggLSAyXSwgJ3BvcycpKSAvIDI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHtzdGFydDogc3RhcnQsIGVuZDogZW5kfTtcbn1cblxuZnVuY3Rpb24gdGlja3NGcm9tVGltZXN0YW1wcyhzY2FsZSwgdmFsdWVzLCBtYWpvclVuaXQpIHtcblx0dmFyIHRpY2tzID0gW107XG5cdHZhciBpLCBpbGVuLCB2YWx1ZSwgbWFqb3I7XG5cblx0Zm9yIChpID0gMCwgaWxlbiA9IHZhbHVlcy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpIHtcblx0XHR2YWx1ZSA9IHZhbHVlc1tpXTtcblx0XHRtYWpvciA9IG1ham9yVW5pdCA/IHZhbHVlID09PSArc2NhbGUuX2FkYXB0ZXIuc3RhcnRPZih2YWx1ZSwgbWFqb3JVbml0KSA6IGZhbHNlO1xuXG5cdFx0dGlja3MucHVzaCh7XG5cdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHRtYWpvcjogbWFqb3Jcblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiB0aWNrcztcbn1cblxudmFyIGRlZmF1bHRDb25maWckNCA9IHtcblx0cG9zaXRpb246ICdib3R0b20nLFxuXG5cdC8qKlxuXHQgKiBEYXRhIGRpc3RyaWJ1dGlvbiBhbG9uZyB0aGUgc2NhbGU6XG5cdCAqIC0gJ2xpbmVhcic6IGRhdGEgYXJlIHNwcmVhZCBhY2NvcmRpbmcgdG8gdGhlaXIgdGltZSAoZGlzdGFuY2VzIGNhbiB2YXJ5KSxcblx0ICogLSAnc2VyaWVzJzogZGF0YSBhcmUgc3ByZWFkIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gZWFjaCBvdGhlci5cblx0ICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9wdWxsLzQ1MDdcblx0ICogQHNpbmNlIDIuNy4wXG5cdCAqL1xuXHRkaXN0cmlidXRpb246ICdsaW5lYXInLFxuXG5cdC8qKlxuXHQgKiBTY2FsZSBib3VuZGFyeSBzdHJhdGVneSAoYnlwYXNzZWQgYnkgbWluL21heCB0aW1lIG9wdGlvbnMpXG5cdCAqIC0gYGRhdGFgOiBtYWtlIHN1cmUgZGF0YSBhcmUgZnVsbHkgdmlzaWJsZSwgdGlja3Mgb3V0c2lkZSBhcmUgcmVtb3ZlZFxuXHQgKiAtIGB0aWNrc2A6IG1ha2Ugc3VyZSB0aWNrcyBhcmUgZnVsbHkgdmlzaWJsZSwgZGF0YSBvdXRzaWRlIGFyZSB0cnVuY2F0ZWRcblx0ICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9wdWxsLzQ1NTZcblx0ICogQHNpbmNlIDIuNy4wXG5cdCAqL1xuXHRib3VuZHM6ICdkYXRhJyxcblxuXHRhZGFwdGVyczoge30sXG5cdHRpbWU6IHtcblx0XHRwYXJzZXI6IGZhbHNlLCAvLyBmYWxzZSA9PSBhIHBhdHRlcm4gc3RyaW5nIGZyb20gaHR0cHM6Ly9tb21lbnRqcy5jb20vZG9jcy8jL3BhcnNpbmcvc3RyaW5nLWZvcm1hdC8gb3IgYSBjdXN0b20gY2FsbGJhY2sgdGhhdCBjb252ZXJ0cyBpdHMgYXJndW1lbnQgdG8gYSBtb21lbnRcblx0XHRmb3JtYXQ6IGZhbHNlLCAvLyBERVBSRUNBVEVEIGZhbHNlID09IGRhdGUgb2JqZWN0cywgbW9tZW50IG9iamVjdCwgY2FsbGJhY2sgb3IgYSBwYXR0ZXJuIHN0cmluZyBmcm9tIGh0dHBzOi8vbW9tZW50anMuY29tL2RvY3MvIy9wYXJzaW5nL3N0cmluZy1mb3JtYXQvXG5cdFx0dW5pdDogZmFsc2UsIC8vIGZhbHNlID09IGF1dG9tYXRpYyBvciBvdmVycmlkZSB3aXRoIHdlZWssIG1vbnRoLCB5ZWFyLCBldGMuXG5cdFx0cm91bmQ6IGZhbHNlLCAvLyBub25lLCBvciBvdmVycmlkZSB3aXRoIHdlZWssIG1vbnRoLCB5ZWFyLCBldGMuXG5cdFx0ZGlzcGxheUZvcm1hdDogZmFsc2UsIC8vIERFUFJFQ0FURURcblx0XHRpc29XZWVrZGF5OiBmYWxzZSwgLy8gb3ZlcnJpZGUgd2VlayBzdGFydCBkYXkgLSBzZWUgaHR0cHM6Ly9tb21lbnRqcy5jb20vZG9jcy8jL2dldC1zZXQvaXNvLXdlZWtkYXkvXG5cdFx0bWluVW5pdDogJ21pbGxpc2Vjb25kJyxcblx0XHRkaXNwbGF5Rm9ybWF0czoge31cblx0fSxcblx0dGlja3M6IHtcblx0XHRhdXRvU2tpcDogZmFsc2UsXG5cblx0XHQvKipcblx0XHQgKiBUaWNrcyBnZW5lcmF0aW9uIGlucHV0IHZhbHVlczpcblx0XHQgKiAtICdhdXRvJzogZ2VuZXJhdGVzIFwib3B0aW1hbFwiIHRpY2tzIGJhc2VkIG9uIHNjYWxlIHNpemUgYW5kIHRpbWUgb3B0aW9ucy5cblx0XHQgKiAtICdkYXRhJzogZ2VuZXJhdGVzIHRpY2tzIGZyb20gZGF0YSAoaW5jbHVkaW5nIGxhYmVscyBmcm9tIGRhdGEge3R8eHx5fSBvYmplY3RzKS5cblx0XHQgKiAtICdsYWJlbHMnOiBnZW5lcmF0ZXMgdGlja3MgZnJvbSB1c2VyIGdpdmVuIGBkYXRhLmxhYmVsc2AgdmFsdWVzIE9OTFkuXG5cdFx0ICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9wdWxsLzQ1MDdcblx0XHQgKiBAc2luY2UgMi43LjBcblx0XHQgKi9cblx0XHRzb3VyY2U6ICdhdXRvJyxcblxuXHRcdG1ham9yOiB7XG5cdFx0XHRlbmFibGVkOiBmYWxzZVxuXHRcdH1cblx0fVxufTtcblxudmFyIHNjYWxlX3RpbWUgPSBjb3JlX3NjYWxlLmV4dGVuZCh7XG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMubWVyZ2VUaWNrc09wdGlvbnMoKTtcblx0XHRjb3JlX3NjYWxlLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyk7XG5cdH0sXG5cblx0dXBkYXRlOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciBvcHRpb25zID0gbWUub3B0aW9ucztcblx0XHR2YXIgdGltZSA9IG9wdGlvbnMudGltZSB8fCAob3B0aW9ucy50aW1lID0ge30pO1xuXHRcdHZhciBhZGFwdGVyID0gbWUuX2FkYXB0ZXIgPSBuZXcgY29yZV9hZGFwdGVycy5fZGF0ZShvcHRpb25zLmFkYXB0ZXJzLmRhdGUpO1xuXG5cdFx0Ly8gREVQUkVDQVRJT05TOiBvdXRwdXQgYSBtZXNzYWdlIG9ubHkgb25lIHRpbWUgcGVyIHVwZGF0ZVxuXHRcdGlmICh0aW1lLmZvcm1hdCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdvcHRpb25zLnRpbWUuZm9ybWF0IGlzIGRlcHJlY2F0ZWQgYW5kIHJlcGxhY2VkIGJ5IG9wdGlvbnMudGltZS5wYXJzZXIuJyk7XG5cdFx0fVxuXG5cdFx0Ly8gQmFja3dhcmQgY29tcGF0aWJpbGl0eTogYmVmb3JlIGludHJvZHVjaW5nIGFkYXB0ZXIsIGBkaXNwbGF5Rm9ybWF0c2Agd2FzXG5cdFx0Ly8gc3VwcG9zZWQgdG8gY29udGFpbiAqYWxsKiB1bml0L3N0cmluZyBwYWlycyBidXQgdGhpcyBjYW4ndCBiZSByZXNvbHZlZFxuXHRcdC8vIHdoZW4gbG9hZGluZyB0aGUgc2NhbGUgKGFkYXB0ZXJzIGFyZSBsb2FkZWQgYWZ0ZXJ3YXJkKSwgc28gbGV0J3MgcG9wdWxhdGVcblx0XHQvLyBtaXNzaW5nIGZvcm1hdHMgb24gdXBkYXRlXG5cdFx0aGVscGVycyQxLm1lcmdlSWYodGltZS5kaXNwbGF5Rm9ybWF0cywgYWRhcHRlci5mb3JtYXRzKCkpO1xuXG5cdFx0cmV0dXJuIGNvcmVfc2NhbGUucHJvdG90eXBlLnVwZGF0ZS5hcHBseShtZSwgYXJndW1lbnRzKTtcblx0fSxcblxuXHQvKipcblx0ICogQWxsb3dzIGRhdGEgdG8gYmUgcmVmZXJlbmNlZCB2aWEgJ3QnIGF0dHJpYnV0ZVxuXHQgKi9cblx0Z2V0UmlnaHRWYWx1ZTogZnVuY3Rpb24ocmF3VmFsdWUpIHtcblx0XHRpZiAocmF3VmFsdWUgJiYgcmF3VmFsdWUudCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyYXdWYWx1ZSA9IHJhd1ZhbHVlLnQ7XG5cdFx0fVxuXHRcdHJldHVybiBjb3JlX3NjYWxlLnByb3RvdHlwZS5nZXRSaWdodFZhbHVlLmNhbGwodGhpcywgcmF3VmFsdWUpO1xuXHR9LFxuXG5cdGRldGVybWluZURhdGFMaW1pdHM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIGNoYXJ0ID0gbWUuY2hhcnQ7XG5cdFx0dmFyIGFkYXB0ZXIgPSBtZS5fYWRhcHRlcjtcblx0XHR2YXIgdGltZU9wdHMgPSBtZS5vcHRpb25zLnRpbWU7XG5cdFx0dmFyIHVuaXQgPSB0aW1lT3B0cy51bml0IHx8ICdkYXknO1xuXHRcdHZhciBtaW4gPSBNQVhfSU5URUdFUjtcblx0XHR2YXIgbWF4ID0gTUlOX0lOVEVHRVI7XG5cdFx0dmFyIHRpbWVzdGFtcHMgPSBbXTtcblx0XHR2YXIgZGF0YXNldHMgPSBbXTtcblx0XHR2YXIgbGFiZWxzID0gW107XG5cdFx0dmFyIGksIGosIGlsZW4sIGpsZW4sIGRhdGEsIHRpbWVzdGFtcDtcblx0XHR2YXIgZGF0YUxhYmVscyA9IGNoYXJ0LmRhdGEubGFiZWxzIHx8IFtdO1xuXG5cdFx0Ly8gQ29udmVydCBsYWJlbHMgdG8gdGltZXN0YW1wc1xuXHRcdGZvciAoaSA9IDAsIGlsZW4gPSBkYXRhTGFiZWxzLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xuXHRcdFx0bGFiZWxzLnB1c2gocGFyc2UobWUsIGRhdGFMYWJlbHNbaV0pKTtcblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IGRhdGEgdG8gdGltZXN0YW1wc1xuXHRcdGZvciAoaSA9IDAsIGlsZW4gPSAoY2hhcnQuZGF0YS5kYXRhc2V0cyB8fCBbXSkubGVuZ3RoOyBpIDwgaWxlbjsgKytpKSB7XG5cdFx0XHRpZiAoY2hhcnQuaXNEYXRhc2V0VmlzaWJsZShpKSkge1xuXHRcdFx0XHRkYXRhID0gY2hhcnQuZGF0YS5kYXRhc2V0c1tpXS5kYXRhO1xuXG5cdFx0XHRcdC8vIExldCdzIGNvbnNpZGVyIHRoYXQgYWxsIGRhdGEgaGF2ZSB0aGUgc2FtZSBmb3JtYXQuXG5cdFx0XHRcdGlmIChoZWxwZXJzJDEuaXNPYmplY3QoZGF0YVswXSkpIHtcblx0XHRcdFx0XHRkYXRhc2V0c1tpXSA9IFtdO1xuXG5cdFx0XHRcdFx0Zm9yIChqID0gMCwgamxlbiA9IGRhdGEubGVuZ3RoOyBqIDwgamxlbjsgKytqKSB7XG5cdFx0XHRcdFx0XHR0aW1lc3RhbXAgPSBwYXJzZShtZSwgZGF0YVtqXSk7XG5cdFx0XHRcdFx0XHR0aW1lc3RhbXBzLnB1c2godGltZXN0YW1wKTtcblx0XHRcdFx0XHRcdGRhdGFzZXRzW2ldW2pdID0gdGltZXN0YW1wO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRmb3IgKGogPSAwLCBqbGVuID0gbGFiZWxzLmxlbmd0aDsgaiA8IGpsZW47ICsraikge1xuXHRcdFx0XHRcdFx0dGltZXN0YW1wcy5wdXNoKGxhYmVsc1tqXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRhdGFzZXRzW2ldID0gbGFiZWxzLnNsaWNlKDApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkYXRhc2V0c1tpXSA9IFtdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChsYWJlbHMubGVuZ3RoKSB7XG5cdFx0XHQvLyBTb3J0IGxhYmVscyAqKmFmdGVyKiogZGF0YSBoYXZlIGJlZW4gY29udmVydGVkXG5cdFx0XHRsYWJlbHMgPSBhcnJheVVuaXF1ZShsYWJlbHMpLnNvcnQoc29ydGVyKTtcblx0XHRcdG1pbiA9IE1hdGgubWluKG1pbiwgbGFiZWxzWzBdKTtcblx0XHRcdG1heCA9IE1hdGgubWF4KG1heCwgbGFiZWxzW2xhYmVscy5sZW5ndGggLSAxXSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRpbWVzdGFtcHMubGVuZ3RoKSB7XG5cdFx0XHR0aW1lc3RhbXBzID0gYXJyYXlVbmlxdWUodGltZXN0YW1wcykuc29ydChzb3J0ZXIpO1xuXHRcdFx0bWluID0gTWF0aC5taW4obWluLCB0aW1lc3RhbXBzWzBdKTtcblx0XHRcdG1heCA9IE1hdGgubWF4KG1heCwgdGltZXN0YW1wc1t0aW1lc3RhbXBzLmxlbmd0aCAtIDFdKTtcblx0XHR9XG5cblx0XHRtaW4gPSBwYXJzZShtZSwgdGltZU9wdHMubWluKSB8fCBtaW47XG5cdFx0bWF4ID0gcGFyc2UobWUsIHRpbWVPcHRzLm1heCkgfHwgbWF4O1xuXG5cdFx0Ly8gSW4gY2FzZSB0aGVyZSBpcyBubyB2YWxpZCBtaW4vbWF4LCBzZXQgbGltaXRzIGJhc2VkIG9uIHVuaXQgdGltZSBvcHRpb25cblx0XHRtaW4gPSBtaW4gPT09IE1BWF9JTlRFR0VSID8gK2FkYXB0ZXIuc3RhcnRPZihEYXRlLm5vdygpLCB1bml0KSA6IG1pbjtcblx0XHRtYXggPSBtYXggPT09IE1JTl9JTlRFR0VSID8gK2FkYXB0ZXIuZW5kT2YoRGF0ZS5ub3coKSwgdW5pdCkgKyAxIDogbWF4O1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgbWF4IGlzIHN0cmljdGx5IGhpZ2hlciB0aGFuIG1pbiAocmVxdWlyZWQgYnkgdGhlIGxvb2t1cCB0YWJsZSlcblx0XHRtZS5taW4gPSBNYXRoLm1pbihtaW4sIG1heCk7XG5cdFx0bWUubWF4ID0gTWF0aC5tYXgobWluICsgMSwgbWF4KTtcblxuXHRcdC8vIFBSSVZBVEVcblx0XHRtZS5faG9yaXpvbnRhbCA9IG1lLmlzSG9yaXpvbnRhbCgpO1xuXHRcdG1lLl90YWJsZSA9IFtdO1xuXHRcdG1lLl90aW1lc3RhbXBzID0ge1xuXHRcdFx0ZGF0YTogdGltZXN0YW1wcyxcblx0XHRcdGRhdGFzZXRzOiBkYXRhc2V0cyxcblx0XHRcdGxhYmVsczogbGFiZWxzXG5cdFx0fTtcblx0fSxcblxuXHRidWlsZFRpY2tzOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciBtaW4gPSBtZS5taW47XG5cdFx0dmFyIG1heCA9IG1lLm1heDtcblx0XHR2YXIgb3B0aW9ucyA9IG1lLm9wdGlvbnM7XG5cdFx0dmFyIHRpbWVPcHRzID0gb3B0aW9ucy50aW1lO1xuXHRcdHZhciB0aW1lc3RhbXBzID0gW107XG5cdFx0dmFyIHRpY2tzID0gW107XG5cdFx0dmFyIGksIGlsZW4sIHRpbWVzdGFtcDtcblxuXHRcdHN3aXRjaCAob3B0aW9ucy50aWNrcy5zb3VyY2UpIHtcblx0XHRjYXNlICdkYXRhJzpcblx0XHRcdHRpbWVzdGFtcHMgPSBtZS5fdGltZXN0YW1wcy5kYXRhO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnbGFiZWxzJzpcblx0XHRcdHRpbWVzdGFtcHMgPSBtZS5fdGltZXN0YW1wcy5sYWJlbHM7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdhdXRvJzpcblx0XHRkZWZhdWx0OlxuXHRcdFx0dGltZXN0YW1wcyA9IGdlbmVyYXRlKG1lLCBtaW4sIG1heCwgbWUuZ2V0TGFiZWxDYXBhY2l0eShtaW4pLCBvcHRpb25zKTtcblx0XHR9XG5cblx0XHRpZiAob3B0aW9ucy5ib3VuZHMgPT09ICd0aWNrcycgJiYgdGltZXN0YW1wcy5sZW5ndGgpIHtcblx0XHRcdG1pbiA9IHRpbWVzdGFtcHNbMF07XG5cdFx0XHRtYXggPSB0aW1lc3RhbXBzW3RpbWVzdGFtcHMubGVuZ3RoIC0gMV07XG5cdFx0fVxuXG5cdFx0Ly8gRW5mb3JjZSBsaW1pdHMgd2l0aCB1c2VyIG1pbi9tYXggb3B0aW9uc1xuXHRcdG1pbiA9IHBhcnNlKG1lLCB0aW1lT3B0cy5taW4pIHx8IG1pbjtcblx0XHRtYXggPSBwYXJzZShtZSwgdGltZU9wdHMubWF4KSB8fCBtYXg7XG5cblx0XHQvLyBSZW1vdmUgdGlja3Mgb3V0c2lkZSB0aGUgbWluL21heCByYW5nZVxuXHRcdGZvciAoaSA9IDAsIGlsZW4gPSB0aW1lc3RhbXBzLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xuXHRcdFx0dGltZXN0YW1wID0gdGltZXN0YW1wc1tpXTtcblx0XHRcdGlmICh0aW1lc3RhbXAgPj0gbWluICYmIHRpbWVzdGFtcCA8PSBtYXgpIHtcblx0XHRcdFx0dGlja3MucHVzaCh0aW1lc3RhbXApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdG1lLm1pbiA9IG1pbjtcblx0XHRtZS5tYXggPSBtYXg7XG5cblx0XHQvLyBQUklWQVRFXG5cdFx0bWUuX3VuaXQgPSB0aW1lT3B0cy51bml0IHx8IGRldGVybWluZVVuaXRGb3JGb3JtYXR0aW5nKG1lLCB0aWNrcywgdGltZU9wdHMubWluVW5pdCwgbWUubWluLCBtZS5tYXgpO1xuXHRcdG1lLl9tYWpvclVuaXQgPSBkZXRlcm1pbmVNYWpvclVuaXQobWUuX3VuaXQpO1xuXHRcdG1lLl90YWJsZSA9IGJ1aWxkTG9va3VwVGFibGUobWUuX3RpbWVzdGFtcHMuZGF0YSwgbWluLCBtYXgsIG9wdGlvbnMuZGlzdHJpYnV0aW9uKTtcblx0XHRtZS5fb2Zmc2V0cyA9IGNvbXB1dGVPZmZzZXRzKG1lLl90YWJsZSwgdGlja3MsIG1pbiwgbWF4LCBvcHRpb25zKTtcblxuXHRcdGlmIChvcHRpb25zLnRpY2tzLnJldmVyc2UpIHtcblx0XHRcdHRpY2tzLnJldmVyc2UoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGlja3NGcm9tVGltZXN0YW1wcyhtZSwgdGlja3MsIG1lLl9tYWpvclVuaXQpO1xuXHR9LFxuXG5cdGdldExhYmVsRm9ySW5kZXg6IGZ1bmN0aW9uKGluZGV4LCBkYXRhc2V0SW5kZXgpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciBhZGFwdGVyID0gbWUuX2FkYXB0ZXI7XG5cdFx0dmFyIGRhdGEgPSBtZS5jaGFydC5kYXRhO1xuXHRcdHZhciB0aW1lT3B0cyA9IG1lLm9wdGlvbnMudGltZTtcblx0XHR2YXIgbGFiZWwgPSBkYXRhLmxhYmVscyAmJiBpbmRleCA8IGRhdGEubGFiZWxzLmxlbmd0aCA/IGRhdGEubGFiZWxzW2luZGV4XSA6ICcnO1xuXHRcdHZhciB2YWx1ZSA9IGRhdGEuZGF0YXNldHNbZGF0YXNldEluZGV4XS5kYXRhW2luZGV4XTtcblxuXHRcdGlmIChoZWxwZXJzJDEuaXNPYmplY3QodmFsdWUpKSB7XG5cdFx0XHRsYWJlbCA9IG1lLmdldFJpZ2h0VmFsdWUodmFsdWUpO1xuXHRcdH1cblx0XHRpZiAodGltZU9wdHMudG9vbHRpcEZvcm1hdCkge1xuXHRcdFx0cmV0dXJuIGFkYXB0ZXIuZm9ybWF0KHRvVGltZXN0YW1wKG1lLCBsYWJlbCksIHRpbWVPcHRzLnRvb2x0aXBGb3JtYXQpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIGxhYmVsID09PSAnc3RyaW5nJykge1xuXHRcdFx0cmV0dXJuIGxhYmVsO1xuXHRcdH1cblx0XHRyZXR1cm4gYWRhcHRlci5mb3JtYXQodG9UaW1lc3RhbXAobWUsIGxhYmVsKSwgdGltZU9wdHMuZGlzcGxheUZvcm1hdHMuZGF0ZXRpbWUpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiB0byBmb3JtYXQgYW4gaW5kaXZpZHVhbCB0aWNrIG1hcmtcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHRpY2tGb3JtYXRGdW5jdGlvbjogZnVuY3Rpb24odGltZSwgaW5kZXgsIHRpY2tzLCBmb3JtYXQpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciBhZGFwdGVyID0gbWUuX2FkYXB0ZXI7XG5cdFx0dmFyIG9wdGlvbnMgPSBtZS5vcHRpb25zO1xuXHRcdHZhciBmb3JtYXRzID0gb3B0aW9ucy50aW1lLmRpc3BsYXlGb3JtYXRzO1xuXHRcdHZhciBtaW5vckZvcm1hdCA9IGZvcm1hdHNbbWUuX3VuaXRdO1xuXHRcdHZhciBtYWpvclVuaXQgPSBtZS5fbWFqb3JVbml0O1xuXHRcdHZhciBtYWpvckZvcm1hdCA9IGZvcm1hdHNbbWFqb3JVbml0XTtcblx0XHR2YXIgbWFqb3JUaW1lID0gK2FkYXB0ZXIuc3RhcnRPZih0aW1lLCBtYWpvclVuaXQpO1xuXHRcdHZhciBtYWpvclRpY2tPcHRzID0gb3B0aW9ucy50aWNrcy5tYWpvcjtcblx0XHR2YXIgbWFqb3IgPSBtYWpvclRpY2tPcHRzLmVuYWJsZWQgJiYgbWFqb3JVbml0ICYmIG1ham9yRm9ybWF0ICYmIHRpbWUgPT09IG1ham9yVGltZTtcblx0XHR2YXIgbGFiZWwgPSBhZGFwdGVyLmZvcm1hdCh0aW1lLCBmb3JtYXQgPyBmb3JtYXQgOiBtYWpvciA/IG1ham9yRm9ybWF0IDogbWlub3JGb3JtYXQpO1xuXHRcdHZhciB0aWNrT3B0cyA9IG1ham9yID8gbWFqb3JUaWNrT3B0cyA6IG9wdGlvbnMudGlja3MubWlub3I7XG5cdFx0dmFyIGZvcm1hdHRlciA9IHZhbHVlT3JEZWZhdWx0JGModGlja09wdHMuY2FsbGJhY2ssIHRpY2tPcHRzLnVzZXJDYWxsYmFjayk7XG5cblx0XHRyZXR1cm4gZm9ybWF0dGVyID8gZm9ybWF0dGVyKGxhYmVsLCBpbmRleCwgdGlja3MpIDogbGFiZWw7XG5cdH0sXG5cblx0Y29udmVydFRpY2tzVG9MYWJlbHM6IGZ1bmN0aW9uKHRpY2tzKSB7XG5cdFx0dmFyIGxhYmVscyA9IFtdO1xuXHRcdHZhciBpLCBpbGVuO1xuXG5cdFx0Zm9yIChpID0gMCwgaWxlbiA9IHRpY2tzLmxlbmd0aDsgaSA8IGlsZW47ICsraSkge1xuXHRcdFx0bGFiZWxzLnB1c2godGhpcy50aWNrRm9ybWF0RnVuY3Rpb24odGlja3NbaV0udmFsdWUsIGksIHRpY2tzKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGxhYmVscztcblx0fSxcblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldFBpeGVsRm9yT2Zmc2V0OiBmdW5jdGlvbih0aW1lKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgaXNSZXZlcnNlID0gbWUub3B0aW9ucy50aWNrcy5yZXZlcnNlO1xuXHRcdHZhciBzaXplID0gbWUuX2hvcml6b250YWwgPyBtZS53aWR0aCA6IG1lLmhlaWdodDtcblx0XHR2YXIgc3RhcnQgPSBtZS5faG9yaXpvbnRhbCA/IGlzUmV2ZXJzZSA/IG1lLnJpZ2h0IDogbWUubGVmdCA6IGlzUmV2ZXJzZSA/IG1lLmJvdHRvbSA6IG1lLnRvcDtcblx0XHR2YXIgcG9zID0gaW50ZXJwb2xhdGUkMShtZS5fdGFibGUsICd0aW1lJywgdGltZSwgJ3BvcycpO1xuXHRcdHZhciBvZmZzZXQgPSBzaXplICogKG1lLl9vZmZzZXRzLnN0YXJ0ICsgcG9zKSAvIChtZS5fb2Zmc2V0cy5zdGFydCArIDEgKyBtZS5fb2Zmc2V0cy5lbmQpO1xuXG5cdFx0cmV0dXJuIGlzUmV2ZXJzZSA/IHN0YXJ0IC0gb2Zmc2V0IDogc3RhcnQgKyBvZmZzZXQ7XG5cdH0sXG5cblx0Z2V0UGl4ZWxGb3JWYWx1ZTogZnVuY3Rpb24odmFsdWUsIGluZGV4LCBkYXRhc2V0SW5kZXgpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciB0aW1lID0gbnVsbDtcblxuXHRcdGlmIChpbmRleCAhPT0gdW5kZWZpbmVkICYmIGRhdGFzZXRJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aW1lID0gbWUuX3RpbWVzdGFtcHMuZGF0YXNldHNbZGF0YXNldEluZGV4XVtpbmRleF07XG5cdFx0fVxuXG5cdFx0aWYgKHRpbWUgPT09IG51bGwpIHtcblx0XHRcdHRpbWUgPSBwYXJzZShtZSwgdmFsdWUpO1xuXHRcdH1cblxuXHRcdGlmICh0aW1lICE9PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gbWUuZ2V0UGl4ZWxGb3JPZmZzZXQodGltZSk7XG5cdFx0fVxuXHR9LFxuXG5cdGdldFBpeGVsRm9yVGljazogZnVuY3Rpb24oaW5kZXgpIHtcblx0XHR2YXIgdGlja3MgPSB0aGlzLmdldFRpY2tzKCk7XG5cdFx0cmV0dXJuIGluZGV4ID49IDAgJiYgaW5kZXggPCB0aWNrcy5sZW5ndGggP1xuXHRcdFx0dGhpcy5nZXRQaXhlbEZvck9mZnNldCh0aWNrc1tpbmRleF0udmFsdWUpIDpcblx0XHRcdG51bGw7XG5cdH0sXG5cblx0Z2V0VmFsdWVGb3JQaXhlbDogZnVuY3Rpb24ocGl4ZWwpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciBzaXplID0gbWUuX2hvcml6b250YWwgPyBtZS53aWR0aCA6IG1lLmhlaWdodDtcblx0XHR2YXIgc3RhcnQgPSBtZS5faG9yaXpvbnRhbCA/IG1lLmxlZnQgOiBtZS50b3A7XG5cdFx0dmFyIHBvcyA9IChzaXplID8gKHBpeGVsIC0gc3RhcnQpIC8gc2l6ZSA6IDApICogKG1lLl9vZmZzZXRzLnN0YXJ0ICsgMSArIG1lLl9vZmZzZXRzLnN0YXJ0KSAtIG1lLl9vZmZzZXRzLmVuZDtcblx0XHR2YXIgdGltZSA9IGludGVycG9sYXRlJDEobWUuX3RhYmxlLCAncG9zJywgcG9zLCAndGltZScpO1xuXG5cdFx0Ly8gREVQUkVDQVRJT04sIHdlIHNob3VsZCByZXR1cm4gdGltZSBkaXJlY3RseVxuXHRcdHJldHVybiBtZS5fYWRhcHRlci5fY3JlYXRlKHRpbWUpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDcnVkZSBhcHByb3hpbWF0aW9uIG9mIHdoYXQgdGhlIGxhYmVsIHdpZHRoIG1pZ2h0IGJlXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRnZXRMYWJlbFdpZHRoOiBmdW5jdGlvbihsYWJlbCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIHRpY2tzT3B0cyA9IG1lLm9wdGlvbnMudGlja3M7XG5cdFx0dmFyIHRpY2tMYWJlbFdpZHRoID0gbWUuY3R4Lm1lYXN1cmVUZXh0KGxhYmVsKS53aWR0aDtcblx0XHR2YXIgYW5nbGUgPSBoZWxwZXJzJDEudG9SYWRpYW5zKHRpY2tzT3B0cy5tYXhSb3RhdGlvbik7XG5cdFx0dmFyIGNvc1JvdGF0aW9uID0gTWF0aC5jb3MoYW5nbGUpO1xuXHRcdHZhciBzaW5Sb3RhdGlvbiA9IE1hdGguc2luKGFuZ2xlKTtcblx0XHR2YXIgdGlja0ZvbnRTaXplID0gdmFsdWVPckRlZmF1bHQkYyh0aWNrc09wdHMuZm9udFNpemUsIGNvcmVfZGVmYXVsdHMuZ2xvYmFsLmRlZmF1bHRGb250U2l6ZSk7XG5cblx0XHRyZXR1cm4gKHRpY2tMYWJlbFdpZHRoICogY29zUm90YXRpb24pICsgKHRpY2tGb250U2l6ZSAqIHNpblJvdGF0aW9uKTtcblx0fSxcblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldExhYmVsQ2FwYWNpdHk6IGZ1bmN0aW9uKGV4YW1wbGVUaW1lKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblxuXHRcdC8vIHBpY2sgdGhlIGxvbmdlc3QgZm9ybWF0IChtaWxsaXNlY29uZHMpIGZvciBndWVzdGltYXRpb25cblx0XHR2YXIgZm9ybWF0ID0gbWUub3B0aW9ucy50aW1lLmRpc3BsYXlGb3JtYXRzLm1pbGxpc2Vjb25kO1xuXHRcdHZhciBleGFtcGxlTGFiZWwgPSBtZS50aWNrRm9ybWF0RnVuY3Rpb24oZXhhbXBsZVRpbWUsIDAsIFtdLCBmb3JtYXQpO1xuXHRcdHZhciB0aWNrTGFiZWxXaWR0aCA9IG1lLmdldExhYmVsV2lkdGgoZXhhbXBsZUxhYmVsKTtcblx0XHR2YXIgaW5uZXJXaWR0aCA9IG1lLmlzSG9yaXpvbnRhbCgpID8gbWUud2lkdGggOiBtZS5oZWlnaHQ7XG5cdFx0dmFyIGNhcGFjaXR5ID0gTWF0aC5mbG9vcihpbm5lcldpZHRoIC8gdGlja0xhYmVsV2lkdGgpO1xuXG5cdFx0cmV0dXJuIGNhcGFjaXR5ID4gMCA/IGNhcGFjaXR5IDogMTtcblx0fVxufSk7XG5cbi8vIElOVEVSTkFMOiBzdGF0aWMgZGVmYXVsdCBvcHRpb25zLCByZWdpc3RlcmVkIGluIHNyYy9pbmRleC5qc1xudmFyIF9kZWZhdWx0cyQ0ID0gZGVmYXVsdENvbmZpZyQ0O1xuc2NhbGVfdGltZS5fZGVmYXVsdHMgPSBfZGVmYXVsdHMkNDtcblxudmFyIHNjYWxlcyA9IHtcblx0Y2F0ZWdvcnk6IHNjYWxlX2NhdGVnb3J5LFxuXHRsaW5lYXI6IHNjYWxlX2xpbmVhcixcblx0bG9nYXJpdGhtaWM6IHNjYWxlX2xvZ2FyaXRobWljLFxuXHRyYWRpYWxMaW5lYXI6IHNjYWxlX3JhZGlhbExpbmVhcixcblx0dGltZTogc2NhbGVfdGltZVxufTtcblxudmFyIEZPUk1BVFMgPSB7XG5cdGRhdGV0aW1lOiAnTU1NIEQsIFlZWVksIGg6bW06c3MgYScsXG5cdG1pbGxpc2Vjb25kOiAnaDptbTpzcy5TU1MgYScsXG5cdHNlY29uZDogJ2g6bW06c3MgYScsXG5cdG1pbnV0ZTogJ2g6bW0gYScsXG5cdGhvdXI6ICdoQScsXG5cdGRheTogJ01NTSBEJyxcblx0d2VlazogJ2xsJyxcblx0bW9udGg6ICdNTU0gWVlZWScsXG5cdHF1YXJ0ZXI6ICdbUV1RIC0gWVlZWScsXG5cdHllYXI6ICdZWVlZJ1xufTtcblxuY29yZV9hZGFwdGVycy5fZGF0ZS5vdmVycmlkZSh0eXBlb2YgbW9tZW50ID09PSAnZnVuY3Rpb24nID8ge1xuXHRfaWQ6ICdtb21lbnQnLCAvLyBERUJVRyBPTkxZXG5cblx0Zm9ybWF0czogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIEZPUk1BVFM7XG5cdH0sXG5cblx0cGFyc2U6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgZm9ybWF0ID09PSAnc3RyaW5nJykge1xuXHRcdFx0dmFsdWUgPSBtb21lbnQodmFsdWUsIGZvcm1hdCk7XG5cdFx0fSBlbHNlIGlmICghKHZhbHVlIGluc3RhbmNlb2YgbW9tZW50KSkge1xuXHRcdFx0dmFsdWUgPSBtb21lbnQodmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUudmFsdWVPZigpIDogbnVsbDtcblx0fSxcblxuXHRmb3JtYXQ6IGZ1bmN0aW9uKHRpbWUsIGZvcm1hdCkge1xuXHRcdHJldHVybiBtb21lbnQodGltZSkuZm9ybWF0KGZvcm1hdCk7XG5cdH0sXG5cblx0YWRkOiBmdW5jdGlvbih0aW1lLCBhbW91bnQsIHVuaXQpIHtcblx0XHRyZXR1cm4gbW9tZW50KHRpbWUpLmFkZChhbW91bnQsIHVuaXQpLnZhbHVlT2YoKTtcblx0fSxcblxuXHRkaWZmOiBmdW5jdGlvbihtYXgsIG1pbiwgdW5pdCkge1xuXHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24obW9tZW50KG1heCkuZGlmZihtb21lbnQobWluKSkpLmFzKHVuaXQpO1xuXHR9LFxuXG5cdHN0YXJ0T2Y6IGZ1bmN0aW9uKHRpbWUsIHVuaXQsIHdlZWtkYXkpIHtcblx0XHR0aW1lID0gbW9tZW50KHRpbWUpO1xuXHRcdGlmICh1bml0ID09PSAnaXNvV2VlaycpIHtcblx0XHRcdHJldHVybiB0aW1lLmlzb1dlZWtkYXkod2Vla2RheSkudmFsdWVPZigpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGltZS5zdGFydE9mKHVuaXQpLnZhbHVlT2YoKTtcblx0fSxcblxuXHRlbmRPZjogZnVuY3Rpb24odGltZSwgdW5pdCkge1xuXHRcdHJldHVybiBtb21lbnQodGltZSkuZW5kT2YodW5pdCkudmFsdWVPZigpO1xuXHR9LFxuXG5cdC8vIERFUFJFQ0FUSU9OU1xuXG5cdC8qKlxuXHQgKiBQcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHNjYWxlLmdldFZhbHVlRm9yUGl4ZWwoKS5cblx0ICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAyLjguMFxuXHQgKiBAdG9kbyByZW1vdmUgYXQgdmVyc2lvbiAzXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfY3JlYXRlOiBmdW5jdGlvbih0aW1lKSB7XG5cdFx0cmV0dXJuIG1vbWVudCh0aW1lKTtcblx0fSxcbn0gOiB7fSk7XG5cbmNvcmVfZGVmYXVsdHMuX3NldCgnZ2xvYmFsJywge1xuXHRwbHVnaW5zOiB7XG5cdFx0ZmlsbGVyOiB7XG5cdFx0XHRwcm9wYWdhdGU6IHRydWVcblx0XHR9XG5cdH1cbn0pO1xuXG52YXIgbWFwcGVycyA9IHtcblx0ZGF0YXNldDogZnVuY3Rpb24oc291cmNlKSB7XG5cdFx0dmFyIGluZGV4ID0gc291cmNlLmZpbGw7XG5cdFx0dmFyIGNoYXJ0ID0gc291cmNlLmNoYXJ0O1xuXHRcdHZhciBtZXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoaW5kZXgpO1xuXHRcdHZhciB2aXNpYmxlID0gbWV0YSAmJiBjaGFydC5pc0RhdGFzZXRWaXNpYmxlKGluZGV4KTtcblx0XHR2YXIgcG9pbnRzID0gKHZpc2libGUgJiYgbWV0YS5kYXRhc2V0Ll9jaGlsZHJlbikgfHwgW107XG5cdFx0dmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggfHwgMDtcblxuXHRcdHJldHVybiAhbGVuZ3RoID8gbnVsbCA6IGZ1bmN0aW9uKHBvaW50LCBpKSB7XG5cdFx0XHRyZXR1cm4gKGkgPCBsZW5ndGggJiYgcG9pbnRzW2ldLl92aWV3KSB8fCBudWxsO1xuXHRcdH07XG5cdH0sXG5cblx0Ym91bmRhcnk6IGZ1bmN0aW9uKHNvdXJjZSkge1xuXHRcdHZhciBib3VuZGFyeSA9IHNvdXJjZS5ib3VuZGFyeTtcblx0XHR2YXIgeCA9IGJvdW5kYXJ5ID8gYm91bmRhcnkueCA6IG51bGw7XG5cdFx0dmFyIHkgPSBib3VuZGFyeSA/IGJvdW5kYXJ5LnkgOiBudWxsO1xuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHBvaW50KSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR4OiB4ID09PSBudWxsID8gcG9pbnQueCA6IHgsXG5cdFx0XHRcdHk6IHkgPT09IG51bGwgPyBwb2ludC55IDogeSxcblx0XHRcdH07XG5cdFx0fTtcblx0fVxufTtcblxuLy8gQHRvZG8gaWYgKGZpbGxbMF0gPT09ICcjJylcbmZ1bmN0aW9uIGRlY29kZUZpbGwoZWwsIGluZGV4LCBjb3VudCkge1xuXHR2YXIgbW9kZWwgPSBlbC5fbW9kZWwgfHwge307XG5cdHZhciBmaWxsID0gbW9kZWwuZmlsbDtcblx0dmFyIHRhcmdldDtcblxuXHRpZiAoZmlsbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0ZmlsbCA9ICEhbW9kZWwuYmFja2dyb3VuZENvbG9yO1xuXHR9XG5cblx0aWYgKGZpbGwgPT09IGZhbHNlIHx8IGZpbGwgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRpZiAoZmlsbCA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybiAnb3JpZ2luJztcblx0fVxuXG5cdHRhcmdldCA9IHBhcnNlRmxvYXQoZmlsbCwgMTApO1xuXHRpZiAoaXNGaW5pdGUodGFyZ2V0KSAmJiBNYXRoLmZsb29yKHRhcmdldCkgPT09IHRhcmdldCkge1xuXHRcdGlmIChmaWxsWzBdID09PSAnLScgfHwgZmlsbFswXSA9PT0gJysnKSB7XG5cdFx0XHR0YXJnZXQgPSBpbmRleCArIHRhcmdldDtcblx0XHR9XG5cblx0XHRpZiAodGFyZ2V0ID09PSBpbmRleCB8fCB0YXJnZXQgPCAwIHx8IHRhcmdldCA+PSBjb3VudCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0YXJnZXQ7XG5cdH1cblxuXHRzd2l0Y2ggKGZpbGwpIHtcblx0Ly8gY29tcGF0aWJpbGl0eVxuXHRjYXNlICdib3R0b20nOlxuXHRcdHJldHVybiAnc3RhcnQnO1xuXHRjYXNlICd0b3AnOlxuXHRcdHJldHVybiAnZW5kJztcblx0Y2FzZSAnemVybyc6XG5cdFx0cmV0dXJuICdvcmlnaW4nO1xuXHQvLyBzdXBwb3J0ZWQgYm91bmRhcmllc1xuXHRjYXNlICdvcmlnaW4nOlxuXHRjYXNlICdzdGFydCc6XG5cdGNhc2UgJ2VuZCc6XG5cdFx0cmV0dXJuIGZpbGw7XG5cdC8vIGludmFsaWQgZmlsbCB2YWx1ZXNcblx0ZGVmYXVsdDpcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxuZnVuY3Rpb24gY29tcHV0ZUJvdW5kYXJ5KHNvdXJjZSkge1xuXHR2YXIgbW9kZWwgPSBzb3VyY2UuZWwuX21vZGVsIHx8IHt9O1xuXHR2YXIgc2NhbGUgPSBzb3VyY2UuZWwuX3NjYWxlIHx8IHt9O1xuXHR2YXIgZmlsbCA9IHNvdXJjZS5maWxsO1xuXHR2YXIgdGFyZ2V0ID0gbnVsbDtcblx0dmFyIGhvcml6b250YWw7XG5cblx0aWYgKGlzRmluaXRlKGZpbGwpKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5OiB1bnRpbCB2Mywgd2Ugc3RpbGwgbmVlZCB0byBzdXBwb3J0IGJvdW5kYXJ5IHZhbHVlcyBzZXQgb25cblx0Ly8gdGhlIG1vZGVsIChzY2FsZVRvcCwgc2NhbGVCb3R0b20gYW5kIHNjYWxlWmVybykgYmVjYXVzZSBzb21lIGV4dGVybmFsIHBsdWdpbnMgYW5kXG5cdC8vIGNvbnRyb2xsZXJzIG1pZ2h0IHN0aWxsIHVzZSBpdCAoZS5nLiB0aGUgU21pdGggY2hhcnQpLlxuXG5cdGlmIChmaWxsID09PSAnc3RhcnQnKSB7XG5cdFx0dGFyZ2V0ID0gbW9kZWwuc2NhbGVCb3R0b20gPT09IHVuZGVmaW5lZCA/IHNjYWxlLmJvdHRvbSA6IG1vZGVsLnNjYWxlQm90dG9tO1xuXHR9IGVsc2UgaWYgKGZpbGwgPT09ICdlbmQnKSB7XG5cdFx0dGFyZ2V0ID0gbW9kZWwuc2NhbGVUb3AgPT09IHVuZGVmaW5lZCA/IHNjYWxlLnRvcCA6IG1vZGVsLnNjYWxlVG9wO1xuXHR9IGVsc2UgaWYgKG1vZGVsLnNjYWxlWmVybyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dGFyZ2V0ID0gbW9kZWwuc2NhbGVaZXJvO1xuXHR9IGVsc2UgaWYgKHNjYWxlLmdldEJhc2VQb3NpdGlvbikge1xuXHRcdHRhcmdldCA9IHNjYWxlLmdldEJhc2VQb3NpdGlvbigpO1xuXHR9IGVsc2UgaWYgKHNjYWxlLmdldEJhc2VQaXhlbCkge1xuXHRcdHRhcmdldCA9IHNjYWxlLmdldEJhc2VQaXhlbCgpO1xuXHR9XG5cblx0aWYgKHRhcmdldCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldCAhPT0gbnVsbCkge1xuXHRcdGlmICh0YXJnZXQueCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldC55ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiB0YXJnZXQ7XG5cdFx0fVxuXG5cdFx0aWYgKGhlbHBlcnMkMS5pc0Zpbml0ZSh0YXJnZXQpKSB7XG5cdFx0XHRob3Jpem9udGFsID0gc2NhbGUuaXNIb3Jpem9udGFsKCk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR4OiBob3Jpem9udGFsID8gdGFyZ2V0IDogbnVsbCxcblx0XHRcdFx0eTogaG9yaXpvbnRhbCA/IG51bGwgOiB0YXJnZXRcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVUYXJnZXQoc291cmNlcywgaW5kZXgsIHByb3BhZ2F0ZSkge1xuXHR2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG5cdHZhciBmaWxsID0gc291cmNlLmZpbGw7XG5cdHZhciB2aXNpdGVkID0gW2luZGV4XTtcblx0dmFyIHRhcmdldDtcblxuXHRpZiAoIXByb3BhZ2F0ZSkge1xuXHRcdHJldHVybiBmaWxsO1xuXHR9XG5cblx0d2hpbGUgKGZpbGwgIT09IGZhbHNlICYmIHZpc2l0ZWQuaW5kZXhPZihmaWxsKSA9PT0gLTEpIHtcblx0XHRpZiAoIWlzRmluaXRlKGZpbGwpKSB7XG5cdFx0XHRyZXR1cm4gZmlsbDtcblx0XHR9XG5cblx0XHR0YXJnZXQgPSBzb3VyY2VzW2ZpbGxdO1xuXHRcdGlmICghdGFyZ2V0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKHRhcmdldC52aXNpYmxlKSB7XG5cdFx0XHRyZXR1cm4gZmlsbDtcblx0XHR9XG5cblx0XHR2aXNpdGVkLnB1c2goZmlsbCk7XG5cdFx0ZmlsbCA9IHRhcmdldC5maWxsO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVNYXBwZXIoc291cmNlKSB7XG5cdHZhciBmaWxsID0gc291cmNlLmZpbGw7XG5cdHZhciB0eXBlID0gJ2RhdGFzZXQnO1xuXG5cdGlmIChmaWxsID09PSBmYWxzZSkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0aWYgKCFpc0Zpbml0ZShmaWxsKSkge1xuXHRcdHR5cGUgPSAnYm91bmRhcnknO1xuXHR9XG5cblx0cmV0dXJuIG1hcHBlcnNbdHlwZV0oc291cmNlKTtcbn1cblxuZnVuY3Rpb24gaXNEcmF3YWJsZShwb2ludCkge1xuXHRyZXR1cm4gcG9pbnQgJiYgIXBvaW50LnNraXA7XG59XG5cbmZ1bmN0aW9uIGRyYXdBcmVhKGN0eCwgY3VydmUwLCBjdXJ2ZTEsIGxlbjAsIGxlbjEpIHtcblx0dmFyIGk7XG5cblx0aWYgKCFsZW4wIHx8ICFsZW4xKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gYnVpbGRpbmcgZmlyc3QgYXJlYSBjdXJ2ZSAobm9ybWFsKVxuXHRjdHgubW92ZVRvKGN1cnZlMFswXS54LCBjdXJ2ZTBbMF0ueSk7XG5cdGZvciAoaSA9IDE7IGkgPCBsZW4wOyArK2kpIHtcblx0XHRoZWxwZXJzJDEuY2FudmFzLmxpbmVUbyhjdHgsIGN1cnZlMFtpIC0gMV0sIGN1cnZlMFtpXSk7XG5cdH1cblxuXHQvLyBqb2luaW5nIHRoZSB0d28gYXJlYSBjdXJ2ZXNcblx0Y3R4LmxpbmVUbyhjdXJ2ZTFbbGVuMSAtIDFdLngsIGN1cnZlMVtsZW4xIC0gMV0ueSk7XG5cblx0Ly8gYnVpbGRpbmcgb3Bwb3NpdGUgYXJlYSBjdXJ2ZSAocmV2ZXJzZSlcblx0Zm9yIChpID0gbGVuMSAtIDE7IGkgPiAwOyAtLWkpIHtcblx0XHRoZWxwZXJzJDEuY2FudmFzLmxpbmVUbyhjdHgsIGN1cnZlMVtpXSwgY3VydmUxW2kgLSAxXSwgdHJ1ZSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZG9GaWxsKGN0eCwgcG9pbnRzLCBtYXBwZXIsIHZpZXcsIGNvbG9yLCBsb29wKSB7XG5cdHZhciBjb3VudCA9IHBvaW50cy5sZW5ndGg7XG5cdHZhciBzcGFuID0gdmlldy5zcGFuR2Fwcztcblx0dmFyIGN1cnZlMCA9IFtdO1xuXHR2YXIgY3VydmUxID0gW107XG5cdHZhciBsZW4wID0gMDtcblx0dmFyIGxlbjEgPSAwO1xuXHR2YXIgaSwgaWxlbiwgaW5kZXgsIHAwLCBwMSwgZDAsIGQxO1xuXG5cdGN0eC5iZWdpblBhdGgoKTtcblxuXHRmb3IgKGkgPSAwLCBpbGVuID0gKGNvdW50ICsgISFsb29wKTsgaSA8IGlsZW47ICsraSkge1xuXHRcdGluZGV4ID0gaSAlIGNvdW50O1xuXHRcdHAwID0gcG9pbnRzW2luZGV4XS5fdmlldztcblx0XHRwMSA9IG1hcHBlcihwMCwgaW5kZXgsIHZpZXcpO1xuXHRcdGQwID0gaXNEcmF3YWJsZShwMCk7XG5cdFx0ZDEgPSBpc0RyYXdhYmxlKHAxKTtcblxuXHRcdGlmIChkMCAmJiBkMSkge1xuXHRcdFx0bGVuMCA9IGN1cnZlMC5wdXNoKHAwKTtcblx0XHRcdGxlbjEgPSBjdXJ2ZTEucHVzaChwMSk7XG5cdFx0fSBlbHNlIGlmIChsZW4wICYmIGxlbjEpIHtcblx0XHRcdGlmICghc3Bhbikge1xuXHRcdFx0XHRkcmF3QXJlYShjdHgsIGN1cnZlMCwgY3VydmUxLCBsZW4wLCBsZW4xKTtcblx0XHRcdFx0bGVuMCA9IGxlbjEgPSAwO1xuXHRcdFx0XHRjdXJ2ZTAgPSBbXTtcblx0XHRcdFx0Y3VydmUxID0gW107XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoZDApIHtcblx0XHRcdFx0XHRjdXJ2ZTAucHVzaChwMCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGQxKSB7XG5cdFx0XHRcdFx0Y3VydmUxLnB1c2gocDEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZHJhd0FyZWEoY3R4LCBjdXJ2ZTAsIGN1cnZlMSwgbGVuMCwgbGVuMSk7XG5cblx0Y3R4LmNsb3NlUGF0aCgpO1xuXHRjdHguZmlsbFN0eWxlID0gY29sb3I7XG5cdGN0eC5maWxsKCk7XG59XG5cbnZhciBwbHVnaW5fZmlsbGVyID0ge1xuXHRpZDogJ2ZpbGxlcicsXG5cblx0YWZ0ZXJEYXRhc2V0c1VwZGF0ZTogZnVuY3Rpb24oY2hhcnQsIG9wdGlvbnMpIHtcblx0XHR2YXIgY291bnQgPSAoY2hhcnQuZGF0YS5kYXRhc2V0cyB8fCBbXSkubGVuZ3RoO1xuXHRcdHZhciBwcm9wYWdhdGUgPSBvcHRpb25zLnByb3BhZ2F0ZTtcblx0XHR2YXIgc291cmNlcyA9IFtdO1xuXHRcdHZhciBtZXRhLCBpLCBlbCwgc291cmNlO1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcblx0XHRcdG1ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YShpKTtcblx0XHRcdGVsID0gbWV0YS5kYXRhc2V0O1xuXHRcdFx0c291cmNlID0gbnVsbDtcblxuXHRcdFx0aWYgKGVsICYmIGVsLl9tb2RlbCAmJiBlbCBpbnN0YW5jZW9mIGVsZW1lbnRzLkxpbmUpIHtcblx0XHRcdFx0c291cmNlID0ge1xuXHRcdFx0XHRcdHZpc2libGU6IGNoYXJ0LmlzRGF0YXNldFZpc2libGUoaSksXG5cdFx0XHRcdFx0ZmlsbDogZGVjb2RlRmlsbChlbCwgaSwgY291bnQpLFxuXHRcdFx0XHRcdGNoYXJ0OiBjaGFydCxcblx0XHRcdFx0XHRlbDogZWxcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0bWV0YS4kZmlsbGVyID0gc291cmNlO1xuXHRcdFx0c291cmNlcy5wdXNoKHNvdXJjZSk7XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcblx0XHRcdHNvdXJjZSA9IHNvdXJjZXNbaV07XG5cdFx0XHRpZiAoIXNvdXJjZSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0c291cmNlLmZpbGwgPSByZXNvbHZlVGFyZ2V0KHNvdXJjZXMsIGksIHByb3BhZ2F0ZSk7XG5cdFx0XHRzb3VyY2UuYm91bmRhcnkgPSBjb21wdXRlQm91bmRhcnkoc291cmNlKTtcblx0XHRcdHNvdXJjZS5tYXBwZXIgPSBjcmVhdGVNYXBwZXIoc291cmNlKTtcblx0XHR9XG5cdH0sXG5cblx0YmVmb3JlRGF0YXNldERyYXc6IGZ1bmN0aW9uKGNoYXJ0LCBhcmdzKSB7XG5cdFx0dmFyIG1ldGEgPSBhcmdzLm1ldGEuJGZpbGxlcjtcblx0XHRpZiAoIW1ldGEpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgY3R4ID0gY2hhcnQuY3R4O1xuXHRcdHZhciBlbCA9IG1ldGEuZWw7XG5cdFx0dmFyIHZpZXcgPSBlbC5fdmlldztcblx0XHR2YXIgcG9pbnRzID0gZWwuX2NoaWxkcmVuIHx8IFtdO1xuXHRcdHZhciBtYXBwZXIgPSBtZXRhLm1hcHBlcjtcblx0XHR2YXIgY29sb3IgPSB2aWV3LmJhY2tncm91bmRDb2xvciB8fCBjb3JlX2RlZmF1bHRzLmdsb2JhbC5kZWZhdWx0Q29sb3I7XG5cblx0XHRpZiAobWFwcGVyICYmIGNvbG9yICYmIHBvaW50cy5sZW5ndGgpIHtcblx0XHRcdGhlbHBlcnMkMS5jYW52YXMuY2xpcEFyZWEoY3R4LCBjaGFydC5jaGFydEFyZWEpO1xuXHRcdFx0ZG9GaWxsKGN0eCwgcG9pbnRzLCBtYXBwZXIsIHZpZXcsIGNvbG9yLCBlbC5fbG9vcCk7XG5cdFx0XHRoZWxwZXJzJDEuY2FudmFzLnVuY2xpcEFyZWEoY3R4KTtcblx0XHR9XG5cdH1cbn07XG5cbnZhciBub29wJDEgPSBoZWxwZXJzJDEubm9vcDtcbnZhciB2YWx1ZU9yRGVmYXVsdCRkID0gaGVscGVycyQxLnZhbHVlT3JEZWZhdWx0O1xuXG5jb3JlX2RlZmF1bHRzLl9zZXQoJ2dsb2JhbCcsIHtcblx0bGVnZW5kOiB7XG5cdFx0ZGlzcGxheTogdHJ1ZSxcblx0XHRwb3NpdGlvbjogJ3RvcCcsXG5cdFx0ZnVsbFdpZHRoOiB0cnVlLFxuXHRcdHJldmVyc2U6IGZhbHNlLFxuXHRcdHdlaWdodDogMTAwMCxcblxuXHRcdC8vIGEgY2FsbGJhY2sgdGhhdCB3aWxsIGhhbmRsZVxuXHRcdG9uQ2xpY2s6IGZ1bmN0aW9uKGUsIGxlZ2VuZEl0ZW0pIHtcblx0XHRcdHZhciBpbmRleCA9IGxlZ2VuZEl0ZW0uZGF0YXNldEluZGV4O1xuXHRcdFx0dmFyIGNpID0gdGhpcy5jaGFydDtcblx0XHRcdHZhciBtZXRhID0gY2kuZ2V0RGF0YXNldE1ldGEoaW5kZXgpO1xuXG5cdFx0XHQvLyBTZWUgY29udHJvbGxlci5pc0RhdGFzZXRWaXNpYmxlIGNvbW1lbnRcblx0XHRcdG1ldGEuaGlkZGVuID0gbWV0YS5oaWRkZW4gPT09IG51bGwgPyAhY2kuZGF0YS5kYXRhc2V0c1tpbmRleF0uaGlkZGVuIDogbnVsbDtcblxuXHRcdFx0Ly8gV2UgaGlkIGEgZGF0YXNldCAuLi4gcmVyZW5kZXIgdGhlIGNoYXJ0XG5cdFx0XHRjaS51cGRhdGUoKTtcblx0XHR9LFxuXG5cdFx0b25Ib3ZlcjogbnVsbCxcblx0XHRvbkxlYXZlOiBudWxsLFxuXG5cdFx0bGFiZWxzOiB7XG5cdFx0XHRib3hXaWR0aDogNDAsXG5cdFx0XHRwYWRkaW5nOiAxMCxcblx0XHRcdC8vIEdlbmVyYXRlcyBsYWJlbHMgc2hvd24gaW4gdGhlIGxlZ2VuZFxuXHRcdFx0Ly8gVmFsaWQgcHJvcGVydGllcyB0byByZXR1cm46XG5cdFx0XHQvLyB0ZXh0IDogdGV4dCB0byBkaXNwbGF5XG5cdFx0XHQvLyBmaWxsU3R5bGUgOiBmaWxsIG9mIGNvbG91cmVkIGJveFxuXHRcdFx0Ly8gc3Ryb2tlU3R5bGU6IHN0cm9rZSBvZiBjb2xvdXJlZCBib3hcblx0XHRcdC8vIGhpZGRlbiA6IGlmIHRoaXMgbGVnZW5kIGl0ZW0gcmVmZXJzIHRvIGEgaGlkZGVuIGl0ZW1cblx0XHRcdC8vIGxpbmVDYXAgOiBjYXAgc3R5bGUgZm9yIGxpbmVcblx0XHRcdC8vIGxpbmVEYXNoXG5cdFx0XHQvLyBsaW5lRGFzaE9mZnNldCA6XG5cdFx0XHQvLyBsaW5lSm9pbiA6XG5cdFx0XHQvLyBsaW5lV2lkdGggOlxuXHRcdFx0Z2VuZXJhdGVMYWJlbHM6IGZ1bmN0aW9uKGNoYXJ0KSB7XG5cdFx0XHRcdHZhciBkYXRhID0gY2hhcnQuZGF0YTtcblx0XHRcdFx0cmV0dXJuIGhlbHBlcnMkMS5pc0FycmF5KGRhdGEuZGF0YXNldHMpID8gZGF0YS5kYXRhc2V0cy5tYXAoZnVuY3Rpb24oZGF0YXNldCwgaSkge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHR0ZXh0OiBkYXRhc2V0LmxhYmVsLFxuXHRcdFx0XHRcdFx0ZmlsbFN0eWxlOiAoIWhlbHBlcnMkMS5pc0FycmF5KGRhdGFzZXQuYmFja2dyb3VuZENvbG9yKSA/IGRhdGFzZXQuYmFja2dyb3VuZENvbG9yIDogZGF0YXNldC5iYWNrZ3JvdW5kQ29sb3JbMF0pLFxuXHRcdFx0XHRcdFx0aGlkZGVuOiAhY2hhcnQuaXNEYXRhc2V0VmlzaWJsZShpKSxcblx0XHRcdFx0XHRcdGxpbmVDYXA6IGRhdGFzZXQuYm9yZGVyQ2FwU3R5bGUsXG5cdFx0XHRcdFx0XHRsaW5lRGFzaDogZGF0YXNldC5ib3JkZXJEYXNoLFxuXHRcdFx0XHRcdFx0bGluZURhc2hPZmZzZXQ6IGRhdGFzZXQuYm9yZGVyRGFzaE9mZnNldCxcblx0XHRcdFx0XHRcdGxpbmVKb2luOiBkYXRhc2V0LmJvcmRlckpvaW5TdHlsZSxcblx0XHRcdFx0XHRcdGxpbmVXaWR0aDogZGF0YXNldC5ib3JkZXJXaWR0aCxcblx0XHRcdFx0XHRcdHN0cm9rZVN0eWxlOiBkYXRhc2V0LmJvcmRlckNvbG9yLFxuXHRcdFx0XHRcdFx0cG9pbnRTdHlsZTogZGF0YXNldC5wb2ludFN0eWxlLFxuXG5cdFx0XHRcdFx0XHQvLyBCZWxvdyBpcyBleHRyYSBkYXRhIHVzZWQgZm9yIHRvZ2dsaW5nIHRoZSBkYXRhc2V0c1xuXHRcdFx0XHRcdFx0ZGF0YXNldEluZGV4OiBpXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSwgdGhpcykgOiBbXTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0bGVnZW5kQ2FsbGJhY2s6IGZ1bmN0aW9uKGNoYXJ0KSB7XG5cdFx0dmFyIHRleHQgPSBbXTtcblx0XHR0ZXh0LnB1c2goJzx1bCBjbGFzcz1cIicgKyBjaGFydC5pZCArICctbGVnZW5kXCI+Jyk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjaGFydC5kYXRhLmRhdGFzZXRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR0ZXh0LnB1c2goJzxsaT48c3BhbiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6JyArIGNoYXJ0LmRhdGEuZGF0YXNldHNbaV0uYmFja2dyb3VuZENvbG9yICsgJ1wiPjwvc3Bhbj4nKTtcblx0XHRcdGlmIChjaGFydC5kYXRhLmRhdGFzZXRzW2ldLmxhYmVsKSB7XG5cdFx0XHRcdHRleHQucHVzaChjaGFydC5kYXRhLmRhdGFzZXRzW2ldLmxhYmVsKTtcblx0XHRcdH1cblx0XHRcdHRleHQucHVzaCgnPC9saT4nKTtcblx0XHR9XG5cdFx0dGV4dC5wdXNoKCc8L3VsPicpO1xuXHRcdHJldHVybiB0ZXh0LmpvaW4oJycpO1xuXHR9XG59KTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBib3ggd2lkdGggYmFzZWQgb24gdGhlIHVzZVBvaW50U3R5bGUgb3B0aW9uXG4gKiBAcGFyYW0ge29iamVjdH0gbGFiZWxvcHRzIC0gdGhlIGxhYmVsIG9wdGlvbnMgb24gdGhlIGxlZ2VuZFxuICogQHBhcmFtIHtudW1iZXJ9IGZvbnRTaXplIC0gdGhlIGxhYmVsIGZvbnQgc2l6ZVxuICogQHJldHVybiB7bnVtYmVyfSB3aWR0aCBvZiB0aGUgY29sb3IgYm94IGFyZWFcbiAqL1xuZnVuY3Rpb24gZ2V0Qm94V2lkdGgobGFiZWxPcHRzLCBmb250U2l6ZSkge1xuXHRyZXR1cm4gbGFiZWxPcHRzLnVzZVBvaW50U3R5bGUgJiYgbGFiZWxPcHRzLmJveFdpZHRoID4gZm9udFNpemUgP1xuXHRcdGZvbnRTaXplIDpcblx0XHRsYWJlbE9wdHMuYm94V2lkdGg7XG59XG5cbi8qKlxuICogSU1QT1JUQU5UOiB0aGlzIGNsYXNzIGlzIGV4cG9zZWQgcHVibGljbHkgYXMgQ2hhcnQuTGVnZW5kLCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHJlcXVpcmVkIVxuICovXG52YXIgTGVnZW5kID0gY29yZV9lbGVtZW50LmV4dGVuZCh7XG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oY29uZmlnKSB7XG5cdFx0aGVscGVycyQxLmV4dGVuZCh0aGlzLCBjb25maWcpO1xuXG5cdFx0Ly8gQ29udGFpbnMgaGl0IGJveGVzIGZvciBlYWNoIGRhdGFzZXQgKGluIGRhdGFzZXQgb3JkZXIpXG5cdFx0dGhpcy5sZWdlbmRIaXRCb3hlcyA9IFtdO1xuXG5cdFx0LyoqXG4gXHRcdCAqIEBwcml2YXRlXG4gXHRcdCAqL1xuXHRcdHRoaXMuX2hvdmVyZWRJdGVtID0gbnVsbDtcblxuXHRcdC8vIEFyZSB3ZSBpbiBkb3VnaG51dCBtb2RlIHdoaWNoIGhhcyBhIGRpZmZlcmVudCBkYXRhIHR5cGVcblx0XHR0aGlzLmRvdWdobnV0TW9kZSA9IGZhbHNlO1xuXHR9LFxuXG5cdC8vIFRoZXNlIG1ldGhvZHMgYXJlIG9yZGVyZWQgYnkgbGlmZWN5Y2xlLiBVdGlsaXRpZXMgdGhlbiBmb2xsb3cuXG5cdC8vIEFueSBmdW5jdGlvbiBkZWZpbmVkIGhlcmUgaXMgaW5oZXJpdGVkIGJ5IGFsbCBsZWdlbmQgdHlwZXMuXG5cdC8vIEFueSBmdW5jdGlvbiBjYW4gYmUgZXh0ZW5kZWQgYnkgdGhlIGxlZ2VuZCB0eXBlXG5cblx0YmVmb3JlVXBkYXRlOiBub29wJDEsXG5cdHVwZGF0ZTogZnVuY3Rpb24obWF4V2lkdGgsIG1heEhlaWdodCwgbWFyZ2lucykge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cblx0XHQvLyBVcGRhdGUgTGlmZWN5Y2xlIC0gUHJvYmFibHkgZG9uJ3Qgd2FudCB0byBldmVyIGV4dGVuZCBvciBvdmVyd3JpdGUgdGhpcyBmdW5jdGlvbiA7KVxuXHRcdG1lLmJlZm9yZVVwZGF0ZSgpO1xuXG5cdFx0Ly8gQWJzb3JiIHRoZSBtYXN0ZXIgbWVhc3VyZW1lbnRzXG5cdFx0bWUubWF4V2lkdGggPSBtYXhXaWR0aDtcblx0XHRtZS5tYXhIZWlnaHQgPSBtYXhIZWlnaHQ7XG5cdFx0bWUubWFyZ2lucyA9IG1hcmdpbnM7XG5cblx0XHQvLyBEaW1lbnNpb25zXG5cdFx0bWUuYmVmb3JlU2V0RGltZW5zaW9ucygpO1xuXHRcdG1lLnNldERpbWVuc2lvbnMoKTtcblx0XHRtZS5hZnRlclNldERpbWVuc2lvbnMoKTtcblx0XHQvLyBMYWJlbHNcblx0XHRtZS5iZWZvcmVCdWlsZExhYmVscygpO1xuXHRcdG1lLmJ1aWxkTGFiZWxzKCk7XG5cdFx0bWUuYWZ0ZXJCdWlsZExhYmVscygpO1xuXG5cdFx0Ly8gRml0XG5cdFx0bWUuYmVmb3JlRml0KCk7XG5cdFx0bWUuZml0KCk7XG5cdFx0bWUuYWZ0ZXJGaXQoKTtcblx0XHQvL1xuXHRcdG1lLmFmdGVyVXBkYXRlKCk7XG5cblx0XHRyZXR1cm4gbWUubWluU2l6ZTtcblx0fSxcblx0YWZ0ZXJVcGRhdGU6IG5vb3AkMSxcblxuXHQvL1xuXG5cdGJlZm9yZVNldERpbWVuc2lvbnM6IG5vb3AkMSxcblx0c2V0RGltZW5zaW9uczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHQvLyBTZXQgdGhlIHVuY29uc3RyYWluZWQgZGltZW5zaW9uIGJlZm9yZSBsYWJlbCByb3RhdGlvblxuXHRcdGlmIChtZS5pc0hvcml6b250YWwoKSkge1xuXHRcdFx0Ly8gUmVzZXQgcG9zaXRpb24gYmVmb3JlIGNhbGN1bGF0aW5nIHJvdGF0aW9uXG5cdFx0XHRtZS53aWR0aCA9IG1lLm1heFdpZHRoO1xuXHRcdFx0bWUubGVmdCA9IDA7XG5cdFx0XHRtZS5yaWdodCA9IG1lLndpZHRoO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtZS5oZWlnaHQgPSBtZS5tYXhIZWlnaHQ7XG5cblx0XHRcdC8vIFJlc2V0IHBvc2l0aW9uIGJlZm9yZSBjYWxjdWxhdGluZyByb3RhdGlvblxuXHRcdFx0bWUudG9wID0gMDtcblx0XHRcdG1lLmJvdHRvbSA9IG1lLmhlaWdodDtcblx0XHR9XG5cblx0XHQvLyBSZXNldCBwYWRkaW5nXG5cdFx0bWUucGFkZGluZ0xlZnQgPSAwO1xuXHRcdG1lLnBhZGRpbmdUb3AgPSAwO1xuXHRcdG1lLnBhZGRpbmdSaWdodCA9IDA7XG5cdFx0bWUucGFkZGluZ0JvdHRvbSA9IDA7XG5cblx0XHQvLyBSZXNldCBtaW5TaXplXG5cdFx0bWUubWluU2l6ZSA9IHtcblx0XHRcdHdpZHRoOiAwLFxuXHRcdFx0aGVpZ2h0OiAwXG5cdFx0fTtcblx0fSxcblx0YWZ0ZXJTZXREaW1lbnNpb25zOiBub29wJDEsXG5cblx0Ly9cblxuXHRiZWZvcmVCdWlsZExhYmVsczogbm9vcCQxLFxuXHRidWlsZExhYmVsczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgbGFiZWxPcHRzID0gbWUub3B0aW9ucy5sYWJlbHMgfHwge307XG5cdFx0dmFyIGxlZ2VuZEl0ZW1zID0gaGVscGVycyQxLmNhbGxiYWNrKGxhYmVsT3B0cy5nZW5lcmF0ZUxhYmVscywgW21lLmNoYXJ0XSwgbWUpIHx8IFtdO1xuXG5cdFx0aWYgKGxhYmVsT3B0cy5maWx0ZXIpIHtcblx0XHRcdGxlZ2VuZEl0ZW1zID0gbGVnZW5kSXRlbXMuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pIHtcblx0XHRcdFx0cmV0dXJuIGxhYmVsT3B0cy5maWx0ZXIoaXRlbSwgbWUuY2hhcnQuZGF0YSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAobWUub3B0aW9ucy5yZXZlcnNlKSB7XG5cdFx0XHRsZWdlbmRJdGVtcy5yZXZlcnNlKCk7XG5cdFx0fVxuXG5cdFx0bWUubGVnZW5kSXRlbXMgPSBsZWdlbmRJdGVtcztcblx0fSxcblx0YWZ0ZXJCdWlsZExhYmVsczogbm9vcCQxLFxuXG5cdC8vXG5cblx0YmVmb3JlRml0OiBub29wJDEsXG5cdGZpdDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgb3B0cyA9IG1lLm9wdGlvbnM7XG5cdFx0dmFyIGxhYmVsT3B0cyA9IG9wdHMubGFiZWxzO1xuXHRcdHZhciBkaXNwbGF5ID0gb3B0cy5kaXNwbGF5O1xuXG5cdFx0dmFyIGN0eCA9IG1lLmN0eDtcblxuXHRcdHZhciBsYWJlbEZvbnQgPSBoZWxwZXJzJDEub3B0aW9ucy5fcGFyc2VGb250KGxhYmVsT3B0cyk7XG5cdFx0dmFyIGZvbnRTaXplID0gbGFiZWxGb250LnNpemU7XG5cblx0XHQvLyBSZXNldCBoaXQgYm94ZXNcblx0XHR2YXIgaGl0Ym94ZXMgPSBtZS5sZWdlbmRIaXRCb3hlcyA9IFtdO1xuXG5cdFx0dmFyIG1pblNpemUgPSBtZS5taW5TaXplO1xuXHRcdHZhciBpc0hvcml6b250YWwgPSBtZS5pc0hvcml6b250YWwoKTtcblxuXHRcdGlmIChpc0hvcml6b250YWwpIHtcblx0XHRcdG1pblNpemUud2lkdGggPSBtZS5tYXhXaWR0aDsgLy8gZmlsbCBhbGwgdGhlIHdpZHRoXG5cdFx0XHRtaW5TaXplLmhlaWdodCA9IGRpc3BsYXkgPyAxMCA6IDA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1pblNpemUud2lkdGggPSBkaXNwbGF5ID8gMTAgOiAwO1xuXHRcdFx0bWluU2l6ZS5oZWlnaHQgPSBtZS5tYXhIZWlnaHQ7IC8vIGZpbGwgYWxsIHRoZSBoZWlnaHRcblx0XHR9XG5cblx0XHQvLyBJbmNyZWFzZSBzaXplcyBoZXJlXG5cdFx0aWYgKGRpc3BsYXkpIHtcblx0XHRcdGN0eC5mb250ID0gbGFiZWxGb250LnN0cmluZztcblxuXHRcdFx0aWYgKGlzSG9yaXpvbnRhbCkge1xuXHRcdFx0XHQvLyBMYWJlbHNcblxuXHRcdFx0XHQvLyBXaWR0aCBvZiBlYWNoIGxpbmUgb2YgbGVnZW5kIGJveGVzLiBMYWJlbHMgd3JhcCBvbnRvIG11bHRpcGxlIGxpbmVzIHdoZW4gdGhlcmUgYXJlIHRvbyBtYW55IHRvIGZpdCBvbiBvbmVcblx0XHRcdFx0dmFyIGxpbmVXaWR0aHMgPSBtZS5saW5lV2lkdGhzID0gWzBdO1xuXHRcdFx0XHR2YXIgdG90YWxIZWlnaHQgPSAwO1xuXG5cdFx0XHRcdGN0eC50ZXh0QWxpZ24gPSAnbGVmdCc7XG5cdFx0XHRcdGN0eC50ZXh0QmFzZWxpbmUgPSAndG9wJztcblxuXHRcdFx0XHRoZWxwZXJzJDEuZWFjaChtZS5sZWdlbmRJdGVtcywgZnVuY3Rpb24obGVnZW5kSXRlbSwgaSkge1xuXHRcdFx0XHRcdHZhciBib3hXaWR0aCA9IGdldEJveFdpZHRoKGxhYmVsT3B0cywgZm9udFNpemUpO1xuXHRcdFx0XHRcdHZhciB3aWR0aCA9IGJveFdpZHRoICsgKGZvbnRTaXplIC8gMikgKyBjdHgubWVhc3VyZVRleHQobGVnZW5kSXRlbS50ZXh0KS53aWR0aDtcblxuXHRcdFx0XHRcdGlmIChpID09PSAwIHx8IGxpbmVXaWR0aHNbbGluZVdpZHRocy5sZW5ndGggLSAxXSArIHdpZHRoICsgbGFiZWxPcHRzLnBhZGRpbmcgPiBtaW5TaXplLndpZHRoKSB7XG5cdFx0XHRcdFx0XHR0b3RhbEhlaWdodCArPSBmb250U2l6ZSArIGxhYmVsT3B0cy5wYWRkaW5nO1xuXHRcdFx0XHRcdFx0bGluZVdpZHRoc1tsaW5lV2lkdGhzLmxlbmd0aCAtIChpID4gMCA/IDAgOiAxKV0gPSBsYWJlbE9wdHMucGFkZGluZztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBTdG9yZSB0aGUgaGl0Ym94IHdpZHRoIGFuZCBoZWlnaHQgaGVyZS4gRmluYWwgcG9zaXRpb24gd2lsbCBiZSB1cGRhdGVkIGluIGBkcmF3YFxuXHRcdFx0XHRcdGhpdGJveGVzW2ldID0ge1xuXHRcdFx0XHRcdFx0bGVmdDogMCxcblx0XHRcdFx0XHRcdHRvcDogMCxcblx0XHRcdFx0XHRcdHdpZHRoOiB3aWR0aCxcblx0XHRcdFx0XHRcdGhlaWdodDogZm9udFNpemVcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0bGluZVdpZHRoc1tsaW5lV2lkdGhzLmxlbmd0aCAtIDFdICs9IHdpZHRoICsgbGFiZWxPcHRzLnBhZGRpbmc7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdG1pblNpemUuaGVpZ2h0ICs9IHRvdGFsSGVpZ2h0O1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YXIgdlBhZGRpbmcgPSBsYWJlbE9wdHMucGFkZGluZztcblx0XHRcdFx0dmFyIGNvbHVtbldpZHRocyA9IG1lLmNvbHVtbldpZHRocyA9IFtdO1xuXHRcdFx0XHR2YXIgdG90YWxXaWR0aCA9IGxhYmVsT3B0cy5wYWRkaW5nO1xuXHRcdFx0XHR2YXIgY3VycmVudENvbFdpZHRoID0gMDtcblx0XHRcdFx0dmFyIGN1cnJlbnRDb2xIZWlnaHQgPSAwO1xuXHRcdFx0XHR2YXIgaXRlbUhlaWdodCA9IGZvbnRTaXplICsgdlBhZGRpbmc7XG5cblx0XHRcdFx0aGVscGVycyQxLmVhY2gobWUubGVnZW5kSXRlbXMsIGZ1bmN0aW9uKGxlZ2VuZEl0ZW0sIGkpIHtcblx0XHRcdFx0XHR2YXIgYm94V2lkdGggPSBnZXRCb3hXaWR0aChsYWJlbE9wdHMsIGZvbnRTaXplKTtcblx0XHRcdFx0XHR2YXIgaXRlbVdpZHRoID0gYm94V2lkdGggKyAoZm9udFNpemUgLyAyKSArIGN0eC5tZWFzdXJlVGV4dChsZWdlbmRJdGVtLnRleHQpLndpZHRoO1xuXG5cdFx0XHRcdFx0Ly8gSWYgdG9vIHRhbGwsIGdvIHRvIG5ldyBjb2x1bW5cblx0XHRcdFx0XHRpZiAoaSA+IDAgJiYgY3VycmVudENvbEhlaWdodCArIGl0ZW1IZWlnaHQgPiBtaW5TaXplLmhlaWdodCAtIHZQYWRkaW5nKSB7XG5cdFx0XHRcdFx0XHR0b3RhbFdpZHRoICs9IGN1cnJlbnRDb2xXaWR0aCArIGxhYmVsT3B0cy5wYWRkaW5nO1xuXHRcdFx0XHRcdFx0Y29sdW1uV2lkdGhzLnB1c2goY3VycmVudENvbFdpZHRoKTsgLy8gcHJldmlvdXMgY29sdW1uIHdpZHRoXG5cblx0XHRcdFx0XHRcdGN1cnJlbnRDb2xXaWR0aCA9IDA7XG5cdFx0XHRcdFx0XHRjdXJyZW50Q29sSGVpZ2h0ID0gMDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBHZXQgbWF4IHdpZHRoXG5cdFx0XHRcdFx0Y3VycmVudENvbFdpZHRoID0gTWF0aC5tYXgoY3VycmVudENvbFdpZHRoLCBpdGVtV2lkdGgpO1xuXHRcdFx0XHRcdGN1cnJlbnRDb2xIZWlnaHQgKz0gaXRlbUhlaWdodDtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIHRoZSBoaXRib3ggd2lkdGggYW5kIGhlaWdodCBoZXJlLiBGaW5hbCBwb3NpdGlvbiB3aWxsIGJlIHVwZGF0ZWQgaW4gYGRyYXdgXG5cdFx0XHRcdFx0aGl0Ym94ZXNbaV0gPSB7XG5cdFx0XHRcdFx0XHRsZWZ0OiAwLFxuXHRcdFx0XHRcdFx0dG9wOiAwLFxuXHRcdFx0XHRcdFx0d2lkdGg6IGl0ZW1XaWR0aCxcblx0XHRcdFx0XHRcdGhlaWdodDogZm9udFNpemVcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0b3RhbFdpZHRoICs9IGN1cnJlbnRDb2xXaWR0aDtcblx0XHRcdFx0Y29sdW1uV2lkdGhzLnB1c2goY3VycmVudENvbFdpZHRoKTtcblx0XHRcdFx0bWluU2l6ZS53aWR0aCArPSB0b3RhbFdpZHRoO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdG1lLndpZHRoID0gbWluU2l6ZS53aWR0aDtcblx0XHRtZS5oZWlnaHQgPSBtaW5TaXplLmhlaWdodDtcblx0fSxcblx0YWZ0ZXJGaXQ6IG5vb3AkMSxcblxuXHQvLyBTaGFyZWQgTWV0aG9kc1xuXHRpc0hvcml6b250YWw6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm9wdGlvbnMucG9zaXRpb24gPT09ICd0b3AnIHx8IHRoaXMub3B0aW9ucy5wb3NpdGlvbiA9PT0gJ2JvdHRvbSc7XG5cdH0sXG5cblx0Ly8gQWN0dWFsbHkgZHJhdyB0aGUgbGVnZW5kIG9uIHRoZSBjYW52YXNcblx0ZHJhdzogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgb3B0cyA9IG1lLm9wdGlvbnM7XG5cdFx0dmFyIGxhYmVsT3B0cyA9IG9wdHMubGFiZWxzO1xuXHRcdHZhciBnbG9iYWxEZWZhdWx0cyA9IGNvcmVfZGVmYXVsdHMuZ2xvYmFsO1xuXHRcdHZhciBkZWZhdWx0Q29sb3IgPSBnbG9iYWxEZWZhdWx0cy5kZWZhdWx0Q29sb3I7XG5cdFx0dmFyIGxpbmVEZWZhdWx0ID0gZ2xvYmFsRGVmYXVsdHMuZWxlbWVudHMubGluZTtcblx0XHR2YXIgbGVnZW5kV2lkdGggPSBtZS53aWR0aDtcblx0XHR2YXIgbGluZVdpZHRocyA9IG1lLmxpbmVXaWR0aHM7XG5cblx0XHRpZiAob3B0cy5kaXNwbGF5KSB7XG5cdFx0XHR2YXIgY3R4ID0gbWUuY3R4O1xuXHRcdFx0dmFyIGZvbnRDb2xvciA9IHZhbHVlT3JEZWZhdWx0JGQobGFiZWxPcHRzLmZvbnRDb2xvciwgZ2xvYmFsRGVmYXVsdHMuZGVmYXVsdEZvbnRDb2xvcik7XG5cdFx0XHR2YXIgbGFiZWxGb250ID0gaGVscGVycyQxLm9wdGlvbnMuX3BhcnNlRm9udChsYWJlbE9wdHMpO1xuXHRcdFx0dmFyIGZvbnRTaXplID0gbGFiZWxGb250LnNpemU7XG5cdFx0XHR2YXIgY3Vyc29yO1xuXG5cdFx0XHQvLyBDYW52YXMgc2V0dXBcblx0XHRcdGN0eC50ZXh0QWxpZ24gPSAnbGVmdCc7XG5cdFx0XHRjdHgudGV4dEJhc2VsaW5lID0gJ21pZGRsZSc7XG5cdFx0XHRjdHgubGluZVdpZHRoID0gMC41O1xuXHRcdFx0Y3R4LnN0cm9rZVN0eWxlID0gZm9udENvbG9yOyAvLyBmb3Igc3RyaWtldGhyb3VnaCBlZmZlY3Rcblx0XHRcdGN0eC5maWxsU3R5bGUgPSBmb250Q29sb3I7IC8vIHJlbmRlciBpbiBjb3JyZWN0IGNvbG91clxuXHRcdFx0Y3R4LmZvbnQgPSBsYWJlbEZvbnQuc3RyaW5nO1xuXG5cdFx0XHR2YXIgYm94V2lkdGggPSBnZXRCb3hXaWR0aChsYWJlbE9wdHMsIGZvbnRTaXplKTtcblx0XHRcdHZhciBoaXRib3hlcyA9IG1lLmxlZ2VuZEhpdEJveGVzO1xuXG5cdFx0XHQvLyBjdXJyZW50IHBvc2l0aW9uXG5cdFx0XHR2YXIgZHJhd0xlZ2VuZEJveCA9IGZ1bmN0aW9uKHgsIHksIGxlZ2VuZEl0ZW0pIHtcblx0XHRcdFx0aWYgKGlzTmFOKGJveFdpZHRoKSB8fCBib3hXaWR0aCA8PSAwKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU2V0IHRoZSBjdHggZm9yIHRoZSBib3hcblx0XHRcdFx0Y3R4LnNhdmUoKTtcblxuXHRcdFx0XHR2YXIgbGluZVdpZHRoID0gdmFsdWVPckRlZmF1bHQkZChsZWdlbmRJdGVtLmxpbmVXaWR0aCwgbGluZURlZmF1bHQuYm9yZGVyV2lkdGgpO1xuXHRcdFx0XHRjdHguZmlsbFN0eWxlID0gdmFsdWVPckRlZmF1bHQkZChsZWdlbmRJdGVtLmZpbGxTdHlsZSwgZGVmYXVsdENvbG9yKTtcblx0XHRcdFx0Y3R4LmxpbmVDYXAgPSB2YWx1ZU9yRGVmYXVsdCRkKGxlZ2VuZEl0ZW0ubGluZUNhcCwgbGluZURlZmF1bHQuYm9yZGVyQ2FwU3R5bGUpO1xuXHRcdFx0XHRjdHgubGluZURhc2hPZmZzZXQgPSB2YWx1ZU9yRGVmYXVsdCRkKGxlZ2VuZEl0ZW0ubGluZURhc2hPZmZzZXQsIGxpbmVEZWZhdWx0LmJvcmRlckRhc2hPZmZzZXQpO1xuXHRcdFx0XHRjdHgubGluZUpvaW4gPSB2YWx1ZU9yRGVmYXVsdCRkKGxlZ2VuZEl0ZW0ubGluZUpvaW4sIGxpbmVEZWZhdWx0LmJvcmRlckpvaW5TdHlsZSk7XG5cdFx0XHRcdGN0eC5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG5cdFx0XHRcdGN0eC5zdHJva2VTdHlsZSA9IHZhbHVlT3JEZWZhdWx0JGQobGVnZW5kSXRlbS5zdHJva2VTdHlsZSwgZGVmYXVsdENvbG9yKTtcblxuXHRcdFx0XHRpZiAoY3R4LnNldExpbmVEYXNoKSB7XG5cdFx0XHRcdFx0Ly8gSUUgOSBhbmQgMTAgZG8gbm90IHN1cHBvcnQgbGluZSBkYXNoXG5cdFx0XHRcdFx0Y3R4LnNldExpbmVEYXNoKHZhbHVlT3JEZWZhdWx0JGQobGVnZW5kSXRlbS5saW5lRGFzaCwgbGluZURlZmF1bHQuYm9yZGVyRGFzaCkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG9wdHMubGFiZWxzICYmIG9wdHMubGFiZWxzLnVzZVBvaW50U3R5bGUpIHtcblx0XHRcdFx0XHQvLyBSZWNhbGN1bGF0ZSB4IGFuZCB5IGZvciBkcmF3UG9pbnQoKSBiZWNhdXNlIGl0cyBleHBlY3Rpbmdcblx0XHRcdFx0XHQvLyB4IGFuZCB5IHRvIGJlIGNlbnRlciBvZiBmaWd1cmUgKGluc3RlYWQgb2YgdG9wIGxlZnQpXG5cdFx0XHRcdFx0dmFyIHJhZGl1cyA9IGJveFdpZHRoICogTWF0aC5TUVJUMiAvIDI7XG5cdFx0XHRcdFx0dmFyIGNlbnRlclggPSB4ICsgYm94V2lkdGggLyAyO1xuXHRcdFx0XHRcdHZhciBjZW50ZXJZID0geSArIGZvbnRTaXplIC8gMjtcblxuXHRcdFx0XHRcdC8vIERyYXcgcG9pbnRTdHlsZSBhcyBsZWdlbmQgc3ltYm9sXG5cdFx0XHRcdFx0aGVscGVycyQxLmNhbnZhcy5kcmF3UG9pbnQoY3R4LCBsZWdlbmRJdGVtLnBvaW50U3R5bGUsIHJhZGl1cywgY2VudGVyWCwgY2VudGVyWSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gRHJhdyBib3ggYXMgbGVnZW5kIHN5bWJvbFxuXHRcdFx0XHRcdGlmIChsaW5lV2lkdGggIT09IDApIHtcblx0XHRcdFx0XHRcdGN0eC5zdHJva2VSZWN0KHgsIHksIGJveFdpZHRoLCBmb250U2l6ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGN0eC5maWxsUmVjdCh4LCB5LCBib3hXaWR0aCwgZm9udFNpemUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y3R4LnJlc3RvcmUoKTtcblx0XHRcdH07XG5cdFx0XHR2YXIgZmlsbFRleHQgPSBmdW5jdGlvbih4LCB5LCBsZWdlbmRJdGVtLCB0ZXh0V2lkdGgpIHtcblx0XHRcdFx0dmFyIGhhbGZGb250U2l6ZSA9IGZvbnRTaXplIC8gMjtcblx0XHRcdFx0dmFyIHhMZWZ0ID0gYm94V2lkdGggKyBoYWxmRm9udFNpemUgKyB4O1xuXHRcdFx0XHR2YXIgeU1pZGRsZSA9IHkgKyBoYWxmRm9udFNpemU7XG5cblx0XHRcdFx0Y3R4LmZpbGxUZXh0KGxlZ2VuZEl0ZW0udGV4dCwgeExlZnQsIHlNaWRkbGUpO1xuXG5cdFx0XHRcdGlmIChsZWdlbmRJdGVtLmhpZGRlbikge1xuXHRcdFx0XHRcdC8vIFN0cmlrZXRocm91Z2ggdGhlIHRleHQgaWYgaGlkZGVuXG5cdFx0XHRcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdFx0XHRcdGN0eC5saW5lV2lkdGggPSAyO1xuXHRcdFx0XHRcdGN0eC5tb3ZlVG8oeExlZnQsIHlNaWRkbGUpO1xuXHRcdFx0XHRcdGN0eC5saW5lVG8oeExlZnQgKyB0ZXh0V2lkdGgsIHlNaWRkbGUpO1xuXHRcdFx0XHRcdGN0eC5zdHJva2UoKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdFx0Ly8gSG9yaXpvbnRhbFxuXHRcdFx0dmFyIGlzSG9yaXpvbnRhbCA9IG1lLmlzSG9yaXpvbnRhbCgpO1xuXHRcdFx0aWYgKGlzSG9yaXpvbnRhbCkge1xuXHRcdFx0XHRjdXJzb3IgPSB7XG5cdFx0XHRcdFx0eDogbWUubGVmdCArICgobGVnZW5kV2lkdGggLSBsaW5lV2lkdGhzWzBdKSAvIDIpICsgbGFiZWxPcHRzLnBhZGRpbmcsXG5cdFx0XHRcdFx0eTogbWUudG9wICsgbGFiZWxPcHRzLnBhZGRpbmcsXG5cdFx0XHRcdFx0bGluZTogMFxuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3Vyc29yID0ge1xuXHRcdFx0XHRcdHg6IG1lLmxlZnQgKyBsYWJlbE9wdHMucGFkZGluZyxcblx0XHRcdFx0XHR5OiBtZS50b3AgKyBsYWJlbE9wdHMucGFkZGluZyxcblx0XHRcdFx0XHRsaW5lOiAwXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHZhciBpdGVtSGVpZ2h0ID0gZm9udFNpemUgKyBsYWJlbE9wdHMucGFkZGluZztcblx0XHRcdGhlbHBlcnMkMS5lYWNoKG1lLmxlZ2VuZEl0ZW1zLCBmdW5jdGlvbihsZWdlbmRJdGVtLCBpKSB7XG5cdFx0XHRcdHZhciB0ZXh0V2lkdGggPSBjdHgubWVhc3VyZVRleHQobGVnZW5kSXRlbS50ZXh0KS53aWR0aDtcblx0XHRcdFx0dmFyIHdpZHRoID0gYm94V2lkdGggKyAoZm9udFNpemUgLyAyKSArIHRleHRXaWR0aDtcblx0XHRcdFx0dmFyIHggPSBjdXJzb3IueDtcblx0XHRcdFx0dmFyIHkgPSBjdXJzb3IueTtcblxuXHRcdFx0XHQvLyBVc2UgKG1lLmxlZnQgKyBtZS5taW5TaXplLndpZHRoKSBhbmQgKG1lLnRvcCArIG1lLm1pblNpemUuaGVpZ2h0KVxuXHRcdFx0XHQvLyBpbnN0ZWFkIG9mIG1lLnJpZ2h0IGFuZCBtZS5ib3R0b20gYmVjYXVzZSBtZS53aWR0aCBhbmQgbWUuaGVpZ2h0XG5cdFx0XHRcdC8vIG1heSBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBtZS5taW5TaXplIHdhcyBjYWxjdWxhdGVkXG5cdFx0XHRcdGlmIChpc0hvcml6b250YWwpIHtcblx0XHRcdFx0XHRpZiAoaSA+IDAgJiYgeCArIHdpZHRoICsgbGFiZWxPcHRzLnBhZGRpbmcgPiBtZS5sZWZ0ICsgbWUubWluU2l6ZS53aWR0aCkge1xuXHRcdFx0XHRcdFx0eSA9IGN1cnNvci55ICs9IGl0ZW1IZWlnaHQ7XG5cdFx0XHRcdFx0XHRjdXJzb3IubGluZSsrO1xuXHRcdFx0XHRcdFx0eCA9IGN1cnNvci54ID0gbWUubGVmdCArICgobGVnZW5kV2lkdGggLSBsaW5lV2lkdGhzW2N1cnNvci5saW5lXSkgLyAyKSArIGxhYmVsT3B0cy5wYWRkaW5nO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChpID4gMCAmJiB5ICsgaXRlbUhlaWdodCA+IG1lLnRvcCArIG1lLm1pblNpemUuaGVpZ2h0KSB7XG5cdFx0XHRcdFx0eCA9IGN1cnNvci54ID0geCArIG1lLmNvbHVtbldpZHRoc1tjdXJzb3IubGluZV0gKyBsYWJlbE9wdHMucGFkZGluZztcblx0XHRcdFx0XHR5ID0gY3Vyc29yLnkgPSBtZS50b3AgKyBsYWJlbE9wdHMucGFkZGluZztcblx0XHRcdFx0XHRjdXJzb3IubGluZSsrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZHJhd0xlZ2VuZEJveCh4LCB5LCBsZWdlbmRJdGVtKTtcblxuXHRcdFx0XHRoaXRib3hlc1tpXS5sZWZ0ID0geDtcblx0XHRcdFx0aGl0Ym94ZXNbaV0udG9wID0geTtcblxuXHRcdFx0XHQvLyBGaWxsIHRoZSBhY3R1YWwgbGFiZWxcblx0XHRcdFx0ZmlsbFRleHQoeCwgeSwgbGVnZW5kSXRlbSwgdGV4dFdpZHRoKTtcblxuXHRcdFx0XHRpZiAoaXNIb3Jpem9udGFsKSB7XG5cdFx0XHRcdFx0Y3Vyc29yLnggKz0gd2lkdGggKyBsYWJlbE9wdHMucGFkZGluZztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjdXJzb3IueSArPSBpdGVtSGVpZ2h0O1xuXHRcdFx0XHR9XG5cblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9nZXRMZWdlbmRJdGVtQXQ6IGZ1bmN0aW9uKHgsIHkpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciBpLCBoaXRCb3gsIGxoO1xuXG5cdFx0aWYgKHggPj0gbWUubGVmdCAmJiB4IDw9IG1lLnJpZ2h0ICYmIHkgPj0gbWUudG9wICYmIHkgPD0gbWUuYm90dG9tKSB7XG5cdFx0XHQvLyBTZWUgaWYgd2UgYXJlIHRvdWNoaW5nIG9uZSBvZiB0aGUgZGF0YXNldCBib3hlc1xuXHRcdFx0bGggPSBtZS5sZWdlbmRIaXRCb3hlcztcblx0XHRcdGZvciAoaSA9IDA7IGkgPCBsaC5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRoaXRCb3ggPSBsaFtpXTtcblxuXHRcdFx0XHRpZiAoeCA+PSBoaXRCb3gubGVmdCAmJiB4IDw9IGhpdEJveC5sZWZ0ICsgaGl0Qm94LndpZHRoICYmIHkgPj0gaGl0Qm94LnRvcCAmJiB5IDw9IGhpdEJveC50b3AgKyBoaXRCb3guaGVpZ2h0KSB7XG5cdFx0XHRcdFx0Ly8gVG91Y2hpbmcgYW4gZWxlbWVudFxuXHRcdFx0XHRcdHJldHVybiBtZS5sZWdlbmRJdGVtc1tpXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBIYW5kbGUgYW4gZXZlbnRcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtJRXZlbnR9IGV2ZW50IC0gVGhlIGV2ZW50IHRvIGhhbmRsZVxuXHQgKi9cblx0aGFuZGxlRXZlbnQ6IGZ1bmN0aW9uKGUpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdHZhciBvcHRzID0gbWUub3B0aW9ucztcblx0XHR2YXIgdHlwZSA9IGUudHlwZSA9PT0gJ21vdXNldXAnID8gJ2NsaWNrJyA6IGUudHlwZTtcblx0XHR2YXIgaG92ZXJlZEl0ZW07XG5cblx0XHRpZiAodHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcblx0XHRcdGlmICghb3B0cy5vbkhvdmVyICYmICFvcHRzLm9uTGVhdmUpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZSA9PT0gJ2NsaWNrJykge1xuXHRcdFx0aWYgKCFvcHRzLm9uQ2xpY2spIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQ2hhcnQgZXZlbnQgYWxyZWFkeSBoYXMgcmVsYXRpdmUgcG9zaXRpb24gaW4gaXRcblx0XHRob3ZlcmVkSXRlbSA9IG1lLl9nZXRMZWdlbmRJdGVtQXQoZS54LCBlLnkpO1xuXG5cdFx0aWYgKHR5cGUgPT09ICdjbGljaycpIHtcblx0XHRcdGlmIChob3ZlcmVkSXRlbSAmJiBvcHRzLm9uQ2xpY2spIHtcblx0XHRcdFx0Ly8gdXNlIGUubmF0aXZlIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuXHRcdFx0XHRvcHRzLm9uQ2xpY2suY2FsbChtZSwgZS5uYXRpdmUsIGhvdmVyZWRJdGVtKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKG9wdHMub25MZWF2ZSAmJiBob3ZlcmVkSXRlbSAhPT0gbWUuX2hvdmVyZWRJdGVtKSB7XG5cdFx0XHRcdGlmIChtZS5faG92ZXJlZEl0ZW0pIHtcblx0XHRcdFx0XHRvcHRzLm9uTGVhdmUuY2FsbChtZSwgZS5uYXRpdmUsIG1lLl9ob3ZlcmVkSXRlbSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0bWUuX2hvdmVyZWRJdGVtID0gaG92ZXJlZEl0ZW07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvcHRzLm9uSG92ZXIgJiYgaG92ZXJlZEl0ZW0pIHtcblx0XHRcdFx0Ly8gdXNlIGUubmF0aXZlIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuXHRcdFx0XHRvcHRzLm9uSG92ZXIuY2FsbChtZSwgZS5uYXRpdmUsIGhvdmVyZWRJdGVtKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0pO1xuXG5mdW5jdGlvbiBjcmVhdGVOZXdMZWdlbmRBbmRBdHRhY2goY2hhcnQsIGxlZ2VuZE9wdHMpIHtcblx0dmFyIGxlZ2VuZCA9IG5ldyBMZWdlbmQoe1xuXHRcdGN0eDogY2hhcnQuY3R4LFxuXHRcdG9wdGlvbnM6IGxlZ2VuZE9wdHMsXG5cdFx0Y2hhcnQ6IGNoYXJ0XG5cdH0pO1xuXG5cdGNvcmVfbGF5b3V0cy5jb25maWd1cmUoY2hhcnQsIGxlZ2VuZCwgbGVnZW5kT3B0cyk7XG5cdGNvcmVfbGF5b3V0cy5hZGRCb3goY2hhcnQsIGxlZ2VuZCk7XG5cdGNoYXJ0LmxlZ2VuZCA9IGxlZ2VuZDtcbn1cblxudmFyIHBsdWdpbl9sZWdlbmQgPSB7XG5cdGlkOiAnbGVnZW5kJyxcblxuXHQvKipcblx0ICogQmFja3dhcmQgY29tcGF0aWJpbGl0eTogc2luY2UgMi4xLjUsIHRoZSBsZWdlbmQgaXMgcmVnaXN0ZXJlZCBhcyBhIHBsdWdpbiwgbWFraW5nXG5cdCAqIENoYXJ0LkxlZ2VuZCBvYnNvbGV0ZS4gVG8gYXZvaWQgYSBicmVha2luZyBjaGFuZ2UsIHdlIGV4cG9ydCB0aGUgTGVnZW5kIGFzIHBhcnQgb2Zcblx0ICogdGhlIHBsdWdpbiwgd2hpY2ggb25lIHdpbGwgYmUgcmUtZXhwb3NlZCBpbiB0aGUgY2hhcnQuanMgZmlsZS5cblx0ICogaHR0cHM6Ly9naXRodWIuY29tL2NoYXJ0anMvQ2hhcnQuanMvcHVsbC8yNjQwXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZWxlbWVudDogTGVnZW5kLFxuXG5cdGJlZm9yZUluaXQ6IGZ1bmN0aW9uKGNoYXJ0KSB7XG5cdFx0dmFyIGxlZ2VuZE9wdHMgPSBjaGFydC5vcHRpb25zLmxlZ2VuZDtcblxuXHRcdGlmIChsZWdlbmRPcHRzKSB7XG5cdFx0XHRjcmVhdGVOZXdMZWdlbmRBbmRBdHRhY2goY2hhcnQsIGxlZ2VuZE9wdHMpO1xuXHRcdH1cblx0fSxcblxuXHRiZWZvcmVVcGRhdGU6IGZ1bmN0aW9uKGNoYXJ0KSB7XG5cdFx0dmFyIGxlZ2VuZE9wdHMgPSBjaGFydC5vcHRpb25zLmxlZ2VuZDtcblx0XHR2YXIgbGVnZW5kID0gY2hhcnQubGVnZW5kO1xuXG5cdFx0aWYgKGxlZ2VuZE9wdHMpIHtcblx0XHRcdGhlbHBlcnMkMS5tZXJnZUlmKGxlZ2VuZE9wdHMsIGNvcmVfZGVmYXVsdHMuZ2xvYmFsLmxlZ2VuZCk7XG5cblx0XHRcdGlmIChsZWdlbmQpIHtcblx0XHRcdFx0Y29yZV9sYXlvdXRzLmNvbmZpZ3VyZShjaGFydCwgbGVnZW5kLCBsZWdlbmRPcHRzKTtcblx0XHRcdFx0bGVnZW5kLm9wdGlvbnMgPSBsZWdlbmRPcHRzO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3JlYXRlTmV3TGVnZW5kQW5kQXR0YWNoKGNoYXJ0LCBsZWdlbmRPcHRzKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGxlZ2VuZCkge1xuXHRcdFx0Y29yZV9sYXlvdXRzLnJlbW92ZUJveChjaGFydCwgbGVnZW5kKTtcblx0XHRcdGRlbGV0ZSBjaGFydC5sZWdlbmQ7XG5cdFx0fVxuXHR9LFxuXG5cdGFmdGVyRXZlbnQ6IGZ1bmN0aW9uKGNoYXJ0LCBlKSB7XG5cdFx0dmFyIGxlZ2VuZCA9IGNoYXJ0LmxlZ2VuZDtcblx0XHRpZiAobGVnZW5kKSB7XG5cdFx0XHRsZWdlbmQuaGFuZGxlRXZlbnQoZSk7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbm9vcCQyID0gaGVscGVycyQxLm5vb3A7XG5cbmNvcmVfZGVmYXVsdHMuX3NldCgnZ2xvYmFsJywge1xuXHR0aXRsZToge1xuXHRcdGRpc3BsYXk6IGZhbHNlLFxuXHRcdGZvbnRTdHlsZTogJ2JvbGQnLFxuXHRcdGZ1bGxXaWR0aDogdHJ1ZSxcblx0XHRwYWRkaW5nOiAxMCxcblx0XHRwb3NpdGlvbjogJ3RvcCcsXG5cdFx0dGV4dDogJycsXG5cdFx0d2VpZ2h0OiAyMDAwICAgICAgICAgLy8gYnkgZGVmYXVsdCBncmVhdGVyIHRoYW4gbGVnZW5kICgxMDAwKSB0byBiZSBhYm92ZVxuXHR9XG59KTtcblxuLyoqXG4gKiBJTVBPUlRBTlQ6IHRoaXMgY2xhc3MgaXMgZXhwb3NlZCBwdWJsaWNseSBhcyBDaGFydC5MZWdlbmQsIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcmVxdWlyZWQhXG4gKi9cbnZhciBUaXRsZSA9IGNvcmVfZWxlbWVudC5leHRlbmQoe1xuXHRpbml0aWFsaXplOiBmdW5jdGlvbihjb25maWcpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdGhlbHBlcnMkMS5leHRlbmQobWUsIGNvbmZpZyk7XG5cblx0XHQvLyBDb250YWlucyBoaXQgYm94ZXMgZm9yIGVhY2ggZGF0YXNldCAoaW4gZGF0YXNldCBvcmRlcilcblx0XHRtZS5sZWdlbmRIaXRCb3hlcyA9IFtdO1xuXHR9LFxuXG5cdC8vIFRoZXNlIG1ldGhvZHMgYXJlIG9yZGVyZWQgYnkgbGlmZWN5Y2xlLiBVdGlsaXRpZXMgdGhlbiBmb2xsb3cuXG5cblx0YmVmb3JlVXBkYXRlOiBub29wJDIsXG5cdHVwZGF0ZTogZnVuY3Rpb24obWF4V2lkdGgsIG1heEhlaWdodCwgbWFyZ2lucykge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cblx0XHQvLyBVcGRhdGUgTGlmZWN5Y2xlIC0gUHJvYmFibHkgZG9uJ3Qgd2FudCB0byBldmVyIGV4dGVuZCBvciBvdmVyd3JpdGUgdGhpcyBmdW5jdGlvbiA7KVxuXHRcdG1lLmJlZm9yZVVwZGF0ZSgpO1xuXG5cdFx0Ly8gQWJzb3JiIHRoZSBtYXN0ZXIgbWVhc3VyZW1lbnRzXG5cdFx0bWUubWF4V2lkdGggPSBtYXhXaWR0aDtcblx0XHRtZS5tYXhIZWlnaHQgPSBtYXhIZWlnaHQ7XG5cdFx0bWUubWFyZ2lucyA9IG1hcmdpbnM7XG5cblx0XHQvLyBEaW1lbnNpb25zXG5cdFx0bWUuYmVmb3JlU2V0RGltZW5zaW9ucygpO1xuXHRcdG1lLnNldERpbWVuc2lvbnMoKTtcblx0XHRtZS5hZnRlclNldERpbWVuc2lvbnMoKTtcblx0XHQvLyBMYWJlbHNcblx0XHRtZS5iZWZvcmVCdWlsZExhYmVscygpO1xuXHRcdG1lLmJ1aWxkTGFiZWxzKCk7XG5cdFx0bWUuYWZ0ZXJCdWlsZExhYmVscygpO1xuXG5cdFx0Ly8gRml0XG5cdFx0bWUuYmVmb3JlRml0KCk7XG5cdFx0bWUuZml0KCk7XG5cdFx0bWUuYWZ0ZXJGaXQoKTtcblx0XHQvL1xuXHRcdG1lLmFmdGVyVXBkYXRlKCk7XG5cblx0XHRyZXR1cm4gbWUubWluU2l6ZTtcblxuXHR9LFxuXHRhZnRlclVwZGF0ZTogbm9vcCQyLFxuXG5cdC8vXG5cblx0YmVmb3JlU2V0RGltZW5zaW9uczogbm9vcCQyLFxuXHRzZXREaW1lbnNpb25zOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdC8vIFNldCB0aGUgdW5jb25zdHJhaW5lZCBkaW1lbnNpb24gYmVmb3JlIGxhYmVsIHJvdGF0aW9uXG5cdFx0aWYgKG1lLmlzSG9yaXpvbnRhbCgpKSB7XG5cdFx0XHQvLyBSZXNldCBwb3NpdGlvbiBiZWZvcmUgY2FsY3VsYXRpbmcgcm90YXRpb25cblx0XHRcdG1lLndpZHRoID0gbWUubWF4V2lkdGg7XG5cdFx0XHRtZS5sZWZ0ID0gMDtcblx0XHRcdG1lLnJpZ2h0ID0gbWUud2lkdGg7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1lLmhlaWdodCA9IG1lLm1heEhlaWdodDtcblxuXHRcdFx0Ly8gUmVzZXQgcG9zaXRpb24gYmVmb3JlIGNhbGN1bGF0aW5nIHJvdGF0aW9uXG5cdFx0XHRtZS50b3AgPSAwO1xuXHRcdFx0bWUuYm90dG9tID0gbWUuaGVpZ2h0O1xuXHRcdH1cblxuXHRcdC8vIFJlc2V0IHBhZGRpbmdcblx0XHRtZS5wYWRkaW5nTGVmdCA9IDA7XG5cdFx0bWUucGFkZGluZ1RvcCA9IDA7XG5cdFx0bWUucGFkZGluZ1JpZ2h0ID0gMDtcblx0XHRtZS5wYWRkaW5nQm90dG9tID0gMDtcblxuXHRcdC8vIFJlc2V0IG1pblNpemVcblx0XHRtZS5taW5TaXplID0ge1xuXHRcdFx0d2lkdGg6IDAsXG5cdFx0XHRoZWlnaHQ6IDBcblx0XHR9O1xuXHR9LFxuXHRhZnRlclNldERpbWVuc2lvbnM6IG5vb3AkMixcblxuXHQvL1xuXG5cdGJlZm9yZUJ1aWxkTGFiZWxzOiBub29wJDIsXG5cdGJ1aWxkTGFiZWxzOiBub29wJDIsXG5cdGFmdGVyQnVpbGRMYWJlbHM6IG5vb3AkMixcblxuXHQvL1xuXG5cdGJlZm9yZUZpdDogbm9vcCQyLFxuXHRmaXQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0dmFyIG9wdHMgPSBtZS5vcHRpb25zO1xuXHRcdHZhciBkaXNwbGF5ID0gb3B0cy5kaXNwbGF5O1xuXHRcdHZhciBtaW5TaXplID0gbWUubWluU2l6ZTtcblx0XHR2YXIgbGluZUNvdW50ID0gaGVscGVycyQxLmlzQXJyYXkob3B0cy50ZXh0KSA/IG9wdHMudGV4dC5sZW5ndGggOiAxO1xuXHRcdHZhciBmb250T3B0cyA9IGhlbHBlcnMkMS5vcHRpb25zLl9wYXJzZUZvbnQob3B0cyk7XG5cdFx0dmFyIHRleHRTaXplID0gZGlzcGxheSA/IChsaW5lQ291bnQgKiBmb250T3B0cy5saW5lSGVpZ2h0KSArIChvcHRzLnBhZGRpbmcgKiAyKSA6IDA7XG5cblx0XHRpZiAobWUuaXNIb3Jpem9udGFsKCkpIHtcblx0XHRcdG1pblNpemUud2lkdGggPSBtZS5tYXhXaWR0aDsgLy8gZmlsbCBhbGwgdGhlIHdpZHRoXG5cdFx0XHRtaW5TaXplLmhlaWdodCA9IHRleHRTaXplO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtaW5TaXplLndpZHRoID0gdGV4dFNpemU7XG5cdFx0XHRtaW5TaXplLmhlaWdodCA9IG1lLm1heEhlaWdodDsgLy8gZmlsbCBhbGwgdGhlIGhlaWdodFxuXHRcdH1cblxuXHRcdG1lLndpZHRoID0gbWluU2l6ZS53aWR0aDtcblx0XHRtZS5oZWlnaHQgPSBtaW5TaXplLmhlaWdodDtcblxuXHR9LFxuXHRhZnRlckZpdDogbm9vcCQyLFxuXG5cdC8vIFNoYXJlZCBNZXRob2RzXG5cdGlzSG9yaXpvbnRhbDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHBvcyA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbjtcblx0XHRyZXR1cm4gcG9zID09PSAndG9wJyB8fCBwb3MgPT09ICdib3R0b20nO1xuXHR9LFxuXG5cdC8vIEFjdHVhbGx5IGRyYXcgdGhlIHRpdGxlIGJsb2NrIG9uIHRoZSBjYW52YXNcblx0ZHJhdzogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG1lID0gdGhpcztcblx0XHR2YXIgY3R4ID0gbWUuY3R4O1xuXHRcdHZhciBvcHRzID0gbWUub3B0aW9ucztcblxuXHRcdGlmIChvcHRzLmRpc3BsYXkpIHtcblx0XHRcdHZhciBmb250T3B0cyA9IGhlbHBlcnMkMS5vcHRpb25zLl9wYXJzZUZvbnQob3B0cyk7XG5cdFx0XHR2YXIgbGluZUhlaWdodCA9IGZvbnRPcHRzLmxpbmVIZWlnaHQ7XG5cdFx0XHR2YXIgb2Zmc2V0ID0gbGluZUhlaWdodCAvIDIgKyBvcHRzLnBhZGRpbmc7XG5cdFx0XHR2YXIgcm90YXRpb24gPSAwO1xuXHRcdFx0dmFyIHRvcCA9IG1lLnRvcDtcblx0XHRcdHZhciBsZWZ0ID0gbWUubGVmdDtcblx0XHRcdHZhciBib3R0b20gPSBtZS5ib3R0b207XG5cdFx0XHR2YXIgcmlnaHQgPSBtZS5yaWdodDtcblx0XHRcdHZhciBtYXhXaWR0aCwgdGl0bGVYLCB0aXRsZVk7XG5cblx0XHRcdGN0eC5maWxsU3R5bGUgPSBoZWxwZXJzJDEudmFsdWVPckRlZmF1bHQob3B0cy5mb250Q29sb3IsIGNvcmVfZGVmYXVsdHMuZ2xvYmFsLmRlZmF1bHRGb250Q29sb3IpOyAvLyByZW5kZXIgaW4gY29ycmVjdCBjb2xvdXJcblx0XHRcdGN0eC5mb250ID0gZm9udE9wdHMuc3RyaW5nO1xuXG5cdFx0XHQvLyBIb3Jpem9udGFsXG5cdFx0XHRpZiAobWUuaXNIb3Jpem9udGFsKCkpIHtcblx0XHRcdFx0dGl0bGVYID0gbGVmdCArICgocmlnaHQgLSBsZWZ0KSAvIDIpOyAvLyBtaWRwb2ludCBvZiB0aGUgd2lkdGhcblx0XHRcdFx0dGl0bGVZID0gdG9wICsgb2Zmc2V0O1xuXHRcdFx0XHRtYXhXaWR0aCA9IHJpZ2h0IC0gbGVmdDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRpdGxlWCA9IG9wdHMucG9zaXRpb24gPT09ICdsZWZ0JyA/IGxlZnQgKyBvZmZzZXQgOiByaWdodCAtIG9mZnNldDtcblx0XHRcdFx0dGl0bGVZID0gdG9wICsgKChib3R0b20gLSB0b3ApIC8gMik7XG5cdFx0XHRcdG1heFdpZHRoID0gYm90dG9tIC0gdG9wO1xuXHRcdFx0XHRyb3RhdGlvbiA9IE1hdGguUEkgKiAob3B0cy5wb3NpdGlvbiA9PT0gJ2xlZnQnID8gLTAuNSA6IDAuNSk7XG5cdFx0XHR9XG5cblx0XHRcdGN0eC5zYXZlKCk7XG5cdFx0XHRjdHgudHJhbnNsYXRlKHRpdGxlWCwgdGl0bGVZKTtcblx0XHRcdGN0eC5yb3RhdGUocm90YXRpb24pO1xuXHRcdFx0Y3R4LnRleHRBbGlnbiA9ICdjZW50ZXInO1xuXHRcdFx0Y3R4LnRleHRCYXNlbGluZSA9ICdtaWRkbGUnO1xuXG5cdFx0XHR2YXIgdGV4dCA9IG9wdHMudGV4dDtcblx0XHRcdGlmIChoZWxwZXJzJDEuaXNBcnJheSh0ZXh0KSkge1xuXHRcdFx0XHR2YXIgeSA9IDA7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRcdGN0eC5maWxsVGV4dCh0ZXh0W2ldLCAwLCB5LCBtYXhXaWR0aCk7XG5cdFx0XHRcdFx0eSArPSBsaW5lSGVpZ2h0O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjdHguZmlsbFRleHQodGV4dCwgMCwgMCwgbWF4V2lkdGgpO1xuXHRcdFx0fVxuXG5cdFx0XHRjdHgucmVzdG9yZSgpO1xuXHRcdH1cblx0fVxufSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZU5ld1RpdGxlQmxvY2tBbmRBdHRhY2goY2hhcnQsIHRpdGxlT3B0cykge1xuXHR2YXIgdGl0bGUgPSBuZXcgVGl0bGUoe1xuXHRcdGN0eDogY2hhcnQuY3R4LFxuXHRcdG9wdGlvbnM6IHRpdGxlT3B0cyxcblx0XHRjaGFydDogY2hhcnRcblx0fSk7XG5cblx0Y29yZV9sYXlvdXRzLmNvbmZpZ3VyZShjaGFydCwgdGl0bGUsIHRpdGxlT3B0cyk7XG5cdGNvcmVfbGF5b3V0cy5hZGRCb3goY2hhcnQsIHRpdGxlKTtcblx0Y2hhcnQudGl0bGVCbG9jayA9IHRpdGxlO1xufVxuXG52YXIgcGx1Z2luX3RpdGxlID0ge1xuXHRpZDogJ3RpdGxlJyxcblxuXHQvKipcblx0ICogQmFja3dhcmQgY29tcGF0aWJpbGl0eTogc2luY2UgMi4xLjUsIHRoZSB0aXRsZSBpcyByZWdpc3RlcmVkIGFzIGEgcGx1Z2luLCBtYWtpbmdcblx0ICogQ2hhcnQuVGl0bGUgb2Jzb2xldGUuIFRvIGF2b2lkIGEgYnJlYWtpbmcgY2hhbmdlLCB3ZSBleHBvcnQgdGhlIFRpdGxlIGFzIHBhcnQgb2Zcblx0ICogdGhlIHBsdWdpbiwgd2hpY2ggb25lIHdpbGwgYmUgcmUtZXhwb3NlZCBpbiB0aGUgY2hhcnQuanMgZmlsZS5cblx0ICogaHR0cHM6Ly9naXRodWIuY29tL2NoYXJ0anMvQ2hhcnQuanMvcHVsbC8yNjQwXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZWxlbWVudDogVGl0bGUsXG5cblx0YmVmb3JlSW5pdDogZnVuY3Rpb24oY2hhcnQpIHtcblx0XHR2YXIgdGl0bGVPcHRzID0gY2hhcnQub3B0aW9ucy50aXRsZTtcblxuXHRcdGlmICh0aXRsZU9wdHMpIHtcblx0XHRcdGNyZWF0ZU5ld1RpdGxlQmxvY2tBbmRBdHRhY2goY2hhcnQsIHRpdGxlT3B0cyk7XG5cdFx0fVxuXHR9LFxuXG5cdGJlZm9yZVVwZGF0ZTogZnVuY3Rpb24oY2hhcnQpIHtcblx0XHR2YXIgdGl0bGVPcHRzID0gY2hhcnQub3B0aW9ucy50aXRsZTtcblx0XHR2YXIgdGl0bGVCbG9jayA9IGNoYXJ0LnRpdGxlQmxvY2s7XG5cblx0XHRpZiAodGl0bGVPcHRzKSB7XG5cdFx0XHRoZWxwZXJzJDEubWVyZ2VJZih0aXRsZU9wdHMsIGNvcmVfZGVmYXVsdHMuZ2xvYmFsLnRpdGxlKTtcblxuXHRcdFx0aWYgKHRpdGxlQmxvY2spIHtcblx0XHRcdFx0Y29yZV9sYXlvdXRzLmNvbmZpZ3VyZShjaGFydCwgdGl0bGVCbG9jaywgdGl0bGVPcHRzKTtcblx0XHRcdFx0dGl0bGVCbG9jay5vcHRpb25zID0gdGl0bGVPcHRzO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3JlYXRlTmV3VGl0bGVCbG9ja0FuZEF0dGFjaChjaGFydCwgdGl0bGVPcHRzKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHRpdGxlQmxvY2spIHtcblx0XHRcdGNvcmVfbGF5b3V0cy5yZW1vdmVCb3goY2hhcnQsIHRpdGxlQmxvY2spO1xuXHRcdFx0ZGVsZXRlIGNoYXJ0LnRpdGxlQmxvY2s7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgcGx1Z2lucyA9IHt9O1xudmFyIGZpbGxlciA9IHBsdWdpbl9maWxsZXI7XG52YXIgbGVnZW5kID0gcGx1Z2luX2xlZ2VuZDtcbnZhciB0aXRsZSA9IHBsdWdpbl90aXRsZTtcbnBsdWdpbnMuZmlsbGVyID0gZmlsbGVyO1xucGx1Z2lucy5sZWdlbmQgPSBsZWdlbmQ7XG5wbHVnaW5zLnRpdGxlID0gdGl0bGU7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBDaGFydFxuICovXG5cblxuY29yZV9jb250cm9sbGVyLmhlbHBlcnMgPSBoZWxwZXJzJDE7XG5cbi8vIEB0b2RvIGRpc3BhdGNoIHRoZXNlIGhlbHBlcnMgaW50byBhcHByb3ByaWF0ZWQgaGVscGVycy9oZWxwZXJzLiogZmlsZSBhbmQgd3JpdGUgdW5pdCB0ZXN0cyFcbmNvcmVfaGVscGVycyhjb3JlX2NvbnRyb2xsZXIpO1xuXG5jb3JlX2NvbnRyb2xsZXIuX2FkYXB0ZXJzID0gY29yZV9hZGFwdGVycztcbmNvcmVfY29udHJvbGxlci5BbmltYXRpb24gPSBjb3JlX2FuaW1hdGlvbjtcbmNvcmVfY29udHJvbGxlci5hbmltYXRpb25TZXJ2aWNlID0gY29yZV9hbmltYXRpb25zO1xuY29yZV9jb250cm9sbGVyLmNvbnRyb2xsZXJzID0gY29udHJvbGxlcnM7XG5jb3JlX2NvbnRyb2xsZXIuRGF0YXNldENvbnRyb2xsZXIgPSBjb3JlX2RhdGFzZXRDb250cm9sbGVyO1xuY29yZV9jb250cm9sbGVyLmRlZmF1bHRzID0gY29yZV9kZWZhdWx0cztcbmNvcmVfY29udHJvbGxlci5FbGVtZW50ID0gY29yZV9lbGVtZW50O1xuY29yZV9jb250cm9sbGVyLmVsZW1lbnRzID0gZWxlbWVudHM7XG5jb3JlX2NvbnRyb2xsZXIuSW50ZXJhY3Rpb24gPSBjb3JlX2ludGVyYWN0aW9uO1xuY29yZV9jb250cm9sbGVyLmxheW91dHMgPSBjb3JlX2xheW91dHM7XG5jb3JlX2NvbnRyb2xsZXIucGxhdGZvcm0gPSBwbGF0Zm9ybTtcbmNvcmVfY29udHJvbGxlci5wbHVnaW5zID0gY29yZV9wbHVnaW5zO1xuY29yZV9jb250cm9sbGVyLlNjYWxlID0gY29yZV9zY2FsZTtcbmNvcmVfY29udHJvbGxlci5zY2FsZVNlcnZpY2UgPSBjb3JlX3NjYWxlU2VydmljZTtcbmNvcmVfY29udHJvbGxlci5UaWNrcyA9IGNvcmVfdGlja3M7XG5jb3JlX2NvbnRyb2xsZXIuVG9vbHRpcCA9IGNvcmVfdG9vbHRpcDtcblxuLy8gUmVnaXN0ZXIgYnVpbHQtaW4gc2NhbGVzXG5cbmNvcmVfY29udHJvbGxlci5oZWxwZXJzLmVhY2goc2NhbGVzLCBmdW5jdGlvbihzY2FsZSwgdHlwZSkge1xuXHRjb3JlX2NvbnRyb2xsZXIuc2NhbGVTZXJ2aWNlLnJlZ2lzdGVyU2NhbGVUeXBlKHR5cGUsIHNjYWxlLCBzY2FsZS5fZGVmYXVsdHMpO1xufSk7XG5cbi8vIExvYWQgdG8gcmVnaXN0ZXIgYnVpbHQtaW4gYWRhcHRlcnMgKGFzIHNpZGUgZWZmZWN0cylcblxuXG4vLyBMb2FkaW5nIGJ1aWx0LWluIHBsdWdpbnNcblxuZm9yICh2YXIgayBpbiBwbHVnaW5zKSB7XG5cdGlmIChwbHVnaW5zLmhhc093blByb3BlcnR5KGspKSB7XG5cdFx0Y29yZV9jb250cm9sbGVyLnBsdWdpbnMucmVnaXN0ZXIocGx1Z2luc1trXSk7XG5cdH1cbn1cblxuY29yZV9jb250cm9sbGVyLnBsYXRmb3JtLmluaXRpYWxpemUoKTtcblxudmFyIHNyYyA9IGNvcmVfY29udHJvbGxlcjtcbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuXHR3aW5kb3cuQ2hhcnQgPSBjb3JlX2NvbnRyb2xsZXI7XG59XG5cbi8vIERFUFJFQ0FUSU9OU1xuXG4vKipcbiAqIFByb3ZpZGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBub3QgYXZhaWxhYmxlIGFueW1vcmVcbiAqIEBuYW1lc3BhY2UgQ2hhcnQuQ2hhcnRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMi44LjBcbiAqIEB0b2RvIHJlbW92ZSBhdCB2ZXJzaW9uIDNcbiAqIEBwcml2YXRlXG4gKi9cbmNvcmVfY29udHJvbGxlci5DaGFydCA9IGNvcmVfY29udHJvbGxlcjtcblxuLyoqXG4gKiBQcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgbm90IGF2YWlsYWJsZSBhbnltb3JlXG4gKiBAbmFtZXNwYWNlIENoYXJ0LkxlZ2VuZFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAyLjEuNVxuICogQHRvZG8gcmVtb3ZlIGF0IHZlcnNpb24gM1xuICogQHByaXZhdGVcbiAqL1xuY29yZV9jb250cm9sbGVyLkxlZ2VuZCA9IHBsdWdpbnMubGVnZW5kLl9lbGVtZW50O1xuXG4vKipcbiAqIFByb3ZpZGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBub3QgYXZhaWxhYmxlIGFueW1vcmVcbiAqIEBuYW1lc3BhY2UgQ2hhcnQuVGl0bGVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMi4xLjVcbiAqIEB0b2RvIHJlbW92ZSBhdCB2ZXJzaW9uIDNcbiAqIEBwcml2YXRlXG4gKi9cbmNvcmVfY29udHJvbGxlci5UaXRsZSA9IHBsdWdpbnMudGl0bGUuX2VsZW1lbnQ7XG5cbi8qKlxuICogUHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHVzZSBDaGFydC5wbHVnaW5zIGluc3RlYWRcbiAqIEBuYW1lc3BhY2UgQ2hhcnQucGx1Z2luU2VydmljZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAyLjEuNVxuICogQHRvZG8gcmVtb3ZlIGF0IHZlcnNpb24gM1xuICogQHByaXZhdGVcbiAqL1xuY29yZV9jb250cm9sbGVyLnBsdWdpblNlcnZpY2UgPSBjb3JlX2NvbnRyb2xsZXIucGx1Z2lucztcblxuLyoqXG4gKiBQcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgaW5oZXJpdGluZyBmcm9tIENoYXJ0LlBsdWdpbmdCYXNlIGhhcyBub1xuICogZWZmZWN0LCBpbnN0ZWFkIHNpbXBseSBjcmVhdGUvcmVnaXN0ZXIgcGx1Z2lucyB2aWEgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICogQGludGVyZmFjZSBDaGFydC5QbHVnaW5CYXNlXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDIuNS4wXG4gKiBAdG9kbyByZW1vdmUgYXQgdmVyc2lvbiAzXG4gKiBAcHJpdmF0ZVxuICovXG5jb3JlX2NvbnRyb2xsZXIuUGx1Z2luQmFzZSA9IGNvcmVfY29udHJvbGxlci5FbGVtZW50LmV4dGVuZCh7fSk7XG5cbi8qKlxuICogUHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHVzZSBDaGFydC5oZWxwZXJzLmNhbnZhcyBpbnN0ZWFkLlxuICogQG5hbWVzcGFjZSBDaGFydC5jYW52YXNIZWxwZXJzXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDIuNi4wXG4gKiBAdG9kbyByZW1vdmUgYXQgdmVyc2lvbiAzXG4gKiBAcHJpdmF0ZVxuICovXG5jb3JlX2NvbnRyb2xsZXIuY2FudmFzSGVscGVycyA9IGNvcmVfY29udHJvbGxlci5oZWxwZXJzLmNhbnZhcztcblxuLyoqXG4gKiBQcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdXNlIENoYXJ0LmxheW91dHMgaW5zdGVhZC5cbiAqIEBuYW1lc3BhY2UgQ2hhcnQubGF5b3V0U2VydmljZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAyLjcuM1xuICogQHRvZG8gcmVtb3ZlIGF0IHZlcnNpb24gM1xuICogQHByaXZhdGVcbiAqL1xuY29yZV9jb250cm9sbGVyLmxheW91dFNlcnZpY2UgPSBjb3JlX2NvbnRyb2xsZXIubGF5b3V0cztcblxuLyoqXG4gKiBQcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgbm90IGF2YWlsYWJsZSBhbnltb3JlLlxuICogQG5hbWVzcGFjZSBDaGFydC5MaW5lYXJTY2FsZUJhc2VcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMi44XG4gKiBAdG9kbyByZW1vdmUgYXQgdmVyc2lvbiAzXG4gKiBAcHJpdmF0ZVxuICovXG5jb3JlX2NvbnRyb2xsZXIuTGluZWFyU2NhbGVCYXNlID0gc2NhbGVfbGluZWFyYmFzZTtcblxuLyoqXG4gKiBQcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgaW5zdGVhZCB3ZSBzaG91bGQgY3JlYXRlIGEgbmV3IENoYXJ0XG4gKiBieSBzZXR0aW5nIHRoZSB0eXBlIGluIHRoZSBjb25maWcgKGBuZXcgQ2hhcnQoaWQsIHt0eXBlOiAne2NoYXJ0LXR5cGV9J31gKS5cbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMi44LjBcbiAqIEB0b2RvIHJlbW92ZSBhdCB2ZXJzaW9uIDNcbiAqL1xuY29yZV9jb250cm9sbGVyLmhlbHBlcnMuZWFjaChcblx0W1xuXHRcdCdCYXInLFxuXHRcdCdCdWJibGUnLFxuXHRcdCdEb3VnaG51dCcsXG5cdFx0J0xpbmUnLFxuXHRcdCdQb2xhckFyZWEnLFxuXHRcdCdSYWRhcicsXG5cdFx0J1NjYXR0ZXInXG5cdF0sXG5cdGZ1bmN0aW9uKGtsYXNzKSB7XG5cdFx0Y29yZV9jb250cm9sbGVyW2tsYXNzXSA9IGZ1bmN0aW9uKGN0eCwgY2ZnKSB7XG5cdFx0XHRyZXR1cm4gbmV3IGNvcmVfY29udHJvbGxlcihjdHgsIGNvcmVfY29udHJvbGxlci5oZWxwZXJzLm1lcmdlKGNmZyB8fCB7fSwge1xuXHRcdFx0XHR0eXBlOiBrbGFzcy5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIGtsYXNzLnNsaWNlKDEpXG5cdFx0XHR9KSk7XG5cdFx0fTtcblx0fVxuKTtcblxucmV0dXJuIHNyYztcblxufSkpKTtcbiIsInZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG52YXIgVU5TQ09QQUJMRVMgPSB3ZWxsS25vd25TeW1ib2woJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbi8vIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuaWYgKEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHtcbiAgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihBcnJheVByb3RvdHlwZSwgVU5TQ09QQUJMRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IGNyZWF0ZShudWxsKVxuICB9KTtcbn1cblxuLy8gYWRkIGEga2V5IHRvIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgVHlwZUVycm9yKFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG4iLCJ2YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsInZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG52YXIgcHVzaCA9IFtdLnB1c2g7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBmb3JFYWNoLCBtYXAsIGZpbHRlciwgc29tZSwgZXZlcnksIGZpbmQsIGZpbmRJbmRleCwgZmlsdGVyUmVqZWN0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNjtcbiAgdmFyIElTX0ZJTFRFUl9SRUpFQ1QgPSBUWVBFID09IDc7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0LCBzcGVjaWZpY0NyZWF0ZSkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgdGhhdCwgMyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKHNlbGYpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNyZWF0ZSA9IHNwZWNpZmljQ3JlYXRlIHx8IGFycmF5U3BlY2llc0NyZWF0ZTtcbiAgICB2YXIgdGFyZ2V0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSIHx8IElTX0ZJTFRFUl9SRUpFQ1QgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWx1ZSwgcmVzdWx0O1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsdWUgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlc3VsdCA9IGJvdW5kRnVuY3Rpb24odmFsdWUsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHRhcmdldFtpbmRleF0gPSByZXN1bHQ7IC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXN1bHQpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsdWU7ICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiBwdXNoLmNhbGwodGFyZ2V0LCB2YWx1ZSk7IC8vIGZpbHRlclxuICAgICAgICB9IGVsc2Ugc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSA0OiByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgIC8vIGV2ZXJ5XG4gICAgICAgICAgY2FzZSA3OiBwdXNoLmNhbGwodGFyZ2V0LCB2YWx1ZSk7IC8vIGZpbHRlclJlamVjdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiB0YXJnZXQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuICBmb3JFYWNoOiBjcmVhdGVNZXRob2QoMCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4gIG1hcDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuICBmaWx0ZXI6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5zb21lYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuICBzb21lOiBjcmVhdGVNZXRob2QoMyksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5ldmVyeVxuICBldmVyeTogY3JlYXRlTWV0aG9kKDQpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4gIGZpbmQ6IGNyZWF0ZU1ldGhvZCg1KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhcbiAgZmluZEluZGV4OiBjcmVhdGVNZXRob2QoNiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyUmVqZWN0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZmlsdGVyaW5nXG4gIGZpbHRlclJlamVjdDogY3JlYXRlTWV0aG9kKDcpXG59O1xuIiwidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGEgcGFydCBvZiBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5KSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbEFycmF5KSkge1xuICAgIEMgPSBvcmlnaW5hbEFycmF5LmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKGlzQ29uc3RydWN0b3IoQykgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBlbHNlIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIEMgPT09IHVuZGVmaW5lZCA/IEFycmF5IDogQztcbn07XG4iLCJ2YXIgYXJyYXlTcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG4vLyBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5LCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoYXJyYXlTcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWxBcnJheSkpKGxlbmd0aCA9PT0gMCA/IDAgOiBsZW5ndGgpO1xufTtcbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcbiIsInZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIENPUlJFQ1RfQVJHVU1FTlRTID0gY2xhc3NvZlJhdyhmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSBFUzYrIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyBjbGFzc29mUmF3IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT0gJ09iamVjdCcgJiYgaXNDYWxsYWJsZShPLmNhbGxlZSkgPyAnQXJndW1lbnRzJyA6IHJlc3VsdDtcbn07XG4iLCJ2YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSkgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICB9XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPSA3O1xufSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ25hdmlnYXRvcicsICd1c2VyQWdlbnQnKSB8fCAnJztcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgRGVubyA9IGdsb2JhbC5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIHZlcnNpb24gPSBtYXRjaFswXSA8IDQgPyAxIDogbWF0Y2hbMF0gKyBtYXRjaFsxXTtcbn0gZWxzZSBpZiAodXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uICYmICt2ZXJzaW9uO1xuIiwiLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciBzZXRHbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWdsb2JhbCcpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMubm9UYXJnZXRHZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBGT1JDRUQsIHRhcmdldCwga2V5LCB0YXJnZXRQcm9wZXJ0eSwgc291cmNlUHJvcGVydHksIGRlc2NyaXB0b3I7XG4gIGlmIChHTE9CQUwpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWw7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsW1RBUkdFVF0gfHwgc2V0R2xvYmFsKFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IChnbG9iYWxbVEFSR0VUXSB8fCB7fSkucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMubm9UYXJnZXRHZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PT0gdHlwZW9mIHRhcmdldFByb3BlcnR5KSBjb250aW51ZTtcbiAgICAgIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5KTtcbiAgICB9XG4gICAgLy8gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICAgIGlmIChvcHRpb25zLnNoYW0gfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoc291cmNlUHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuICAgIC8vIGV4dGVuZCBnbG9iYWxcbiAgICByZWRlZmluZSh0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsInZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG4vLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUNhbGxhYmxlKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQpO1xuICAgIH07XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNDYWxsYWJsZShhcmd1bWVudCkgPyBhcmd1bWVudCA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihnbG9iYWxbbmFtZXNwYWNlXSkgOiBnbG9iYWxbbmFtZXNwYWNlXSAmJiBnbG9iYWxbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsInZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGZ1bmMgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCJ2YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwidmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbCh0b09iamVjdChpdCksIGtleSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ2RvY3VtZW50JywgJ2RvY3VtZW50RWxlbWVudCcpO1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWllZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciBzcGxpdCA9ICcnLnNwbGl0O1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT0gJ1N0cmluZycgPyBzcGxpdC5jYWxsKGl0LCAnJykgOiBPYmplY3QoaXQpO1xufSA6IE9iamVjdDtcbiIsInZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24udG9TdHJpbmc7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcuY2FsbChpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsInZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXdlYWstbWFwJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICB2YXIgd21nZXQgPSBzdG9yZS5nZXQ7XG4gIHZhciB3bWhhcyA9IHN0b3JlLmhhcztcbiAgdmFyIHdtc2V0ID0gc3RvcmUuc2V0O1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHdtaGFzLmNhbGwoc3RvcmUsIGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgd21zZXQuY2FsbChzdG9yZSwgaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiB3bWdldC5jYWxsKHN0b3JlLCBpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiB3bWhhcy5jYWxsKHN0b3JlLCBpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChoYXNPd24oaXQsIFNUQVRFKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT0gJ0FycmF5Jztcbn07XG4iLCIvLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xuXG52YXIgZW1wdHkgPSBbXTtcbnZhciBjb25zdHJ1Y3QgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ2NvbnN0cnVjdCcpO1xudmFyIGNvbnN0cnVjdG9yUmVnRXhwID0gL15cXHMqKD86Y2xhc3N8ZnVuY3Rpb24pXFxiLztcbnZhciBleGVjID0gY29uc3RydWN0b3JSZWdFeHAuZXhlYztcbnZhciBJTkNPUlJFQ1RfVE9fU1RSSU5HID0gIWNvbnN0cnVjdG9yUmVnRXhwLmV4ZWMoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcblxudmFyIGlzQ29uc3RydWN0b3JNb2Rlcm4gPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0cnVjdChPYmplY3QsIGVtcHR5LCBhcmd1bWVudCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG52YXIgaXNDb25zdHJ1Y3RvckxlZ2FjeSA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHN3aXRjaCAoY2xhc3NvZihhcmd1bWVudCkpIHtcbiAgICBjYXNlICdBc3luY0Z1bmN0aW9uJzpcbiAgICBjYXNlICdHZW5lcmF0b3JGdW5jdGlvbic6XG4gICAgY2FzZSAnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbic6IHJldHVybiBmYWxzZTtcbiAgICAvLyB3ZSBjYW4ndCBjaGVjayAucHJvdG90eXBlIHNpbmNlIGNvbnN0cnVjdG9ycyBwcm9kdWNlZCBieSAuYmluZCBoYXZlbid0IGl0XG4gIH0gcmV0dXJuIElOQ09SUkVDVF9UT19TVFJJTkcgfHwgISFleGVjLmNhbGwoY29uc3RydWN0b3JSZWdFeHAsIGluc3BlY3RTb3VyY2UoYXJndW1lbnQpKTtcbn07XG5cbi8vIGBJc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjb25zdHJ1Y3RvclxubW9kdWxlLmV4cG9ydHMgPSAhY29uc3RydWN0IHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNhbGxlZDtcbiAgcmV0dXJuIGlzQ29uc3RydWN0b3JNb2Rlcm4oaXNDb25zdHJ1Y3Rvck1vZGVybi5jYWxsKVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKE9iamVjdClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihmdW5jdGlvbiAoKSB7IGNhbGxlZCA9IHRydWU7IH0pXG4gICAgfHwgY2FsbGVkO1xufSkgPyBpc0NvbnN0cnVjdG9yTGVnYWN5IDogaXNDb25zdHJ1Y3Rvck1vZGVybjtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsInZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwidmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgT2JqZWN0KGl0KSBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuIiwidmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICByZXR1cm4gIVN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChpbnNwZWN0U291cmNlKFdlYWtNYXApKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHNhZmVcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuLy8gYE9iamVjdC5hc3NpZ25gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuYXNzaWduXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gc2hvdWxkIGhhdmUgY29ycmVjdCBvcmRlciBvZiBvcGVyYXRpb25zIChFZGdlIGJ1ZylcbiAgaWYgKERFU0NSSVBUT1JTICYmICRhc3NpZ24oeyBiOiAxIH0sICRhc3NpZ24oZGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYicsIHtcbiAgICAgICAgdmFsdWU6IDMsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9XG4gIH0pLCB7IGI6IDIgfSkpLmIgIT09IDEpIHJldHVybiB0cnVlO1xuICAvLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1ZylcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXN5bWJvbCAtLSBzYWZlXG4gIHZhciBzeW1ib2wgPSBTeW1ib2woKTtcbiAgdmFyIGFscGhhYmV0ID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtzeW1ib2xdID0gNztcbiAgYWxwaGFiZXQuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGNocikgeyBCW2Nocl0gPSBjaHI7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbc3ltYm9sXSAhPSA3IHx8IG9iamVjdEtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IGFscGhhYmV0O1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgdmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZjtcbiAgd2hpbGUgKGFyZ3VtZW50c0xlbmd0aCA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJbmRleGVkT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBvYmplY3RLZXlzKFMpLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoUykpIDogb2JqZWN0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgIGtleSA9IGtleXNbaisrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iLCIvKiBnbG9iYWwgQWN0aXZlWE9iamVjdCAtLSBvbGQgSUUsIFdTSCAqL1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGRlZmluZVByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBkb2N1bWVudENyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xuXG52YXIgR1QgPSAnPic7XG52YXIgTFQgPSAnPCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgU0NSSVBUID0gJ3NjcmlwdCc7XG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG5cbnZhciBFbXB0eUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG52YXIgc2NyaXB0VGFnID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgcmV0dXJuIExUICsgU0NSSVBUICsgR1QgKyBjb250ZW50ICsgTFQgKyAnLycgKyBTQ1JJUFQgKyBHVDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBBY3RpdmVYIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCA9IGZ1bmN0aW9uIChhY3RpdmVYRG9jdW1lbnQpIHtcbiAgYWN0aXZlWERvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnJykpO1xuICBhY3RpdmVYRG9jdW1lbnQuY2xvc2UoKTtcbiAgdmFyIHRlbXAgPSBhY3RpdmVYRG9jdW1lbnQucGFyZW50V2luZG93Lk9iamVjdDtcbiAgYWN0aXZlWERvY3VtZW50ID0gbnVsbDsgLy8gYXZvaWQgbWVtb3J5IGxlYWtcbiAgcmV0dXJuIHRlbXA7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgdmFyIEpTID0gJ2phdmEnICsgU0NSSVBUICsgJzonO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBodG1sLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy80NzVcbiAgaWZyYW1lLnNyYyA9IFN0cmluZyhKUyk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCdkb2N1bWVudC5GPU9iamVjdCcpKTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgcmV0dXJuIGlmcmFtZURvY3VtZW50LkY7XG59O1xuXG4vLyBDaGVjayBmb3IgZG9jdW1lbnQuZG9tYWluIGFuZCBhY3RpdmUgeCBzdXBwb3J0XG4vLyBObyBuZWVkIHRvIHVzZSBhY3RpdmUgeCBhcHByb2FjaCB3aGVuIGRvY3VtZW50LmRvbWFpbiBpcyBub3Qgc2V0XG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2lzc3Vlcy8xNTBcbi8vIHZhcmlhdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20va2l0Y2FtYnJpZGdlL2VzNS1zaGltL2NvbW1pdC80ZjczOGFjMDY2MzQ2XG4vLyBhdm9pZCBJRSBHQyBidWdcbnZhciBhY3RpdmVYRG9jdW1lbnQ7XG52YXIgTnVsbFByb3RvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIGFjdGl2ZVhEb2N1bWVudCA9IG5ldyBBY3RpdmVYT2JqZWN0KCdodG1sZmlsZScpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBpZ25vcmUgKi8gfVxuICBOdWxsUHJvdG9PYmplY3QgPSB0eXBlb2YgZG9jdW1lbnQgIT0gJ3VuZGVmaW5lZCdcbiAgICA/IGRvY3VtZW50LmRvbWFpbiAmJiBhY3RpdmVYRG9jdW1lbnRcbiAgICAgID8gTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpIC8vIG9sZCBJRVxuICAgICAgOiBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUoKVxuICAgIDogTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpOyAvLyBXU0hcbiAgdmFyIGxlbmd0aCA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgTnVsbFByb3RvT2JqZWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbbGVuZ3RoXV07XG4gIHJldHVybiBOdWxsUHJvdG9PYmplY3QoKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHlDb25zdHJ1Y3RvcigpO1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gTnVsbFByb3RvT2JqZWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkZWZpbmVQcm9wZXJ0aWVzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydGllcyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5ID0ga2V5c1tpbmRleCsrXSwgUHJvcGVydGllc1trZXldKTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzT3duKE8sIFApKSByZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLmNhbGwoTywgUCksIE9bUF0pO1xufTtcbiIsInZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsInZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWtleXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKS5mO1xuXG4vLyBgT2JqZWN0LnsgZW50cmllcywgdmFsdWVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVE9fRU5UUklFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QoaXQpO1xuICAgIHZhciBrZXlzID0gb2JqZWN0S2V5cyhPKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBpKSB7XG4gICAgICBrZXkgPSBrZXlzW2krK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoTywga2V5KSkge1xuICAgICAgICByZXN1bHQucHVzaChUT19FTlRSSUVTID8gW2tleSwgT1trZXldXSA6IE9ba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYE9iamVjdC5lbnRyaWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZW50cmllc1xuICBlbnRyaWVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBPYmplY3QudmFsdWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QudmFsdWVzXG4gIHZhbHVlczogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsInZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHByZWYgIT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8ga2V5cy5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIHNldEdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZ2xvYmFsJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xuXG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICB2YXIgdW5zYWZlID0gb3B0aW9ucyA/ICEhb3B0aW9ucy51bnNhZmUgOiBmYWxzZTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMgPyAhIW9wdGlvbnMuZW51bWVyYWJsZSA6IGZhbHNlO1xuICB2YXIgbm9UYXJnZXRHZXQgPSBvcHRpb25zID8gISFvcHRpb25zLm5vVGFyZ2V0R2V0IDogZmFsc2U7XG4gIHZhciBuYW1lID0gb3B0aW9ucyAmJiBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgdmFyIHN0YXRlO1xuICBpZiAoaXNDYWxsYWJsZSh2YWx1ZSkpIHtcbiAgICBpZiAoU3RyaW5nKG5hbWUpLnNsaWNlKDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICAgIG5hbWUgPSAnWycgKyBTdHJpbmcobmFtZSkucmVwbGFjZSgvXlN5bWJvbFxcKChbXildKilcXCkvLCAnJDEnKSArICddJztcbiAgICB9XG4gICAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodmFsdWUsICduYW1lJywgbmFtZSk7XG4gICAgfVxuICAgIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICAgIGlmICghc3RhdGUuc291cmNlKSB7XG4gICAgICBzdGF0ZS5zb3VyY2UgPSBURU1QTEFURS5qb2luKHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgICB9XG4gIH1cbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2Ugc2V0R2xvYmFsKGtleSwgdmFsdWUpO1xuICAgIHJldHVybjtcbiAgfSBlbHNlIGlmICghdW5zYWZlKSB7XG4gICAgZGVsZXRlIE9ba2V5XTtcbiAgfSBlbHNlIGlmICghbm9UYXJnZXRHZXQgJiYgT1trZXldKSB7XG4gICAgc2ltcGxlID0gdHJ1ZTtcbiAgfVxuICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgZWxzZSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoTywga2V5LCB2YWx1ZSk7XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHRoaXMpICYmIGdldEludGVybmFsU3RhdGUodGhpcykuc291cmNlIHx8IGluc3BlY3RTb3VyY2UodGhpcyk7XG59KTtcbiIsIi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbCwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNldEdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZ2xvYmFsJyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IHNldEdsb2JhbChTSEFSRUQsIHt9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZTtcbiIsInZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246ICczLjE4LjMnLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMjEgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcbiIsInZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsIi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCJ2YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBUb0ludGVnZXJPckluZmluaXR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9pbnRlZ2Vyb3JpbmZpbml0eVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIG51bWJlciA9ICthcmd1bWVudDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBzYWZlXG4gIHJldHVybiBudW1iZXIgIT09IG51bWJlciB8fCBudW1iZXIgPT09IDAgPyAwIDogKG51bWJlciA+IDAgPyBmbG9vciA6IGNlaWwpKG51bWJlcik7XG59O1xuIiwidmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gYXJndW1lbnQgPiAwID8gbWluKHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCJ2YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gZXhvdGljVG9QcmltLmNhbGwoaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCJ2YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDogU3RyaW5nKGtleSk7XG59O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciB0ZXN0ID0ge307XG5cbnRlc3RbVE9fU1RSSU5HX1RBR10gPSAneic7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RyaW5nKHRlc3QpID09PSAnW29iamVjdCB6XSc7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiBTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsInZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgU3RyaW5nKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArICgrK2lkICsgcG9zdGZpeCkudG9TdHJpbmcoMzYpO1xufTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpIHx8ICEoTkFUSVZFX1NZTUJPTCB8fCB0eXBlb2YgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID09ICdzdHJpbmcnKSkge1xuICAgIGlmIChOQVRJVkVfU1lNQk9MICYmIGhhc093bihTeW1ib2wsIG5hbWUpKSB7XG4gICAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBTeW1ib2xbbmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgICB9XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maW5kO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG5cbnZhciBGSU5EID0gJ2ZpbmQnO1xudmFyIFNLSVBTX0hPTEVTID0gdHJ1ZTtcblxuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChGSU5EIGluIFtdKSBBcnJheSgxKVtGSU5EXShmdW5jdGlvbiAoKSB7IFNLSVBTX0hPTEVTID0gZmFsc2U7IH0pO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogU0tJUFNfSE9MRVMgfSwge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoRklORCk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbicpO1xuXG4vLyBgT2JqZWN0LmFzc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5hc3NpZ25cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBPYmplY3QuYXNzaWduICE9PSBhc3NpZ24gfSwge1xuICBhc3NpZ246IGFzc2lnblxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZW50cmllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tYXJyYXknKS5lbnRyaWVzO1xuXG4vLyBgT2JqZWN0LmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZW50cmllc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKE8pIHtcbiAgICByZXR1cm4gJGVudHJpZXMoTyk7XG4gIH1cbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKSB7XG4gIHZhciBsaXN0ID0gW107IC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblxuICBsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgY29udGVudCA9IFwiXCI7XG4gICAgICB2YXIgbmVlZExheWVyID0gdHlwZW9mIGl0ZW1bNV0gIT09IFwidW5kZWZpbmVkXCI7XG5cbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnRlbnQgKz0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKTtcblxuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICB9OyAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuXG5cbiAgbGlzdC5pID0gZnVuY3Rpb24gaShtb2R1bGVzLCBtZWRpYSwgZGVkdXBlLCBzdXBwb3J0cywgbGF5ZXIpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIHVuZGVmaW5lZF1dO1xuICAgIH1cblxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG5cbiAgICBpZiAoZGVkdXBlKSB7XG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgdGhpcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdmFyIGlkID0gdGhpc1tfaV1bMF07XG5cbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBtb2R1bGVzLmxlbmd0aDsgX2kyKyspIHtcbiAgICAgIHZhciBpdGVtID0gW10uY29uY2F0KG1vZHVsZXNbX2kyXSk7XG5cbiAgICAgIGlmIChkZWR1cGUgJiYgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpdGVtWzBdXSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBsYXllciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1bNV0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG1lZGlhKSB7XG4gICAgICAgIGlmICghaXRlbVsyXSkge1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN1cHBvcnRzKSB7XG4gICAgICAgIGlmICghaXRlbVs0XSkge1xuICAgICAgICAgIGl0ZW1bNF0gPSBcIlwiLmNvbmNhdChzdXBwb3J0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQoaXRlbVs0XSwgXCIpIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzRdID0gc3VwcG9ydHM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbGlzdDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgdmFyIGNvbnRlbnQgPSBpdGVtWzFdO1xuICB2YXIgY3NzTWFwcGluZyA9IGl0ZW1bM107XG5cbiAgaWYgKCFjc3NNYXBwaW5nKSB7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgdmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBcIi8qIyBzb3VyY2VVUkw9XCIuY29uY2F0KGNzc01hcHBpbmcuc291cmNlUm9vdCB8fCBcIlwiKS5jb25jYXQoc291cmNlLCBcIiAqL1wiKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChzb3VyY2VVUkxzKS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKFwiXFxuXCIpO1xufTsiLCIvKipcbiAqIERvbTcgMi4xLjVcbiAqIE1pbmltYWxpc3RpYyBKYXZhU2NyaXB0IGxpYnJhcnkgZm9yIERPTSBtYW5pcHVsYXRpb24sIHdpdGggYSBqUXVlcnktY29tcGF0aWJsZSBBUElcbiAqIGh0dHA6Ly9mcmFtZXdvcms3LmlvL2RvY3MvZG9tLmh0bWxcbiAqXG4gKiBDb3B5cmlnaHQgMjAyMCwgVmxhZGltaXIgS2hhcmxhbXBpZGlcbiAqIFRoZSBpRGFuZ2Vyby51c1xuICogaHR0cDovL3d3dy5pZGFuZ2Vyby51cy9cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBNSVRcbiAqXG4gKiBSZWxlYXNlZCBvbjogTWF5IDE1LCAyMDIwXG4gKi9cbmltcG9ydCB7IGRvY3VtZW50LCB3aW5kb3cgfSBmcm9tICdzc3Itd2luZG93JztcblxuY2xhc3MgRG9tNyB7XG4gIGNvbnN0cnVjdG9yKGFycikge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIC8vIENyZWF0ZSBhcnJheS1saWtlIG9iamVjdFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBzZWxmW2ldID0gYXJyW2ldO1xuICAgIH1cbiAgICBzZWxmLmxlbmd0aCA9IGFyci5sZW5ndGg7XG4gICAgLy8gUmV0dXJuIGNvbGxlY3Rpb24gd2l0aCBtZXRob2RzXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuZnVuY3Rpb24gJChzZWxlY3RvciwgY29udGV4dCkge1xuICBjb25zdCBhcnIgPSBbXTtcbiAgbGV0IGkgPSAwO1xuICBpZiAoc2VsZWN0b3IgJiYgIWNvbnRleHQpIHtcbiAgICBpZiAoc2VsZWN0b3IgaW5zdGFuY2VvZiBEb203KSB7XG4gICAgICByZXR1cm4gc2VsZWN0b3I7XG4gICAgfVxuICB9XG4gIGlmIChzZWxlY3Rvcikge1xuICAgICAgLy8gU3RyaW5nXG4gICAgaWYgKHR5cGVvZiBzZWxlY3RvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGxldCBlbHM7XG4gICAgICBsZXQgdGVtcFBhcmVudDtcbiAgICAgIGNvbnN0IGh0bWwgPSBzZWxlY3Rvci50cmltKCk7XG4gICAgICBpZiAoaHRtbC5pbmRleE9mKCc8JykgPj0gMCAmJiBodG1sLmluZGV4T2YoJz4nKSA+PSAwKSB7XG4gICAgICAgIGxldCB0b0NyZWF0ZSA9ICdkaXYnO1xuICAgICAgICBpZiAoaHRtbC5pbmRleE9mKCc8bGknKSA9PT0gMCkgdG9DcmVhdGUgPSAndWwnO1xuICAgICAgICBpZiAoaHRtbC5pbmRleE9mKCc8dHInKSA9PT0gMCkgdG9DcmVhdGUgPSAndGJvZHknO1xuICAgICAgICBpZiAoaHRtbC5pbmRleE9mKCc8dGQnKSA9PT0gMCB8fCBodG1sLmluZGV4T2YoJzx0aCcpID09PSAwKSB0b0NyZWF0ZSA9ICd0cic7XG4gICAgICAgIGlmIChodG1sLmluZGV4T2YoJzx0Ym9keScpID09PSAwKSB0b0NyZWF0ZSA9ICd0YWJsZSc7XG4gICAgICAgIGlmIChodG1sLmluZGV4T2YoJzxvcHRpb24nKSA9PT0gMCkgdG9DcmVhdGUgPSAnc2VsZWN0JztcbiAgICAgICAgdGVtcFBhcmVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodG9DcmVhdGUpO1xuICAgICAgICB0ZW1wUGFyZW50LmlubmVySFRNTCA9IGh0bWw7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0ZW1wUGFyZW50LmNoaWxkTm9kZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICBhcnIucHVzaCh0ZW1wUGFyZW50LmNoaWxkTm9kZXNbaV0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIWNvbnRleHQgJiYgc2VsZWN0b3JbMF0gPT09ICcjJyAmJiAhc2VsZWN0b3IubWF0Y2goL1sgLjw+On5dLykpIHtcbiAgICAgICAgICAvLyBQdXJlIElEIHNlbGVjdG9yXG4gICAgICAgICAgZWxzID0gW2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlbGVjdG9yLnRyaW0oKS5zcGxpdCgnIycpWzFdKV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXIgc2VsZWN0b3JzXG4gICAgICAgICAgZWxzID0gKGNvbnRleHQgfHwgZG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IudHJpbSgpKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZWxzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgaWYgKGVsc1tpXSkgYXJyLnB1c2goZWxzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc2VsZWN0b3Iubm9kZVR5cGUgfHwgc2VsZWN0b3IgPT09IHdpbmRvdyB8fCBzZWxlY3RvciA9PT0gZG9jdW1lbnQpIHtcbiAgICAgIC8vIE5vZGUvZWxlbWVudFxuICAgICAgYXJyLnB1c2goc2VsZWN0b3IpO1xuICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IubGVuZ3RoID4gMCAmJiBzZWxlY3RvclswXS5ub2RlVHlwZSkge1xuICAgICAgLy8gQXJyYXkgb2YgZWxlbWVudHMgb3IgaW5zdGFuY2Ugb2YgRG9tXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgc2VsZWN0b3IubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgYXJyLnB1c2goc2VsZWN0b3JbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IERvbTcoYXJyKTtcbn1cblxuJC5mbiA9IERvbTcucHJvdG90eXBlO1xuJC5DbGFzcyA9IERvbTc7XG4kLkRvbTcgPSBEb203O1xuXG5mdW5jdGlvbiB1bmlxdWUoYXJyKSB7XG4gIGNvbnN0IHVuaXF1ZUFycmF5ID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKHVuaXF1ZUFycmF5LmluZGV4T2YoYXJyW2ldKSA9PT0gLTEpIHVuaXF1ZUFycmF5LnB1c2goYXJyW2ldKTtcbiAgfVxuICByZXR1cm4gdW5pcXVlQXJyYXk7XG59XG5mdW5jdGlvbiB0b0NhbWVsQ2FzZShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLy0oLikvZywgKG1hdGNoLCBncm91cDEpID0+IGdyb3VwMS50b1VwcGVyQ2FzZSgpKTtcbn1cblxuZnVuY3Rpb24gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNhbGxiYWNrKSB7XG4gIGlmICh3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSByZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjayk7XG4gIGVsc2UgaWYgKHdpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHJldHVybiB3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNhbGxiYWNrKTtcbiAgcmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KGNhbGxiYWNrLCAxMDAwIC8gNjApO1xufVxuZnVuY3Rpb24gY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpIHtcbiAgaWYgKHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSkgcmV0dXJuIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShpZCk7XG4gIGVsc2UgaWYgKHdpbmRvdy53ZWJraXRDYW5jZWxBbmltYXRpb25GcmFtZSkgcmV0dXJuIHdpbmRvdy53ZWJraXRDYW5jZWxBbmltYXRpb25GcmFtZShpZCk7XG4gIHJldHVybiB3aW5kb3cuY2xlYXJUaW1lb3V0KGlkKTtcbn1cblxuLy8gQ2xhc3NlcyBhbmQgYXR0cmlidXRlc1xuZnVuY3Rpb24gYWRkQ2xhc3MoY2xhc3NOYW1lKSB7XG4gIGlmICh0eXBlb2YgY2xhc3NOYW1lID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGNvbnN0IGNsYXNzZXMgPSBjbGFzc05hbWUuc3BsaXQoJyAnKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXNbal0gIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB0aGlzW2pdLmNsYXNzTGlzdCAhPT0gJ3VuZGVmaW5lZCcpIHRoaXNbal0uY2xhc3NMaXN0LmFkZChjbGFzc2VzW2ldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5mdW5jdGlvbiByZW1vdmVDbGFzcyhjbGFzc05hbWUpIHtcbiAgY29uc3QgY2xhc3NlcyA9IGNsYXNzTmFtZS5zcGxpdCgnICcpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGNsYXNzZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpc1tqXSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHRoaXNbal0uY2xhc3NMaXN0ICE9PSAndW5kZWZpbmVkJykgdGhpc1tqXS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzZXNbaV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbmZ1bmN0aW9uIGhhc0NsYXNzKGNsYXNzTmFtZSkge1xuICBpZiAoIXRoaXNbMF0pIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHRoaXNbMF0uY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSk7XG59XG5mdW5jdGlvbiB0b2dnbGVDbGFzcyhjbGFzc05hbWUpIHtcbiAgY29uc3QgY2xhc3NlcyA9IGNsYXNzTmFtZS5zcGxpdCgnICcpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGNsYXNzZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpc1tqXSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHRoaXNbal0uY2xhc3NMaXN0ICE9PSAndW5kZWZpbmVkJykgdGhpc1tqXS5jbGFzc0xpc3QudG9nZ2xlKGNsYXNzZXNbaV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbmZ1bmN0aW9uIGF0dHIoYXR0cnMsIHZhbHVlKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhdHRycyA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBHZXQgYXR0clxuICAgIGlmICh0aGlzWzBdKSByZXR1cm4gdGhpc1swXS5nZXRBdHRyaWJ1dGUoYXR0cnMpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBTZXQgYXR0cnNcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgIC8vIFN0cmluZ1xuICAgICAgdGhpc1tpXS5zZXRBdHRyaWJ1dGUoYXR0cnMsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT2JqZWN0XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGZvciAoY29uc3QgYXR0ck5hbWUgaW4gYXR0cnMpIHtcbiAgICAgICAgdGhpc1tpXVthdHRyTmFtZV0gPSBhdHRyc1thdHRyTmFtZV07XG4gICAgICAgIHRoaXNbaV0uc2V0QXR0cmlidXRlKGF0dHJOYW1lLCBhdHRyc1thdHRyTmFtZV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuZnVuY3Rpb24gcmVtb3ZlQXR0cihhdHRyKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHRoaXNbaV0ucmVtb3ZlQXR0cmlidXRlKGF0dHIpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG5mdW5jdGlvbiBwcm9wKHByb3BzLCB2YWx1ZSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgcHJvcHMgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gR2V0IHByb3BcbiAgICBpZiAodGhpc1swXSkgcmV0dXJuIHRoaXNbMF1bcHJvcHNdO1xuICB9IGVsc2Uge1xuICAgIC8vIFNldCBwcm9wc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgLy8gU3RyaW5nXG4gICAgICAgIHRoaXNbaV1bcHJvcHNdID0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPYmplY3RcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgIGZvciAoY29uc3QgcHJvcE5hbWUgaW4gcHJvcHMpIHtcbiAgICAgICAgICB0aGlzW2ldW3Byb3BOYW1lXSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuZnVuY3Rpb24gZGF0YShrZXksIHZhbHVlKSB7XG4gIGxldCBlbDtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBlbCA9IHRoaXNbMF07XG4gICAgLy8gR2V0IHZhbHVlXG4gICAgaWYgKGVsKSB7XG4gICAgICBpZiAoZWwuZG9tN0VsZW1lbnREYXRhU3RvcmFnZSAmJiAoa2V5IGluIGVsLmRvbTdFbGVtZW50RGF0YVN0b3JhZ2UpKSB7XG4gICAgICAgIHJldHVybiBlbC5kb203RWxlbWVudERhdGFTdG9yYWdlW2tleV07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFLZXkgPSBlbC5nZXRBdHRyaWJ1dGUoYGRhdGEtJHtrZXl9YCk7XG4gICAgICBpZiAoZGF0YUtleSkge1xuICAgICAgICByZXR1cm4gZGF0YUtleTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBTZXQgdmFsdWVcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgZWwgPSB0aGlzW2ldO1xuICAgIGlmICghZWwuZG9tN0VsZW1lbnREYXRhU3RvcmFnZSkgZWwuZG9tN0VsZW1lbnREYXRhU3RvcmFnZSA9IHt9O1xuICAgIGVsLmRvbTdFbGVtZW50RGF0YVN0b3JhZ2Vba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuZnVuY3Rpb24gcmVtb3ZlRGF0YShrZXkpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgY29uc3QgZWwgPSB0aGlzW2ldO1xuICAgIGlmIChlbC5kb203RWxlbWVudERhdGFTdG9yYWdlICYmIGVsLmRvbTdFbGVtZW50RGF0YVN0b3JhZ2Vba2V5XSkge1xuICAgICAgZWwuZG9tN0VsZW1lbnREYXRhU3RvcmFnZVtrZXldID0gbnVsbDtcbiAgICAgIGRlbGV0ZSBlbC5kb203RWxlbWVudERhdGFTdG9yYWdlW2tleV07XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBkYXRhc2V0KCkge1xuICBjb25zdCBlbCA9IHRoaXNbMF07XG4gIGlmICghZWwpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGRhdGFzZXQgPSB7fTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICBpZiAoZWwuZGF0YXNldCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIGZvciAoY29uc3QgZGF0YUtleSBpbiBlbC5kYXRhc2V0KSB7XG4gICAgICBkYXRhc2V0W2RhdGFLZXldID0gZWwuZGF0YXNldFtkYXRhS2V5XTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbC5hdHRyaWJ1dGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGNvbnN0IGF0dHIgPSBlbC5hdHRyaWJ1dGVzW2ldO1xuICAgICAgaWYgKGF0dHIubmFtZS5pbmRleE9mKCdkYXRhLScpID49IDApIHtcbiAgICAgICAgZGF0YXNldFt0b0NhbWVsQ2FzZShhdHRyLm5hbWUuc3BsaXQoJ2RhdGEtJylbMV0pXSA9IGF0dHIudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhc2V0KSB7XG4gICAgaWYgKGRhdGFzZXRba2V5XSA9PT0gJ2ZhbHNlJykgZGF0YXNldFtrZXldID0gZmFsc2U7XG4gICAgZWxzZSBpZiAoZGF0YXNldFtrZXldID09PSAndHJ1ZScpIGRhdGFzZXRba2V5XSA9IHRydWU7XG4gICAgZWxzZSBpZiAocGFyc2VGbG9hdChkYXRhc2V0W2tleV0pID09PSBkYXRhc2V0W2tleV0gKiAxKSBkYXRhc2V0W2tleV0gKj0gMTtcbiAgfVxuICByZXR1cm4gZGF0YXNldDtcbn1cbmZ1bmN0aW9uIHZhbCh2YWx1ZSkge1xuICBjb25zdCBkb20gPSB0aGlzO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgIGlmIChkb21bMF0pIHtcbiAgICAgIGlmIChkb21bMF0ubXVsdGlwbGUgJiYgZG9tWzBdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdzZWxlY3QnKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRvbVswXS5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICB2YWx1ZXMucHVzaChkb21bMF0uc2VsZWN0ZWRPcHRpb25zW2ldLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRvbVswXS52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZG9tLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgY29uc3QgZWwgPSBkb21baV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIGVsLm11bHRpcGxlICYmIGVsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdzZWxlY3QnKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVsLm9wdGlvbnMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgZWwub3B0aW9uc1tqXS5zZWxlY3RlZCA9IHZhbHVlLmluZGV4T2YoZWwub3B0aW9uc1tqXS52YWx1ZSkgPj0gMDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWwudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRvbTtcbn1cbi8vIFRyYW5zZm9ybXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuZnVuY3Rpb24gdHJhbnNmb3JtKHRyYW5zZm9ybSkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBlbFN0eWxlID0gdGhpc1tpXS5zdHlsZTtcbiAgICBlbFN0eWxlLndlYmtpdFRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcbiAgICBlbFN0eWxlLnRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbmZ1bmN0aW9uIHRyYW5zaXRpb24oZHVyYXRpb24pIHtcbiAgaWYgKHR5cGVvZiBkdXJhdGlvbiAhPT0gJ3N0cmluZycpIHtcbiAgICBkdXJhdGlvbiA9IGAke2R1cmF0aW9ufW1zYDsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGNvbnN0IGVsU3R5bGUgPSB0aGlzW2ldLnN0eWxlO1xuICAgIGVsU3R5bGUud2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uID0gZHVyYXRpb247XG4gICAgZWxTdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSBkdXJhdGlvbjtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbi8vIEV2ZW50c1xuZnVuY3Rpb24gb24oLi4uYXJncykge1xuICBsZXQgW2V2ZW50VHlwZSwgdGFyZ2V0U2VsZWN0b3IsIGxpc3RlbmVyLCBjYXB0dXJlXSA9IGFyZ3M7XG4gIGlmICh0eXBlb2YgYXJnc1sxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIFtldmVudFR5cGUsIGxpc3RlbmVyLCBjYXB0dXJlXSA9IGFyZ3M7XG4gICAgdGFyZ2V0U2VsZWN0b3IgPSB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKCFjYXB0dXJlKSBjYXB0dXJlID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gaGFuZGxlTGl2ZUV2ZW50KGUpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldDtcbiAgICBpZiAoIXRhcmdldCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50RGF0YSA9IGUudGFyZ2V0LmRvbTdFdmVudERhdGEgfHwgW107XG4gICAgaWYgKGV2ZW50RGF0YS5pbmRleE9mKGUpIDwgMCkge1xuICAgICAgZXZlbnREYXRhLnVuc2hpZnQoZSk7XG4gICAgfVxuICAgIGlmICgkKHRhcmdldCkuaXModGFyZ2V0U2VsZWN0b3IpKSBsaXN0ZW5lci5hcHBseSh0YXJnZXQsIGV2ZW50RGF0YSk7XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBwYXJlbnRzID0gJCh0YXJnZXQpLnBhcmVudHMoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBwYXJlbnRzLmxlbmd0aDsgayArPSAxKSB7XG4gICAgICAgIGlmICgkKHBhcmVudHNba10pLmlzKHRhcmdldFNlbGVjdG9yKSkgbGlzdGVuZXIuYXBwbHkocGFyZW50c1trXSwgZXZlbnREYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gaGFuZGxlRXZlbnQoZSkge1xuICAgIGNvbnN0IGV2ZW50RGF0YSA9IGUgJiYgZS50YXJnZXQgPyBlLnRhcmdldC5kb203RXZlbnREYXRhIHx8IFtdIDogW107XG4gICAgaWYgKGV2ZW50RGF0YS5pbmRleE9mKGUpIDwgMCkge1xuICAgICAgZXZlbnREYXRhLnVuc2hpZnQoZSk7XG4gICAgfVxuICAgIGxpc3RlbmVyLmFwcGx5KHRoaXMsIGV2ZW50RGF0YSk7XG4gIH1cbiAgY29uc3QgZXZlbnRzID0gZXZlbnRUeXBlLnNwbGl0KCcgJyk7XG4gIGxldCBqO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBlbCA9IHRoaXNbaV07XG4gICAgaWYgKCF0YXJnZXRTZWxlY3Rvcikge1xuICAgICAgZm9yIChqID0gMDsgaiA8IGV2ZW50cy5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICBjb25zdCBldmVudCA9IGV2ZW50c1tqXTtcbiAgICAgICAgaWYgKCFlbC5kb203TGlzdGVuZXJzKSBlbC5kb203TGlzdGVuZXJzID0ge307XG4gICAgICAgIGlmICghZWwuZG9tN0xpc3RlbmVyc1tldmVudF0pIGVsLmRvbTdMaXN0ZW5lcnNbZXZlbnRdID0gW107XG4gICAgICAgIGVsLmRvbTdMaXN0ZW5lcnNbZXZlbnRdLnB1c2goe1xuICAgICAgICAgIGxpc3RlbmVyLFxuICAgICAgICAgIHByb3h5TGlzdGVuZXI6IGhhbmRsZUV2ZW50LFxuICAgICAgICB9KTtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlRXZlbnQsIGNhcHR1cmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXZlIGV2ZW50c1xuICAgICAgZm9yIChqID0gMDsgaiA8IGV2ZW50cy5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICBjb25zdCBldmVudCA9IGV2ZW50c1tqXTtcbiAgICAgICAgaWYgKCFlbC5kb203TGl2ZUxpc3RlbmVycykgZWwuZG9tN0xpdmVMaXN0ZW5lcnMgPSB7fTtcbiAgICAgICAgaWYgKCFlbC5kb203TGl2ZUxpc3RlbmVyc1tldmVudF0pIGVsLmRvbTdMaXZlTGlzdGVuZXJzW2V2ZW50XSA9IFtdO1xuICAgICAgICBlbC5kb203TGl2ZUxpc3RlbmVyc1tldmVudF0ucHVzaCh7XG4gICAgICAgICAgbGlzdGVuZXIsXG4gICAgICAgICAgcHJveHlMaXN0ZW5lcjogaGFuZGxlTGl2ZUV2ZW50LFxuICAgICAgICB9KTtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlTGl2ZUV2ZW50LCBjYXB0dXJlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5mdW5jdGlvbiBvZmYoLi4uYXJncykge1xuICBsZXQgW2V2ZW50VHlwZSwgdGFyZ2V0U2VsZWN0b3IsIGxpc3RlbmVyLCBjYXB0dXJlXSA9IGFyZ3M7XG4gIGlmICh0eXBlb2YgYXJnc1sxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIFtldmVudFR5cGUsIGxpc3RlbmVyLCBjYXB0dXJlXSA9IGFyZ3M7XG4gICAgdGFyZ2V0U2VsZWN0b3IgPSB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKCFjYXB0dXJlKSBjYXB0dXJlID0gZmFsc2U7XG5cbiAgY29uc3QgZXZlbnRzID0gZXZlbnRUeXBlLnNwbGl0KCcgJyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgY29uc3QgZXZlbnQgPSBldmVudHNbaV07XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICBjb25zdCBlbCA9IHRoaXNbal07XG4gICAgICBsZXQgaGFuZGxlcnM7XG4gICAgICBpZiAoIXRhcmdldFNlbGVjdG9yICYmIGVsLmRvbTdMaXN0ZW5lcnMpIHtcbiAgICAgICAgaGFuZGxlcnMgPSBlbC5kb203TGlzdGVuZXJzW2V2ZW50XTtcbiAgICAgIH0gZWxzZSBpZiAodGFyZ2V0U2VsZWN0b3IgJiYgZWwuZG9tN0xpdmVMaXN0ZW5lcnMpIHtcbiAgICAgICAgaGFuZGxlcnMgPSBlbC5kb203TGl2ZUxpc3RlbmVyc1tldmVudF07XG4gICAgICB9XG4gICAgICBpZiAoaGFuZGxlcnMgJiYgaGFuZGxlcnMubGVuZ3RoKSB7XG4gICAgICAgIGZvciAobGV0IGsgPSBoYW5kbGVycy5sZW5ndGggLSAxOyBrID49IDA7IGsgLT0gMSkge1xuICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSBoYW5kbGVyc1trXTtcbiAgICAgICAgICBpZiAobGlzdGVuZXIgJiYgaGFuZGxlci5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIucHJveHlMaXN0ZW5lciwgY2FwdHVyZSk7XG4gICAgICAgICAgICBoYW5kbGVycy5zcGxpY2UoaywgMSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lciAmJiBoYW5kbGVyLmxpc3RlbmVyICYmIGhhbmRsZXIubGlzdGVuZXIuZG9tN3Byb3h5ICYmIGhhbmRsZXIubGlzdGVuZXIuZG9tN3Byb3h5ID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlci5wcm94eUxpc3RlbmVyLCBjYXB0dXJlKTtcbiAgICAgICAgICAgIGhhbmRsZXJzLnNwbGljZShrLCAxKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFsaXN0ZW5lcikge1xuICAgICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlci5wcm94eUxpc3RlbmVyLCBjYXB0dXJlKTtcbiAgICAgICAgICAgIGhhbmRsZXJzLnNwbGljZShrLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5mdW5jdGlvbiBvbmNlKC4uLmFyZ3MpIHtcbiAgY29uc3QgZG9tID0gdGhpcztcbiAgbGV0IFtldmVudE5hbWUsIHRhcmdldFNlbGVjdG9yLCBsaXN0ZW5lciwgY2FwdHVyZV0gPSBhcmdzO1xuICBpZiAodHlwZW9mIGFyZ3NbMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICBbZXZlbnROYW1lLCBsaXN0ZW5lciwgY2FwdHVyZV0gPSBhcmdzO1xuICAgIHRhcmdldFNlbGVjdG9yID0gdW5kZWZpbmVkO1xuICB9XG4gIGZ1bmN0aW9uIG9uY2VIYW5kbGVyKC4uLmV2ZW50QXJncykge1xuICAgIGxpc3RlbmVyLmFwcGx5KHRoaXMsIGV2ZW50QXJncyk7XG4gICAgZG9tLm9mZihldmVudE5hbWUsIHRhcmdldFNlbGVjdG9yLCBvbmNlSGFuZGxlciwgY2FwdHVyZSk7XG4gICAgaWYgKG9uY2VIYW5kbGVyLmRvbTdwcm94eSkge1xuICAgICAgZGVsZXRlIG9uY2VIYW5kbGVyLmRvbTdwcm94eTtcbiAgICB9XG4gIH1cbiAgb25jZUhhbmRsZXIuZG9tN3Byb3h5ID0gbGlzdGVuZXI7XG4gIHJldHVybiBkb20ub24oZXZlbnROYW1lLCB0YXJnZXRTZWxlY3Rvciwgb25jZUhhbmRsZXIsIGNhcHR1cmUpO1xufVxuZnVuY3Rpb24gdHJpZ2dlciguLi5hcmdzKSB7XG4gIGNvbnN0IGV2ZW50cyA9IGFyZ3NbMF0uc3BsaXQoJyAnKTtcbiAgY29uc3QgZXZlbnREYXRhID0gYXJnc1sxXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBldmVudHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBldmVudCA9IGV2ZW50c1tpXTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgIGNvbnN0IGVsID0gdGhpc1tqXTtcbiAgICAgIGxldCBldnQ7XG4gICAgICB0cnkge1xuICAgICAgICBldnQgPSBuZXcgd2luZG93LkN1c3RvbUV2ZW50KGV2ZW50LCB7XG4gICAgICAgICAgZGV0YWlsOiBldmVudERhdGEsXG4gICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgICAgIGV2dC5pbml0RXZlbnQoZXZlbnQsIHRydWUsIHRydWUpO1xuICAgICAgICBldnQuZGV0YWlsID0gZXZlbnREYXRhO1xuICAgICAgfVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICBlbC5kb203RXZlbnREYXRhID0gYXJncy5maWx0ZXIoKGRhdGEsIGRhdGFJbmRleCkgPT4gZGF0YUluZGV4ID4gMCk7XG4gICAgICBlbC5kaXNwYXRjaEV2ZW50KGV2dCk7XG4gICAgICBlbC5kb203RXZlbnREYXRhID0gW107XG4gICAgICBkZWxldGUgZWwuZG9tN0V2ZW50RGF0YTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5mdW5jdGlvbiB0cmFuc2l0aW9uRW5kKGNhbGxiYWNrKSB7XG4gIGNvbnN0IGV2ZW50cyA9IFsnd2Via2l0VHJhbnNpdGlvbkVuZCcsICd0cmFuc2l0aW9uZW5kJ107XG4gIGNvbnN0IGRvbSA9IHRoaXM7XG4gIGxldCBpO1xuICBmdW5jdGlvbiBmaXJlQ2FsbEJhY2soZSkge1xuICAgIC8qIGpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICAgIGlmIChlLnRhcmdldCAhPT0gdGhpcykgcmV0dXJuO1xuICAgIGNhbGxiYWNrLmNhbGwodGhpcywgZSk7XG4gICAgZm9yIChpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgZG9tLm9mZihldmVudHNbaV0sIGZpcmVDYWxsQmFjayk7XG4gICAgfVxuICB9XG4gIGlmIChjYWxsYmFjaykge1xuICAgIGZvciAoaSA9IDA7IGkgPCBldmVudHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGRvbS5vbihldmVudHNbaV0sIGZpcmVDYWxsQmFjayk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufVxuZnVuY3Rpb24gYW5pbWF0aW9uRW5kKGNhbGxiYWNrKSB7XG4gIGNvbnN0IGV2ZW50cyA9IFsnd2Via2l0QW5pbWF0aW9uRW5kJywgJ2FuaW1hdGlvbmVuZCddO1xuICBjb25zdCBkb20gPSB0aGlzO1xuICBsZXQgaTtcbiAgZnVuY3Rpb24gZmlyZUNhbGxCYWNrKGUpIHtcbiAgICBpZiAoZS50YXJnZXQgIT09IHRoaXMpIHJldHVybjtcbiAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGUpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBldmVudHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGRvbS5vZmYoZXZlbnRzW2ldLCBmaXJlQ2FsbEJhY2spO1xuICAgIH1cbiAgfVxuICBpZiAoY2FsbGJhY2spIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBkb20ub24oZXZlbnRzW2ldLCBmaXJlQ2FsbEJhY2spO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbi8vIFNpemluZy9TdHlsZXNcbmZ1bmN0aW9uIHdpZHRoKCkge1xuICBpZiAodGhpc1swXSA9PT0gd2luZG93KSB7XG4gICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoO1xuICB9XG5cbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHRoaXMuY3NzKCd3aWR0aCcpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gb3V0ZXJXaWR0aChpbmNsdWRlTWFyZ2lucykge1xuICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgaWYgKGluY2x1ZGVNYXJnaW5zKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGNvbnN0IHN0eWxlcyA9IHRoaXMuc3R5bGVzKCk7XG4gICAgICByZXR1cm4gdGhpc1swXS5vZmZzZXRXaWR0aCArIHBhcnNlRmxvYXQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbi1yaWdodCcpKSArIHBhcnNlRmxvYXQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbi1sZWZ0JykpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpc1swXS5vZmZzZXRXaWR0aDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGhlaWdodCgpIHtcbiAgaWYgKHRoaXNbMF0gPT09IHdpbmRvdykge1xuICAgIHJldHVybiB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gIH1cblxuICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodGhpcy5jc3MoJ2hlaWdodCcpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gb3V0ZXJIZWlnaHQoaW5jbHVkZU1hcmdpbnMpIHtcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIGlmIChpbmNsdWRlTWFyZ2lucykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICBjb25zdCBzdHlsZXMgPSB0aGlzLnN0eWxlcygpO1xuICAgICAgcmV0dXJuIHRoaXNbMF0ub2Zmc2V0SGVpZ2h0ICsgcGFyc2VGbG9hdChzdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgnbWFyZ2luLXRvcCcpKSArIHBhcnNlRmxvYXQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbi1ib3R0b20nKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzWzBdLm9mZnNldEhlaWdodDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIG9mZnNldCgpIHtcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGVsID0gdGhpc1swXTtcbiAgICBjb25zdCBib3ggPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgICBjb25zdCBjbGllbnRUb3AgPSBlbC5jbGllbnRUb3AgfHwgYm9keS5jbGllbnRUb3AgfHwgMDtcbiAgICBjb25zdCBjbGllbnRMZWZ0ID0gZWwuY2xpZW50TGVmdCB8fCBib2R5LmNsaWVudExlZnQgfHwgMDtcbiAgICBjb25zdCBzY3JvbGxUb3AgPSBlbCA9PT0gd2luZG93ID8gd2luZG93LnNjcm9sbFkgOiBlbC5zY3JvbGxUb3A7XG4gICAgY29uc3Qgc2Nyb2xsTGVmdCA9IGVsID09PSB3aW5kb3cgPyB3aW5kb3cuc2Nyb2xsWCA6IGVsLnNjcm9sbExlZnQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvcDogKGJveC50b3AgKyBzY3JvbGxUb3ApIC0gY2xpZW50VG9wLFxuICAgICAgbGVmdDogKGJveC5sZWZ0ICsgc2Nyb2xsTGVmdCkgLSBjbGllbnRMZWZ0LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGhpZGUoKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHRoaXNbaV0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbmZ1bmN0aW9uIHNob3coKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGNvbnN0IGVsID0gdGhpc1tpXTtcbiAgICBpZiAoZWwuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSB7XG4gICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgfVxuICAgIGlmICh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnZGlzcGxheScpID09PSAnbm9uZScpIHtcbiAgICAgIC8vIFN0aWxsIG5vdCB2aXNpYmxlXG4gICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5mdW5jdGlvbiBzdHlsZXMoKSB7XG4gIGlmICh0aGlzWzBdKSByZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpc1swXSwgbnVsbCk7XG4gIHJldHVybiB7fTtcbn1cbmZ1bmN0aW9uIGNzcyhwcm9wcywgdmFsdWUpIHtcbiAgbGV0IGk7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICh0aGlzWzBdKSByZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpc1swXSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShwcm9wcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICBmb3IgKGxldCBwcm9wIGluIHByb3BzKSB7XG4gICAgICAgICAgdGhpc1tpXS5zdHlsZVtwcm9wXSA9IHByb3BzW3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIgJiYgdHlwZW9mIHByb3BzID09PSAnc3RyaW5nJykge1xuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB0aGlzW2ldLnN0eWxlW3Byb3BzXSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxuLy8gRG9tIG1hbmlwdWxhdGlvblxuZnVuY3Rpb24gdG9BcnJheSgpIHtcbiAgY29uc3QgYXJyID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGFyci5wdXNoKHRoaXNbaV0pO1xuICB9XG4gIHJldHVybiBhcnI7XG59XG4vLyBJdGVyYXRlIG92ZXIgdGhlIGNvbGxlY3Rpb24gcGFzc2luZyBlbGVtZW50cyB0byBgY2FsbGJhY2tgXG5mdW5jdGlvbiBlYWNoKGNhbGxiYWNrKSB7XG4gIC8vIERvbid0IGJvdGhlciBjb250aW51aW5nIHdpdGhvdXQgYSBjYWxsYmFja1xuICBpZiAoIWNhbGxiYWNrKSByZXR1cm4gdGhpcztcbiAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBjdXJyZW50IGNvbGxlY3Rpb25cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgLy8gSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgZmFsc2VcbiAgICBpZiAoY2FsbGJhY2suY2FsbCh0aGlzW2ldLCBpLCB0aGlzW2ldKSA9PT0gZmFsc2UpIHtcbiAgICAgIC8vIEVuZCB0aGUgbG9vcCBlYXJseVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9XG4gIC8vIFJldHVybiBgdGhpc2AgdG8gYWxsb3cgY2hhaW5lZCBET00gb3BlcmF0aW9uc1xuICByZXR1cm4gdGhpcztcbn1cbmZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2spIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGNvbnRpbnVpbmcgd2l0aG91dCBhIGNhbGxiYWNrXG4gIGlmICghY2FsbGJhY2spIHJldHVybiB0aGlzO1xuICAvLyBJdGVyYXRlIG92ZXIgdGhlIGN1cnJlbnQgY29sbGVjdGlvblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAvLyBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyBmYWxzZVxuICAgIGlmIChjYWxsYmFjay5jYWxsKHRoaXNbaV0sIHRoaXNbaV0sIGkpID09PSBmYWxzZSkge1xuICAgICAgLy8gRW5kIHRoZSBsb29wIGVhcmx5XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH1cbiAgLy8gUmV0dXJuIGB0aGlzYCB0byBhbGxvdyBjaGFpbmVkIERPTSBvcGVyYXRpb25zXG4gIHJldHVybiB0aGlzO1xufVxuZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrKSB7XG4gIGNvbnN0IG1hdGNoZWRJdGVtcyA9IFtdO1xuICBjb25zdCBkb20gPSB0aGlzO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRvbS5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmIChjYWxsYmFjay5jYWxsKGRvbVtpXSwgaSwgZG9tW2ldKSkgbWF0Y2hlZEl0ZW1zLnB1c2goZG9tW2ldKTtcbiAgfVxuICByZXR1cm4gbmV3IERvbTcobWF0Y2hlZEl0ZW1zKTtcbn1cbmZ1bmN0aW9uIG1hcChjYWxsYmFjaykge1xuICBjb25zdCBtb2RpZmllZEl0ZW1zID0gW107XG4gIGNvbnN0IGRvbSA9IHRoaXM7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZG9tLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgbW9kaWZpZWRJdGVtcy5wdXNoKGNhbGxiYWNrLmNhbGwoZG9tW2ldLCBpLCBkb21baV0pKTtcbiAgfVxuICByZXR1cm4gbmV3IERvbTcobW9kaWZpZWRJdGVtcyk7XG59XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbmZ1bmN0aW9uIGh0bWwoaHRtbCkge1xuICBpZiAodHlwZW9mIGh0bWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHRoaXNbMF0gPyB0aGlzWzBdLmlubmVySFRNTCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHRoaXNbaV0uaW5uZXJIVE1MID0gaHRtbDtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuZnVuY3Rpb24gdGV4dCh0ZXh0KSB7XG4gIGlmICh0eXBlb2YgdGV4dCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAodGhpc1swXSkge1xuICAgICAgcmV0dXJuIHRoaXNbMF0udGV4dENvbnRlbnQudHJpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHRoaXNbaV0udGV4dENvbnRlbnQgPSB0ZXh0O1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuZnVuY3Rpb24gaXMoc2VsZWN0b3IpIHtcbiAgY29uc3QgZWwgPSB0aGlzWzBdO1xuICBsZXQgY29tcGFyZVdpdGg7XG4gIGxldCBpO1xuICBpZiAoIWVsIHx8IHR5cGVvZiBzZWxlY3RvciA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBzZWxlY3RvciA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoZWwubWF0Y2hlcykgcmV0dXJuIGVsLm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgIGVsc2UgaWYgKGVsLndlYmtpdE1hdGNoZXNTZWxlY3RvcikgcmV0dXJuIGVsLndlYmtpdE1hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgZWxzZSBpZiAoZWwubXNNYXRjaGVzU2VsZWN0b3IpIHJldHVybiBlbC5tc01hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7XG5cbiAgICBjb21wYXJlV2l0aCA9ICQoc2VsZWN0b3IpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBjb21wYXJlV2l0aC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKGNvbXBhcmVXaXRoW2ldID09PSBlbCkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChzZWxlY3RvciA9PT0gZG9jdW1lbnQpIHJldHVybiBlbCA9PT0gZG9jdW1lbnQ7XG4gIGVsc2UgaWYgKHNlbGVjdG9yID09PSB3aW5kb3cpIHJldHVybiBlbCA9PT0gd2luZG93O1xuXG4gIGlmIChzZWxlY3Rvci5ub2RlVHlwZSB8fCBzZWxlY3RvciBpbnN0YW5jZW9mIERvbTcpIHtcbiAgICBjb21wYXJlV2l0aCA9IHNlbGVjdG9yLm5vZGVUeXBlID8gW3NlbGVjdG9yXSA6IHNlbGVjdG9yO1xuICAgIGZvciAoaSA9IDA7IGkgPCBjb21wYXJlV2l0aC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKGNvbXBhcmVXaXRoW2ldID09PSBlbCkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBpbmRleE9mKGVsKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmICh0aGlzW2ldID09PSBlbCkgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuZnVuY3Rpb24gaW5kZXgoKSB7XG4gIGxldCBjaGlsZCA9IHRoaXNbMF07XG4gIGxldCBpO1xuICBpZiAoY2hpbGQpIHtcbiAgICBpID0gMDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICB3aGlsZSAoKGNoaWxkID0gY2hpbGQucHJldmlvdXNTaWJsaW5nKSAhPT0gbnVsbCkge1xuICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAxKSBpICs9IDE7XG4gICAgfVxuICAgIHJldHVybiBpO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbmZ1bmN0aW9uIGVxKGluZGV4KSB7XG4gIGlmICh0eXBlb2YgaW5kZXggPT09ICd1bmRlZmluZWQnKSByZXR1cm4gdGhpcztcbiAgY29uc3QgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gIGxldCByZXR1cm5JbmRleDtcbiAgaWYgKGluZGV4ID4gbGVuZ3RoIC0gMSkge1xuICAgIHJldHVybiBuZXcgRG9tNyhbXSk7XG4gIH1cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybkluZGV4ID0gbGVuZ3RoICsgaW5kZXg7XG4gICAgaWYgKHJldHVybkluZGV4IDwgMCkgcmV0dXJuIG5ldyBEb203KFtdKTtcbiAgICByZXR1cm4gbmV3IERvbTcoW3RoaXNbcmV0dXJuSW5kZXhdXSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBEb203KFt0aGlzW2luZGV4XV0pO1xufVxuZnVuY3Rpb24gYXBwZW5kKC4uLmFyZ3MpIHtcbiAgbGV0IG5ld0NoaWxkO1xuXG4gIGZvciAobGV0IGsgPSAwOyBrIDwgYXJncy5sZW5ndGg7IGsgKz0gMSkge1xuICAgIG5ld0NoaWxkID0gYXJnc1trXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IHRlbXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGVtcERpdi5pbm5lckhUTUwgPSBuZXdDaGlsZDtcbiAgICAgICAgd2hpbGUgKHRlbXBEaXYuZmlyc3RDaGlsZCkge1xuICAgICAgICAgIHRoaXNbaV0uYXBwZW5kQ2hpbGQodGVtcERpdi5maXJzdENoaWxkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChuZXdDaGlsZCBpbnN0YW5jZW9mIERvbTcpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBuZXdDaGlsZC5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICAgIHRoaXNbaV0uYXBwZW5kQ2hpbGQobmV3Q2hpbGRbal0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW2ldLmFwcGVuZENoaWxkKG5ld0NoaWxkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuZnVuY3Rpb24gYXBwZW5kVG8ocGFyZW50KSB7XG4gICQocGFyZW50KS5hcHBlbmQodGhpcyk7XG4gIHJldHVybiB0aGlzO1xufVxuZnVuY3Rpb24gcHJlcGVuZChuZXdDaGlsZCkge1xuICBsZXQgaTtcbiAgbGV0IGo7XG4gIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHRlbXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHRlbXBEaXYuaW5uZXJIVE1MID0gbmV3Q2hpbGQ7XG4gICAgICBmb3IgKGogPSB0ZW1wRGl2LmNoaWxkTm9kZXMubGVuZ3RoIC0gMTsgaiA+PSAwOyBqIC09IDEpIHtcbiAgICAgICAgdGhpc1tpXS5pbnNlcnRCZWZvcmUodGVtcERpdi5jaGlsZE5vZGVzW2pdLCB0aGlzW2ldLmNoaWxkTm9kZXNbMF0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV3Q2hpbGQgaW5zdGFuY2VvZiBEb203KSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgbmV3Q2hpbGQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgdGhpc1tpXS5pbnNlcnRCZWZvcmUobmV3Q2hpbGRbal0sIHRoaXNbaV0uY2hpbGROb2Rlc1swXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNbaV0uaW5zZXJ0QmVmb3JlKG5ld0NoaWxkLCB0aGlzW2ldLmNoaWxkTm9kZXNbMF0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuZnVuY3Rpb24gcHJlcGVuZFRvKHBhcmVudCkge1xuICAkKHBhcmVudCkucHJlcGVuZCh0aGlzKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5mdW5jdGlvbiBpbnNlcnRCZWZvcmUoc2VsZWN0b3IpIHtcbiAgY29uc3QgYmVmb3JlID0gJChzZWxlY3Rvcik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmIChiZWZvcmUubGVuZ3RoID09PSAxKSB7XG4gICAgICBiZWZvcmVbMF0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpc1tpXSwgYmVmb3JlWzBdKTtcbiAgICB9IGVsc2UgaWYgKGJlZm9yZS5sZW5ndGggPiAxKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGJlZm9yZS5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICBiZWZvcmVbal0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpc1tpXS5jbG9uZU5vZGUodHJ1ZSksIGJlZm9yZVtqXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBpbnNlcnRBZnRlcihzZWxlY3Rvcikge1xuICBjb25zdCBhZnRlciA9ICQoc2VsZWN0b3IpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoYWZ0ZXIubGVuZ3RoID09PSAxKSB7XG4gICAgICBhZnRlclswXS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzW2ldLCBhZnRlclswXS5uZXh0U2libGluZyk7XG4gICAgfSBlbHNlIGlmIChhZnRlci5sZW5ndGggPiAxKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGFmdGVyLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgIGFmdGVyW2pdLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXNbaV0uY2xvbmVOb2RlKHRydWUpLCBhZnRlcltqXS5uZXh0U2libGluZyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBuZXh0KHNlbGVjdG9yKSB7XG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgIGlmICh0aGlzWzBdLm5leHRFbGVtZW50U2libGluZyAmJiAkKHRoaXNbMF0ubmV4dEVsZW1lbnRTaWJsaW5nKS5pcyhzZWxlY3RvcikpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEb203KFt0aGlzWzBdLm5leHRFbGVtZW50U2libGluZ10pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBEb203KFtdKTtcbiAgICB9XG5cbiAgICBpZiAodGhpc1swXS5uZXh0RWxlbWVudFNpYmxpbmcpIHJldHVybiBuZXcgRG9tNyhbdGhpc1swXS5uZXh0RWxlbWVudFNpYmxpbmddKTtcbiAgICByZXR1cm4gbmV3IERvbTcoW10pO1xuICB9XG4gIHJldHVybiBuZXcgRG9tNyhbXSk7XG59XG5mdW5jdGlvbiBuZXh0QWxsKHNlbGVjdG9yKSB7XG4gIGNvbnN0IG5leHRFbHMgPSBbXTtcbiAgbGV0IGVsID0gdGhpc1swXTtcbiAgaWYgKCFlbCkgcmV0dXJuIG5ldyBEb203KFtdKTtcbiAgd2hpbGUgKGVsLm5leHRFbGVtZW50U2libGluZykge1xuICAgIGNvbnN0IG5leHQgPSBlbC5uZXh0RWxlbWVudFNpYmxpbmc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgIGlmICgkKG5leHQpLmlzKHNlbGVjdG9yKSkgbmV4dEVscy5wdXNoKG5leHQpO1xuICAgIH0gZWxzZSBuZXh0RWxzLnB1c2gobmV4dCk7XG4gICAgZWwgPSBuZXh0O1xuICB9XG4gIHJldHVybiBuZXcgRG9tNyhuZXh0RWxzKTtcbn1cbmZ1bmN0aW9uIHByZXYoc2VsZWN0b3IpIHtcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGVsID0gdGhpc1swXTtcbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgIGlmIChlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nICYmICQoZWwucHJldmlvdXNFbGVtZW50U2libGluZykuaXMoc2VsZWN0b3IpKSB7XG4gICAgICAgIHJldHVybiBuZXcgRG9tNyhbZWwucHJldmlvdXNFbGVtZW50U2libGluZ10pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBEb203KFtdKTtcbiAgICB9XG5cbiAgICBpZiAoZWwucHJldmlvdXNFbGVtZW50U2libGluZykgcmV0dXJuIG5ldyBEb203KFtlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nXSk7XG4gICAgcmV0dXJuIG5ldyBEb203KFtdKTtcbiAgfVxuICByZXR1cm4gbmV3IERvbTcoW10pO1xufVxuZnVuY3Rpb24gcHJldkFsbChzZWxlY3Rvcikge1xuICBjb25zdCBwcmV2RWxzID0gW107XG4gIGxldCBlbCA9IHRoaXNbMF07XG4gIGlmICghZWwpIHJldHVybiBuZXcgRG9tNyhbXSk7XG4gIHdoaWxlIChlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSB7XG4gICAgY29uc3QgcHJldiA9IGVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgIGlmICgkKHByZXYpLmlzKHNlbGVjdG9yKSkgcHJldkVscy5wdXNoKHByZXYpO1xuICAgIH0gZWxzZSBwcmV2RWxzLnB1c2gocHJldik7XG4gICAgZWwgPSBwcmV2O1xuICB9XG4gIHJldHVybiBuZXcgRG9tNyhwcmV2RWxzKTtcbn1cbmZ1bmN0aW9uIHNpYmxpbmdzKHNlbGVjdG9yKSB7XG4gIHJldHVybiB0aGlzLm5leHRBbGwoc2VsZWN0b3IpLmFkZCh0aGlzLnByZXZBbGwoc2VsZWN0b3IpKTtcbn1cbmZ1bmN0aW9uIHBhcmVudChzZWxlY3Rvcikge1xuICBjb25zdCBwYXJlbnRzID0gW107IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKHRoaXNbaV0ucGFyZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgIGlmICgkKHRoaXNbaV0ucGFyZW50Tm9kZSkuaXMoc2VsZWN0b3IpKSBwYXJlbnRzLnB1c2godGhpc1tpXS5wYXJlbnROb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmVudHMucHVzaCh0aGlzW2ldLnBhcmVudE5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gJCh1bmlxdWUocGFyZW50cykpO1xufVxuZnVuY3Rpb24gcGFyZW50cyhzZWxlY3Rvcikge1xuICBjb25zdCBwYXJlbnRzID0gW107IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgbGV0IHBhcmVudCA9IHRoaXNbaV0ucGFyZW50Tm9kZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICBpZiAoJChwYXJlbnQpLmlzKHNlbGVjdG9yKSkgcGFyZW50cy5wdXNoKHBhcmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJlbnRzLnB1c2gocGFyZW50KTtcbiAgICAgIH1cbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gJCh1bmlxdWUocGFyZW50cykpO1xufVxuZnVuY3Rpb24gY2xvc2VzdChzZWxlY3Rvcikge1xuICBsZXQgY2xvc2VzdCA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgaWYgKHR5cGVvZiBzZWxlY3RvciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbmV3IERvbTcoW10pO1xuICB9XG4gIGlmICghY2xvc2VzdC5pcyhzZWxlY3RvcikpIHtcbiAgICBjbG9zZXN0ID0gY2xvc2VzdC5wYXJlbnRzKHNlbGVjdG9yKS5lcSgwKTtcbiAgfVxuICByZXR1cm4gY2xvc2VzdDtcbn1cbmZ1bmN0aW9uIGZpbmQoc2VsZWN0b3IpIHtcbiAgY29uc3QgZm91bmRFbGVtZW50cyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBmb3VuZCA9IHRoaXNbaV0ucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBmb3VuZC5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgZm91bmRFbGVtZW50cy5wdXNoKGZvdW5kW2pdKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBEb203KGZvdW5kRWxlbWVudHMpO1xufVxuZnVuY3Rpb24gY2hpbGRyZW4oc2VsZWN0b3IpIHtcbiAgY29uc3QgY2hpbGRyZW4gPSBbXTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpc1tpXS5jaGlsZE5vZGVzO1xuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBjaGlsZE5vZGVzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgICAgIGlmIChjaGlsZE5vZGVzW2pdLm5vZGVUeXBlID09PSAxKSBjaGlsZHJlbi5wdXNoKGNoaWxkTm9kZXNbal0pO1xuICAgICAgfSBlbHNlIGlmIChjaGlsZE5vZGVzW2pdLm5vZGVUeXBlID09PSAxICYmICQoY2hpbGROb2Rlc1tqXSkuaXMoc2VsZWN0b3IpKSB7XG4gICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGROb2Rlc1tqXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXcgRG9tNyh1bmlxdWUoY2hpbGRyZW4pKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKHRoaXNbaV0ucGFyZW50Tm9kZSkgdGhpc1tpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXNbaV0pO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuZnVuY3Rpb24gZGV0YWNoKCkge1xuICByZXR1cm4gdGhpcy5yZW1vdmUoKTtcbn1cbmZ1bmN0aW9uIGFkZCguLi5hcmdzKSB7XG4gIGNvbnN0IGRvbSA9IHRoaXM7XG4gIGxldCBpO1xuICBsZXQgajtcbiAgZm9yIChpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCB0b0FkZCA9ICQoYXJnc1tpXSk7XG4gICAgZm9yIChqID0gMDsgaiA8IHRvQWRkLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICBkb21bZG9tLmxlbmd0aF0gPSB0b0FkZFtqXTtcbiAgICAgIGRvbS5sZW5ndGggKz0gMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRvbTtcbn1cbmZ1bmN0aW9uIGVtcHR5KCkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBlbCA9IHRoaXNbaV07XG4gICAgaWYgKGVsLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVsLmNoaWxkTm9kZXMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgaWYgKGVsLmNoaWxkTm9kZXNbal0ucGFyZW50Tm9kZSkge1xuICAgICAgICAgIGVsLmNoaWxkTm9kZXNbal0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbC5jaGlsZE5vZGVzW2pdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWwudGV4dENvbnRlbnQgPSAnJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHNjcm9sbFRvKC4uLmFyZ3MpIHtcbiAgbGV0IFtsZWZ0LCB0b3AsIGR1cmF0aW9uLCBlYXNpbmcsIGNhbGxiYWNrXSA9IGFyZ3M7XG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2YgZWFzaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBlYXNpbmc7XG4gICAgW2xlZnQsIHRvcCwgZHVyYXRpb24sIGNhbGxiYWNrLCBlYXNpbmddID0gYXJncztcbiAgfVxuICBpZiAodHlwZW9mIGVhc2luZyA9PT0gJ3VuZGVmaW5lZCcpIGVhc2luZyA9ICdzd2luZyc7XG5cbiAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiBhbmltYXRlKCkge1xuICAgIGNvbnN0IGVsID0gdGhpcztcbiAgICBsZXQgY3VycmVudFRvcDtcbiAgICBsZXQgY3VycmVudExlZnQ7XG4gICAgbGV0IG1heFRvcDtcbiAgICBsZXQgbWF4TGVmdDtcbiAgICBsZXQgbmV3VG9wO1xuICAgIGxldCBuZXdMZWZ0O1xuICAgIGxldCBzY3JvbGxUb3A7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICBsZXQgc2Nyb2xsTGVmdDsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGxldCBhbmltYXRlVG9wID0gdG9wID4gMCB8fCB0b3AgPT09IDA7XG4gICAgbGV0IGFuaW1hdGVMZWZ0ID0gbGVmdCA+IDAgfHwgbGVmdCA9PT0gMDtcbiAgICBpZiAodHlwZW9mIGVhc2luZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGVhc2luZyA9ICdzd2luZyc7XG4gICAgfVxuICAgIGlmIChhbmltYXRlVG9wKSB7XG4gICAgICBjdXJyZW50VG9wID0gZWwuc2Nyb2xsVG9wO1xuICAgICAgaWYgKCFkdXJhdGlvbikge1xuICAgICAgICBlbC5zY3JvbGxUb3AgPSB0b3A7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhbmltYXRlTGVmdCkge1xuICAgICAgY3VycmVudExlZnQgPSBlbC5zY3JvbGxMZWZ0O1xuICAgICAgaWYgKCFkdXJhdGlvbikge1xuICAgICAgICBlbC5zY3JvbGxMZWZ0ID0gbGVmdDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFkdXJhdGlvbikgcmV0dXJuO1xuICAgIGlmIChhbmltYXRlVG9wKSB7XG4gICAgICBtYXhUb3AgPSBlbC5zY3JvbGxIZWlnaHQgLSBlbC5vZmZzZXRIZWlnaHQ7XG4gICAgICBuZXdUb3AgPSBNYXRoLm1heChNYXRoLm1pbih0b3AsIG1heFRvcCksIDApO1xuICAgIH1cbiAgICBpZiAoYW5pbWF0ZUxlZnQpIHtcbiAgICAgIG1heExlZnQgPSBlbC5zY3JvbGxXaWR0aCAtIGVsLm9mZnNldFdpZHRoO1xuICAgICAgbmV3TGVmdCA9IE1hdGgubWF4KE1hdGgubWluKGxlZnQsIG1heExlZnQpLCAwKTtcbiAgICB9XG4gICAgbGV0IHN0YXJ0VGltZSA9IG51bGw7XG4gICAgaWYgKGFuaW1hdGVUb3AgJiYgbmV3VG9wID09PSBjdXJyZW50VG9wKSBhbmltYXRlVG9wID0gZmFsc2U7XG4gICAgaWYgKGFuaW1hdGVMZWZ0ICYmIG5ld0xlZnQgPT09IGN1cnJlbnRMZWZ0KSBhbmltYXRlTGVmdCA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIHJlbmRlcih0aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCkpIHtcbiAgICAgIGlmIChzdGFydFRpbWUgPT09IG51bGwpIHtcbiAgICAgICAgc3RhcnRUaW1lID0gdGltZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHByb2dyZXNzID0gTWF0aC5tYXgoTWF0aC5taW4oKHRpbWUgLSBzdGFydFRpbWUpIC8gZHVyYXRpb24sIDEpLCAwKTtcbiAgICAgIGNvbnN0IGVhc2VQcm9ncmVzcyA9IGVhc2luZyA9PT0gJ2xpbmVhcicgPyBwcm9ncmVzcyA6ICgwLjUgLSAoTWF0aC5jb3MocHJvZ3Jlc3MgKiBNYXRoLlBJKSAvIDIpKTtcbiAgICAgIGxldCBkb25lO1xuICAgICAgaWYgKGFuaW1hdGVUb3ApIHNjcm9sbFRvcCA9IGN1cnJlbnRUb3AgKyAoZWFzZVByb2dyZXNzICogKG5ld1RvcCAtIGN1cnJlbnRUb3ApKTtcbiAgICAgIGlmIChhbmltYXRlTGVmdCkgc2Nyb2xsTGVmdCA9IGN1cnJlbnRMZWZ0ICsgKGVhc2VQcm9ncmVzcyAqIChuZXdMZWZ0IC0gY3VycmVudExlZnQpKTtcbiAgICAgIGlmIChhbmltYXRlVG9wICYmIG5ld1RvcCA+IGN1cnJlbnRUb3AgJiYgc2Nyb2xsVG9wID49IG5ld1RvcCkge1xuICAgICAgICBlbC5zY3JvbGxUb3AgPSBuZXdUb3A7XG4gICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGFuaW1hdGVUb3AgJiYgbmV3VG9wIDwgY3VycmVudFRvcCAmJiBzY3JvbGxUb3AgPD0gbmV3VG9wKSB7XG4gICAgICAgIGVsLnNjcm9sbFRvcCA9IG5ld1RvcDtcbiAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoYW5pbWF0ZUxlZnQgJiYgbmV3TGVmdCA+IGN1cnJlbnRMZWZ0ICYmIHNjcm9sbExlZnQgPj0gbmV3TGVmdCkge1xuICAgICAgICBlbC5zY3JvbGxMZWZ0ID0gbmV3TGVmdDtcbiAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoYW5pbWF0ZUxlZnQgJiYgbmV3TGVmdCA8IGN1cnJlbnRMZWZ0ICYmIHNjcm9sbExlZnQgPD0gbmV3TGVmdCkge1xuICAgICAgICBlbC5zY3JvbGxMZWZ0ID0gbmV3TGVmdDtcbiAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGFuaW1hdGVUb3ApIGVsLnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgICAgIGlmIChhbmltYXRlTGVmdCkgZWwuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVuZGVyKTtcbiAgICB9XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlbmRlcik7XG4gIH0pO1xufVxuLy8gc2Nyb2xsVG9wKHRvcCwgZHVyYXRpb24sIGVhc2luZywgY2FsbGJhY2spIHtcbmZ1bmN0aW9uIHNjcm9sbFRvcCguLi5hcmdzKSB7XG4gIGxldCBbdG9wLCBkdXJhdGlvbiwgZWFzaW5nLCBjYWxsYmFja10gPSBhcmdzO1xuICBpZiAoYXJncy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIGVhc2luZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIFt0b3AsIGR1cmF0aW9uLCBjYWxsYmFjaywgZWFzaW5nXSA9IGFyZ3M7XG4gIH1cbiAgY29uc3QgZG9tID0gdGhpcztcbiAgaWYgKHR5cGVvZiB0b3AgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKGRvbS5sZW5ndGggPiAwKSByZXR1cm4gZG9tWzBdLnNjcm9sbFRvcDtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gZG9tLnNjcm9sbFRvKHVuZGVmaW5lZCwgdG9wLCBkdXJhdGlvbiwgZWFzaW5nLCBjYWxsYmFjayk7XG59XG5mdW5jdGlvbiBzY3JvbGxMZWZ0KC4uLmFyZ3MpIHtcbiAgbGV0IFtsZWZ0LCBkdXJhdGlvbiwgZWFzaW5nLCBjYWxsYmFja10gPSBhcmdzO1xuICBpZiAoYXJncy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIGVhc2luZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIFtsZWZ0LCBkdXJhdGlvbiwgY2FsbGJhY2ssIGVhc2luZ10gPSBhcmdzO1xuICB9XG4gIGNvbnN0IGRvbSA9IHRoaXM7XG4gIGlmICh0eXBlb2YgbGVmdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAoZG9tLmxlbmd0aCA+IDApIHJldHVybiBkb21bMF0uc2Nyb2xsTGVmdDtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gZG9tLnNjcm9sbFRvKGxlZnQsIHVuZGVmaW5lZCwgZHVyYXRpb24sIGVhc2luZywgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBhbmltYXRlKGluaXRpYWxQcm9wcywgaW5pdGlhbFBhcmFtcykge1xuICBjb25zdCBlbHMgPSB0aGlzO1xuICBjb25zdCBhID0ge1xuICAgIHByb3BzOiBPYmplY3QuYXNzaWduKHt9LCBpbml0aWFsUHJvcHMpLFxuICAgIHBhcmFtczogT2JqZWN0LmFzc2lnbih7XG4gICAgICBkdXJhdGlvbjogMzAwLFxuICAgICAgZWFzaW5nOiAnc3dpbmcnLCAvLyBvciAnbGluZWFyJ1xuICAgICAgLyogQ2FsbGJhY2tzXG4gICAgICBiZWdpbihlbGVtZW50cylcbiAgICAgIGNvbXBsZXRlKGVsZW1lbnRzKVxuICAgICAgcHJvZ3Jlc3MoZWxlbWVudHMsIGNvbXBsZXRlLCByZW1haW5pbmcsIHN0YXJ0LCB0d2VlblZhbHVlKVxuICAgICAgKi9cbiAgICB9LCBpbml0aWFsUGFyYW1zKSxcblxuICAgIGVsZW1lbnRzOiBlbHMsXG4gICAgYW5pbWF0aW5nOiBmYWxzZSxcbiAgICBxdWU6IFtdLFxuXG4gICAgZWFzaW5nUHJvZ3Jlc3MoZWFzaW5nLCBwcm9ncmVzcykge1xuICAgICAgaWYgKGVhc2luZyA9PT0gJ3N3aW5nJykge1xuICAgICAgICByZXR1cm4gMC41IC0gKE1hdGguY29zKHByb2dyZXNzICogTWF0aC5QSSkgLyAyKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZWFzaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBlYXNpbmcocHJvZ3Jlc3MpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByb2dyZXNzO1xuICAgIH0sXG4gICAgc3RvcCgpIHtcbiAgICAgIGlmIChhLmZyYW1lSWQpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoYS5mcmFtZUlkKTtcbiAgICAgIH1cbiAgICAgIGEuYW5pbWF0aW5nID0gZmFsc2U7XG4gICAgICBhLmVsZW1lbnRzLmVhY2goKGluZGV4LCBlbCkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZWw7XG4gICAgICAgIGRlbGV0ZSBlbGVtZW50LmRvbTdBbmltYXRlSW5zdGFuY2U7XG4gICAgICB9KTtcbiAgICAgIGEucXVlID0gW107XG4gICAgfSxcbiAgICBkb25lKGNvbXBsZXRlKSB7XG4gICAgICBhLmFuaW1hdGluZyA9IGZhbHNlO1xuICAgICAgYS5lbGVtZW50cy5lYWNoKChpbmRleCwgZWwpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGVsO1xuICAgICAgICBkZWxldGUgZWxlbWVudC5kb203QW5pbWF0ZUluc3RhbmNlO1xuICAgICAgfSk7XG4gICAgICBpZiAoY29tcGxldGUpIGNvbXBsZXRlKGVscyk7XG4gICAgICBpZiAoYS5xdWUubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBxdWUgPSBhLnF1ZS5zaGlmdCgpO1xuICAgICAgICBhLmFuaW1hdGUocXVlWzBdLCBxdWVbMV0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgYW5pbWF0ZShwcm9wcywgcGFyYW1zKSB7XG4gICAgICBpZiAoYS5hbmltYXRpbmcpIHtcbiAgICAgICAgYS5xdWUucHVzaChbcHJvcHMsIHBhcmFtc10pO1xuICAgICAgICByZXR1cm4gYTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gW107XG5cbiAgICAgIC8vIERlZmluZSAmIENhY2hlIEluaXRpYWxzICYgVW5pdHNcbiAgICAgIGEuZWxlbWVudHMuZWFjaCgoaW5kZXgsIGVsKSA9PiB7XG4gICAgICAgIGxldCBpbml0aWFsRnVsbFZhbHVlO1xuICAgICAgICBsZXQgaW5pdGlhbFZhbHVlO1xuICAgICAgICBsZXQgdW5pdDtcbiAgICAgICAgbGV0IGZpbmFsVmFsdWU7XG4gICAgICAgIGxldCBmaW5hbEZ1bGxWYWx1ZTtcblxuICAgICAgICBpZiAoIWVsLmRvbTdBbmltYXRlSW5zdGFuY2UpIGEuZWxlbWVudHNbaW5kZXhdLmRvbTdBbmltYXRlSW5zdGFuY2UgPSBhO1xuXG4gICAgICAgIGVsZW1lbnRzW2luZGV4XSA9IHtcbiAgICAgICAgICBjb250YWluZXI6IGVsLFxuICAgICAgICB9O1xuICAgICAgICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgICAgIGluaXRpYWxGdWxsVmFsdWUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShwcm9wKS5yZXBsYWNlKCcsJywgJy4nKTtcbiAgICAgICAgICBpbml0aWFsVmFsdWUgPSBwYXJzZUZsb2F0KGluaXRpYWxGdWxsVmFsdWUpO1xuICAgICAgICAgIHVuaXQgPSBpbml0aWFsRnVsbFZhbHVlLnJlcGxhY2UoaW5pdGlhbFZhbHVlLCAnJyk7XG4gICAgICAgICAgZmluYWxWYWx1ZSA9IHBhcnNlRmxvYXQocHJvcHNbcHJvcF0pO1xuICAgICAgICAgIGZpbmFsRnVsbFZhbHVlID0gcHJvcHNbcHJvcF0gKyB1bml0O1xuICAgICAgICAgIGVsZW1lbnRzW2luZGV4XVtwcm9wXSA9IHtcbiAgICAgICAgICAgIGluaXRpYWxGdWxsVmFsdWUsXG4gICAgICAgICAgICBpbml0aWFsVmFsdWUsXG4gICAgICAgICAgICB1bml0LFxuICAgICAgICAgICAgZmluYWxWYWx1ZSxcbiAgICAgICAgICAgIGZpbmFsRnVsbFZhbHVlLFxuICAgICAgICAgICAgY3VycmVudFZhbHVlOiBpbml0aWFsVmFsdWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgbGV0IHN0YXJ0VGltZSA9IG51bGw7XG4gICAgICBsZXQgdGltZTtcbiAgICAgIGxldCBlbGVtZW50c0RvbmUgPSAwO1xuICAgICAgbGV0IHByb3BzRG9uZSA9IDA7XG4gICAgICBsZXQgZG9uZTtcbiAgICAgIGxldCBiZWdhbiA9IGZhbHNlO1xuXG4gICAgICBhLmFuaW1hdGluZyA9IHRydWU7XG5cbiAgICAgIGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgdGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICBsZXQgcHJvZ3Jlc3M7XG4gICAgICAgIGxldCBlYXNlUHJvZ3Jlc3M7XG4gICAgICAgIC8vIGxldCBlbDtcbiAgICAgICAgaWYgKCFiZWdhbikge1xuICAgICAgICAgIGJlZ2FuID0gdHJ1ZTtcbiAgICAgICAgICBpZiAocGFyYW1zLmJlZ2luKSBwYXJhbXMuYmVnaW4oZWxzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnRUaW1lID09PSBudWxsKSB7XG4gICAgICAgICAgc3RhcnRUaW1lID0gdGltZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1zLnByb2dyZXNzKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgcGFyYW1zLnByb2dyZXNzKGVscywgTWF0aC5tYXgoTWF0aC5taW4oKHRpbWUgLSBzdGFydFRpbWUpIC8gcGFyYW1zLmR1cmF0aW9uLCAxKSwgMCksICgoc3RhcnRUaW1lICsgcGFyYW1zLmR1cmF0aW9uKSAtIHRpbWUgPCAwID8gMCA6IChzdGFydFRpbWUgKyBwYXJhbXMuZHVyYXRpb24pIC0gdGltZSksIHN0YXJ0VGltZSk7XG4gICAgICAgIH1cblxuICAgICAgICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgZWwgPSBlbGVtZW50O1xuICAgICAgICAgIGlmIChkb25lIHx8IGVsLmRvbmUpIHJldHVybjtcbiAgICAgICAgICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRvbmUgfHwgZWwuZG9uZSkgcmV0dXJuO1xuICAgICAgICAgICAgcHJvZ3Jlc3MgPSBNYXRoLm1heChNYXRoLm1pbigodGltZSAtIHN0YXJ0VGltZSkgLyBwYXJhbXMuZHVyYXRpb24sIDEpLCAwKTtcbiAgICAgICAgICAgIGVhc2VQcm9ncmVzcyA9IGEuZWFzaW5nUHJvZ3Jlc3MocGFyYW1zLmVhc2luZywgcHJvZ3Jlc3MpO1xuICAgICAgICAgICAgY29uc3QgeyBpbml0aWFsVmFsdWUsIGZpbmFsVmFsdWUsIHVuaXQgfSA9IGVsW3Byb3BdO1xuICAgICAgICAgICAgZWxbcHJvcF0uY3VycmVudFZhbHVlID0gaW5pdGlhbFZhbHVlICsgKGVhc2VQcm9ncmVzcyAqIChmaW5hbFZhbHVlIC0gaW5pdGlhbFZhbHVlKSk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBlbFtwcm9wXS5jdXJyZW50VmFsdWU7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKGZpbmFsVmFsdWUgPiBpbml0aWFsVmFsdWUgJiYgY3VycmVudFZhbHVlID49IGZpbmFsVmFsdWUpIHx8XG4gICAgICAgICAgICAgIChmaW5hbFZhbHVlIDwgaW5pdGlhbFZhbHVlICYmIGN1cnJlbnRWYWx1ZSA8PSBmaW5hbFZhbHVlKSkge1xuICAgICAgICAgICAgICBlbC5jb250YWluZXIuc3R5bGVbcHJvcF0gPSBmaW5hbFZhbHVlICsgdW5pdDtcbiAgICAgICAgICAgICAgcHJvcHNEb25lICs9IDE7XG4gICAgICAgICAgICAgIGlmIChwcm9wc0RvbmUgPT09IE9iamVjdC5rZXlzKHByb3BzKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBlbC5kb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBlbGVtZW50c0RvbmUgKz0gMTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZWxlbWVudHNEb25lID09PSBlbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgYS5kb25lKHBhcmFtcy5jb21wbGV0ZSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsLmNvbnRhaW5lci5zdHlsZVtwcm9wXSA9IGN1cnJlbnRWYWx1ZSArIHVuaXQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgICAgICAvLyBUaGVuIGNhbGxcbiAgICAgICAgYS5mcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlbmRlcik7XG4gICAgICB9XG4gICAgICBhLmZyYW1lSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVuZGVyKTtcbiAgICAgIHJldHVybiBhO1xuICAgIH0sXG4gIH07XG5cbiAgaWYgKGEuZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGVscztcbiAgfVxuXG4gIGxldCBhbmltYXRlSW5zdGFuY2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYS5lbGVtZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmIChhLmVsZW1lbnRzW2ldLmRvbTdBbmltYXRlSW5zdGFuY2UpIHtcbiAgICAgIGFuaW1hdGVJbnN0YW5jZSA9IGEuZWxlbWVudHNbaV0uZG9tN0FuaW1hdGVJbnN0YW5jZTtcbiAgICB9IGVsc2UgYS5lbGVtZW50c1tpXS5kb203QW5pbWF0ZUluc3RhbmNlID0gYTtcbiAgfVxuICBpZiAoIWFuaW1hdGVJbnN0YW5jZSkge1xuICAgIGFuaW1hdGVJbnN0YW5jZSA9IGE7XG4gIH1cblxuICBpZiAoaW5pdGlhbFByb3BzID09PSAnc3RvcCcpIHtcbiAgICBhbmltYXRlSW5zdGFuY2Uuc3RvcCgpO1xuICB9IGVsc2Uge1xuICAgIGFuaW1hdGVJbnN0YW5jZS5hbmltYXRlKGEucHJvcHMsIGEucGFyYW1zKTtcbiAgfVxuXG4gIHJldHVybiBlbHM7XG59XG5cbmZ1bmN0aW9uIHN0b3AoKSB7XG4gIGNvbnN0IGVscyA9IHRoaXM7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZWxzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKGVsc1tpXS5kb203QW5pbWF0ZUluc3RhbmNlKSB7XG4gICAgICBlbHNbaV0uZG9tN0FuaW1hdGVJbnN0YW5jZS5zdG9wKCk7XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IG5vVHJpZ2dlciA9ICgncmVzaXplIHNjcm9sbCcpLnNwbGl0KCcgJyk7XG5mdW5jdGlvbiBldmVudFNob3J0Y3V0KG5hbWUsIC4uLmFyZ3MpIHtcbiAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAndW5kZWZpbmVkJykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKG5vVHJpZ2dlci5pbmRleE9mKG5hbWUpIDwgMCkge1xuICAgICAgICBpZiAobmFtZSBpbiB0aGlzW2ldKSB0aGlzW2ldW25hbWVdKCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICQodGhpc1tpXSkudHJpZ2dlcihuYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICByZXR1cm4gdGhpcy5vbihuYW1lLCAuLi5hcmdzKTtcbn1cblxuZnVuY3Rpb24gY2xpY2soLi4uYXJncykge1xuICByZXR1cm4gZXZlbnRTaG9ydGN1dC5iaW5kKHRoaXMpKCdjbGljaycsIC4uLmFyZ3MpO1xufVxuZnVuY3Rpb24gYmx1ciguLi5hcmdzKSB7XG4gIHJldHVybiBldmVudFNob3J0Y3V0LmJpbmQodGhpcykoJ2JsdXInLCAuLi5hcmdzKTtcbn1cbmZ1bmN0aW9uIGZvY3VzKC4uLmFyZ3MpIHtcbiAgcmV0dXJuIGV2ZW50U2hvcnRjdXQuYmluZCh0aGlzKSgnZm9jdXMnLCAuLi5hcmdzKTtcbn1cbmZ1bmN0aW9uIGZvY3VzaW4oLi4uYXJncykge1xuICByZXR1cm4gZXZlbnRTaG9ydGN1dC5iaW5kKHRoaXMpKCdmb2N1c2luJywgLi4uYXJncyk7XG59XG5mdW5jdGlvbiBmb2N1c291dCguLi5hcmdzKSB7XG4gIHJldHVybiBldmVudFNob3J0Y3V0LmJpbmQodGhpcykoJ2ZvY3Vzb3V0JywgLi4uYXJncyk7XG59XG5mdW5jdGlvbiBrZXl1cCguLi5hcmdzKSB7XG4gIHJldHVybiBldmVudFNob3J0Y3V0LmJpbmQodGhpcykoJ2tleXVwJywgLi4uYXJncyk7XG59XG5mdW5jdGlvbiBrZXlkb3duKC4uLmFyZ3MpIHtcbiAgcmV0dXJuIGV2ZW50U2hvcnRjdXQuYmluZCh0aGlzKSgna2V5ZG93bicsIC4uLmFyZ3MpO1xufVxuZnVuY3Rpb24ga2V5cHJlc3MoLi4uYXJncykge1xuICByZXR1cm4gZXZlbnRTaG9ydGN1dC5iaW5kKHRoaXMpKCdrZXlwcmVzcycsIC4uLmFyZ3MpO1xufVxuZnVuY3Rpb24gc3VibWl0KC4uLmFyZ3MpIHtcbiAgcmV0dXJuIGV2ZW50U2hvcnRjdXQuYmluZCh0aGlzKSgnc3VibWl0JywgLi4uYXJncyk7XG59XG5mdW5jdGlvbiBjaGFuZ2UoLi4uYXJncykge1xuICByZXR1cm4gZXZlbnRTaG9ydGN1dC5iaW5kKHRoaXMpKCdjaGFuZ2UnLCAuLi5hcmdzKTtcbn1cbmZ1bmN0aW9uIG1vdXNlZG93biguLi5hcmdzKSB7XG4gIHJldHVybiBldmVudFNob3J0Y3V0LmJpbmQodGhpcykoJ21vdXNlZG93bicsIC4uLmFyZ3MpO1xufVxuZnVuY3Rpb24gbW91c2Vtb3ZlKC4uLmFyZ3MpIHtcbiAgcmV0dXJuIGV2ZW50U2hvcnRjdXQuYmluZCh0aGlzKSgnbW91c2Vtb3ZlJywgLi4uYXJncyk7XG59XG5mdW5jdGlvbiBtb3VzZXVwKC4uLmFyZ3MpIHtcbiAgcmV0dXJuIGV2ZW50U2hvcnRjdXQuYmluZCh0aGlzKSgnbW91c2V1cCcsIC4uLmFyZ3MpO1xufVxuZnVuY3Rpb24gbW91c2VlbnRlciguLi5hcmdzKSB7XG4gIHJldHVybiBldmVudFNob3J0Y3V0LmJpbmQodGhpcykoJ21vdXNlZW50ZXInLCAuLi5hcmdzKTtcbn1cbmZ1bmN0aW9uIG1vdXNlbGVhdmUoLi4uYXJncykge1xuICByZXR1cm4gZXZlbnRTaG9ydGN1dC5iaW5kKHRoaXMpKCdtb3VzZWxlYXZlJywgLi4uYXJncyk7XG59XG5mdW5jdGlvbiBtb3VzZW91dCguLi5hcmdzKSB7XG4gIHJldHVybiBldmVudFNob3J0Y3V0LmJpbmQodGhpcykoJ21vdXNlb3V0JywgLi4uYXJncyk7XG59XG5mdW5jdGlvbiBtb3VzZW92ZXIoLi4uYXJncykge1xuICByZXR1cm4gZXZlbnRTaG9ydGN1dC5iaW5kKHRoaXMpKCdtb3VzZW92ZXInLCAuLi5hcmdzKTtcbn1cbmZ1bmN0aW9uIHRvdWNoc3RhcnQoLi4uYXJncykge1xuICByZXR1cm4gZXZlbnRTaG9ydGN1dC5iaW5kKHRoaXMpKCd0b3VjaHN0YXJ0JywgLi4uYXJncyk7XG59XG5mdW5jdGlvbiB0b3VjaGVuZCguLi5hcmdzKSB7XG4gIHJldHVybiBldmVudFNob3J0Y3V0LmJpbmQodGhpcykoJ3RvdWNoZW5kJywgLi4uYXJncyk7XG59XG5mdW5jdGlvbiB0b3VjaG1vdmUoLi4uYXJncykge1xuICByZXR1cm4gZXZlbnRTaG9ydGN1dC5iaW5kKHRoaXMpKCd0b3VjaG1vdmUnLCAuLi5hcmdzKTtcbn1cbmZ1bmN0aW9uIHJlc2l6ZSguLi5hcmdzKSB7XG4gIHJldHVybiBldmVudFNob3J0Y3V0LmJpbmQodGhpcykoJ3Jlc2l6ZScsIC4uLmFyZ3MpO1xufVxuZnVuY3Rpb24gc2Nyb2xsKC4uLmFyZ3MpIHtcbiAgcmV0dXJuIGV2ZW50U2hvcnRjdXQuYmluZCh0aGlzKSgnc2Nyb2xsJywgLi4uYXJncyk7XG59XG5cbmV4cG9ydCB7ICQsIGFkZENsYXNzLCByZW1vdmVDbGFzcywgaGFzQ2xhc3MsIHRvZ2dsZUNsYXNzLCBhdHRyLCByZW1vdmVBdHRyLCBwcm9wLCBkYXRhLCByZW1vdmVEYXRhLCBkYXRhc2V0LCB2YWwsIHRyYW5zZm9ybSwgdHJhbnNpdGlvbiwgb24sIG9mZiwgb25jZSwgdHJpZ2dlciwgdHJhbnNpdGlvbkVuZCwgYW5pbWF0aW9uRW5kLCB3aWR0aCwgb3V0ZXJXaWR0aCwgaGVpZ2h0LCBvdXRlckhlaWdodCwgb2Zmc2V0LCBoaWRlLCBzaG93LCBzdHlsZXMsIGNzcywgdG9BcnJheSwgZWFjaCwgZm9yRWFjaCwgZmlsdGVyLCBtYXAsIGh0bWwsIHRleHQsIGlzLCBpbmRleE9mLCBpbmRleCwgZXEsIGFwcGVuZCwgYXBwZW5kVG8sIHByZXBlbmQsIHByZXBlbmRUbywgaW5zZXJ0QmVmb3JlLCBpbnNlcnRBZnRlciwgbmV4dCwgbmV4dEFsbCwgcHJldiwgcHJldkFsbCwgc2libGluZ3MsIHBhcmVudCwgcGFyZW50cywgY2xvc2VzdCwgZmluZCwgY2hpbGRyZW4sIHJlbW92ZSwgZGV0YWNoLCBhZGQsIGVtcHR5LCBzY3JvbGxUbywgc2Nyb2xsVG9wLCBzY3JvbGxMZWZ0LCBhbmltYXRlLCBzdG9wLCBjbGljaywgYmx1ciwgZm9jdXMsIGZvY3VzaW4sIGZvY3Vzb3V0LCBrZXl1cCwga2V5ZG93biwga2V5cHJlc3MsIHN1Ym1pdCwgY2hhbmdlLCBtb3VzZWRvd24sIG1vdXNlbW92ZSwgbW91c2V1cCwgbW91c2VlbnRlciwgbW91c2VsZWF2ZSwgbW91c2VvdXQsIG1vdXNlb3ZlciwgdG91Y2hzdGFydCwgdG91Y2hlbmQsIHRvdWNobW92ZSwgcmVzaXplLCBzY3JvbGwgfTtcbiIsImlmICh0eXBlb2YgRWxlbWVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGlmICghRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcykge1xuICAgICAgICBFbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzID0gRWxlbWVudC5wcm90b3R5cGUubXNNYXRjaGVzU2VsZWN0b3IgfHwgRWxlbWVudC5wcm90b3R5cGUud2Via2l0TWF0Y2hlc1NlbGVjdG9yO1xuICAgIH1cblxuICAgIGlmICghRWxlbWVudC5wcm90b3R5cGUuY2xvc2VzdCkge1xuICAgICAgICBFbGVtZW50LnByb3RvdHlwZS5jbG9zZXN0ID0gZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXM7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoZWwubWF0Y2hlcyhzKSkgcmV0dXJuIGVsO1xuICAgICAgICAgICAgICAgIGVsID0gZWwucGFyZW50RWxlbWVudCB8fCBlbC5wYXJlbnROb2RlO1xuICAgICAgICAgICAgfSB3aGlsZSAoZWwgIT09IG51bGwgJiYgZWwubm9kZVR5cGUgPT09IDEpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCIoZnVuY3Rpb24gKCkge1xuXG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgZGVmYXVsdENvbmYgPSB7XG4gICAgZWxsaXBzaXM6ICfigKYnLFxuICAgIGRlYm91bmNlOiAwLFxuICAgIHJlc3BvbnNpdmU6IHRydWUsXG4gICAgY2xhc3NOYW1lOiAnLmNsYW1wJyxcbiAgICBsaW5lczogMixcbiAgICBwb3J0cmFpdDogbnVsbCxcbiAgICBicmVha193b3JkOiB0cnVlXG4gIH07XG5cbiAgdmFyIF9pZENvdW50ZXIgPSAwO1xuXG4gIHZhciBSQUZfU1VQUE9SVEVEID0gISF3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuXG4gIHZhciBuZXdJZCA9IGZ1bmN0aW9uKCl7XG4gICAgX2lkQ291bnRlciArPSAxO1xuICAgIHJldHVybiBfaWRDb3VudGVyO1xuICB9O1xuXG4gIHZhciBzZXRJZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIGlkKXtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1lbGxpcHNpcy1pZCcsIGlkKTtcbiAgfTtcblxuICB2YXIgZ2V0SWRBdHRyaWJ1dGUgPSBmdW5jdGlvbihlbGVtZW50KXtcbiAgICByZXR1cm4gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZWxsaXBzaXMtaWQnKTtcbiAgfTtcblxuICB2YXIgc3RvcmVDYWNoZSA9IGZ1bmN0aW9uKGNhY2hlLCBlbGVtZW50KXtcbiAgICB2YXIgaWQgPSBuZXdJZCgpO1xuICAgIHNldElkQXR0cmlidXRlKGVsZW1lbnQsIGlkKTtcbiAgICBjYWNoZVtpZF0gPSBjYWNoZVtpZF0gfHwge307XG4gICAgY2FjaGVbaWRdLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIGNhY2hlW2lkXS5pbm5lckhUTUwgPSBlbGVtZW50LmlubmVySFRNTDtcbiAgfTtcblxuICB2YXIgcmV0cmlldmVDYWNoZSA9IGZ1bmN0aW9uKGNhY2hlLCBlbGVtZW50KXtcbiAgICBpZihjYWNoZSl7XG4gICAgICByZXR1cm4gY2FjaGVbZ2V0SWRBdHRyaWJ1dGUoZWxlbWVudCldO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGdldENhY2hlZEVsZW1lbnRzID0gZnVuY3Rpb24oY2FjaGUpe1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhjYWNoZSkubWFwKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCl7XG4gICAgICByZXR1cm4gY2FjaGVbdmFsdWVdLmVsZW1lbnQ7XG4gICAgfSk7XG4gIH07XG5cbiAgdmFyIG1lcmdlID0gZnVuY3Rpb24ob2JqMSwgb2JqMil7XG4gICAgdmFyIG9iajMgPSB7fTtcbiAgICBmb3IgKHZhciBhdHRybiBpbiBvYmoxKSB7IG9iajNbYXR0cm5dID0gb2JqMVthdHRybl07IH1cbiAgICBmb3IgKHZhciBhdHRybm0gaW4gb2JqMikgeyBvYmozW2F0dHJubV0gPSBvYmoyW2F0dHJubV07IH1cbiAgICByZXR1cm4gb2JqMztcbiAgfTtcblxuICBmdW5jdGlvbiBFbGxpcHNpcyhvcHRzKSB7XG4gICAgdmFyIGNvbmYgPSBtZXJnZShkZWZhdWx0Q29uZiwgb3B0cyB8fCB7fSk7XG4gICAgdGhpcy5jcmVhdGUoY29uZik7XG4gICAgdGhpcy5hZGQoKTtcbiAgfVxuXG4gIEVsbGlwc2lzLnByb3RvdHlwZSA9IHtcbiAgICBjb25mOiB7fSxcbiAgICBwcm9wOiB7fSxcbiAgICBsaW5lczoge30sXG4gICAgdGVtcDogbnVsbCxcbiAgICBsaXN0ZW5lcjogbnVsbCxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uKG9wdHMpe1xuICAgICAgdGhpcy5jb25mID0gb3B0cztcbiAgICAgIHRoaXMubGluZXMgPSB7XG4gICAgICAgIGdldCBjdXJyZW50KCl7XG4gICAgICAgICAgaWYob3B0cy5wb3J0cmFpdCAmJiB3aW5kb3cuaW5uZXJIZWlnaHQgPiB3aW5kb3cuaW5uZXJXaWR0aCl7XG4gICAgICAgICAgICByZXR1cm4gb3B0cy5wb3J0cmFpdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG9wdHMubGluZXM7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmKHRoaXMuY29uZi5yZXNwb25zaXZlKXtcbiAgICAgICAgdGhpcy50ZW1wID0ge307XG5cbiAgICAgICAgdmFyIGRlYm91bmNlVGltZSA9IHRoaXMuY29uZi5kZWJvdW5jZTtcbiAgICAgICAgdmFyIGxpc3RlbmVyO1xuXG4gICAgICAgIGlmIChSQUZfU1VQUE9SVEVEICYmICFkZWJvdW5jZVRpbWUpIHtcbiAgICAgICAgICB0aGlzLl9pc1NjaGVkdWxlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICAgIGxpc3RlbmVyID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICghc2VsZi5faXNTY2hlZHVsZWQpIHtcbiAgICAgICAgICAgICAgc2VsZi5faXNTY2hlZHVsZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5faXNTY2hlZHVsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBzZWxmLmFkZChnZXRDYWNoZWRFbGVtZW50cyhzZWxmLnRlbXApKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRoaXMgaXMgZm9yIGluIGNhc2UgdGhlIGBkZWJvdW5jZWAgaXMgc2V0IHRvIDAgYW5kIHRoZSBicm93c2VyXG4gICAgICAgICAgLy8gZG9lcyBub3Qgc3VwcG9ydCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuIFdlIGRvbid0IHdhbnQgdG8gc3dhbXBcbiAgICAgICAgICAvLyB0aGUgYnJvd3NlciBvbiBhIHJlc2l6ZSBzbyB3ZSBcImZha2VcIiB0aGUgcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gICAgICAgICAgLy8gZnVuY3Rpb25hbGl0eSB3aXRoIHRoZSBzYW1lIGRlYm91bmNlIHRpbWUgKDYwIEZQUykuXG4gICAgICAgICAgZGVib3VuY2VUaW1lID0gZGVib3VuY2VUaW1lIHx8IDE2O1xuXG4gICAgICAgICAgdmFyIGRlYm91bmNlO1xuICAgICAgICAgIGxpc3RlbmVyID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWJvdW5jZSk7XG4gICAgICAgICAgICBkZWJvdW5jZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgdGhpcy5hZGQoZ2V0Q2FjaGVkRWxlbWVudHModGhpcy50ZW1wKSk7XG4gICAgICAgICAgICB9LmJpbmQodGhpcyksIGRlYm91bmNlVGltZSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGlzdGVuZXIgPSBsaXN0ZW5lci5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLmxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCB0aGlzLmxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkZXN0cm95OiBmdW5jdGlvbigpe1xuICAgICAgdGhpcy5saXN0ZW5lciAmJiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5saXN0ZW5lciwgZmFsc2UpO1xuICAgIH0sXG4gICAgY3JlYXRlUHJvcDogZnVuY3Rpb24oZWxlbWVudCl7XG4gICAgICB0aGlzLnByb3AgPSB7XG4gICAgICAgIGdldCBoZWlnaHQoKXtcbiAgICAgICAgICB2YXIgdmlld3BvcnRPZmZzZXQgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgIHJldHVybiBwYXJzZUludCh2aWV3cG9ydE9mZnNldC5ib3R0b20gLSB2aWV3cG9ydE9mZnNldC50b3AsIDEwKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGxpbmVoZWlnaHQoKXtcbiAgICAgICAgICB2YXIgbGluZWggPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoXCJsaW5lLWhlaWdodFwiKTtcbiAgICAgICAgICBpZihTdHJpbmcoJ25vcm1hbHxpbml0aWFsfGluaGVyaXQnKS5pbmRleE9mKGxpbmVoKSA+IC0xKXsgLy92ZXJ5IHNwZWNpZmljIGNhc2VcbiAgICAgICAgICAgIGxpbmVoID0gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKFwiZm9udC1zaXplXCIpLCAxMCkgKyAyO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcGFyc2VJbnQobGluZWgsIDEwKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LFxuICAgIGFkZDogZnVuY3Rpb24oZWxlbWVudHMpe1xuICAgICAgaWYoIWVsZW1lbnRzICYmIHRoaXMuY29uZi5jbGFzc05hbWUpe1xuICAgICAgICBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5jb25mLmNsYXNzTmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbGVtZW50cyl7XG4gICAgICAgIGlmKGVsZW1lbnRzLmxlbmd0aCl7XG4gICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgIHRoaXMuYWRkRWxlbWVudChlbGVtZW50c1tpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnRzLmxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5hZGRFbGVtZW50KGVsZW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgYWRkRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCl7XG4gICAgICBpZih0aGlzLmNvbmYucmVzcG9uc2l2ZSl7XG4gICAgICAgIHZhciBjYWNoZWQgPSByZXRyaWV2ZUNhY2hlKHRoaXMudGVtcCwgZWxlbWVudCk7XG4gICAgICAgIGlmKCFjYWNoZWQpe1xuICAgICAgICAgIHN0b3JlQ2FjaGUodGhpcy50ZW1wLCBlbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBpbnNlcnQgY2FjaGVkIGVsZW1lbnQgZm9yIFJlc2l6aW5nXG4gICAgICAgICAgaWYoZWxlbWVudC5pbm5lckhUTUwgIT09IGNhY2hlZC5pbm5lckhUTUwpe1xuICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSBjYWNoZWQuaW5uZXJIVE1MO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmNyZWF0ZVByb3AoZWxlbWVudCk7XG5cbiAgICAgIGlmKHRoaXMuaXNOb3RDb3JyZWN0KCkpe1xuICAgICAgICBpZihlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoICYmIGVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggPiAxKXtcbiAgICAgICAgICB0aGlzLmhhbmRsZUNoaWxkcmVuKGVsZW1lbnQpO1xuICAgICAgICB9IGVsc2UgaWYoZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCAmJiBlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgZWxlbWVudC5jaGlsZE5vZGVzWzBdLm5vZGVUeXBlID09PSAzKXtcbiAgICAgICAgICB0aGlzLnNpbXBsZVRleHQoZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGJyZWFrV29yZDogZnVuY3Rpb24oc3RyLCBzdHIyLCBmaXgpe1xuICAgICAgdmFyIHdvcmRzID0gc3RyLnNwbGl0KCcgJyk7XG4gICAgICB3b3Jkcy5wb3AoKTtcbiAgICAgIGlmKGZpeCl7XG4gICAgICAgIHdvcmRzLnBvcCgpO1xuICAgICAgfVxuICAgICAgaWYoIXN0cjIpe1xuICAgICAgICBpZih3b3Jkc1t3b3Jkcy5sZW5ndGggLSAxXSl7XG4gICAgICAgICAgd29yZHNbd29yZHMubGVuZ3RoIC0gMV0gPSB3b3Jkc1t3b3Jkcy5sZW5ndGggLSAxXS5yZXBsYWNlKC8oLCQpL2csIFwiXCIpLnJlcGxhY2UoLyhcXC4kKS9nLCBcIlwiKTtcbiAgICAgICAgfVxuICAgICAgICB3b3Jkcy5wdXNoKHRoaXMuY29uZi5lbGxpcHNpcyk7XG4gICAgICAgIHJldHVybiB3b3Jkcy5qb2luKCcgJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZih3b3Jkc1t3b3Jkcy5sZW5ndGggLSAxXSl7XG4gICAgICAgICAgd29yZHNbd29yZHMubGVuZ3RoIC0gMV0gPSB3b3Jkc1t3b3Jkcy5sZW5ndGggLSAxXS5yZXBsYWNlKC8oLCQpL2csIFwiXCIpLnJlcGxhY2UoLyhcXC4kKS9nLCBcIlwiKTtcbiAgICAgICAgICB3b3Jkcy5wdXNoKHRoaXMuY29uZi5lbGxpcHNpcyk7XG4gICAgICAgICAgcmV0dXJuIFt3b3Jkcy5qb2luKCcgJyksIHN0cjJdO1xuICAgICAgICB9IGVsc2UgaWYoIXdvcmRzW3dvcmRzLmxlbmd0aCAtIDFdICYmIHN0cjIpe1xuICAgICAgICAgIHZhciBzdCA9ICcgJyArIHN0cjIudHJpbSgpLnJlcGxhY2UoLygsJCkvZywgXCJcIikucmVwbGFjZSgvKFxcLiQpL2csIFwiXCIpICsgJyAnO1xuICAgICAgICAgIHdvcmRzLnB1c2godGhpcy5jb25mLmVsbGlwc2lzKTtcbiAgICAgICAgICByZXR1cm4gW3dvcmRzLmpvaW4oJyAnKSwgc3RdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBzaW1wbGVUZXh0OiBmdW5jdGlvbihlbGVtZW50KXtcbiAgICAgIHZhciBjaGlsZFRleHQgPSBlbGVtZW50LmNoaWxkTm9kZXNbMF0ubm9kZVZhbHVlO1xuICAgICAgd2hpbGUodGhpcy5wcm9wLmhlaWdodCA+ICh0aGlzLnByb3AubGluZWhlaWdodCAqIHRoaXMubGluZXMuY3VycmVudCkpe1xuICAgICAgICBlbGVtZW50LmNoaWxkTm9kZXNbMF0ubm9kZVZhbHVlID0gY2hpbGRUZXh0LnNsaWNlKDAsIC0xKTtcbiAgICAgICAgY2hpbGRUZXh0ID0gZWxlbWVudC5jaGlsZE5vZGVzWzBdLm5vZGVWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmKHRoaXMuY29uZi5icmVha193b3JkKXtcbiAgICAgICAgZWxlbWVudC5jaGlsZE5vZGVzWzBdLm5vZGVWYWx1ZSA9IGNoaWxkVGV4dC5zbGljZSgwLCAtdGhpcy5jb25mLmVsbGlwc2lzLmxlbmd0aCkgKyB0aGlzLmNvbmYuZWxsaXBzaXM7XG4gICAgICAgIGlmKHRoaXMuaXNOb3RDb3JyZWN0KCkpeyAvL2VkZ2UgY2FzZVxuICAgICAgICAgIGVsZW1lbnQuY2hpbGROb2Rlc1swXS5ub2RlVmFsdWUgPSAnICcgKyBlbGVtZW50LmNoaWxkTm9kZXNbMF0ubm9kZVZhbHVlLnNsaWNlKDAsIC0odGhpcy5jb25mLmVsbGlwc2lzLmxlbmd0aCArIDEpKS50cmltKCkuc2xpY2UoMCwgLSh0aGlzLmNvbmYuZWxsaXBzaXMubGVuZ3RoKSkgKyB0aGlzLmNvbmYuZWxsaXBzaXM7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuY2hpbGROb2Rlc1swXS5ub2RlVmFsdWUgPSB0aGlzLmJyZWFrV29yZChlbGVtZW50LmNoaWxkTm9kZXNbMF0ubm9kZVZhbHVlKTtcbiAgICAgICAgaWYodGhpcy5pc05vdENvcnJlY3QoKSl7IC8vZWRnZSBjYXNlXG4gICAgICAgICAgZWxlbWVudC5jaGlsZE5vZGVzWzBdLm5vZGVWYWx1ZSA9IHRoaXMuYnJlYWtXb3JkKGVsZW1lbnQuY2hpbGROb2Rlc1swXS5ub2RlVmFsdWUsIG51bGwsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBpc05vdENvcnJlY3Q6IGZ1bmN0aW9uKCl7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wLmhlaWdodCA+ICh0aGlzLnByb3AubGluZWhlaWdodCAqIHRoaXMubGluZXMuY3VycmVudCk7XG4gICAgfSxcbiAgICBwcm9jZXNzQnJlYWs6IGZ1bmN0aW9uKGRPbmUsIGRUd28sIGZpeCl7XG4gICAgICB2YXIgciA9IHRoaXMuYnJlYWtXb3JkKGRPbmUuaW5uZXJUZXh0IHx8IGRPbmUubm9kZVZhbHVlLCBkVHdvLmlubmVyVGV4dCB8fCBkVHdvLm5vZGVWYWx1ZSwgZml4KTtcbiAgICAgIGlmKGRPbmUuaW5uZXJUZXh0KXtcbiAgICAgICAgZE9uZS5pbm5lclRleHQgPSByWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZE9uZS5ub2RlVmFsdWUgPSByWzBdO1xuICAgICAgfVxuICAgICAgaWYoZFR3by5pbm5lclRleHQpe1xuICAgICAgICBkVHdvLmlubmVyVGV4dCA9IHJbMV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkVHdvLm5vZGVWYWx1ZSA9IHJbMV07XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVDaGlsZHJlbjogZnVuY3Rpb24oZSl7XG4gICAgICB2YXIgZG9tQ2hpbGRyZW4gPSBlLmNoaWxkTm9kZXM7XG4gICAgICB2YXIgY2hpbGRUZXh0O1xuICAgICAgZm9yKHZhciBpID0gZG9tQ2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pe1xuICAgICAgICB2YXIgZGlzcGxheU9yaWdpbjtcbiAgICAgICAgaWYoZG9tQ2hpbGRyZW5baV0ubm9kZVR5cGUgPT09IDgpe1xuICAgICAgICAgIGNvbnRpbnVlOyAvLyBza2lwIGNvbW1lbnQgbm9kZXNcbiAgICAgICAgfVxuICAgICAgICBpZihkb21DaGlsZHJlbltpXS5ub2RlVHlwZSA9PT0gMyl7XG4gICAgICAgICAgZGlzcGxheU9yaWdpbiA9IGRvbUNoaWxkcmVuW2ldLm5vZGVWYWx1ZTtcbiAgICAgICAgICBkb21DaGlsZHJlbltpXS5ub2RlVmFsdWUgPSAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkaXNwbGF5T3JpZ2luID0gZ2V0Q29tcHV0ZWRTdHlsZShkb21DaGlsZHJlbltpXSkuZ2V0UHJvcGVydHlWYWx1ZShcImRpc3BsYXlcIik7XG4gICAgICAgICAgZG9tQ2hpbGRyZW5baV0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHRoaXMucHJvcC5oZWlnaHQgPD0gdGhpcy5wcm9wLmxpbmVoZWlnaHQgKiB0aGlzLmxpbmVzLmN1cnJlbnQpe1xuICAgICAgICAgIGlmKGRvbUNoaWxkcmVuW2ldLm5vZGVUeXBlID09PSAzKXtcbiAgICAgICAgICAgIGRvbUNoaWxkcmVuW2ldLm5vZGVWYWx1ZSA9IGRpc3BsYXlPcmlnaW47XG4gICAgICAgICAgICBjaGlsZFRleHQgPSBkb21DaGlsZHJlbltpXS5ub2RlVmFsdWU7XG4gICAgICAgICAgICB3aGlsZSh0aGlzLnByb3AuaGVpZ2h0ID4gKHRoaXMucHJvcC5saW5laGVpZ2h0ICogdGhpcy5saW5lcy5jdXJyZW50KSl7XG4gICAgICAgICAgICAgIGRvbUNoaWxkcmVuW2ldLm5vZGVWYWx1ZSA9IGNoaWxkVGV4dC5zbGljZSgwLCAtMSk7XG4gICAgICAgICAgICAgIGNoaWxkVGV4dCA9IGRvbUNoaWxkcmVuW2ldLm5vZGVWYWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYodGhpcy5jb25mLmJyZWFrX3dvcmQpe1xuICAgICAgICAgICAgICBkb21DaGlsZHJlbltpXS5ub2RlVmFsdWUgPSBjaGlsZFRleHQuc2xpY2UoMCwgLXRoaXMuY29uZi5lbGxpcHNpcy5sZW5ndGgpICsgdGhpcy5jb25mLmVsbGlwc2lzO1xuICAgICAgICAgICAgICBpZih0aGlzLmlzTm90Q29ycmVjdCgpKXsgLy9lZGdlIGNhc2VcbiAgICAgICAgICAgICAgICBkb21DaGlsZHJlbltpXS5ub2RlVmFsdWUgPSAnICcgKyBkb21DaGlsZHJlbltpXS5ub2RlVmFsdWUuc2xpY2UoMCwgLXRoaXMuY29uZi5lbGxpcHNpcy5sZW5ndGgpLnRyaW0oKS5zbGljZSgwLCAtdGhpcy5jb25mLmVsbGlwc2lzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgaWYoZG9tQ2hpbGRyZW5baV0ubm9kZVZhbHVlLmxlbmd0aCA+IDEpe1xuICAgICAgICAgICAgICAgICAgZG9tQ2hpbGRyZW5baV0ubm9kZVZhbHVlID0gZG9tQ2hpbGRyZW5baV0ubm9kZVZhbHVlLnNsaWNlKDAsIC10aGlzLmNvbmYuZWxsaXBzaXMubGVuZ3RoKSArIHRoaXMuY29uZi5lbGxpcHNpcztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZighZG9tQ2hpbGRyZW5baV0uaW5uZXJUZXh0ICYmICFkb21DaGlsZHJlbltpXS5ub2RlVmFsdWUpe1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0JyZWFrKGRvbUNoaWxkcmVuW2ldLCBkb21DaGlsZHJlbltpIC0gMV0pO1xuICAgICAgICAgICAgICBpZih0aGlzLmlzTm90Q29ycmVjdCgpKXsgLy9lZGdlIGNhc2VcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NCcmVhayhkb21DaGlsZHJlbltpXSwgZG9tQ2hpbGRyZW5baSAtIDFdLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmlzTm90Q29ycmVjdCgpKXtcbiAgICAgICAgICAgICAgICAgIGUucmVtb3ZlQ2hpbGQoZG9tQ2hpbGRyZW5baV0pO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvbUNoaWxkcmVuW2ldLnN0eWxlLmRpc3BsYXkgPSBkaXNwbGF5T3JpZ2luO1xuICAgICAgICAgICAgY2hpbGRUZXh0ID0gZG9tQ2hpbGRyZW5baV0uaW5uZXJUZXh0O1xuICAgICAgICAgICAgd2hpbGUodGhpcy5wcm9wLmhlaWdodCA+ICh0aGlzLnByb3AubGluZWhlaWdodCAqIHRoaXMubGluZXMuY3VycmVudCkpe1xuICAgICAgICAgICAgICBkb21DaGlsZHJlbltpXS5pbm5lclRleHQgPSBjaGlsZFRleHQuc2xpY2UoMCwgLTEpO1xuICAgICAgICAgICAgICBjaGlsZFRleHQgPSBkb21DaGlsZHJlbltpXS5pbm5lclRleHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0aGlzLmNvbmYuYnJlYWtfd29yZCl7XG4gICAgICAgICAgICAgIGRvbUNoaWxkcmVuW2ldLmlubmVyVGV4dCA9IGNoaWxkVGV4dC5zbGljZSgwLCAtdGhpcy5jb25mLmVsbGlwc2lzLmxlbmd0aCkgKyB0aGlzLmNvbmYuZWxsaXBzaXM7XG4gICAgICAgICAgICAgIGlmKHRoaXMuaXNOb3RDb3JyZWN0KCkpeyAvL2VkZ2UgY2FzZVxuICAgICAgICAgICAgICAgIGRvbUNoaWxkcmVuW2ldLmlubmVyVGV4dCA9ICcgJyArIGRvbUNoaWxkcmVuW2ldLmlubmVyVGV4dC5zbGljZSgwLCAtdGhpcy5jb25mLmVsbGlwc2lzLmxlbmd0aCkudHJpbSgpLnNsaWNlKDAsIC10aGlzLmNvbmYuZWxsaXBzaXMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBpZihkb21DaGlsZHJlbltpXS5pbm5lclRleHQubGVuZ3RoID4gMSl7XG4gICAgICAgICAgICAgICAgICBkb21DaGlsZHJlbltpXS5pbm5lclRleHQgPSBkb21DaGlsZHJlbltpXS5pbm5lclRleHQuc2xpY2UoMCwgLXRoaXMuY29uZi5lbGxpcHNpcy5sZW5ndGgpICsgdGhpcy5jb25mLmVsbGlwc2lzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmKCFkb21DaGlsZHJlbltpXS5pbm5lclRleHQgJiYgIWRvbUNoaWxkcmVuW2ldLm5vZGVWYWx1ZSl7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzQnJlYWsoZG9tQ2hpbGRyZW5baV0sIGRvbUNoaWxkcmVuW2kgLSAxXSk7XG4gICAgICAgICAgICAgIGlmKHRoaXMuaXNOb3RDb3JyZWN0KCkpeyAvL2VkZ2UgY2FzZVxuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0JyZWFrKGRvbUNoaWxkcmVuW2ldLCBkb21DaGlsZHJlbltpIC0gMV0sIHRydWUpO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuaXNOb3RDb3JyZWN0KCkpe1xuICAgICAgICAgICAgICAgICAgZS5yZW1vdmVDaGlsZChkb21DaGlsZHJlbltpXSk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZS5yZW1vdmVDaGlsZChkb21DaGlsZHJlbltpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFyIEVsbGlwc2lzQ2xhc3MgPSBmdW5jdGlvbihvcHRzKXtcbiAgICByZXR1cm4gbmV3IEVsbGlwc2lzKG9wdHMpO1xuICB9O1xuXG4gIC8vUmVxdWlyZUpTIFN0eWxlXG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZShcImVsbGlwc2lzXCIsIFtdLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBFbGxpcHNpc0NsYXNzO1xuICAgIH0pO1xuICB9XG5cbiAgc2VsZi5FbGxpcHNpcyA9IEVsbGlwc2lzQ2xhc3M7XG4gIHJldHVybiBFbGxpcHNpc0NsYXNzO1xuXG59KCkpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFIgPSB0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgPyBSZWZsZWN0IDogbnVsbFxudmFyIFJlZmxlY3RBcHBseSA9IFIgJiYgdHlwZW9mIFIuYXBwbHkgPT09ICdmdW5jdGlvbidcbiAgPyBSLmFwcGx5XG4gIDogZnVuY3Rpb24gUmVmbGVjdEFwcGx5KHRhcmdldCwgcmVjZWl2ZXIsIGFyZ3MpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwodGFyZ2V0LCByZWNlaXZlciwgYXJncyk7XG4gIH1cblxudmFyIFJlZmxlY3RPd25LZXlzXG5pZiAoUiAmJiB0eXBlb2YgUi5vd25LZXlzID09PSAnZnVuY3Rpb24nKSB7XG4gIFJlZmxlY3RPd25LZXlzID0gUi5vd25LZXlzXG59IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgUmVmbGVjdE93bktleXMgPSBmdW5jdGlvbiBSZWZsZWN0T3duS2V5cyh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KVxuICAgICAgLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldCkpO1xuICB9O1xufSBlbHNlIHtcbiAgUmVmbGVjdE93bktleXMgPSBmdW5jdGlvbiBSZWZsZWN0T3duS2V5cyh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gUHJvY2Vzc0VtaXRXYXJuaW5nKHdhcm5pbmcpIHtcbiAgaWYgKGNvbnNvbGUgJiYgY29uc29sZS53YXJuKSBjb25zb2xlLndhcm4od2FybmluZyk7XG59XG5cbnZhciBOdW1iZXJJc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiBOdW1iZXJJc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIEV2ZW50RW1pdHRlci5pbml0LmNhbGwodGhpcyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbm1vZHVsZS5leHBvcnRzLm9uY2UgPSBvbmNlO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50c0NvdW50ID0gMDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxudmFyIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuZnVuY3Rpb24gY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcikge1xuICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBsaXN0ZW5lcik7XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50RW1pdHRlciwgJ2RlZmF1bHRNYXhMaXN0ZW5lcnMnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24oYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09ICdudW1iZXInIHx8IGFyZyA8IDAgfHwgTnVtYmVySXNOYU4oYXJnKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgYXJnICsgJy4nKTtcbiAgICB9XG4gICAgZGVmYXVsdE1heExpc3RlbmVycyA9IGFyZztcbiAgfVxufSk7XG5cbkV2ZW50RW1pdHRlci5pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgaWYgKHRoaXMuX2V2ZW50cyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLl9ldmVudHMgPT09IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSB7XG4gICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSB0aGlzLl9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkO1xufTtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gc2V0TWF4TGlzdGVuZXJzKG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCBuIDwgMCB8fCBOdW1iZXJJc05hTihuKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJuXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIG4gKyAnLicpO1xuICB9XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gX2dldE1heExpc3RlbmVycyh0aGF0KSB7XG4gIGlmICh0aGF0Ll9tYXhMaXN0ZW5lcnMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIHJldHVybiB0aGF0Ll9tYXhMaXN0ZW5lcnM7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gZ2V0TWF4TGlzdGVuZXJzKCkge1xuICByZXR1cm4gX2dldE1heExpc3RlbmVycyh0aGlzKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQodHlwZSkge1xuICB2YXIgYXJncyA9IFtdO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gIHZhciBkb0Vycm9yID0gKHR5cGUgPT09ICdlcnJvcicpO1xuXG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZClcbiAgICBkb0Vycm9yID0gKGRvRXJyb3IgJiYgZXZlbnRzLmVycm9yID09PSB1bmRlZmluZWQpO1xuICBlbHNlIGlmICghZG9FcnJvcilcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB0aGVuIHRocm93LlxuICBpZiAoZG9FcnJvcikge1xuICAgIHZhciBlcjtcbiAgICBpZiAoYXJncy5sZW5ndGggPiAwKVxuICAgICAgZXIgPSBhcmdzWzBdO1xuICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAvLyBOb3RlOiBUaGUgY29tbWVudHMgb24gdGhlIGB0aHJvd2AgbGluZXMgYXJlIGludGVudGlvbmFsLCB0aGV5IHNob3dcbiAgICAgIC8vIHVwIGluIE5vZGUncyBvdXRwdXQgaWYgdGhpcyByZXN1bHRzIGluIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uXG4gICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgICB9XG4gICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1VuaGFuZGxlZCBlcnJvci4nICsgKGVyID8gJyAoJyArIGVyLm1lc3NhZ2UgKyAnKScgOiAnJykpO1xuICAgIGVyci5jb250ZXh0ID0gZXI7XG4gICAgdGhyb3cgZXJyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICB9XG5cbiAgdmFyIGhhbmRsZXIgPSBldmVudHNbdHlwZV07XG5cbiAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgUmVmbGVjdEFwcGx5KGhhbmRsZXIsIHRoaXMsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW4gPSBoYW5kbGVyLmxlbmd0aDtcbiAgICB2YXIgbGlzdGVuZXJzID0gYXJyYXlDbG9uZShoYW5kbGVyLCBsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpXG4gICAgICBSZWZsZWN0QXBwbHkobGlzdGVuZXJzW2ldLCB0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gX2FkZExpc3RlbmVyKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIsIHByZXBlbmQpIHtcbiAgdmFyIG07XG4gIHZhciBldmVudHM7XG4gIHZhciBleGlzdGluZztcblxuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRhcmdldC5fZXZlbnRzQ291bnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXG4gICAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICAgIGlmIChldmVudHMubmV3TGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFyZ2V0LmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSxcbiAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyID8gbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgICAgIC8vIFJlLWFzc2lnbiBgZXZlbnRzYCBiZWNhdXNlIGEgbmV3TGlzdGVuZXIgaGFuZGxlciBjb3VsZCBoYXZlIGNhdXNlZCB0aGVcbiAgICAgIC8vIHRoaXMuX2V2ZW50cyB0byBiZSBhc3NpZ25lZCB0byBhIG5ldyBvYmplY3RcbiAgICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICAgIH1cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXTtcbiAgfVxuXG4gIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICArK3RhcmdldC5fZXZlbnRzQ291bnQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBleGlzdGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG4gICAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9XG4gICAgICAgIHByZXBlbmQgPyBbbGlzdGVuZXIsIGV4aXN0aW5nXSA6IFtleGlzdGluZywgbGlzdGVuZXJdO1xuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIH0gZWxzZSBpZiAocHJlcGVuZCkge1xuICAgICAgZXhpc3RpbmcudW5zaGlmdChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0aW5nLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG4gICAgbSA9IF9nZXRNYXhMaXN0ZW5lcnModGFyZ2V0KTtcbiAgICBpZiAobSA+IDAgJiYgZXhpc3RpbmcubGVuZ3RoID4gbSAmJiAhZXhpc3Rpbmcud2FybmVkKSB7XG4gICAgICBleGlzdGluZy53YXJuZWQgPSB0cnVlO1xuICAgICAgLy8gTm8gZXJyb3IgY29kZSBmb3IgdGhpcyBzaW5jZSBpdCBpcyBhIFdhcm5pbmdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgdmFyIHcgPSBuZXcgRXJyb3IoJ1Bvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmxlbmd0aCArICcgJyArIFN0cmluZyh0eXBlKSArICcgbGlzdGVuZXJzICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jcmVhc2UgbGltaXQnKTtcbiAgICAgIHcubmFtZSA9ICdNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmcnO1xuICAgICAgdy5lbWl0dGVyID0gdGFyZ2V0O1xuICAgICAgdy50eXBlID0gdHlwZTtcbiAgICAgIHcuY291bnQgPSBleGlzdGluZy5sZW5ndGg7XG4gICAgICBQcm9jZXNzRW1pdFdhcm5pbmcodyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgICB9O1xuXG5mdW5jdGlvbiBvbmNlV3JhcHBlcigpIHtcbiAgaWYgKCF0aGlzLmZpcmVkKSB7XG4gICAgdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLCB0aGlzLndyYXBGbik7XG4gICAgdGhpcy5maXJlZCA9IHRydWU7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTtcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCwgYXJndW1lbnRzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfb25jZVdyYXAodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgc3RhdGUgPSB7IGZpcmVkOiBmYWxzZSwgd3JhcEZuOiB1bmRlZmluZWQsIHRhcmdldDogdGFyZ2V0LCB0eXBlOiB0eXBlLCBsaXN0ZW5lcjogbGlzdGVuZXIgfTtcbiAgdmFyIHdyYXBwZWQgPSBvbmNlV3JhcHBlci5iaW5kKHN0YXRlKTtcbiAgd3JhcHBlZC5saXN0ZW5lciA9IGxpc3RlbmVyO1xuICBzdGF0ZS53cmFwRm4gPSB3cmFwcGVkO1xuICByZXR1cm4gd3JhcHBlZDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZSh0eXBlLCBsaXN0ZW5lcikge1xuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgdGhpcy5vbih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRPbmNlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgdGhpcy5wcmVwZW5kTGlzdGVuZXIodHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4vLyBFbWl0cyBhICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWYgYW5kIG9ubHkgaWYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHZhciBsaXN0LCBldmVudHMsIHBvc2l0aW9uLCBpLCBvcmlnaW5hbExpc3RlbmVyO1xuXG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgbGlzdCA9IGV2ZW50c1t0eXBlXTtcbiAgICAgIGlmIChsaXN0ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHwgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3QubGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsaXN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBvc2l0aW9uID0gLTE7XG5cbiAgICAgICAgZm9yIChpID0gbGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fCBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RbaV0ubGlzdGVuZXI7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gMClcbiAgICAgICAgICBsaXN0LnNoaWZ0KCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHNwbGljZU9uZShsaXN0LCBwb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpXG4gICAgICAgICAgZXZlbnRzW3R5cGVdID0gbGlzdFswXTtcblxuICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIG9yaWdpbmFsTGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID1cbiAgICBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnModHlwZSkge1xuICAgICAgdmFyIGxpc3RlbmVycywgZXZlbnRzLCBpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudHNbdHlwZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnRzKTtcbiAgICAgICAgdmFyIGtleTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlbmVycyA9IGV2ZW50c1t0eXBlXTtcblxuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBMSUZPIG9yZGVyXG4gICAgICAgIGZvciAoaSA9IGxpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5mdW5jdGlvbiBfbGlzdGVuZXJzKHRhcmdldCwgdHlwZSwgdW53cmFwKSB7XG4gIHZhciBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuICBpZiAoZXZsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIHVud3JhcCA/IFtldmxpc3RlbmVyLmxpc3RlbmVyIHx8IGV2bGlzdGVuZXJdIDogW2V2bGlzdGVuZXJdO1xuXG4gIHJldHVybiB1bndyYXAgP1xuICAgIHVud3JhcExpc3RlbmVycyhldmxpc3RlbmVyKSA6IGFycmF5Q2xvbmUoZXZsaXN0ZW5lciwgZXZsaXN0ZW5lci5sZW5ndGgpO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIHRydWUpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnMgPSBmdW5jdGlvbiByYXdMaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLmxpc3RlbmVyQ291bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZW1pdHRlci5saXN0ZW5lckNvdW50KHR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsaXN0ZW5lckNvdW50LmNhbGwoZW1pdHRlciwgdHlwZSk7XG4gIH1cbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGxpc3RlbmVyQ291bnQ7XG5mdW5jdGlvbiBsaXN0ZW5lckNvdW50KHR5cGUpIHtcbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcblxuICAgIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChldmxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBldmxpc3RlbmVyLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgcmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50ID4gMCA/IFJlZmxlY3RPd25LZXlzKHRoaXMuX2V2ZW50cykgOiBbXTtcbn07XG5cbmZ1bmN0aW9uIGFycmF5Q2xvbmUoYXJyLCBuKSB7XG4gIHZhciBjb3B5ID0gbmV3IEFycmF5KG4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSlcbiAgICBjb3B5W2ldID0gYXJyW2ldO1xuICByZXR1cm4gY29weTtcbn1cblxuZnVuY3Rpb24gc3BsaWNlT25lKGxpc3QsIGluZGV4KSB7XG4gIGZvciAoOyBpbmRleCArIDEgPCBsaXN0Lmxlbmd0aDsgaW5kZXgrKylcbiAgICBsaXN0W2luZGV4XSA9IGxpc3RbaW5kZXggKyAxXTtcbiAgbGlzdC5wb3AoKTtcbn1cblxuZnVuY3Rpb24gdW53cmFwTGlzdGVuZXJzKGFycikge1xuICB2YXIgcmV0ID0gbmV3IEFycmF5KGFyci5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJldC5sZW5ndGg7ICsraSkge1xuICAgIHJldFtpXSA9IGFycltpXS5saXN0ZW5lciB8fCBhcnJbaV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gb25jZShlbWl0dGVyLCBuYW1lKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgZnVuY3Rpb24gZXJyb3JMaXN0ZW5lcihlcnIpIHtcbiAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIobmFtZSwgcmVzb2x2ZXIpO1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzb2x2ZXIoKSB7XG4gICAgICBpZiAodHlwZW9mIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBlcnJvckxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG4gICAgZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIHJlc29sdmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgaWYgKG5hbWUgIT09ICdlcnJvcicpIHtcbiAgICAgIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGVycm9yTGlzdGVuZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlcihlbWl0dGVyLCBoYW5kbGVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgJ2Vycm9yJywgaGFuZGxlciwgZmxhZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCBuYW1lLCBsaXN0ZW5lciwgZmxhZ3MpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLm9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKGZsYWdzLm9uY2UpIHtcbiAgICAgIGVtaXR0ZXIub25jZShuYW1lLCBsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVtaXR0ZXIub24obmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gRXZlbnRUYXJnZXQgZG9lcyBub3QgaGF2ZSBgZXJyb3JgIGV2ZW50IHNlbWFudGljcyBsaWtlIE5vZGVcbiAgICAvLyBFdmVudEVtaXR0ZXJzLCB3ZSBkbyBub3QgbGlzdGVuIGZvciBgZXJyb3JgIGV2ZW50cyBoZXJlLlxuICAgIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBmdW5jdGlvbiB3cmFwTGlzdGVuZXIoYXJnKSB7XG4gICAgICAvLyBJRSBkb2VzIG5vdCBoYXZlIGJ1aWx0aW4gYHsgb25jZTogdHJ1ZSB9YCBzdXBwb3J0IHNvIHdlXG4gICAgICAvLyBoYXZlIHRvIGRvIGl0IG1hbnVhbGx5LlxuICAgICAgaWYgKGZsYWdzLm9uY2UpIHtcbiAgICAgICAgZW1pdHRlci5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIHdyYXBMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgICBsaXN0ZW5lcihhcmcpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImVtaXR0ZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRXZlbnRFbWl0dGVyLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgZW1pdHRlcik7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTYgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgVzNDIFNPRlRXQVJFIEFORCBET0NVTUVOVCBOT1RJQ0UgQU5EIExJQ0VOU0UuXG4gKlxuICogIGh0dHBzOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMTUvY29weXJpZ2h0LXNvZnR3YXJlLWFuZC1kb2N1bWVudFxuICpcbiAqL1xuKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBFeGl0IGVhcmx5IGlmIHdlJ3JlIG5vdCBydW5uaW5nIGluIGEgYnJvd3Nlci5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSAnb2JqZWN0Jykge1xuICByZXR1cm47XG59XG5cbi8vIEV4aXQgZWFybHkgaWYgYWxsIEludGVyc2VjdGlvbk9ic2VydmVyIGFuZCBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5XG4vLyBmZWF0dXJlcyBhcmUgbmF0aXZlbHkgc3VwcG9ydGVkLlxuaWYgKCdJbnRlcnNlY3Rpb25PYnNlcnZlcicgaW4gd2luZG93ICYmXG4gICAgJ0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnknIGluIHdpbmRvdyAmJlxuICAgICdpbnRlcnNlY3Rpb25SYXRpbycgaW4gd2luZG93LkludGVyc2VjdGlvbk9ic2VydmVyRW50cnkucHJvdG90eXBlKSB7XG5cbiAgLy8gTWluaW1hbCBwb2x5ZmlsbCBmb3IgRWRnZSAxNSdzIGxhY2sgb2YgYGlzSW50ZXJzZWN0aW5nYFxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS93M2MvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIvaXNzdWVzLzIxMVxuICBpZiAoISgnaXNJbnRlcnNlY3RpbmcnIGluIHdpbmRvdy5JbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5LnByb3RvdHlwZSkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LkludGVyc2VjdGlvbk9ic2VydmVyRW50cnkucHJvdG90eXBlLFxuICAgICAgJ2lzSW50ZXJzZWN0aW5nJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmludGVyc2VjdGlvblJhdGlvID4gMDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm47XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZW1iZWRkaW5nIGZyYW1lIGVsZW1lbnQsIGlmIGFueS5cbiAqIEBwYXJhbSB7IURvY3VtZW50fSBkb2NcbiAqIEByZXR1cm4geyFFbGVtZW50fVxuICovXG5mdW5jdGlvbiBnZXRGcmFtZUVsZW1lbnQoZG9jKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRvYy5kZWZhdWx0VmlldyAmJiBkb2MuZGVmYXVsdFZpZXcuZnJhbWVFbGVtZW50IHx8IG51bGw7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBJZ25vcmUgdGhlIGVycm9yLlxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogQSBsb2NhbCByZWZlcmVuY2UgdG8gdGhlIHJvb3QgZG9jdW1lbnQuXG4gKi9cbnZhciBkb2N1bWVudCA9IChmdW5jdGlvbihzdGFydERvYykge1xuICB2YXIgZG9jID0gc3RhcnREb2M7XG4gIHZhciBmcmFtZSA9IGdldEZyYW1lRWxlbWVudChkb2MpO1xuICB3aGlsZSAoZnJhbWUpIHtcbiAgICBkb2MgPSBmcmFtZS5vd25lckRvY3VtZW50O1xuICAgIGZyYW1lID0gZ2V0RnJhbWVFbGVtZW50KGRvYyk7XG4gIH1cbiAgcmV0dXJuIGRvYztcbn0pKHdpbmRvdy5kb2N1bWVudCk7XG5cbi8qKlxuICogQW4gSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgcmVnaXN0cnkuIFRoaXMgcmVnaXN0cnkgZXhpc3RzIHRvIGhvbGQgYSBzdHJvbmdcbiAqIHJlZmVyZW5jZSB0byBJbnRlcnNlY3Rpb25PYnNlcnZlciBpbnN0YW5jZXMgY3VycmVudGx5IG9ic2VydmluZyBhIHRhcmdldFxuICogZWxlbWVudC4gV2l0aG91dCB0aGlzIHJlZ2lzdHJ5LCBpbnN0YW5jZXMgd2l0aG91dCBhbm90aGVyIHJlZmVyZW5jZSBtYXkgYmVcbiAqIGdhcmJhZ2UgY29sbGVjdGVkLlxuICovXG52YXIgcmVnaXN0cnkgPSBbXTtcblxuLyoqXG4gKiBUaGUgc2lnbmFsIHVwZGF0ZXIgZm9yIGNyb3NzLW9yaWdpbiBpbnRlcnNlY3Rpb24uIFdoZW4gbm90IG51bGwsIGl0IG1lYW5zXG4gKiB0aGF0IHRoZSBwb2x5ZmlsbCBpcyBjb25maWd1cmVkIHRvIHdvcmsgaW4gYSBjcm9zcy1vcmlnaW4gbW9kZS5cbiAqIEB0eXBlIHtmdW5jdGlvbihET01SZWN0fENsaWVudFJlY3QsIERPTVJlY3R8Q2xpZW50UmVjdCl9XG4gKi9cbnZhciBjcm9zc09yaWdpblVwZGF0ZXIgPSBudWxsO1xuXG4vKipcbiAqIFRoZSBjdXJyZW50IGNyb3NzLW9yaWdpbiBpbnRlcnNlY3Rpb24uIE9ubHkgdXNlZCBpbiB0aGUgY3Jvc3Mtb3JpZ2luIG1vZGUuXG4gKiBAdHlwZSB7RE9NUmVjdHxDbGllbnRSZWN0fVxuICovXG52YXIgY3Jvc3NPcmlnaW5SZWN0ID0gbnVsbDtcblxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGdsb2JhbCBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5IGNvbnN0cnVjdG9yLlxuICogaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ludGVyc2VjdGlvbk9ic2VydmVyLyNpbnRlcnNlY3Rpb24tb2JzZXJ2ZXItZW50cnlcbiAqIEBwYXJhbSB7T2JqZWN0fSBlbnRyeSBBIGRpY3Rpb25hcnkgb2YgaW5zdGFuY2UgcHJvcGVydGllcy5cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5KGVudHJ5KSB7XG4gIHRoaXMudGltZSA9IGVudHJ5LnRpbWU7XG4gIHRoaXMudGFyZ2V0ID0gZW50cnkudGFyZ2V0O1xuICB0aGlzLnJvb3RCb3VuZHMgPSBlbnN1cmVET01SZWN0KGVudHJ5LnJvb3RCb3VuZHMpO1xuICB0aGlzLmJvdW5kaW5nQ2xpZW50UmVjdCA9IGVuc3VyZURPTVJlY3QoZW50cnkuYm91bmRpbmdDbGllbnRSZWN0KTtcbiAgdGhpcy5pbnRlcnNlY3Rpb25SZWN0ID0gZW5zdXJlRE9NUmVjdChlbnRyeS5pbnRlcnNlY3Rpb25SZWN0IHx8IGdldEVtcHR5UmVjdCgpKTtcbiAgdGhpcy5pc0ludGVyc2VjdGluZyA9ICEhZW50cnkuaW50ZXJzZWN0aW9uUmVjdDtcblxuICAvLyBDYWxjdWxhdGVzIHRoZSBpbnRlcnNlY3Rpb24gcmF0aW8uXG4gIHZhciB0YXJnZXRSZWN0ID0gdGhpcy5ib3VuZGluZ0NsaWVudFJlY3Q7XG4gIHZhciB0YXJnZXRBcmVhID0gdGFyZ2V0UmVjdC53aWR0aCAqIHRhcmdldFJlY3QuaGVpZ2h0O1xuICB2YXIgaW50ZXJzZWN0aW9uUmVjdCA9IHRoaXMuaW50ZXJzZWN0aW9uUmVjdDtcbiAgdmFyIGludGVyc2VjdGlvbkFyZWEgPSBpbnRlcnNlY3Rpb25SZWN0LndpZHRoICogaW50ZXJzZWN0aW9uUmVjdC5oZWlnaHQ7XG5cbiAgLy8gU2V0cyBpbnRlcnNlY3Rpb24gcmF0aW8uXG4gIGlmICh0YXJnZXRBcmVhKSB7XG4gICAgLy8gUm91bmQgdGhlIGludGVyc2VjdGlvbiByYXRpbyB0byBhdm9pZCBmbG9hdGluZyBwb2ludCBtYXRoIGlzc3VlczpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdzNjL0ludGVyc2VjdGlvbk9ic2VydmVyL2lzc3Vlcy8zMjRcbiAgICB0aGlzLmludGVyc2VjdGlvblJhdGlvID0gTnVtYmVyKChpbnRlcnNlY3Rpb25BcmVhIC8gdGFyZ2V0QXJlYSkudG9GaXhlZCg0KSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgYXJlYSBpcyB6ZXJvIGFuZCBpcyBpbnRlcnNlY3RpbmcsIHNldHMgdG8gMSwgb3RoZXJ3aXNlIHRvIDBcbiAgICB0aGlzLmludGVyc2VjdGlvblJhdGlvID0gdGhpcy5pc0ludGVyc2VjdGluZyA/IDEgOiAwO1xuICB9XG59XG5cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBnbG9iYWwgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgY29uc3RydWN0b3IuXG4gKiBodHRwczovL3czYy5naXRodWIuaW8vSW50ZXJzZWN0aW9uT2JzZXJ2ZXIvI2ludGVyc2VjdGlvbi1vYnNlcnZlci1pbnRlcmZhY2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0byBiZSBpbnZva2VkIGFmdGVyIGludGVyc2VjdGlvblxuICogICAgIGNoYW5nZXMgaGF2ZSBxdWV1ZWQuIFRoZSBmdW5jdGlvbiBpcyBub3QgaW52b2tlZCBpZiB0aGUgcXVldWUgaGFzXG4gKiAgICAgYmVlbiBlbXB0aWVkIGJ5IGNhbGxpbmcgdGhlIGB0YWtlUmVjb3Jkc2AgbWV0aG9kLlxuICogQHBhcmFtIHtPYmplY3Q9fSBvcHRfb3B0aW9ucyBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoY2FsbGJhY2ssIG9wdF9vcHRpb25zKSB7XG5cbiAgdmFyIG9wdGlvbnMgPSBvcHRfb3B0aW9ucyB8fCB7fTtcblxuICBpZiAodHlwZW9mIGNhbGxiYWNrICE9ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgaWYgKFxuICAgIG9wdGlvbnMucm9vdCAmJlxuICAgIG9wdGlvbnMucm9vdC5ub2RlVHlwZSAhPSAxICYmXG4gICAgb3B0aW9ucy5yb290Lm5vZGVUeXBlICE9IDlcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyb290IG11c3QgYmUgYSBEb2N1bWVudCBvciBFbGVtZW50Jyk7XG4gIH1cblxuICAvLyBCaW5kcyBhbmQgdGhyb3R0bGVzIGB0aGlzLl9jaGVja0ZvckludGVyc2VjdGlvbnNgLlxuICB0aGlzLl9jaGVja0ZvckludGVyc2VjdGlvbnMgPSB0aHJvdHRsZShcbiAgICAgIHRoaXMuX2NoZWNrRm9ySW50ZXJzZWN0aW9ucy5iaW5kKHRoaXMpLCB0aGlzLlRIUk9UVExFX1RJTUVPVVQpO1xuXG4gIC8vIFByaXZhdGUgcHJvcGVydGllcy5cbiAgdGhpcy5fY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgdGhpcy5fb2JzZXJ2YXRpb25UYXJnZXRzID0gW107XG4gIHRoaXMuX3F1ZXVlZEVudHJpZXMgPSBbXTtcbiAgdGhpcy5fcm9vdE1hcmdpblZhbHVlcyA9IHRoaXMuX3BhcnNlUm9vdE1hcmdpbihvcHRpb25zLnJvb3RNYXJnaW4pO1xuXG4gIC8vIFB1YmxpYyBwcm9wZXJ0aWVzLlxuICB0aGlzLnRocmVzaG9sZHMgPSB0aGlzLl9pbml0VGhyZXNob2xkcyhvcHRpb25zLnRocmVzaG9sZCk7XG4gIHRoaXMucm9vdCA9IG9wdGlvbnMucm9vdCB8fCBudWxsO1xuICB0aGlzLnJvb3RNYXJnaW4gPSB0aGlzLl9yb290TWFyZ2luVmFsdWVzLm1hcChmdW5jdGlvbihtYXJnaW4pIHtcbiAgICByZXR1cm4gbWFyZ2luLnZhbHVlICsgbWFyZ2luLnVuaXQ7XG4gIH0pLmpvaW4oJyAnKTtcblxuICAvKiogQHByaXZhdGUgQGNvbnN0IHshQXJyYXk8IURvY3VtZW50Pn0gKi9cbiAgdGhpcy5fbW9uaXRvcmluZ0RvY3VtZW50cyA9IFtdO1xuICAvKiogQHByaXZhdGUgQGNvbnN0IHshQXJyYXk8ZnVuY3Rpb24oKT59ICovXG4gIHRoaXMuX21vbml0b3JpbmdVbnN1YnNjcmliZXMgPSBbXTtcbn1cblxuXG4vKipcbiAqIFRoZSBtaW5pbXVtIGludGVydmFsIHdpdGhpbiB3aGljaCB0aGUgZG9jdW1lbnQgd2lsbCBiZSBjaGVja2VkIGZvclxuICogaW50ZXJzZWN0aW9uIGNoYW5nZXMuXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5USFJPVFRMRV9USU1FT1VUID0gMTAwO1xuXG5cbi8qKlxuICogVGhlIGZyZXF1ZW5jeSBpbiB3aGljaCB0aGUgcG9seWZpbGwgcG9sbHMgZm9yIGludGVyc2VjdGlvbiBjaGFuZ2VzLlxuICogdGhpcyBjYW4gYmUgdXBkYXRlZCBvbiBhIHBlciBpbnN0YW5jZSBiYXNpcyBhbmQgbXVzdCBiZSBzZXQgcHJpb3IgdG9cbiAqIGNhbGxpbmcgYG9ic2VydmVgIG9uIHRoZSBmaXJzdCB0YXJnZXQuXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5QT0xMX0lOVEVSVkFMID0gbnVsbDtcblxuLyoqXG4gKiBVc2UgYSBtdXRhdGlvbiBvYnNlcnZlciBvbiB0aGUgcm9vdCBlbGVtZW50XG4gKiB0byBkZXRlY3QgaW50ZXJzZWN0aW9uIGNoYW5nZXMuXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5VU0VfTVVUQVRJT05fT0JTRVJWRVIgPSB0cnVlO1xuXG5cbi8qKlxuICogU2V0cyB1cCB0aGUgcG9seWZpbGwgaW4gdGhlIGNyb3NzLW9yaWdpbiBtb2RlLiBUaGUgcmVzdWx0IGlzIHRoZVxuICogdXBkYXRlciBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdHdvIGFyZ3VtZW50czogYGJvdW5kaW5nQ2xpZW50UmVjdGAgYW5kXG4gKiBgaW50ZXJzZWN0aW9uUmVjdGAgLSBqdXN0IGFzIHRoZXNlIGZpZWxkcyB3b3VsZCBiZSBhdmFpbGFibGUgdG8gdGhlXG4gKiBwYXJlbnQgdmlhIGBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5YC4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkXG4gKiBlYWNoIHRpbWUgdGhlIGlmcmFtZSByZWNlaXZlcyBpbnRlcnNlY3Rpb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgcGFyZW50XG4gKiB3aW5kb3csIGUuZy4gdmlhIG1lc3NhZ2luZy5cbiAqIEByZXR1cm4ge2Z1bmN0aW9uKERPTVJlY3R8Q2xpZW50UmVjdCwgRE9NUmVjdHxDbGllbnRSZWN0KX1cbiAqL1xuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuX3NldHVwQ3Jvc3NPcmlnaW5VcGRhdGVyID0gZnVuY3Rpb24oKSB7XG4gIGlmICghY3Jvc3NPcmlnaW5VcGRhdGVyKSB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtET01SZWN0fENsaWVudFJlY3R9IGJvdW5kaW5nQ2xpZW50UmVjdFxuICAgICAqIEBwYXJhbSB7RE9NUmVjdHxDbGllbnRSZWN0fSBpbnRlcnNlY3Rpb25SZWN0XG4gICAgICovXG4gICAgY3Jvc3NPcmlnaW5VcGRhdGVyID0gZnVuY3Rpb24oYm91bmRpbmdDbGllbnRSZWN0LCBpbnRlcnNlY3Rpb25SZWN0KSB7XG4gICAgICBpZiAoIWJvdW5kaW5nQ2xpZW50UmVjdCB8fCAhaW50ZXJzZWN0aW9uUmVjdCkge1xuICAgICAgICBjcm9zc09yaWdpblJlY3QgPSBnZXRFbXB0eVJlY3QoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNyb3NzT3JpZ2luUmVjdCA9IGNvbnZlcnRGcm9tUGFyZW50UmVjdChib3VuZGluZ0NsaWVudFJlY3QsIGludGVyc2VjdGlvblJlY3QpO1xuICAgICAgfVxuICAgICAgcmVnaXN0cnkuZm9yRWFjaChmdW5jdGlvbihvYnNlcnZlcikge1xuICAgICAgICBvYnNlcnZlci5fY2hlY2tGb3JJbnRlcnNlY3Rpb25zKCk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBjcm9zc09yaWdpblVwZGF0ZXI7XG59O1xuXG5cbi8qKlxuICogUmVzZXRzIHRoZSBjcm9zcy1vcmlnaW4gbW9kZS5cbiAqL1xuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuX3Jlc2V0Q3Jvc3NPcmlnaW5VcGRhdGVyID0gZnVuY3Rpb24oKSB7XG4gIGNyb3NzT3JpZ2luVXBkYXRlciA9IG51bGw7XG4gIGNyb3NzT3JpZ2luUmVjdCA9IG51bGw7XG59O1xuXG5cbi8qKlxuICogU3RhcnRzIG9ic2VydmluZyBhIHRhcmdldCBlbGVtZW50IGZvciBpbnRlcnNlY3Rpb24gY2hhbmdlcyBiYXNlZCBvblxuICogdGhlIHRocmVzaG9sZHMgdmFsdWVzLlxuICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgVGhlIERPTSBlbGVtZW50IHRvIG9ic2VydmUuXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5vYnNlcnZlID0gZnVuY3Rpb24odGFyZ2V0KSB7XG4gIHZhciBpc1RhcmdldEFscmVhZHlPYnNlcnZlZCA9IHRoaXMuX29ic2VydmF0aW9uVGFyZ2V0cy5zb21lKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbS5lbGVtZW50ID09IHRhcmdldDtcbiAgfSk7XG5cbiAgaWYgKGlzVGFyZ2V0QWxyZWFkeU9ic2VydmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCEodGFyZ2V0ICYmIHRhcmdldC5ub2RlVHlwZSA9PSAxKSkge1xuICAgIHRocm93IG5ldyBFcnJvcigndGFyZ2V0IG11c3QgYmUgYW4gRWxlbWVudCcpO1xuICB9XG5cbiAgdGhpcy5fcmVnaXN0ZXJJbnN0YW5jZSgpO1xuICB0aGlzLl9vYnNlcnZhdGlvblRhcmdldHMucHVzaCh7ZWxlbWVudDogdGFyZ2V0LCBlbnRyeTogbnVsbH0pO1xuICB0aGlzLl9tb25pdG9ySW50ZXJzZWN0aW9ucyh0YXJnZXQub3duZXJEb2N1bWVudCk7XG4gIHRoaXMuX2NoZWNrRm9ySW50ZXJzZWN0aW9ucygpO1xufTtcblxuXG4vKipcbiAqIFN0b3BzIG9ic2VydmluZyBhIHRhcmdldCBlbGVtZW50IGZvciBpbnRlcnNlY3Rpb24gY2hhbmdlcy5cbiAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0IFRoZSBET00gZWxlbWVudCB0byBvYnNlcnZlLlxuICovXG5JbnRlcnNlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUudW5vYnNlcnZlID0gZnVuY3Rpb24odGFyZ2V0KSB7XG4gIHRoaXMuX29ic2VydmF0aW9uVGFyZ2V0cyA9XG4gICAgICB0aGlzLl9vYnNlcnZhdGlvblRhcmdldHMuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uZWxlbWVudCAhPSB0YXJnZXQ7XG4gICAgICB9KTtcbiAgdGhpcy5fdW5tb25pdG9ySW50ZXJzZWN0aW9ucyh0YXJnZXQub3duZXJEb2N1bWVudCk7XG4gIGlmICh0aGlzLl9vYnNlcnZhdGlvblRhcmdldHMubGVuZ3RoID09IDApIHtcbiAgICB0aGlzLl91bnJlZ2lzdGVySW5zdGFuY2UoKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIFN0b3BzIG9ic2VydmluZyBhbGwgdGFyZ2V0IGVsZW1lbnRzIGZvciBpbnRlcnNlY3Rpb24gY2hhbmdlcy5cbiAqL1xuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fb2JzZXJ2YXRpb25UYXJnZXRzID0gW107XG4gIHRoaXMuX3VubW9uaXRvckFsbEludGVyc2VjdGlvbnMoKTtcbiAgdGhpcy5fdW5yZWdpc3Rlckluc3RhbmNlKCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyBhbnkgcXVldWUgZW50cmllcyB0aGF0IGhhdmUgbm90IHlldCBiZWVuIHJlcG9ydGVkIHRvIHRoZVxuICogY2FsbGJhY2sgYW5kIGNsZWFycyB0aGUgcXVldWUuIFRoaXMgY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGVcbiAqIGNhbGxiYWNrIHRvIG9idGFpbiB0aGUgYWJzb2x1dGUgbW9zdCB1cC10by1kYXRlIGludGVyc2VjdGlvbiBpbmZvcm1hdGlvbi5cbiAqIEByZXR1cm4ge0FycmF5fSBUaGUgY3VycmVudGx5IHF1ZXVlZCBlbnRyaWVzLlxuICovXG5JbnRlcnNlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUudGFrZVJlY29yZHMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlY29yZHMgPSB0aGlzLl9xdWV1ZWRFbnRyaWVzLnNsaWNlKCk7XG4gIHRoaXMuX3F1ZXVlZEVudHJpZXMgPSBbXTtcbiAgcmV0dXJuIHJlY29yZHM7XG59O1xuXG5cbi8qKlxuICogQWNjZXB0cyB0aGUgdGhyZXNob2xkIHZhbHVlIGZyb20gdGhlIHVzZXIgY29uZmlndXJhdGlvbiBvYmplY3QgYW5kXG4gKiByZXR1cm5zIGEgc29ydGVkIGFycmF5IG9mIHVuaXF1ZSB0aHJlc2hvbGQgdmFsdWVzLiBJZiBhIHZhbHVlIGlzIG5vdFxuICogYmV0d2VlbiAwIGFuZCAxIGFuZCBlcnJvciBpcyB0aHJvd24uXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxudW1iZXI9fSBvcHRfdGhyZXNob2xkIEFuIG9wdGlvbmFsIHRocmVzaG9sZCB2YWx1ZSBvclxuICogICAgIGEgbGlzdCBvZiB0aHJlc2hvbGQgdmFsdWVzLCBkZWZhdWx0aW5nIHRvIFswXS5cbiAqIEByZXR1cm4ge0FycmF5fSBBIHNvcnRlZCBsaXN0IG9mIHVuaXF1ZSBhbmQgdmFsaWQgdGhyZXNob2xkIHZhbHVlcy5cbiAqL1xuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLl9pbml0VGhyZXNob2xkcyA9IGZ1bmN0aW9uKG9wdF90aHJlc2hvbGQpIHtcbiAgdmFyIHRocmVzaG9sZCA9IG9wdF90aHJlc2hvbGQgfHwgWzBdO1xuICBpZiAoIUFycmF5LmlzQXJyYXkodGhyZXNob2xkKSkgdGhyZXNob2xkID0gW3RocmVzaG9sZF07XG5cbiAgcmV0dXJuIHRocmVzaG9sZC5zb3J0KCkuZmlsdGVyKGZ1bmN0aW9uKHQsIGksIGEpIHtcbiAgICBpZiAodHlwZW9mIHQgIT0gJ251bWJlcicgfHwgaXNOYU4odCkgfHwgdCA8IDAgfHwgdCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndGhyZXNob2xkIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxIGluY2x1c2l2ZWx5Jyk7XG4gICAgfVxuICAgIHJldHVybiB0ICE9PSBhW2kgLSAxXTtcbiAgfSk7XG59O1xuXG5cbi8qKlxuICogQWNjZXB0cyB0aGUgcm9vdE1hcmdpbiB2YWx1ZSBmcm9tIHRoZSB1c2VyIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gKiBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiB0aGUgZm91ciBtYXJnaW4gdmFsdWVzIGFzIGFuIG9iamVjdCBjb250YWluaW5nXG4gKiB0aGUgdmFsdWUgYW5kIHVuaXQgcHJvcGVydGllcy4gSWYgYW55IG9mIHRoZSB2YWx1ZXMgYXJlIG5vdCBwcm9wZXJseVxuICogZm9ybWF0dGVkIG9yIHVzZSBhIHVuaXQgb3RoZXIgdGhhbiBweCBvciAlLCBhbmQgZXJyb3IgaXMgdGhyb3duLlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0X3Jvb3RNYXJnaW4gQW4gb3B0aW9uYWwgcm9vdE1hcmdpbiB2YWx1ZSxcbiAqICAgICBkZWZhdWx0aW5nIHRvICcwcHgnLlxuICogQHJldHVybiB7QXJyYXk8T2JqZWN0Pn0gQW4gYXJyYXkgb2YgbWFyZ2luIG9iamVjdHMgd2l0aCB0aGUga2V5c1xuICogICAgIHZhbHVlIGFuZCB1bml0LlxuICovXG5JbnRlcnNlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUuX3BhcnNlUm9vdE1hcmdpbiA9IGZ1bmN0aW9uKG9wdF9yb290TWFyZ2luKSB7XG4gIHZhciBtYXJnaW5TdHJpbmcgPSBvcHRfcm9vdE1hcmdpbiB8fCAnMHB4JztcbiAgdmFyIG1hcmdpbnMgPSBtYXJnaW5TdHJpbmcuc3BsaXQoL1xccysvKS5tYXAoZnVuY3Rpb24obWFyZ2luKSB7XG4gICAgdmFyIHBhcnRzID0gL14oLT9cXGQqXFwuP1xcZCspKHB4fCUpJC8uZXhlYyhtYXJnaW4pO1xuICAgIGlmICghcGFydHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncm9vdE1hcmdpbiBtdXN0IGJlIHNwZWNpZmllZCBpbiBwaXhlbHMgb3IgcGVyY2VudCcpO1xuICAgIH1cbiAgICByZXR1cm4ge3ZhbHVlOiBwYXJzZUZsb2F0KHBhcnRzWzFdKSwgdW5pdDogcGFydHNbMl19O1xuICB9KTtcblxuICAvLyBIYW5kbGVzIHNob3J0aGFuZC5cbiAgbWFyZ2luc1sxXSA9IG1hcmdpbnNbMV0gfHwgbWFyZ2luc1swXTtcbiAgbWFyZ2luc1syXSA9IG1hcmdpbnNbMl0gfHwgbWFyZ2luc1swXTtcbiAgbWFyZ2luc1szXSA9IG1hcmdpbnNbM10gfHwgbWFyZ2luc1sxXTtcblxuICByZXR1cm4gbWFyZ2lucztcbn07XG5cblxuLyoqXG4gKiBTdGFydHMgcG9sbGluZyBmb3IgaW50ZXJzZWN0aW9uIGNoYW5nZXMgaWYgdGhlIHBvbGxpbmcgaXMgbm90IGFscmVhZHlcbiAqIGhhcHBlbmluZywgYW5kIGlmIHRoZSBwYWdlJ3MgdmlzaWJpbGl0eSBzdGF0ZSBpcyB2aXNpYmxlLlxuICogQHBhcmFtIHshRG9jdW1lbnR9IGRvY1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLl9tb25pdG9ySW50ZXJzZWN0aW9ucyA9IGZ1bmN0aW9uKGRvYykge1xuICB2YXIgd2luID0gZG9jLmRlZmF1bHRWaWV3O1xuICBpZiAoIXdpbikge1xuICAgIC8vIEFscmVhZHkgZGVzdHJveWVkLlxuICAgIHJldHVybjtcbiAgfVxuICBpZiAodGhpcy5fbW9uaXRvcmluZ0RvY3VtZW50cy5pbmRleE9mKGRvYykgIT0gLTEpIHtcbiAgICAvLyBBbHJlYWR5IG1vbml0b3JpbmcuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gUHJpdmF0ZSBzdGF0ZSBmb3IgbW9uaXRvcmluZy5cbiAgdmFyIGNhbGxiYWNrID0gdGhpcy5fY2hlY2tGb3JJbnRlcnNlY3Rpb25zO1xuICB2YXIgbW9uaXRvcmluZ0ludGVydmFsID0gbnVsbDtcbiAgdmFyIGRvbU9ic2VydmVyID0gbnVsbDtcblxuICAvLyBJZiBhIHBvbGwgaW50ZXJ2YWwgaXMgc2V0LCB1c2UgcG9sbGluZyBpbnN0ZWFkIG9mIGxpc3RlbmluZyB0b1xuICAvLyByZXNpemUgYW5kIHNjcm9sbCBldmVudHMgb3IgRE9NIG11dGF0aW9ucy5cbiAgaWYgKHRoaXMuUE9MTF9JTlRFUlZBTCkge1xuICAgIG1vbml0b3JpbmdJbnRlcnZhbCA9IHdpbi5zZXRJbnRlcnZhbChjYWxsYmFjaywgdGhpcy5QT0xMX0lOVEVSVkFMKTtcbiAgfSBlbHNlIHtcbiAgICBhZGRFdmVudCh3aW4sICdyZXNpemUnLCBjYWxsYmFjaywgdHJ1ZSk7XG4gICAgYWRkRXZlbnQoZG9jLCAnc2Nyb2xsJywgY2FsbGJhY2ssIHRydWUpO1xuICAgIGlmICh0aGlzLlVTRV9NVVRBVElPTl9PQlNFUlZFUiAmJiAnTXV0YXRpb25PYnNlcnZlcicgaW4gd2luKSB7XG4gICAgICBkb21PYnNlcnZlciA9IG5ldyB3aW4uTXV0YXRpb25PYnNlcnZlcihjYWxsYmFjayk7XG4gICAgICBkb21PYnNlcnZlci5vYnNlcnZlKGRvYywge1xuICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXG4gICAgICAgIHN1YnRyZWU6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRoaXMuX21vbml0b3JpbmdEb2N1bWVudHMucHVzaChkb2MpO1xuICB0aGlzLl9tb25pdG9yaW5nVW5zdWJzY3JpYmVzLnB1c2goZnVuY3Rpb24oKSB7XG4gICAgLy8gR2V0IHRoZSB3aW5kb3cgb2JqZWN0IGFnYWluLiBXaGVuIGEgZnJpZW5kbHkgaWZyYW1lIGlzIGRlc3Ryb3llZCwgaXRcbiAgICAvLyB3aWxsIGJlIG51bGwuXG4gICAgdmFyIHdpbiA9IGRvYy5kZWZhdWx0VmlldztcblxuICAgIGlmICh3aW4pIHtcbiAgICAgIGlmIChtb25pdG9yaW5nSW50ZXJ2YWwpIHtcbiAgICAgICAgd2luLmNsZWFySW50ZXJ2YWwobW9uaXRvcmluZ0ludGVydmFsKTtcbiAgICAgIH1cbiAgICAgIHJlbW92ZUV2ZW50KHdpbiwgJ3Jlc2l6ZScsIGNhbGxiYWNrLCB0cnVlKTtcbiAgICB9XG5cbiAgICByZW1vdmVFdmVudChkb2MsICdzY3JvbGwnLCBjYWxsYmFjaywgdHJ1ZSk7XG4gICAgaWYgKGRvbU9ic2VydmVyKSB7XG4gICAgICBkb21PYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBBbHNvIG1vbml0b3IgdGhlIHBhcmVudC5cbiAgdmFyIHJvb3REb2MgPVxuICAgICh0aGlzLnJvb3QgJiYgKHRoaXMucm9vdC5vd25lckRvY3VtZW50IHx8IHRoaXMucm9vdCkpIHx8IGRvY3VtZW50O1xuICBpZiAoZG9jICE9IHJvb3REb2MpIHtcbiAgICB2YXIgZnJhbWUgPSBnZXRGcmFtZUVsZW1lbnQoZG9jKTtcbiAgICBpZiAoZnJhbWUpIHtcbiAgICAgIHRoaXMuX21vbml0b3JJbnRlcnNlY3Rpb25zKGZyYW1lLm93bmVyRG9jdW1lbnQpO1xuICAgIH1cbiAgfVxufTtcblxuXG4vKipcbiAqIFN0b3BzIHBvbGxpbmcgZm9yIGludGVyc2VjdGlvbiBjaGFuZ2VzLlxuICogQHBhcmFtIHshRG9jdW1lbnR9IGRvY1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLl91bm1vbml0b3JJbnRlcnNlY3Rpb25zID0gZnVuY3Rpb24oZG9jKSB7XG4gIHZhciBpbmRleCA9IHRoaXMuX21vbml0b3JpbmdEb2N1bWVudHMuaW5kZXhPZihkb2MpO1xuICBpZiAoaW5kZXggPT0gLTEpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcm9vdERvYyA9XG4gICAgKHRoaXMucm9vdCAmJiAodGhpcy5yb290Lm93bmVyRG9jdW1lbnQgfHwgdGhpcy5yb290KSkgfHwgZG9jdW1lbnQ7XG5cbiAgLy8gQ2hlY2sgaWYgYW55IGRlcGVuZGVudCB0YXJnZXRzIGFyZSBzdGlsbCByZW1haW5pbmcuXG4gIHZhciBoYXNEZXBlbmRlbnRUYXJnZXRzID1cbiAgICAgIHRoaXMuX29ic2VydmF0aW9uVGFyZ2V0cy5zb21lKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgdmFyIGl0ZW1Eb2MgPSBpdGVtLmVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgICAgICAgLy8gVGFyZ2V0IGlzIGluIHRoaXMgY29udGV4dC5cbiAgICAgICAgaWYgKGl0ZW1Eb2MgPT0gZG9jKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGFyZ2V0IGlzIG5lc3RlZCBpbiB0aGlzIGNvbnRleHQuXG4gICAgICAgIHdoaWxlIChpdGVtRG9jICYmIGl0ZW1Eb2MgIT0gcm9vdERvYykge1xuICAgICAgICAgIHZhciBmcmFtZSA9IGdldEZyYW1lRWxlbWVudChpdGVtRG9jKTtcbiAgICAgICAgICBpdGVtRG9jID0gZnJhbWUgJiYgZnJhbWUub3duZXJEb2N1bWVudDtcbiAgICAgICAgICBpZiAoaXRlbURvYyA9PSBkb2MpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgaWYgKGhhc0RlcGVuZGVudFRhcmdldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBVbnN1YnNjcmliZS5cbiAgdmFyIHVuc3Vic2NyaWJlID0gdGhpcy5fbW9uaXRvcmluZ1Vuc3Vic2NyaWJlc1tpbmRleF07XG4gIHRoaXMuX21vbml0b3JpbmdEb2N1bWVudHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgdGhpcy5fbW9uaXRvcmluZ1Vuc3Vic2NyaWJlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICB1bnN1YnNjcmliZSgpO1xuXG4gIC8vIEFsc28gdW5tb25pdG9yIHRoZSBwYXJlbnQuXG4gIGlmIChkb2MgIT0gcm9vdERvYykge1xuICAgIHZhciBmcmFtZSA9IGdldEZyYW1lRWxlbWVudChkb2MpO1xuICAgIGlmIChmcmFtZSkge1xuICAgICAgdGhpcy5fdW5tb25pdG9ySW50ZXJzZWN0aW9ucyhmcmFtZS5vd25lckRvY3VtZW50KTtcbiAgICB9XG4gIH1cbn07XG5cblxuLyoqXG4gKiBTdG9wcyBwb2xsaW5nIGZvciBpbnRlcnNlY3Rpb24gY2hhbmdlcy5cbiAqIEBwYXJhbSB7IURvY3VtZW50fSBkb2NcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5fdW5tb25pdG9yQWxsSW50ZXJzZWN0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgdW5zdWJzY3JpYmVzID0gdGhpcy5fbW9uaXRvcmluZ1Vuc3Vic2NyaWJlcy5zbGljZSgwKTtcbiAgdGhpcy5fbW9uaXRvcmluZ0RvY3VtZW50cy5sZW5ndGggPSAwO1xuICB0aGlzLl9tb25pdG9yaW5nVW5zdWJzY3JpYmVzLmxlbmd0aCA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdW5zdWJzY3JpYmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdW5zdWJzY3JpYmVzW2ldKCk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBTY2FucyBlYWNoIG9ic2VydmF0aW9uIHRhcmdldCBmb3IgaW50ZXJzZWN0aW9uIGNoYW5nZXMgYW5kIGFkZHMgdGhlbVxuICogdG8gdGhlIGludGVybmFsIGVudHJpZXMgcXVldWUuIElmIG5ldyBlbnRyaWVzIGFyZSBmb3VuZCwgaXRcbiAqIHNjaGVkdWxlcyB0aGUgY2FsbGJhY2sgdG8gYmUgaW52b2tlZC5cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5fY2hlY2tGb3JJbnRlcnNlY3Rpb25zID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5yb290ICYmIGNyb3NzT3JpZ2luVXBkYXRlciAmJiAhY3Jvc3NPcmlnaW5SZWN0KSB7XG4gICAgLy8gQ3Jvc3Mgb3JpZ2luIG1vbml0b3JpbmcsIGJ1dCBubyBpbml0aWFsIGRhdGEgYXZhaWxhYmxlIHlldC5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcm9vdElzSW5Eb20gPSB0aGlzLl9yb290SXNJbkRvbSgpO1xuICB2YXIgcm9vdFJlY3QgPSByb290SXNJbkRvbSA/IHRoaXMuX2dldFJvb3RSZWN0KCkgOiBnZXRFbXB0eVJlY3QoKTtcblxuICB0aGlzLl9vYnNlcnZhdGlvblRhcmdldHMuZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7XG4gICAgdmFyIHRhcmdldCA9IGl0ZW0uZWxlbWVudDtcbiAgICB2YXIgdGFyZ2V0UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdCh0YXJnZXQpO1xuICAgIHZhciByb290Q29udGFpbnNUYXJnZXQgPSB0aGlzLl9yb290Q29udGFpbnNUYXJnZXQodGFyZ2V0KTtcbiAgICB2YXIgb2xkRW50cnkgPSBpdGVtLmVudHJ5O1xuICAgIHZhciBpbnRlcnNlY3Rpb25SZWN0ID0gcm9vdElzSW5Eb20gJiYgcm9vdENvbnRhaW5zVGFyZ2V0ICYmXG4gICAgICAgIHRoaXMuX2NvbXB1dGVUYXJnZXRBbmRSb290SW50ZXJzZWN0aW9uKHRhcmdldCwgdGFyZ2V0UmVjdCwgcm9vdFJlY3QpO1xuXG4gICAgdmFyIHJvb3RCb3VuZHMgPSBudWxsO1xuICAgIGlmICghdGhpcy5fcm9vdENvbnRhaW5zVGFyZ2V0KHRhcmdldCkpIHtcbiAgICAgIHJvb3RCb3VuZHMgPSBnZXRFbXB0eVJlY3QoKTtcbiAgICB9IGVsc2UgaWYgKCFjcm9zc09yaWdpblVwZGF0ZXIgfHwgdGhpcy5yb290KSB7XG4gICAgICByb290Qm91bmRzID0gcm9vdFJlY3Q7XG4gICAgfVxuXG4gICAgdmFyIG5ld0VudHJ5ID0gaXRlbS5lbnRyeSA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5KHtcbiAgICAgIHRpbWU6IG5vdygpLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICBib3VuZGluZ0NsaWVudFJlY3Q6IHRhcmdldFJlY3QsXG4gICAgICByb290Qm91bmRzOiByb290Qm91bmRzLFxuICAgICAgaW50ZXJzZWN0aW9uUmVjdDogaW50ZXJzZWN0aW9uUmVjdFxuICAgIH0pO1xuXG4gICAgaWYgKCFvbGRFbnRyeSkge1xuICAgICAgdGhpcy5fcXVldWVkRW50cmllcy5wdXNoKG5ld0VudHJ5KTtcbiAgICB9IGVsc2UgaWYgKHJvb3RJc0luRG9tICYmIHJvb3RDb250YWluc1RhcmdldCkge1xuICAgICAgLy8gSWYgdGhlIG5ldyBlbnRyeSBpbnRlcnNlY3Rpb24gcmF0aW8gaGFzIGNyb3NzZWQgYW55IG9mIHRoZVxuICAgICAgLy8gdGhyZXNob2xkcywgYWRkIGEgbmV3IGVudHJ5LlxuICAgICAgaWYgKHRoaXMuX2hhc0Nyb3NzZWRUaHJlc2hvbGQob2xkRW50cnksIG5ld0VudHJ5KSkge1xuICAgICAgICB0aGlzLl9xdWV1ZWRFbnRyaWVzLnB1c2gobmV3RW50cnkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiB0aGUgcm9vdCBpcyBub3QgaW4gdGhlIERPTSBvciB0YXJnZXQgaXMgbm90IGNvbnRhaW5lZCB3aXRoaW5cbiAgICAgIC8vIHJvb3QgYnV0IHRoZSBwcmV2aW91cyBlbnRyeSBmb3IgdGhpcyB0YXJnZXQgaGFkIGFuIGludGVyc2VjdGlvbixcbiAgICAgIC8vIGFkZCBhIG5ldyByZWNvcmQgaW5kaWNhdGluZyByZW1vdmFsLlxuICAgICAgaWYgKG9sZEVudHJ5ICYmIG9sZEVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7XG4gICAgICAgIHRoaXMuX3F1ZXVlZEVudHJpZXMucHVzaChuZXdFbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB0aGlzKTtcblxuICBpZiAodGhpcy5fcXVldWVkRW50cmllcy5sZW5ndGgpIHtcbiAgICB0aGlzLl9jYWxsYmFjayh0aGlzLnRha2VSZWNvcmRzKCksIHRoaXMpO1xuICB9XG59O1xuXG5cbi8qKlxuICogQWNjZXB0cyBhIHRhcmdldCBhbmQgcm9vdCByZWN0IGNvbXB1dGVzIHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGVuXG4gKiBmb2xsb3dpbmcgdGhlIGFsZ29yaXRobSBpbiB0aGUgc3BlYy5cbiAqIFRPRE8ocGhpbGlwd2FsdG9uKTogYXQgdGhpcyB0aW1lIGNsaXAtcGF0aCBpcyBub3QgY29uc2lkZXJlZC5cbiAqIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9JbnRlcnNlY3Rpb25PYnNlcnZlci8jY2FsY3VsYXRlLWludGVyc2VjdGlvbi1yZWN0LWFsZ29cbiAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0IFRoZSB0YXJnZXQgRE9NIGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRSZWN0IFRoZSBib3VuZGluZyByZWN0IG9mIHRoZSB0YXJnZXQuXG4gKiBAcGFyYW0ge09iamVjdH0gcm9vdFJlY3QgVGhlIGJvdW5kaW5nIHJlY3Qgb2YgdGhlIHJvb3QgYWZ0ZXIgYmVpbmdcbiAqICAgICBleHBhbmRlZCBieSB0aGUgcm9vdE1hcmdpbiB2YWx1ZS5cbiAqIEByZXR1cm4gez9PYmplY3R9IFRoZSBmaW5hbCBpbnRlcnNlY3Rpb24gcmVjdCBvYmplY3Qgb3IgdW5kZWZpbmVkIGlmIG5vXG4gKiAgICAgaW50ZXJzZWN0aW9uIGlzIGZvdW5kLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLl9jb21wdXRlVGFyZ2V0QW5kUm9vdEludGVyc2VjdGlvbiA9XG4gICAgZnVuY3Rpb24odGFyZ2V0LCB0YXJnZXRSZWN0LCByb290UmVjdCkge1xuICAvLyBJZiB0aGUgZWxlbWVudCBpc24ndCBkaXNwbGF5ZWQsIGFuIGludGVyc2VjdGlvbiBjYW4ndCBoYXBwZW4uXG4gIGlmICh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLmRpc3BsYXkgPT0gJ25vbmUnKSByZXR1cm47XG5cbiAgdmFyIGludGVyc2VjdGlvblJlY3QgPSB0YXJnZXRSZWN0O1xuICB2YXIgcGFyZW50ID0gZ2V0UGFyZW50Tm9kZSh0YXJnZXQpO1xuICB2YXIgYXRSb290ID0gZmFsc2U7XG5cbiAgd2hpbGUgKCFhdFJvb3QgJiYgcGFyZW50KSB7XG4gICAgdmFyIHBhcmVudFJlY3QgPSBudWxsO1xuICAgIHZhciBwYXJlbnRDb21wdXRlZFN0eWxlID0gcGFyZW50Lm5vZGVUeXBlID09IDEgP1xuICAgICAgICB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnQpIDoge307XG5cbiAgICAvLyBJZiB0aGUgcGFyZW50IGlzbid0IGRpc3BsYXllZCwgYW4gaW50ZXJzZWN0aW9uIGNhbid0IGhhcHBlbi5cbiAgICBpZiAocGFyZW50Q29tcHV0ZWRTdHlsZS5kaXNwbGF5ID09ICdub25lJykgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAocGFyZW50ID09IHRoaXMucm9vdCB8fCBwYXJlbnQubm9kZVR5cGUgPT0gLyogRE9DVU1FTlQgKi8gOSkge1xuICAgICAgYXRSb290ID0gdHJ1ZTtcbiAgICAgIGlmIChwYXJlbnQgPT0gdGhpcy5yb290IHx8IHBhcmVudCA9PSBkb2N1bWVudCkge1xuICAgICAgICBpZiAoY3Jvc3NPcmlnaW5VcGRhdGVyICYmICF0aGlzLnJvb3QpIHtcbiAgICAgICAgICBpZiAoIWNyb3NzT3JpZ2luUmVjdCB8fFxuICAgICAgICAgICAgICBjcm9zc09yaWdpblJlY3Qud2lkdGggPT0gMCAmJiBjcm9zc09yaWdpblJlY3QuaGVpZ2h0ID09IDApIHtcbiAgICAgICAgICAgIC8vIEEgMC1zaXplIGNyb3NzLW9yaWdpbiBpbnRlcnNlY3Rpb24gbWVhbnMgbm8taW50ZXJzZWN0aW9uLlxuICAgICAgICAgICAgcGFyZW50ID0gbnVsbDtcbiAgICAgICAgICAgIHBhcmVudFJlY3QgPSBudWxsO1xuICAgICAgICAgICAgaW50ZXJzZWN0aW9uUmVjdCA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcmVudFJlY3QgPSBjcm9zc09yaWdpblJlY3Q7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcmVudFJlY3QgPSByb290UmVjdDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUncyBhIGZyYW1lIHRoYXQgY2FuIGJlIG5hdmlnYXRlZCB0by5cbiAgICAgICAgdmFyIGZyYW1lID0gZ2V0UGFyZW50Tm9kZShwYXJlbnQpO1xuICAgICAgICB2YXIgZnJhbWVSZWN0ID0gZnJhbWUgJiYgZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGZyYW1lKTtcbiAgICAgICAgdmFyIGZyYW1lSW50ZXJzZWN0ID1cbiAgICAgICAgICAgIGZyYW1lICYmXG4gICAgICAgICAgICB0aGlzLl9jb21wdXRlVGFyZ2V0QW5kUm9vdEludGVyc2VjdGlvbihmcmFtZSwgZnJhbWVSZWN0LCByb290UmVjdCk7XG4gICAgICAgIGlmIChmcmFtZVJlY3QgJiYgZnJhbWVJbnRlcnNlY3QpIHtcbiAgICAgICAgICBwYXJlbnQgPSBmcmFtZTtcbiAgICAgICAgICBwYXJlbnRSZWN0ID0gY29udmVydEZyb21QYXJlbnRSZWN0KGZyYW1lUmVjdCwgZnJhbWVJbnRlcnNlY3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcmVudCA9IG51bGw7XG4gICAgICAgICAgaW50ZXJzZWN0aW9uUmVjdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaGFzIGEgbm9uLXZpc2libGUgb3ZlcmZsb3csIGFuZCBpdCdzIG5vdCB0aGUgPGJvZHk+XG4gICAgICAvLyBvciA8aHRtbD4gZWxlbWVudCwgdXBkYXRlIHRoZSBpbnRlcnNlY3Rpb24gcmVjdC5cbiAgICAgIC8vIE5vdGU6IDxib2R5PiBhbmQgPGh0bWw+IGNhbm5vdCBiZSBjbGlwcGVkIHRvIGEgcmVjdCB0aGF0J3Mgbm90IGFsc29cbiAgICAgIC8vIHRoZSBkb2N1bWVudCByZWN0LCBzbyBubyBuZWVkIHRvIGNvbXB1dGUgYSBuZXcgaW50ZXJzZWN0aW9uLlxuICAgICAgdmFyIGRvYyA9IHBhcmVudC5vd25lckRvY3VtZW50O1xuICAgICAgaWYgKHBhcmVudCAhPSBkb2MuYm9keSAmJlxuICAgICAgICAgIHBhcmVudCAhPSBkb2MuZG9jdW1lbnRFbGVtZW50ICYmXG4gICAgICAgICAgcGFyZW50Q29tcHV0ZWRTdHlsZS5vdmVyZmxvdyAhPSAndmlzaWJsZScpIHtcbiAgICAgICAgcGFyZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChwYXJlbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIGVpdGhlciBvZiB0aGUgYWJvdmUgY29uZGl0aW9uYWxzIHNldCBhIG5ldyBwYXJlbnRSZWN0LFxuICAgIC8vIGNhbGN1bGF0ZSBuZXcgaW50ZXJzZWN0aW9uIGRhdGEuXG4gICAgaWYgKHBhcmVudFJlY3QpIHtcbiAgICAgIGludGVyc2VjdGlvblJlY3QgPSBjb21wdXRlUmVjdEludGVyc2VjdGlvbihwYXJlbnRSZWN0LCBpbnRlcnNlY3Rpb25SZWN0KTtcbiAgICB9XG4gICAgaWYgKCFpbnRlcnNlY3Rpb25SZWN0KSBicmVhaztcbiAgICBwYXJlbnQgPSBwYXJlbnQgJiYgZ2V0UGFyZW50Tm9kZShwYXJlbnQpO1xuICB9XG4gIHJldHVybiBpbnRlcnNlY3Rpb25SZWN0O1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIHJvb3QgcmVjdCBhZnRlciBiZWluZyBleHBhbmRlZCBieSB0aGUgcm9vdE1hcmdpbiB2YWx1ZS5cbiAqIEByZXR1cm4ge0NsaWVudFJlY3R9IFRoZSBleHBhbmRlZCByb290IHJlY3QuXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcnNlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUuX2dldFJvb3RSZWN0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciByb290UmVjdDtcbiAgaWYgKHRoaXMucm9vdCAmJiAhaXNEb2ModGhpcy5yb290KSkge1xuICAgIHJvb3RSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHRoaXMucm9vdCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gVXNlIDxodG1sPi88Ym9keT4gaW5zdGVhZCBvZiB3aW5kb3cgc2luY2Ugc2Nyb2xsIGJhcnMgYWZmZWN0IHNpemUuXG4gICAgdmFyIGRvYyA9IGlzRG9jKHRoaXMucm9vdCkgPyB0aGlzLnJvb3QgOiBkb2N1bWVudDtcbiAgICB2YXIgaHRtbCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgdmFyIGJvZHkgPSBkb2MuYm9keTtcbiAgICByb290UmVjdCA9IHtcbiAgICAgIHRvcDogMCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICByaWdodDogaHRtbC5jbGllbnRXaWR0aCB8fCBib2R5LmNsaWVudFdpZHRoLFxuICAgICAgd2lkdGg6IGh0bWwuY2xpZW50V2lkdGggfHwgYm9keS5jbGllbnRXaWR0aCxcbiAgICAgIGJvdHRvbTogaHRtbC5jbGllbnRIZWlnaHQgfHwgYm9keS5jbGllbnRIZWlnaHQsXG4gICAgICBoZWlnaHQ6IGh0bWwuY2xpZW50SGVpZ2h0IHx8IGJvZHkuY2xpZW50SGVpZ2h0XG4gICAgfTtcbiAgfVxuICByZXR1cm4gdGhpcy5fZXhwYW5kUmVjdEJ5Um9vdE1hcmdpbihyb290UmVjdCk7XG59O1xuXG5cbi8qKlxuICogQWNjZXB0cyBhIHJlY3QgYW5kIGV4cGFuZHMgaXQgYnkgdGhlIHJvb3RNYXJnaW4gdmFsdWUuXG4gKiBAcGFyYW0ge0RPTVJlY3R8Q2xpZW50UmVjdH0gcmVjdCBUaGUgcmVjdCBvYmplY3QgdG8gZXhwYW5kLlxuICogQHJldHVybiB7Q2xpZW50UmVjdH0gVGhlIGV4cGFuZGVkIHJlY3QuXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcnNlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUuX2V4cGFuZFJlY3RCeVJvb3RNYXJnaW4gPSBmdW5jdGlvbihyZWN0KSB7XG4gIHZhciBtYXJnaW5zID0gdGhpcy5fcm9vdE1hcmdpblZhbHVlcy5tYXAoZnVuY3Rpb24obWFyZ2luLCBpKSB7XG4gICAgcmV0dXJuIG1hcmdpbi51bml0ID09ICdweCcgPyBtYXJnaW4udmFsdWUgOlxuICAgICAgICBtYXJnaW4udmFsdWUgKiAoaSAlIDIgPyByZWN0LndpZHRoIDogcmVjdC5oZWlnaHQpIC8gMTAwO1xuICB9KTtcbiAgdmFyIG5ld1JlY3QgPSB7XG4gICAgdG9wOiByZWN0LnRvcCAtIG1hcmdpbnNbMF0sXG4gICAgcmlnaHQ6IHJlY3QucmlnaHQgKyBtYXJnaW5zWzFdLFxuICAgIGJvdHRvbTogcmVjdC5ib3R0b20gKyBtYXJnaW5zWzJdLFxuICAgIGxlZnQ6IHJlY3QubGVmdCAtIG1hcmdpbnNbM11cbiAgfTtcbiAgbmV3UmVjdC53aWR0aCA9IG5ld1JlY3QucmlnaHQgLSBuZXdSZWN0LmxlZnQ7XG4gIG5ld1JlY3QuaGVpZ2h0ID0gbmV3UmVjdC5ib3R0b20gLSBuZXdSZWN0LnRvcDtcblxuICByZXR1cm4gbmV3UmVjdDtcbn07XG5cblxuLyoqXG4gKiBBY2NlcHRzIGFuIG9sZCBhbmQgbmV3IGVudHJ5IGFuZCByZXR1cm5zIHRydWUgaWYgYXQgbGVhc3Qgb25lIG9mIHRoZVxuICogdGhyZXNob2xkIHZhbHVlcyBoYXMgYmVlbiBjcm9zc2VkLlxuICogQHBhcmFtIHs/SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeX0gb2xkRW50cnkgVGhlIHByZXZpb3VzIGVudHJ5IGZvciBhXG4gKiAgICBwYXJ0aWN1bGFyIHRhcmdldCBlbGVtZW50IG9yIG51bGwgaWYgbm8gcHJldmlvdXMgZW50cnkgZXhpc3RzLlxuICogQHBhcmFtIHtJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5fSBuZXdFbnRyeSBUaGUgY3VycmVudCBlbnRyeSBmb3IgYVxuICogICAgcGFydGljdWxhciB0YXJnZXQgZWxlbWVudC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiBhIGFueSB0aHJlc2hvbGQgaGFzIGJlZW4gY3Jvc3NlZC5cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5faGFzQ3Jvc3NlZFRocmVzaG9sZCA9XG4gICAgZnVuY3Rpb24ob2xkRW50cnksIG5ld0VudHJ5KSB7XG5cbiAgLy8gVG8gbWFrZSBjb21wYXJpbmcgZWFzaWVyLCBhbiBlbnRyeSB0aGF0IGhhcyBhIHJhdGlvIG9mIDBcbiAgLy8gYnV0IGRvZXMgbm90IGFjdHVhbGx5IGludGVyc2VjdCBpcyBnaXZlbiBhIHZhbHVlIG9mIC0xXG4gIHZhciBvbGRSYXRpbyA9IG9sZEVudHJ5ICYmIG9sZEVudHJ5LmlzSW50ZXJzZWN0aW5nID9cbiAgICAgIG9sZEVudHJ5LmludGVyc2VjdGlvblJhdGlvIHx8IDAgOiAtMTtcbiAgdmFyIG5ld1JhdGlvID0gbmV3RW50cnkuaXNJbnRlcnNlY3RpbmcgP1xuICAgICAgbmV3RW50cnkuaW50ZXJzZWN0aW9uUmF0aW8gfHwgMCA6IC0xO1xuXG4gIC8vIElnbm9yZSB1bmNoYW5nZWQgcmF0aW9zXG4gIGlmIChvbGRSYXRpbyA9PT0gbmV3UmF0aW8pIHJldHVybjtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGhyZXNob2xkcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB0aHJlc2hvbGQgPSB0aGlzLnRocmVzaG9sZHNbaV07XG5cbiAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBhbiBlbnRyeSBtYXRjaGVzIGEgdGhyZXNob2xkIG9yIGlmIHRoZSBuZXcgcmF0aW9cbiAgICAvLyBhbmQgdGhlIG9sZCByYXRpbyBhcmUgb24gdGhlIG9wcG9zaXRlIHNpZGVzIG9mIGEgdGhyZXNob2xkLlxuICAgIGlmICh0aHJlc2hvbGQgPT0gb2xkUmF0aW8gfHwgdGhyZXNob2xkID09IG5ld1JhdGlvIHx8XG4gICAgICAgIHRocmVzaG9sZCA8IG9sZFJhdGlvICE9PSB0aHJlc2hvbGQgPCBuZXdSYXRpbykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgcm9vdCBlbGVtZW50IGlzIGFuIGVsZW1lbnQgYW5kIGlzIGluIHRoZSBET00uXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSByb290IGVsZW1lbnQgaXMgYW4gZWxlbWVudCBhbmQgaXMgaW4gdGhlIERPTS5cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5fcm9vdElzSW5Eb20gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICF0aGlzLnJvb3QgfHwgY29udGFpbnNEZWVwKGRvY3VtZW50LCB0aGlzLnJvb3QpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHRhcmdldCBlbGVtZW50IGlzIGEgY2hpbGQgb2Ygcm9vdC5cbiAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0IFRoZSB0YXJnZXQgZWxlbWVudCB0byBjaGVjay5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHRhcmdldCBlbGVtZW50IGlzIGEgY2hpbGQgb2Ygcm9vdC5cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5fcm9vdENvbnRhaW5zVGFyZ2V0ID0gZnVuY3Rpb24odGFyZ2V0KSB7XG4gIHZhciByb290RG9jID1cbiAgICAodGhpcy5yb290ICYmICh0aGlzLnJvb3Qub3duZXJEb2N1bWVudCB8fCB0aGlzLnJvb3QpKSB8fCBkb2N1bWVudDtcbiAgcmV0dXJuIChcbiAgICBjb250YWluc0RlZXAocm9vdERvYywgdGFyZ2V0KSAmJlxuICAgICghdGhpcy5yb290IHx8IHJvb3REb2MgPT0gdGFyZ2V0Lm93bmVyRG9jdW1lbnQpXG4gICk7XG59O1xuXG5cbi8qKlxuICogQWRkcyB0aGUgaW5zdGFuY2UgdG8gdGhlIGdsb2JhbCBJbnRlcnNlY3Rpb25PYnNlcnZlciByZWdpc3RyeSBpZiBpdCBpc24ndFxuICogYWxyZWFkeSBwcmVzZW50LlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLl9yZWdpc3Rlckluc3RhbmNlID0gZnVuY3Rpb24oKSB7XG4gIGlmIChyZWdpc3RyeS5pbmRleE9mKHRoaXMpIDwgMCkge1xuICAgIHJlZ2lzdHJ5LnB1c2godGhpcyk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBpbnN0YW5jZSBmcm9tIHRoZSBnbG9iYWwgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgcmVnaXN0cnkuXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcnNlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUuX3VucmVnaXN0ZXJJbnN0YW5jZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaW5kZXggPSByZWdpc3RyeS5pbmRleE9mKHRoaXMpO1xuICBpZiAoaW5kZXggIT0gLTEpIHJlZ2lzdHJ5LnNwbGljZShpbmRleCwgMSk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBwZXJmb3JtYW5jZS5ub3coKSBtZXRob2Qgb3IgbnVsbCBpbiBicm93c2Vyc1xuICogdGhhdCBkb24ndCBzdXBwb3J0IHRoZSBBUEkuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBlbGFwc2VkIHRpbWUgc2luY2UgdGhlIHBhZ2Ugd2FzIHJlcXVlc3RlZC5cbiAqL1xuZnVuY3Rpb24gbm93KCkge1xuICByZXR1cm4gd2luZG93LnBlcmZvcm1hbmNlICYmIHBlcmZvcm1hbmNlLm5vdyAmJiBwZXJmb3JtYW5jZS5ub3coKTtcbn1cblxuXG4vKipcbiAqIFRocm90dGxlcyBhIGZ1bmN0aW9uIGFuZCBkZWxheXMgaXRzIGV4ZWN1dGlvbiwgc28gaXQncyBvbmx5IGNhbGxlZCBhdCBtb3N0XG4gKiBvbmNlIHdpdGhpbiBhIGdpdmVuIHRpbWUgcGVyaW9kLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIHRocm90dGxlLlxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXQgVGhlIGFtb3VudCBvZiB0aW1lIHRoYXQgbXVzdCBwYXNzIGJlZm9yZSB0aGVcbiAqICAgICBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGFnYWluLlxuICogQHJldHVybiB7RnVuY3Rpb259IFRoZSB0aHJvdHRsZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHRocm90dGxlKGZuLCB0aW1lb3V0KSB7XG4gIHZhciB0aW1lciA9IG51bGw7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aW1lcikge1xuICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICBmbigpO1xuICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICB9LCB0aW1lb3V0KTtcbiAgICB9XG4gIH07XG59XG5cblxuLyoqXG4gKiBBZGRzIGFuIGV2ZW50IGhhbmRsZXIgdG8gYSBET00gbm9kZSBlbnN1cmluZyBjcm9zcy1icm93c2VyIGNvbXBhdGliaWxpdHkuXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgVGhlIERPTSBub2RlIHRvIGFkZCB0aGUgZXZlbnQgaGFuZGxlciB0by5cbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBldmVudCBoYW5kbGVyIHRvIGFkZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0X3VzZUNhcHR1cmUgT3B0aW9uYWxseSBhZGRzIHRoZSBldmVuIHRvIHRoZSBjYXB0dXJlXG4gKiAgICAgcGhhc2UuIE5vdGU6IHRoaXMgb25seSB3b3JrcyBpbiBtb2Rlcm4gYnJvd3NlcnMuXG4gKi9cbmZ1bmN0aW9uIGFkZEV2ZW50KG5vZGUsIGV2ZW50LCBmbiwgb3B0X3VzZUNhcHR1cmUpIHtcbiAgaWYgKHR5cGVvZiBub2RlLmFkZEV2ZW50TGlzdGVuZXIgPT0gJ2Z1bmN0aW9uJykge1xuICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgZm4sIG9wdF91c2VDYXB0dXJlIHx8IGZhbHNlKTtcbiAgfVxuICBlbHNlIGlmICh0eXBlb2Ygbm9kZS5hdHRhY2hFdmVudCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgbm9kZS5hdHRhY2hFdmVudCgnb24nICsgZXZlbnQsIGZuKTtcbiAgfVxufVxuXG5cbi8qKlxuICogUmVtb3ZlcyBhIHByZXZpb3VzbHkgYWRkZWQgZXZlbnQgaGFuZGxlciBmcm9tIGEgRE9NIG5vZGUuXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgVGhlIERPTSBub2RlIHRvIHJlbW92ZSB0aGUgZXZlbnQgaGFuZGxlciBmcm9tLlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGV2ZW50IGhhbmRsZXIgdG8gcmVtb3ZlLlxuICogQHBhcmFtIHtib29sZWFufSBvcHRfdXNlQ2FwdHVyZSBJZiB0aGUgZXZlbnQgaGFuZGxlciB3YXMgYWRkZWQgd2l0aCB0aGlzXG4gKiAgICAgZmxhZyBzZXQgdG8gdHJ1ZSwgaXQgc2hvdWxkIGJlIHNldCB0byB0cnVlIGhlcmUgaW4gb3JkZXIgdG8gcmVtb3ZlIGl0LlxuICovXG5mdW5jdGlvbiByZW1vdmVFdmVudChub2RlLCBldmVudCwgZm4sIG9wdF91c2VDYXB0dXJlKSB7XG4gIGlmICh0eXBlb2Ygbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyID09ICdmdW5jdGlvbicpIHtcbiAgICBub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGZuLCBvcHRfdXNlQ2FwdHVyZSB8fCBmYWxzZSk7XG4gIH1cbiAgZWxzZSBpZiAodHlwZW9mIG5vZGUuZGV0YXRjaEV2ZW50ID09ICdmdW5jdGlvbicpIHtcbiAgICBub2RlLmRldGF0Y2hFdmVudCgnb24nICsgZXZlbnQsIGZuKTtcbiAgfVxufVxuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdHdvIHJlY3Qgb2JqZWN0cy5cbiAqIEBwYXJhbSB7T2JqZWN0fSByZWN0MSBUaGUgZmlyc3QgcmVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSByZWN0MiBUaGUgc2Vjb25kIHJlY3QuXG4gKiBAcmV0dXJuIHs/T2JqZWN0fD9DbGllbnRSZWN0fSBUaGUgaW50ZXJzZWN0aW9uIHJlY3Qgb3IgdW5kZWZpbmVkIGlmIG5vXG4gKiAgICAgaW50ZXJzZWN0aW9uIGlzIGZvdW5kLlxuICovXG5mdW5jdGlvbiBjb21wdXRlUmVjdEludGVyc2VjdGlvbihyZWN0MSwgcmVjdDIpIHtcbiAgdmFyIHRvcCA9IE1hdGgubWF4KHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgdmFyIGJvdHRvbSA9IE1hdGgubWluKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgdmFyIGxlZnQgPSBNYXRoLm1heChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgdmFyIHJpZ2h0ID0gTWF0aC5taW4ocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgdmFyIHdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICB2YXIgaGVpZ2h0ID0gYm90dG9tIC0gdG9wO1xuXG4gIHJldHVybiAod2lkdGggPj0gMCAmJiBoZWlnaHQgPj0gMCkgJiYge1xuICAgIHRvcDogdG9wLFxuICAgIGJvdHRvbTogYm90dG9tLFxuICAgIGxlZnQ6IGxlZnQsXG4gICAgcmlnaHQ6IHJpZ2h0LFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9IHx8IG51bGw7XG59XG5cblxuLyoqXG4gKiBTaGltcyB0aGUgbmF0aXZlIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIElFLlxuICogQHBhcmFtIHtFbGVtZW50fSBlbCBUaGUgZWxlbWVudCB3aG9zZSBib3VuZGluZyByZWN0IHRvIGdldC5cbiAqIEByZXR1cm4ge0RPTVJlY3R8Q2xpZW50UmVjdH0gVGhlIChwb3NzaWJseSBzaGltbWVkKSByZWN0IG9mIHRoZSBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWwpIHtcbiAgdmFyIHJlY3Q7XG5cbiAgdHJ5IHtcbiAgICByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIElnbm9yZSBXaW5kb3dzIDcgSUUxMSBcIlVuc3BlY2lmaWVkIGVycm9yXCJcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdzNjL0ludGVyc2VjdGlvbk9ic2VydmVyL3B1bGwvMjA1XG4gIH1cblxuICBpZiAoIXJlY3QpIHJldHVybiBnZXRFbXB0eVJlY3QoKTtcblxuICAvLyBPbGRlciBJRVxuICBpZiAoIShyZWN0LndpZHRoICYmIHJlY3QuaGVpZ2h0KSkge1xuICAgIHJlY3QgPSB7XG4gICAgICB0b3A6IHJlY3QudG9wLFxuICAgICAgcmlnaHQ6IHJlY3QucmlnaHQsXG4gICAgICBib3R0b206IHJlY3QuYm90dG9tLFxuICAgICAgbGVmdDogcmVjdC5sZWZ0LFxuICAgICAgd2lkdGg6IHJlY3QucmlnaHQgLSByZWN0LmxlZnQsXG4gICAgICBoZWlnaHQ6IHJlY3QuYm90dG9tIC0gcmVjdC50b3BcbiAgICB9O1xuICB9XG4gIHJldHVybiByZWN0O1xufVxuXG5cbi8qKlxuICogUmV0dXJucyBhbiBlbXB0eSByZWN0IG9iamVjdC4gQW4gZW1wdHkgcmVjdCBpcyByZXR1cm5lZCB3aGVuIGFuIGVsZW1lbnRcbiAqIGlzIG5vdCBpbiB0aGUgRE9NLlxuICogQHJldHVybiB7Q2xpZW50UmVjdH0gVGhlIGVtcHR5IHJlY3QuXG4gKi9cbmZ1bmN0aW9uIGdldEVtcHR5UmVjdCgpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgd2lkdGg6IDAsXG4gICAgaGVpZ2h0OiAwXG4gIH07XG59XG5cblxuLyoqXG4gKiBFbnN1cmUgdGhhdCB0aGUgcmVzdWx0IGhhcyBhbGwgb2YgdGhlIG5lY2Vzc2FyeSBmaWVsZHMgb2YgdGhlIERPTVJlY3QuXG4gKiBTcGVjaWZpY2FsbHkgdGhpcyBlbnN1cmVzIHRoYXQgYHhgIGFuZCBgeWAgZmllbGRzIGFyZSBzZXQuXG4gKlxuICogQHBhcmFtIHs/RE9NUmVjdHw/Q2xpZW50UmVjdH0gcmVjdFxuICogQHJldHVybiB7P0RPTVJlY3R9XG4gKi9cbmZ1bmN0aW9uIGVuc3VyZURPTVJlY3QocmVjdCkge1xuICAvLyBBIGBET01SZWN0YCBvYmplY3QgaGFzIGB4YCBhbmQgYHlgIGZpZWxkcy5cbiAgaWYgKCFyZWN0IHx8ICd4JyBpbiByZWN0KSB7XG4gICAgcmV0dXJuIHJlY3Q7XG4gIH1cbiAgLy8gQSBJRSdzIGBDbGllbnRSZWN0YCB0eXBlIGRvZXMgbm90IGhhdmUgYHhgIGFuZCBgeWAuIFRoZSBzYW1lIGlzIHRoZSBjYXNlXG4gIC8vIGZvciBpbnRlcm5hbGx5IGNhbGN1bGF0ZWQgUmVjdCBvYmplY3RzLiBGb3IgdGhlIHB1cnBvc2VzIG9mXG4gIC8vIGBJbnRlcnNlY3Rpb25PYnNlcnZlcmAsIGl0J3Mgc3VmZmljaWVudCB0byBzaW1wbHkgbWlycm9yIGBsZWZ0YCBhbmQgYHRvcGBcbiAgLy8gZm9yIHRoZXNlIGZpZWxkcy5cbiAgcmV0dXJuIHtcbiAgICB0b3A6IHJlY3QudG9wLFxuICAgIHk6IHJlY3QudG9wLFxuICAgIGJvdHRvbTogcmVjdC5ib3R0b20sXG4gICAgbGVmdDogcmVjdC5sZWZ0LFxuICAgIHg6IHJlY3QubGVmdCxcbiAgICByaWdodDogcmVjdC5yaWdodCxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gIH07XG59XG5cblxuLyoqXG4gKiBJbnZlcnRzIHRoZSBpbnRlcnNlY3Rpb24gYW5kIGJvdW5kaW5nIHJlY3QgZnJvbSB0aGUgcGFyZW50IChmcmFtZSkgQkNSIHRvXG4gKiB0aGUgbG9jYWwgQkNSIHNwYWNlLlxuICogQHBhcmFtIHtET01SZWN0fENsaWVudFJlY3R9IHBhcmVudEJvdW5kaW5nUmVjdCBUaGUgcGFyZW50J3MgYm91bmQgY2xpZW50IHJlY3QuXG4gKiBAcGFyYW0ge0RPTVJlY3R8Q2xpZW50UmVjdH0gcGFyZW50SW50ZXJzZWN0aW9uUmVjdCBUaGUgcGFyZW50J3Mgb3duIGludGVyc2VjdGlvbiByZWN0LlxuICogQHJldHVybiB7Q2xpZW50UmVjdH0gVGhlIGxvY2FsIHJvb3QgYm91bmRpbmcgcmVjdCBmb3IgdGhlIHBhcmVudCdzIGNoaWxkcmVuLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0RnJvbVBhcmVudFJlY3QocGFyZW50Qm91bmRpbmdSZWN0LCBwYXJlbnRJbnRlcnNlY3Rpb25SZWN0KSB7XG4gIHZhciB0b3AgPSBwYXJlbnRJbnRlcnNlY3Rpb25SZWN0LnRvcCAtIHBhcmVudEJvdW5kaW5nUmVjdC50b3A7XG4gIHZhciBsZWZ0ID0gcGFyZW50SW50ZXJzZWN0aW9uUmVjdC5sZWZ0IC0gcGFyZW50Qm91bmRpbmdSZWN0LmxlZnQ7XG4gIHJldHVybiB7XG4gICAgdG9wOiB0b3AsXG4gICAgbGVmdDogbGVmdCxcbiAgICBoZWlnaHQ6IHBhcmVudEludGVyc2VjdGlvblJlY3QuaGVpZ2h0LFxuICAgIHdpZHRoOiBwYXJlbnRJbnRlcnNlY3Rpb25SZWN0LndpZHRoLFxuICAgIGJvdHRvbTogdG9wICsgcGFyZW50SW50ZXJzZWN0aW9uUmVjdC5oZWlnaHQsXG4gICAgcmlnaHQ6IGxlZnQgKyBwYXJlbnRJbnRlcnNlY3Rpb25SZWN0LndpZHRoXG4gIH07XG59XG5cblxuLyoqXG4gKiBDaGVja3MgdG8gc2VlIGlmIGEgcGFyZW50IGVsZW1lbnQgY29udGFpbnMgYSBjaGlsZCBlbGVtZW50IChpbmNsdWRpbmcgaW5zaWRlXG4gKiBzaGFkb3cgRE9NKS5cbiAqIEBwYXJhbSB7Tm9kZX0gcGFyZW50IFRoZSBwYXJlbnQgZWxlbWVudC5cbiAqIEBwYXJhbSB7Tm9kZX0gY2hpbGQgVGhlIGNoaWxkIGVsZW1lbnQuXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXJlbnQgbm9kZSBjb250YWlucyB0aGUgY2hpbGQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gY29udGFpbnNEZWVwKHBhcmVudCwgY2hpbGQpIHtcbiAgdmFyIG5vZGUgPSBjaGlsZDtcbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZSA9PSBwYXJlbnQpIHJldHVybiB0cnVlO1xuXG4gICAgbm9kZSA9IGdldFBhcmVudE5vZGUobm9kZSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5cbi8qKlxuICogR2V0cyB0aGUgcGFyZW50IG5vZGUgb2YgYW4gZWxlbWVudCBvciBpdHMgaG9zdCBlbGVtZW50IGlmIHRoZSBwYXJlbnQgbm9kZVxuICogaXMgYSBzaGFkb3cgcm9vdC5cbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBUaGUgbm9kZSB3aG9zZSBwYXJlbnQgdG8gZ2V0LlxuICogQHJldHVybiB7Tm9kZXxudWxsfSBUaGUgcGFyZW50IG5vZGUgb3IgbnVsbCBpZiBubyBwYXJlbnQgZXhpc3RzLlxuICovXG5mdW5jdGlvbiBnZXRQYXJlbnROb2RlKG5vZGUpIHtcbiAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcblxuICBpZiAobm9kZS5ub2RlVHlwZSA9PSAvKiBET0NVTUVOVCAqLyA5ICYmIG5vZGUgIT0gZG9jdW1lbnQpIHtcbiAgICAvLyBJZiB0aGlzIG5vZGUgaXMgYSBkb2N1bWVudCBub2RlLCBsb29rIGZvciB0aGUgZW1iZWRkaW5nIGZyYW1lLlxuICAgIHJldHVybiBnZXRGcmFtZUVsZW1lbnQobm9kZSk7XG4gIH1cblxuICAvLyBJZiB0aGUgcGFyZW50IGhhcyBlbGVtZW50IHRoYXQgaXMgYXNzaWduZWQgdGhyb3VnaCBzaGFkb3cgcm9vdCBzbG90XG4gIGlmIChwYXJlbnQgJiYgcGFyZW50LmFzc2lnbmVkU2xvdCkge1xuICAgIHBhcmVudCA9IHBhcmVudC5hc3NpZ25lZFNsb3QucGFyZW50Tm9kZVxuICB9XG5cbiAgaWYgKHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgPT0gMTEgJiYgcGFyZW50Lmhvc3QpIHtcbiAgICAvLyBJZiB0aGUgcGFyZW50IGlzIGEgc2hhZG93IHJvb3QsIHJldHVybiB0aGUgaG9zdCBlbGVtZW50LlxuICAgIHJldHVybiBwYXJlbnQuaG9zdDtcbiAgfVxuXG4gIHJldHVybiBwYXJlbnQ7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGBub2RlYCBpcyBhIERvY3VtZW50LlxuICogQHBhcmFtIHshTm9kZX0gbm9kZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRG9jKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUgJiYgbm9kZS5ub2RlVHlwZSA9PT0gOTtcbn1cblxuXG4vLyBFeHBvc2VzIHRoZSBjb25zdHJ1Y3RvcnMgZ2xvYmFsbHkuXG53aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBJbnRlcnNlY3Rpb25PYnNlcnZlcjtcbndpbmRvdy5JbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5ID0gSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTtcblxufSgpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBBZnJpa2FhbnMgW2FmXVxuLy8hIGF1dGhvciA6IFdlcm5lciBNb2xsZW50emUgOiBodHRwczovL2dpdGh1Yi5jb20vd2VybmVybVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGFmID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYWYnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcmllX0ZlYnJ1YXJpZV9NYWFydF9BcHJpbF9NZWlfSnVuaWVfSnVsaWVfQXVndXN0dXNfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGVzZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZlYl9NcnRfQXByX01laV9KdW5fSnVsX0F1Z19TZXBfT2t0X05vdl9EZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnU29uZGFnX01hYW5kYWdfRGluc2RhZ19Xb2Vuc2RhZ19Eb25kZXJkYWdfVnJ5ZGFnX1NhdGVyZGFnJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU29uX01hYV9EaW5fV29lX0Rvbl9WcnlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1NvX01hX0RpX1dvX0RvX1ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvdm18bm0vaSxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL15ubSQvaS50ZXN0KGlucHV0KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICd2bScgOiAnVk0nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdubScgOiAnTk0nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW1ZhbmRhZyBvbV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tNw7RyZSBvbV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtvbV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tHaXN0ZXIgb21dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0xhYXNdIGRkZGQgW29tXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ29vciAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgZ2VsZWRlJyxcbiAgICAgICAgICAgIHM6IFwiJ24gcGFhciBzZWtvbmRlc1wiLFxuICAgICAgICAgICAgc3M6ICclZCBzZWtvbmRlcycsXG4gICAgICAgICAgICBtOiBcIiduIG1pbnV1dFwiLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGUnLFxuICAgICAgICAgICAgaDogXCInbiB1dXJcIixcbiAgICAgICAgICAgIGhoOiAnJWQgdXJlJyxcbiAgICAgICAgICAgIGQ6IFwiJ24gZGFnXCIsXG4gICAgICAgICAgICBkZDogJyVkIGRhZScsXG4gICAgICAgICAgICBNOiBcIiduIG1hYW5kXCIsXG4gICAgICAgICAgICBNTTogJyVkIG1hYW5kZScsXG4gICAgICAgICAgICB5OiBcIiduIGphYXJcIixcbiAgICAgICAgICAgIHl5OiAnJWQgamFhcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdGV8ZGUpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBudW1iZXIgK1xuICAgICAgICAgICAgICAgIChudW1iZXIgPT09IDEgfHwgbnVtYmVyID09PSA4IHx8IG51bWJlciA+PSAyMCA/ICdzdGUnIDogJ2RlJylcbiAgICAgICAgICAgICk7IC8vIFRoYW5rcyB0byBKb3JpcyBSw7ZsaW5nIDogaHR0cHM6Ly9naXRodWIuY29tL2pqdXBpdGVyXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTWFhbmRhZyBpcyBkaWUgZWVyc3RlIGRhZyB2YW4gZGllIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIERpZSB3ZWVrIHdhdCBkaWUgNGRlIEphbnVhcmllIGJldmF0IGlzIGRpZSBlZXJzdGUgd2VlayB2YW4gZGllIGphYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYWY7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQXJhYmljIChBbGdlcmlhKSBbYXItZHpdXG4vLyEgYXV0aG9yIDogQW1pbmUgUm91a2g6IGh0dHBzOi8vZ2l0aHViLmNvbS9BbWluZTI3XG4vLyEgYXV0aG9yIDogQWJkZWwgU2FpZDogaHR0cHM6Ly9naXRodWIuY29tL2FiZGVsc2FpZFxuLy8hIGF1dGhvciA6IEFobWVkIEVsa2hhdGliXG4vLyEgYXV0aG9yIDogZm9yYWJpIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JhYmlcbi8vISBhdXRob3IgOiBOb3VyZWRkaW5lIExPVUFIRURKIDogaHR0cHM6Ly9naXRodWIuY29tL25vdXJlZGRpbmVtXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgcGx1cmFsRm9ybSA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICAgICAgICByZXR1cm4gbiA9PT0gMFxuICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgIDogbiA9PT0gMVxuICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgIDogbiA9PT0gMlxuICAgICAgICAgICAgICAgID8gMlxuICAgICAgICAgICAgICAgIDogbiAlIDEwMCA+PSAzICYmIG4gJSAxMDAgPD0gMTBcbiAgICAgICAgICAgICAgICA/IDNcbiAgICAgICAgICAgICAgICA6IG4gJSAxMDAgPj0gMTFcbiAgICAgICAgICAgICAgICA/IDRcbiAgICAgICAgICAgICAgICA6IDU7XG4gICAgICAgIH0sXG4gICAgICAgIHBsdXJhbHMgPSB7XG4gICAgICAgICAgICBzOiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINir2KfZhtmK2KknLFxuICAgICAgICAgICAgICAgICfYq9in2YbZitipINmI2KfYrdiv2KknLFxuICAgICAgICAgICAgICAgIFsn2KvYp9mG2YrYqtin2YYnLCAn2KvYp9mG2YrYqtmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2KvZiNin2YYnLFxuICAgICAgICAgICAgICAgICclZCDYq9in2YbZitipJyxcbiAgICAgICAgICAgICAgICAnJWQg2KvYp9mG2YrYqScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbTogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYr9mC2YrZgtipJyxcbiAgICAgICAgICAgICAgICAn2K/ZgtmK2YLYqSDZiNin2K3Yr9ipJyxcbiAgICAgICAgICAgICAgICBbJ9iv2YLZitmC2KrYp9mGJywgJ9iv2YLZitmC2KrZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINiv2YLYp9im2YInLFxuICAgICAgICAgICAgICAgICclZCDYr9mC2YrZgtipJyxcbiAgICAgICAgICAgICAgICAnJWQg2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaDogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYs9in2LnYqScsXG4gICAgICAgICAgICAgICAgJ9iz2KfYudipINmI2KfYrdiv2KknLFxuICAgICAgICAgICAgICAgIFsn2LPYp9i52KrYp9mGJywgJ9iz2KfYudiq2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYs9in2LnYp9iqJyxcbiAgICAgICAgICAgICAgICAnJWQg2LPYp9i52KknLFxuICAgICAgICAgICAgICAgICclZCDYs9in2LnYqScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZDogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDZitmI2YUnLFxuICAgICAgICAgICAgICAgICfZitmI2YUg2YjYp9it2K8nLFxuICAgICAgICAgICAgICAgIFsn2YrZiNmF2KfZhicsICfZitmI2YXZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINij2YrYp9mFJyxcbiAgICAgICAgICAgICAgICAnJWQg2YrZiNmF2YvYpycsXG4gICAgICAgICAgICAgICAgJyVkINmK2YjZhScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgTTogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYtNmH2LEnLFxuICAgICAgICAgICAgICAgICfYtNmH2LEg2YjYp9it2K8nLFxuICAgICAgICAgICAgICAgIFsn2LTZh9ix2KfZhicsICfYtNmH2LHZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINij2LTZh9ixJyxcbiAgICAgICAgICAgICAgICAnJWQg2LTZh9ix2KcnLFxuICAgICAgICAgICAgICAgICclZCDYtNmH2LEnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHk6IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2LnYp9mFJyxcbiAgICAgICAgICAgICAgICAn2LnYp9mFINmI2KfYrdivJyxcbiAgICAgICAgICAgICAgICBbJ9i52KfZhdin2YYnLCAn2LnYp9mF2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYo9i52YjYp9mFJyxcbiAgICAgICAgICAgICAgICAnJWQg2LnYp9mF2YvYpycsXG4gICAgICAgICAgICAgICAgJyVkINi52KfZhScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICBwbHVyYWxpemUgPSBmdW5jdGlvbiAodSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZiA9IHBsdXJhbEZvcm0obnVtYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gcGx1cmFsc1t1XVtwbHVyYWxGb3JtKG51bWJlcildO1xuICAgICAgICAgICAgICAgIGlmIChmID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IHN0clt3aXRob3V0U3VmZml4ID8gMCA6IDFdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBtb250aHMgPSBbXG4gICAgICAgICAgICAn2KzYp9mG2YHZiicsXG4gICAgICAgICAgICAn2YHZitmB2LHZiicsXG4gICAgICAgICAgICAn2YXYp9ix2LMnLFxuICAgICAgICAgICAgJ9ij2YHYsdmK2YQnLFxuICAgICAgICAgICAgJ9mF2KfZiicsXG4gICAgICAgICAgICAn2KzZiNin2YYnLFxuICAgICAgICAgICAgJ9is2YjZitmE2YrYqScsXG4gICAgICAgICAgICAn2KPZiNiqJyxcbiAgICAgICAgICAgICfYs9io2KrZhdio2LEnLFxuICAgICAgICAgICAgJ9ij2YPYqtmI2KjYsScsXG4gICAgICAgICAgICAn2YbZiNmB2YXYqNixJyxcbiAgICAgICAgICAgICfYr9mK2LPZhdio2LEnLFxuICAgICAgICBdO1xuXG4gICAgdmFyIGFyRHogPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdhci1keicsIHtcbiAgICAgICAgbW9udGhzOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBtb250aHMsXG4gICAgICAgIHdlZWtkYXlzOiAn2KfZhNij2K3Yr1/Yp9mE2KXYq9mG2YrZhl/Yp9mE2KvZhNin2KvYp9ihX9in2YTYo9ix2KjYudin2KFf2KfZhNiu2YXZitizX9in2YTYrNmF2LnYqV/Yp9mE2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn2KPYrdivX9il2KvZhtmK2YZf2KvZhNin2KvYp9ihX9ij2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn2K1f2YZf2Ktf2LFf2K5f2Kxf2LMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0QvXFx1MjAwRk0vXFx1MjAwRllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/YtXzZhS8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuICfZhScgPT09IGlucHV0O1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2LUnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9mFJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb2KfZhNmK2YjZhSDYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9i62K/Zi9inINi52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vYo9mF2LMg2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9io2LnYryAlcycsXG4gICAgICAgICAgICBwYXN0OiAn2YXZhtiwICVzJyxcbiAgICAgICAgICAgIHM6IHBsdXJhbGl6ZSgncycpLFxuICAgICAgICAgICAgc3M6IHBsdXJhbGl6ZSgncycpLFxuICAgICAgICAgICAgbTogcGx1cmFsaXplKCdtJyksXG4gICAgICAgICAgICBtbTogcGx1cmFsaXplKCdtJyksXG4gICAgICAgICAgICBoOiBwbHVyYWxpemUoJ2gnKSxcbiAgICAgICAgICAgIGhoOiBwbHVyYWxpemUoJ2gnKSxcbiAgICAgICAgICAgIGQ6IHBsdXJhbGl6ZSgnZCcpLFxuICAgICAgICAgICAgZGQ6IHBsdXJhbGl6ZSgnZCcpLFxuICAgICAgICAgICAgTTogcGx1cmFsaXplKCdNJyksXG4gICAgICAgICAgICBNTTogcGx1cmFsaXplKCdNJyksXG4gICAgICAgICAgICB5OiBwbHVyYWxpemUoJ3knKSxcbiAgICAgICAgICAgIHl5OiBwbHVyYWxpemUoJ3knKSxcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXJEejtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBBcmFiaWMgKEt1d2FpdCkgW2FyLWt3XVxuLy8hIGF1dGhvciA6IE51c3JldCBQYXJsYWs6IGh0dHBzOi8vZ2l0aHViLmNvbS9udXNyZXRwYXJsYWtcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBhckt3ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYXIta3cnLCB7XG4gICAgICAgIG1vbnRoczogJ9mK2YbYp9mK2LFf2YHYqNix2KfZitixX9mF2KfYsdizX9ij2KjYsdmK2YRf2YXYp9mKX9mK2YjZhtmK2Yhf2YrZiNmE2YrZiNiyX9i62LTYql/YtNiq2YbYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YbYqNixX9iv2KzZhtio2LEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn2YrZhtin2YrYsV/Zgdio2LHYp9mK2LFf2YXYp9ix2LNf2KPYqNix2YrZhF/Zhdin2Ypf2YrZiNmG2YrZiF/ZitmI2YTZitmI2LJf2LrYtNiqX9i02KrZhtio2LFf2KPZg9iq2YjYqNixX9mG2YjZhtio2LFf2K/YrNmG2KjYsScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfYp9mE2KPYrdivX9in2YTYpdiq2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfYp9it2K9f2KfYqtmG2YrZhl/Yq9mE2KfYq9in2KFf2KfYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfYrV/Zhl/Yq1/YsV/Yrl/YrF/Ysycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb2KfZhNmK2YjZhSDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9i62K/YpyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2KPZhdizINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfZgdmKICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICfZhdmG2LAgJXMnLFxuICAgICAgICAgICAgczogJ9ir2YjYp9mGJyxcbiAgICAgICAgICAgIHNzOiAnJWQg2KvYp9mG2YrYqScsXG4gICAgICAgICAgICBtOiAn2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICBtbTogJyVkINiv2YLYp9im2YInLFxuICAgICAgICAgICAgaDogJ9iz2KfYudipJyxcbiAgICAgICAgICAgIGhoOiAnJWQg2LPYp9i52KfYqicsXG4gICAgICAgICAgICBkOiAn2YrZiNmFJyxcbiAgICAgICAgICAgIGRkOiAnJWQg2KPZitin2YUnLFxuICAgICAgICAgICAgTTogJ9i02YfYsScsXG4gICAgICAgICAgICBNTTogJyVkINij2LTZh9ixJyxcbiAgICAgICAgICAgIHk6ICfYs9mG2KknLFxuICAgICAgICAgICAgeXk6ICclZCDYs9mG2YjYp9iqJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogMTIsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDEydGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXJLdztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBBcmFiaWMgKEx5YmlhKSBbYXItbHldXG4vLyEgYXV0aG9yIDogQWxpIEhtZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9raWtvYW5pc1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICcxJyxcbiAgICAgICAgICAgIDI6ICcyJyxcbiAgICAgICAgICAgIDM6ICczJyxcbiAgICAgICAgICAgIDQ6ICc0JyxcbiAgICAgICAgICAgIDU6ICc1JyxcbiAgICAgICAgICAgIDY6ICc2JyxcbiAgICAgICAgICAgIDc6ICc3JyxcbiAgICAgICAgICAgIDg6ICc4JyxcbiAgICAgICAgICAgIDk6ICc5JyxcbiAgICAgICAgICAgIDA6ICcwJyxcbiAgICAgICAgfSxcbiAgICAgICAgcGx1cmFsRm9ybSA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICAgICAgICByZXR1cm4gbiA9PT0gMFxuICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgIDogbiA9PT0gMVxuICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgIDogbiA9PT0gMlxuICAgICAgICAgICAgICAgID8gMlxuICAgICAgICAgICAgICAgIDogbiAlIDEwMCA+PSAzICYmIG4gJSAxMDAgPD0gMTBcbiAgICAgICAgICAgICAgICA/IDNcbiAgICAgICAgICAgICAgICA6IG4gJSAxMDAgPj0gMTFcbiAgICAgICAgICAgICAgICA/IDRcbiAgICAgICAgICAgICAgICA6IDU7XG4gICAgICAgIH0sXG4gICAgICAgIHBsdXJhbHMgPSB7XG4gICAgICAgICAgICBzOiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINir2KfZhtmK2KknLFxuICAgICAgICAgICAgICAgICfYq9in2YbZitipINmI2KfYrdiv2KknLFxuICAgICAgICAgICAgICAgIFsn2KvYp9mG2YrYqtin2YYnLCAn2KvYp9mG2YrYqtmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2KvZiNin2YYnLFxuICAgICAgICAgICAgICAgICclZCDYq9in2YbZitipJyxcbiAgICAgICAgICAgICAgICAnJWQg2KvYp9mG2YrYqScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbTogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYr9mC2YrZgtipJyxcbiAgICAgICAgICAgICAgICAn2K/ZgtmK2YLYqSDZiNin2K3Yr9ipJyxcbiAgICAgICAgICAgICAgICBbJ9iv2YLZitmC2KrYp9mGJywgJ9iv2YLZitmC2KrZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINiv2YLYp9im2YInLFxuICAgICAgICAgICAgICAgICclZCDYr9mC2YrZgtipJyxcbiAgICAgICAgICAgICAgICAnJWQg2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaDogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYs9in2LnYqScsXG4gICAgICAgICAgICAgICAgJ9iz2KfYudipINmI2KfYrdiv2KknLFxuICAgICAgICAgICAgICAgIFsn2LPYp9i52KrYp9mGJywgJ9iz2KfYudiq2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYs9in2LnYp9iqJyxcbiAgICAgICAgICAgICAgICAnJWQg2LPYp9i52KknLFxuICAgICAgICAgICAgICAgICclZCDYs9in2LnYqScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZDogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDZitmI2YUnLFxuICAgICAgICAgICAgICAgICfZitmI2YUg2YjYp9it2K8nLFxuICAgICAgICAgICAgICAgIFsn2YrZiNmF2KfZhicsICfZitmI2YXZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINij2YrYp9mFJyxcbiAgICAgICAgICAgICAgICAnJWQg2YrZiNmF2YvYpycsXG4gICAgICAgICAgICAgICAgJyVkINmK2YjZhScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgTTogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYtNmH2LEnLFxuICAgICAgICAgICAgICAgICfYtNmH2LEg2YjYp9it2K8nLFxuICAgICAgICAgICAgICAgIFsn2LTZh9ix2KfZhicsICfYtNmH2LHZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINij2LTZh9ixJyxcbiAgICAgICAgICAgICAgICAnJWQg2LTZh9ix2KcnLFxuICAgICAgICAgICAgICAgICclZCDYtNmH2LEnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHk6IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2LnYp9mFJyxcbiAgICAgICAgICAgICAgICAn2LnYp9mFINmI2KfYrdivJyxcbiAgICAgICAgICAgICAgICBbJ9i52KfZhdin2YYnLCAn2LnYp9mF2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYo9i52YjYp9mFJyxcbiAgICAgICAgICAgICAgICAnJWQg2LnYp9mF2YvYpycsXG4gICAgICAgICAgICAgICAgJyVkINi52KfZhScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICBwbHVyYWxpemUgPSBmdW5jdGlvbiAodSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZiA9IHBsdXJhbEZvcm0obnVtYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gcGx1cmFsc1t1XVtwbHVyYWxGb3JtKG51bWJlcildO1xuICAgICAgICAgICAgICAgIGlmIChmID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IHN0clt3aXRob3V0U3VmZml4ID8gMCA6IDFdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBtb250aHMgPSBbXG4gICAgICAgICAgICAn2YrZhtin2YrYsScsXG4gICAgICAgICAgICAn2YHYqNix2KfZitixJyxcbiAgICAgICAgICAgICfZhdin2LHYsycsXG4gICAgICAgICAgICAn2KPYqNix2YrZhCcsXG4gICAgICAgICAgICAn2YXYp9mK2YgnLFxuICAgICAgICAgICAgJ9mK2YjZhtmK2YgnLFxuICAgICAgICAgICAgJ9mK2YjZhNmK2YgnLFxuICAgICAgICAgICAgJ9ij2LrYs9i32LMnLFxuICAgICAgICAgICAgJ9iz2KjYqtmF2KjYsScsXG4gICAgICAgICAgICAn2KPZg9iq2YjYqNixJyxcbiAgICAgICAgICAgICfZhtmI2YHZhdio2LEnLFxuICAgICAgICAgICAgJ9iv2YrYs9mF2KjYsScsXG4gICAgICAgIF07XG5cbiAgICB2YXIgYXJMeSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2FyLWx5Jywge1xuICAgICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IG1vbnRocyxcbiAgICAgICAgd2Vla2RheXM6ICfYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfYo9it2K9f2KXYq9mG2YrZhl/Yq9mE2KfYq9in2KFf2KPYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfYrV/Zhl/Yq1/YsV/Yrl/YrF/Ysycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnRC9cXHUyMDBGTS9cXHUyMDBGWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9i1fNmFLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ9mFJyA9PT0gaW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfYtSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2YUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYp9mE2YrZiNmFINi52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2LrYr9mL2Kcg2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9ij2YXYsyDYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9i52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn2KjYudivICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICfZhdmG2LAgJXMnLFxuICAgICAgICAgICAgczogcGx1cmFsaXplKCdzJyksXG4gICAgICAgICAgICBzczogcGx1cmFsaXplKCdzJyksXG4gICAgICAgICAgICBtOiBwbHVyYWxpemUoJ20nKSxcbiAgICAgICAgICAgIG1tOiBwbHVyYWxpemUoJ20nKSxcbiAgICAgICAgICAgIGg6IHBsdXJhbGl6ZSgnaCcpLFxuICAgICAgICAgICAgaGg6IHBsdXJhbGl6ZSgnaCcpLFxuICAgICAgICAgICAgZDogcGx1cmFsaXplKCdkJyksXG4gICAgICAgICAgICBkZDogcGx1cmFsaXplKCdkJyksXG4gICAgICAgICAgICBNOiBwbHVyYWxpemUoJ00nKSxcbiAgICAgICAgICAgIE1NOiBwbHVyYWxpemUoJ00nKSxcbiAgICAgICAgICAgIHk6IHBsdXJhbGl6ZSgneScpLFxuICAgICAgICAgICAgeXk6IHBsdXJhbGl6ZSgneScpLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC/YjC9nLCAnLCcpO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiA2LCAvLyBTYXR1cmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiAxMiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMTJ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBhckx5O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEFyYWJpYyAoTW9yb2NjbykgW2FyLW1hXVxuLy8hIGF1dGhvciA6IEVsRmFkaWxpIFlhc3NpbmUgOiBodHRwczovL2dpdGh1Yi5jb20vRWxGYWRpbGlZXG4vLyEgYXV0aG9yIDogQWJkZWwgU2FpZCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hYmRlbHNhaWRcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBhck1hID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYXItbWEnLCB7XG4gICAgICAgIG1vbnRoczogJ9mK2YbYp9mK2LFf2YHYqNix2KfZitixX9mF2KfYsdizX9ij2KjYsdmK2YRf2YXYp9mKX9mK2YjZhtmK2Yhf2YrZiNmE2YrZiNiyX9i62LTYql/YtNiq2YbYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YbYqNixX9iv2KzZhtio2LEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn2YrZhtin2YrYsV/Zgdio2LHYp9mK2LFf2YXYp9ix2LNf2KPYqNix2YrZhF/Zhdin2Ypf2YrZiNmG2YrZiF/ZitmI2YTZitmI2LJf2LrYtNiqX9i02KrZhtio2LFf2KPZg9iq2YjYqNixX9mG2YjZhtio2LFf2K/YrNmG2KjYsScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfYp9it2K9f2KfYq9mG2YrZhl/Yq9mE2KfYq9in2KFf2KfYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfYrV/Zhl/Yq1/YsV/Yrl/YrF/Ysycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb2KfZhNmK2YjZhSDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9i62K/YpyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2KPZhdizINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfZgdmKICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICfZhdmG2LAgJXMnLFxuICAgICAgICAgICAgczogJ9ir2YjYp9mGJyxcbiAgICAgICAgICAgIHNzOiAnJWQg2KvYp9mG2YrYqScsXG4gICAgICAgICAgICBtOiAn2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICBtbTogJyVkINiv2YLYp9im2YInLFxuICAgICAgICAgICAgaDogJ9iz2KfYudipJyxcbiAgICAgICAgICAgIGhoOiAnJWQg2LPYp9i52KfYqicsXG4gICAgICAgICAgICBkOiAn2YrZiNmFJyxcbiAgICAgICAgICAgIGRkOiAnJWQg2KPZitin2YUnLFxuICAgICAgICAgICAgTTogJ9i02YfYsScsXG4gICAgICAgICAgICBNTTogJyVkINij2LTZh9ixJyxcbiAgICAgICAgICAgIHk6ICfYs9mG2KknLFxuICAgICAgICAgICAgeXk6ICclZCDYs9mG2YjYp9iqJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFyTWE7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQXJhYmljIChTYXVkaSBBcmFiaWEpIFthci1zYV1cbi8vISBhdXRob3IgOiBTdWhhaWwgQWxrb3dhaWxlZXQgOiBodHRwczovL2dpdGh1Yi5jb20veHNvaFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICfZoScsXG4gICAgICAgICAgICAyOiAn2aInLFxuICAgICAgICAgICAgMzogJ9mjJyxcbiAgICAgICAgICAgIDQ6ICfZpCcsXG4gICAgICAgICAgICA1OiAn2aUnLFxuICAgICAgICAgICAgNjogJ9mmJyxcbiAgICAgICAgICAgIDc6ICfZpycsXG4gICAgICAgICAgICA4OiAn2agnLFxuICAgICAgICAgICAgOTogJ9mpJyxcbiAgICAgICAgICAgIDA6ICfZoCcsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfZoSc6ICcxJyxcbiAgICAgICAgICAgICfZoic6ICcyJyxcbiAgICAgICAgICAgICfZoyc6ICczJyxcbiAgICAgICAgICAgICfZpCc6ICc0JyxcbiAgICAgICAgICAgICfZpSc6ICc1JyxcbiAgICAgICAgICAgICfZpic6ICc2JyxcbiAgICAgICAgICAgICfZpyc6ICc3JyxcbiAgICAgICAgICAgICfZqCc6ICc4JyxcbiAgICAgICAgICAgICfZqSc6ICc5JyxcbiAgICAgICAgICAgICfZoCc6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciBhclNhID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYXItc2EnLCB7XG4gICAgICAgIG1vbnRoczogJ9mK2YbYp9mK2LFf2YHYqNix2KfZitixX9mF2KfYsdizX9ij2KjYsdmK2YRf2YXYp9mK2Yhf2YrZiNmG2YrZiF/ZitmI2YTZitmIX9ij2LrYs9i32LNf2LPYqNiq2YXYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YHZhdio2LFf2K/Zitiz2YXYqNixJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ9mK2YbYp9mK2LFf2YHYqNix2KfZitixX9mF2KfYsdizX9ij2KjYsdmK2YRf2YXYp9mK2Yhf2YrZiNmG2YrZiF/ZitmI2YTZitmIX9ij2LrYs9i32LNf2LPYqNiq2YXYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YHZhdio2LFf2K/Zitiz2YXYqNixJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ9in2YTYo9it2K9f2KfZhNil2KvZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9ij2K3Yr1/Ypdir2YbZitmGX9ir2YTYp9ir2KfYoV/Yo9ix2KjYudin2KFf2K7ZhdmK2LNf2KzZhdi52Klf2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9itX9mGX9irX9ixX9iuX9isX9izJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv2LV82YUvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAn2YUnID09PSBpbnB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9i1JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfZhSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2YTZitmI2YUg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vYutiv2Kcg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9ij2YXYsyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn2YHZiiAlcycsXG4gICAgICAgICAgICBwYXN0OiAn2YXZhtiwICVzJyxcbiAgICAgICAgICAgIHM6ICfYq9mI2KfZhicsXG4gICAgICAgICAgICBzczogJyVkINir2KfZhtmK2KknLFxuICAgICAgICAgICAgbTogJ9iv2YLZitmC2KknLFxuICAgICAgICAgICAgbW06ICclZCDYr9mC2KfYptmCJyxcbiAgICAgICAgICAgIGg6ICfYs9in2LnYqScsXG4gICAgICAgICAgICBoaDogJyVkINiz2KfYudin2KonLFxuICAgICAgICAgICAgZDogJ9mK2YjZhScsXG4gICAgICAgICAgICBkZDogJyVkINij2YrYp9mFJyxcbiAgICAgICAgICAgIE06ICfYtNmH2LEnLFxuICAgICAgICAgICAgTU06ICclZCDYo9i02YfYsScsXG4gICAgICAgICAgICB5OiAn2LPZhtipJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2LPZhtmI2KfYqicsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1vZodmi2aPZpNml2abZp9mo2anZoF0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL9iML2csICcsJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmdcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXJTYTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgIDogIEFyYWJpYyAoVHVuaXNpYSkgW2FyLXRuXVxuLy8hIGF1dGhvciA6IE5hZGVyIFRvdWthYnJpIDogaHR0cHM6Ly9naXRodWIuY29tL25hZGVyaW9cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBhclRuID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYXItdG4nLCB7XG4gICAgICAgIG1vbnRoczogJ9is2KfZhtmB2Ypf2YHZitmB2LHZil/Zhdin2LHYs1/Yo9mB2LHZitmEX9mF2KfZil/YrNmI2KfZhl/YrNmI2YrZhNmK2Klf2KPZiNiqX9iz2KjYqtmF2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmB2YXYqNixX9iv2YrYs9mF2KjYsScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfYrNin2YbZgdmKX9mB2YrZgdix2Ypf2YXYp9ix2LNf2KPZgdix2YrZhF/Zhdin2Ypf2KzZiNin2YZf2KzZiNmK2YTZitipX9ij2YjYql/Ys9io2KrZhdio2LFf2KPZg9iq2YjYqNixX9mG2YjZgdmF2KjYsV/Yr9mK2LPZhdio2LEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn2KfZhNij2K3Yr1/Yp9mE2KXYq9mG2YrZhl/Yp9mE2KvZhNin2KvYp9ihX9in2YTYo9ix2KjYudin2KFf2KfZhNiu2YXZitizX9in2YTYrNmF2LnYqV/Yp9mE2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn2KPYrdivX9il2KvZhtmK2YZf2KvZhNin2KvYp9ihX9ij2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn2K1f2YZf2Ktf2LFf2K5f2Kxf2LMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2YTZitmI2YUg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vYutiv2Kcg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9ij2YXYsyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn2YHZiiAlcycsXG4gICAgICAgICAgICBwYXN0OiAn2YXZhtiwICVzJyxcbiAgICAgICAgICAgIHM6ICfYq9mI2KfZhicsXG4gICAgICAgICAgICBzczogJyVkINir2KfZhtmK2KknLFxuICAgICAgICAgICAgbTogJ9iv2YLZitmC2KknLFxuICAgICAgICAgICAgbW06ICclZCDYr9mC2KfYptmCJyxcbiAgICAgICAgICAgIGg6ICfYs9in2LnYqScsXG4gICAgICAgICAgICBoaDogJyVkINiz2KfYudin2KonLFxuICAgICAgICAgICAgZDogJ9mK2YjZhScsXG4gICAgICAgICAgICBkZDogJyVkINij2YrYp9mFJyxcbiAgICAgICAgICAgIE06ICfYtNmH2LEnLFxuICAgICAgICAgICAgTU06ICclZCDYo9i02YfYsScsXG4gICAgICAgICAgICB5OiAn2LPZhtipJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2LPZhtmI2KfYqicsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBhclRuO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEFyYWJpYyBbYXJdXG4vLyEgYXV0aG9yIDogQWJkZWwgU2FpZDogaHR0cHM6Ly9naXRodWIuY29tL2FiZGVsc2FpZFxuLy8hIGF1dGhvciA6IEFobWVkIEVsa2hhdGliXG4vLyEgYXV0aG9yIDogZm9yYWJpIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JhYmlcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn2aEnLFxuICAgICAgICAgICAgMjogJ9miJyxcbiAgICAgICAgICAgIDM6ICfZoycsXG4gICAgICAgICAgICA0OiAn2aQnLFxuICAgICAgICAgICAgNTogJ9mlJyxcbiAgICAgICAgICAgIDY6ICfZpicsXG4gICAgICAgICAgICA3OiAn2acnLFxuICAgICAgICAgICAgODogJ9moJyxcbiAgICAgICAgICAgIDk6ICfZqScsXG4gICAgICAgICAgICAwOiAn2aAnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn2aEnOiAnMScsXG4gICAgICAgICAgICAn2aInOiAnMicsXG4gICAgICAgICAgICAn2aMnOiAnMycsXG4gICAgICAgICAgICAn2aQnOiAnNCcsXG4gICAgICAgICAgICAn2aUnOiAnNScsXG4gICAgICAgICAgICAn2aYnOiAnNicsXG4gICAgICAgICAgICAn2acnOiAnNycsXG4gICAgICAgICAgICAn2agnOiAnOCcsXG4gICAgICAgICAgICAn2aknOiAnOScsXG4gICAgICAgICAgICAn2aAnOiAnMCcsXG4gICAgICAgIH0sXG4gICAgICAgIHBsdXJhbEZvcm0gPSBmdW5jdGlvbiAobikge1xuICAgICAgICAgICAgcmV0dXJuIG4gPT09IDBcbiAgICAgICAgICAgICAgICA/IDBcbiAgICAgICAgICAgICAgICA6IG4gPT09IDFcbiAgICAgICAgICAgICAgICA/IDFcbiAgICAgICAgICAgICAgICA6IG4gPT09IDJcbiAgICAgICAgICAgICAgICA/IDJcbiAgICAgICAgICAgICAgICA6IG4gJSAxMDAgPj0gMyAmJiBuICUgMTAwIDw9IDEwXG4gICAgICAgICAgICAgICAgPyAzXG4gICAgICAgICAgICAgICAgOiBuICUgMTAwID49IDExXG4gICAgICAgICAgICAgICAgPyA0XG4gICAgICAgICAgICAgICAgOiA1O1xuICAgICAgICB9LFxuICAgICAgICBwbHVyYWxzID0ge1xuICAgICAgICAgICAgczogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYq9in2YbZitipJyxcbiAgICAgICAgICAgICAgICAn2KvYp9mG2YrYqSDZiNin2K3Yr9ipJyxcbiAgICAgICAgICAgICAgICBbJ9ir2KfZhtmK2KrYp9mGJywgJ9ir2KfZhtmK2KrZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINir2YjYp9mGJyxcbiAgICAgICAgICAgICAgICAnJWQg2KvYp9mG2YrYqScsXG4gICAgICAgICAgICAgICAgJyVkINir2KfZhtmK2KknLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG06IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICAgICAgJ9iv2YLZitmC2Kkg2YjYp9it2K/YqScsXG4gICAgICAgICAgICAgICAgWyfYr9mC2YrZgtiq2KfZhicsICfYr9mC2YrZgtiq2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYr9mC2KfYptmCJyxcbiAgICAgICAgICAgICAgICAnJWQg2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICAgICAgJyVkINiv2YLZitmC2KknLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGg6IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2LPYp9i52KknLFxuICAgICAgICAgICAgICAgICfYs9in2LnYqSDZiNin2K3Yr9ipJyxcbiAgICAgICAgICAgICAgICBbJ9iz2KfYudiq2KfZhicsICfYs9in2LnYqtmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2LPYp9i52KfYqicsXG4gICAgICAgICAgICAgICAgJyVkINiz2KfYudipJyxcbiAgICAgICAgICAgICAgICAnJWQg2LPYp9i52KknLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGQ6IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2YrZiNmFJyxcbiAgICAgICAgICAgICAgICAn2YrZiNmFINmI2KfYrdivJyxcbiAgICAgICAgICAgICAgICBbJ9mK2YjZhdin2YYnLCAn2YrZiNmF2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYo9mK2KfZhScsXG4gICAgICAgICAgICAgICAgJyVkINmK2YjZhdmL2KcnLFxuICAgICAgICAgICAgICAgICclZCDZitmI2YUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIE06IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2LTZh9ixJyxcbiAgICAgICAgICAgICAgICAn2LTZh9ixINmI2KfYrdivJyxcbiAgICAgICAgICAgICAgICBbJ9i02YfYsdin2YYnLCAn2LTZh9ix2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYo9i02YfYsScsXG4gICAgICAgICAgICAgICAgJyVkINi02YfYsdinJyxcbiAgICAgICAgICAgICAgICAnJWQg2LTZh9ixJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB5OiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINi52KfZhScsXG4gICAgICAgICAgICAgICAgJ9i52KfZhSDZiNin2K3YrycsXG4gICAgICAgICAgICAgICAgWyfYudin2YXYp9mGJywgJ9i52KfZhdmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2KPYudmI2KfZhScsXG4gICAgICAgICAgICAgICAgJyVkINi52KfZhdmL2KcnLFxuICAgICAgICAgICAgICAgICclZCDYudin2YUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgcGx1cmFsaXplID0gZnVuY3Rpb24gKHUpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAobnVtYmVyLCB3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGYgPSBwbHVyYWxGb3JtKG51bWJlciksXG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IHBsdXJhbHNbdV1bcGx1cmFsRm9ybShudW1iZXIpXTtcbiAgICAgICAgICAgICAgICBpZiAoZiA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICBzdHIgPSBzdHJbd2l0aG91dFN1ZmZpeCA/IDAgOiAxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8lZC9pLCBudW1iZXIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzID0gW1xuICAgICAgICAgICAgJ9mK2YbYp9mK2LEnLFxuICAgICAgICAgICAgJ9mB2KjYsdin2YrYsScsXG4gICAgICAgICAgICAn2YXYp9ix2LMnLFxuICAgICAgICAgICAgJ9ij2KjYsdmK2YQnLFxuICAgICAgICAgICAgJ9mF2KfZitmIJyxcbiAgICAgICAgICAgICfZitmI2YbZitmIJyxcbiAgICAgICAgICAgICfZitmI2YTZitmIJyxcbiAgICAgICAgICAgICfYo9i62LPYt9izJyxcbiAgICAgICAgICAgICfYs9io2KrZhdio2LEnLFxuICAgICAgICAgICAgJ9ij2YPYqtmI2KjYsScsXG4gICAgICAgICAgICAn2YbZiNmB2YXYqNixJyxcbiAgICAgICAgICAgICfYr9mK2LPZhdio2LEnLFxuICAgICAgICBdO1xuXG4gICAgdmFyIGFyID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYXInLCB7XG4gICAgICAgIG1vbnRoczogbW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydDogbW9udGhzLFxuICAgICAgICB3ZWVrZGF5czogJ9in2YTYo9it2K9f2KfZhNil2KvZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9ij2K3Yr1/Ypdir2YbZitmGX9ir2YTYp9ir2KfYoV/Yo9ix2KjYudin2KFf2K7ZhdmK2LNf2KzZhdi52Klf2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9itX9mGX9irX9ixX9iuX9isX9izJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdEL1xcdTIwMEZNL1xcdTIwMEZZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv2LV82YUvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAn2YUnID09PSBpbnB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9i1JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfZhSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2YTZitmI2YUg2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vYutiv2YvYpyDYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9i52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2KPZhdizINi52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfYqNi52K8gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ9mF2YbYsCAlcycsXG4gICAgICAgICAgICBzOiBwbHVyYWxpemUoJ3MnKSxcbiAgICAgICAgICAgIHNzOiBwbHVyYWxpemUoJ3MnKSxcbiAgICAgICAgICAgIG06IHBsdXJhbGl6ZSgnbScpLFxuICAgICAgICAgICAgbW06IHBsdXJhbGl6ZSgnbScpLFxuICAgICAgICAgICAgaDogcGx1cmFsaXplKCdoJyksXG4gICAgICAgICAgICBoaDogcGx1cmFsaXplKCdoJyksXG4gICAgICAgICAgICBkOiBwbHVyYWxpemUoJ2QnKSxcbiAgICAgICAgICAgIGRkOiBwbHVyYWxpemUoJ2QnKSxcbiAgICAgICAgICAgIE06IHBsdXJhbGl6ZSgnTScpLFxuICAgICAgICAgICAgTU06IHBsdXJhbGl6ZSgnTScpLFxuICAgICAgICAgICAgeTogcGx1cmFsaXplKCd5JyksXG4gICAgICAgICAgICB5eTogcGx1cmFsaXplKCd5JyksXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1vZodmi2aPZpNml2abZp9mo2anZoF0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL9iML2csICcsJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmdcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDYsIC8vIFNhdHVyZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDEyLCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxMnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFyO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEF6ZXJiYWlqYW5pIFthel1cbi8vISBhdXRob3IgOiB0b3BjaGl5ZXYgOiBodHRwczovL2dpdGh1Yi5jb20vdG9wY2hpeWV2XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3VmZml4ZXMgPSB7XG4gICAgICAgIDE6ICctaW5jaScsXG4gICAgICAgIDU6ICctaW5jaScsXG4gICAgICAgIDg6ICctaW5jaScsXG4gICAgICAgIDcwOiAnLWluY2knLFxuICAgICAgICA4MDogJy1pbmNpJyxcbiAgICAgICAgMjogJy1uY2knLFxuICAgICAgICA3OiAnLW5jaScsXG4gICAgICAgIDIwOiAnLW5jaScsXG4gICAgICAgIDUwOiAnLW5jaScsXG4gICAgICAgIDM6ICctw7xuY8O8JyxcbiAgICAgICAgNDogJy3DvG5jw7wnLFxuICAgICAgICAxMDA6ICctw7xuY8O8JyxcbiAgICAgICAgNjogJy1uY8SxJyxcbiAgICAgICAgOTogJy11bmN1JyxcbiAgICAgICAgMTA6ICctdW5jdScsXG4gICAgICAgIDMwOiAnLXVuY3UnLFxuICAgICAgICA2MDogJy3EsW5jxLEnLFxuICAgICAgICA5MDogJy3EsW5jxLEnLFxuICAgIH07XG5cbiAgICB2YXIgYXogPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdheicsIHtcbiAgICAgICAgbW9udGhzOiAneWFudmFyX2ZldnJhbF9tYXJ0X2FwcmVsX21heV9peXVuX2l5dWxfYXZxdXN0X3NlbnR5YWJyX29rdHlhYnJfbm95YWJyX2Rla2Ficicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICd5YW5fZmV2X21hcl9hcHJfbWF5X2l5bl9peWxfYXZxX3Nlbl9va3Rfbm95X2Rlaycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdCYXphcl9CYXphciBlcnTJmXNpX8OHyZlyxZ/JmW5iyZkgYXjFn2FtxLFfw4fJmXLFn8mZbmLJmV9Dw7xtyZkgYXjFn2FtxLFfQ8O8bcmZX8WeyZluYsmZJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnQmF6X0J6RV/Dh0F4X8OHyZlyX0NBeF9Dw7xtX8WeyZluJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ0J6X0JFX8OHQV/Dh8mZX0NBX0PDvF/FnsmZJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbYnVnw7xuIHNhYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbc2FiYWggc2FhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdbZ8mZbMmZbiBoyZlmdMmZXSBkZGRkIFtzYWF0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2TDvG7JmW5dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2tlw6fJmW4gaMmZZnTJmV0gZGRkZCBbc2FhdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyBzb25yYScsXG4gICAgICAgICAgICBwYXN0OiAnJXMgyZl2dsmZbCcsXG4gICAgICAgICAgICBzOiAnYmlyIG5lw6fJmSBzYW5pecmZJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2FuaXnJmScsXG4gICAgICAgICAgICBtOiAnYmlyIGTJmXFpccmZJyxcbiAgICAgICAgICAgIG1tOiAnJWQgZMmZcWlxyZknLFxuICAgICAgICAgICAgaDogJ2JpciBzYWF0JyxcbiAgICAgICAgICAgIGhoOiAnJWQgc2FhdCcsXG4gICAgICAgICAgICBkOiAnYmlyIGfDvG4nLFxuICAgICAgICAgICAgZGQ6ICclZCBnw7xuJyxcbiAgICAgICAgICAgIE06ICdiaXIgYXknLFxuICAgICAgICAgICAgTU06ICclZCBheScsXG4gICAgICAgICAgICB5OiAnYmlyIGlsJyxcbiAgICAgICAgICAgIHl5OiAnJWQgaWwnLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvZ2VjyZl8c8mZaMmZcnxnw7xuZMO8enxheMWfYW0vLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAvXihnw7xuZMO8enxheMWfYW0pJC8udGVzdChpbnB1dCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2dlY8mZJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdzyZloyZlyJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdnw7xuZMO8eic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnYXjFn2FtJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LSjEsW5jxLF8aW5jaXxuY2l8w7xuY8O8fG5jxLF8dW5jdSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlIGZvciB6ZXJvXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICctxLFuY8SxJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgYiA9IChudW1iZXIgJSAxMDApIC0gYSxcbiAgICAgICAgICAgICAgICBjID0gbnVtYmVyID49IDEwMCA/IDEwMCA6IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHN1ZmZpeGVzW2FdIHx8IHN1ZmZpeGVzW2JdIHx8IHN1ZmZpeGVzW2NdKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF6O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEJlbGFydXNpYW4gW2JlXVxuLy8hIGF1dGhvciA6IERtaXRyeSBEZW1pZG92IDogaHR0cHM6Ly9naXRodWIuY29tL2RlbWlkb3Y5MVxuLy8hIGF1dGhvcjogUHJhbGVza2E6IGh0dHA6Ly9wcmFsZXNrYS5wcm8vXG4vLyEgQXV0aG9yIDogTWVuZWxpb24gRWxlbnPDumxlIDogaHR0cHM6Ly9naXRodWIuY29tL09pcmVcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHBsdXJhbCh3b3JkLCBudW0pIHtcbiAgICAgICAgdmFyIGZvcm1zID0gd29yZC5zcGxpdCgnXycpO1xuICAgICAgICByZXR1cm4gbnVtICUgMTAgPT09IDEgJiYgbnVtICUgMTAwICE9PSAxMVxuICAgICAgICAgICAgPyBmb3Jtc1swXVxuICAgICAgICAgICAgOiBudW0gJSAxMCA+PSAyICYmIG51bSAlIDEwIDw9IDQgJiYgKG51bSAlIDEwMCA8IDEwIHx8IG51bSAlIDEwMCA+PSAyMClcbiAgICAgICAgICAgID8gZm9ybXNbMV1cbiAgICAgICAgICAgIDogZm9ybXNbMl07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZVdpdGhQbHVyYWwobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgIHNzOiB3aXRob3V0U3VmZml4ID8gJ9GB0LXQutGD0L3QtNCwX9GB0LXQutGD0L3QtNGLX9GB0LXQutGD0L3QtCcgOiAn0YHQtdC60YPQvdC00YNf0YHQtdC60YPQvdC00Ytf0YHQtdC60YPQvdC0JyxcbiAgICAgICAgICAgIG1tOiB3aXRob3V0U3VmZml4ID8gJ9GF0LLRltC70ZbQvdCwX9GF0LLRltC70ZbQvdGLX9GF0LLRltC70ZbQvScgOiAn0YXQstGW0LvRltC90YNf0YXQstGW0LvRltC90Ytf0YXQstGW0LvRltC9JyxcbiAgICAgICAgICAgIGhoOiB3aXRob3V0U3VmZml4ID8gJ9Cz0LDQtNC30ZbQvdCwX9Cz0LDQtNC30ZbQvdGLX9Cz0LDQtNC30ZbQvScgOiAn0LPQsNC00LfRltC90YNf0LPQsNC00LfRltC90Ytf0LPQsNC00LfRltC9JyxcbiAgICAgICAgICAgIGRkOiAn0LTQt9C10L3RjF/QtNC90ZZf0LTQt9GR0L0nLFxuICAgICAgICAgICAgTU06ICfQvNC10YHRj9GGX9C80LXRgdGP0YbRi1/QvNC10YHRj9GG0LDRnicsXG4gICAgICAgICAgICB5eTogJ9Cz0L7QtF/Qs9Cw0LTRi1/Qs9Cw0LTQvtGeJyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGtleSA9PT0gJ20nKSB7XG4gICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICfRhdCy0ZbQu9GW0L3QsCcgOiAn0YXQstGW0LvRltC90YMnO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2gnKSB7XG4gICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICfQs9Cw0LTQt9GW0L3QsCcgOiAn0LPQsNC00LfRltC90YMnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcgJyArIHBsdXJhbChmb3JtYXRba2V5XSwgK251bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYmUgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdiZScsIHtcbiAgICAgICAgbW9udGhzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6ICfRgdGC0YPQtNC30LXQvdGPX9C70Y7RgtCw0LPQsF/RgdCw0LrQsNCy0ZbQutCwX9C60YDQsNGB0LDQstGW0LrQsF/RgtGA0LDRntC90Y9f0YfRjdGA0LLQtdC90Y9f0LvRltC/0LXQvdGPX9C20L3RltGe0L3Rj1/QstC10YDQsNGB0L3Rj1/QutCw0YHRgtGA0YvRh9C90ZbQutCwX9C70ZbRgdGC0LDQv9Cw0LTQsF/RgdC90LXQttC90Y8nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6ICfRgdGC0YPQtNC30LXQvdGMX9C70Y7RgtGLX9GB0LDQutCw0LLRltC6X9C60YDQsNGB0LDQstGW0Lpf0YLRgNCw0LLQtdC90Yxf0YfRjdGA0LLQtdC90Yxf0LvRltC/0LXQvdGMX9C20L3RltCy0LXQvdGMX9Cy0LXRgNCw0YHQtdC90Yxf0LrQsNGB0YLRgNGL0YfQvdGW0Lpf0LvRltGB0YLQsNC/0LDQtF/RgdC90LXQttCw0L3RjCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDogJ9GB0YLRg9C0X9C70Y7Rgl/RgdCw0Lpf0LrRgNCw0YFf0YLRgNCw0LJf0YfRjdGA0LJf0LvRltC/X9C20L3RltCyX9Cy0LXRgF/QutCw0YHRgl/Qu9GW0YHRgl/RgdC90LXQticuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogJ9C90Y/QtNC30LXQu9GOX9C/0LDQvdGP0LTQt9C10LvQsNC6X9Cw0Z7RgtC+0YDQsNC6X9GB0LXRgNCw0LTRg1/Rh9Cw0YbQstC10YBf0L/Rj9GC0L3RltGG0YNf0YHRg9Cx0L7RgtGDJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGFuZGFsb25lOiAn0L3Rj9C00LfQtdC70Y9f0L/QsNC90Y/QtNC30LXQu9Cw0Lpf0LDRntGC0L7RgNCw0Lpf0YHQtdGA0LDQtNCwX9GH0LDRhtCy0LXRgF/Qv9GP0YLQvdGW0YbQsF/RgdGD0LHQvtGC0LAnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiAvXFxbID9b0KPRg9GeXSA/KD860LzRltC90YPQu9GD0Y580L3QsNGB0YLRg9C/0L3Rg9GOKT8gP1xcXSA/ZGRkZC8sXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfQvdC0X9C/0L1f0LDRgl/RgdGAX9GH0YZf0L/Rgl/RgdCxJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9C90LRf0L/QvV/QsNGCX9GB0YBf0YfRhl/Qv9GCX9GB0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVkg0LMuJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZINCzLiwgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZINCzLiwgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vQodGR0L3QvdGPINGeXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9CX0LDRntGC0YDQsCDRnl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vQo9GH0L7RgNCwINGeXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW9CjXSBkZGRkIFvRnl0gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CjINC80ZbQvdGD0LvRg9GOXSBkZGRkIFvRnl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0KMg0LzRltC90YPQu9GLXSBkZGRkIFvRnl0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9C/0YDQsNC3ICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDRgtCw0LzRgycsXG4gICAgICAgICAgICBzOiAn0L3QtdC60LDQu9GM0LrRliDRgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgbTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIG1tOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgaDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIGhoOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgZDogJ9C00LfQtdC90YwnLFxuICAgICAgICAgICAgZGQ6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBNOiAn0LzQtdGB0Y/RhicsXG4gICAgICAgICAgICBNTTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIHk6ICfQs9C+0LQnLFxuICAgICAgICAgICAgeXk6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/QvdC+0YfRi3zRgNCw0L3RltGG0Yt80LTQvdGPfNCy0LXRh9Cw0YDQsC8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIC9eKNC00L3Rj3zQstC10YfQsNGA0LApJC8udGVzdChpbnB1dCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9C90L7Rh9GLJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfRgNCw0L3RltGG0YsnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9C00L3Rjyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0LLQtdGH0LDRgNCwJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LSjRlnzRi3zQs9CwKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG51bWJlciAlIDEwID09PSAyIHx8IG51bWJlciAlIDEwID09PSAzKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyICUgMTAwICE9PSAxMiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyICUgMTAwICE9PSAxM1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBudW1iZXIgKyAnLdGWJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBudW1iZXIgKyAnLdGLJztcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LPQsCc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJlO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEJ1bGdhcmlhbiBbYmddXG4vLyEgYXV0aG9yIDogS3Jhc2VuIEJvcmlzb3YgOiBodHRwczovL2dpdGh1Yi5jb20va3JhelxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGJnID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYmcnLCB7XG4gICAgICAgIG1vbnRoczogJ9GP0L3Rg9Cw0YDQuF/RhNC10LLRgNGD0LDRgNC4X9C80LDRgNGCX9Cw0L/RgNC40Ltf0LzQsNC5X9GO0L3QuF/RjtC70Lhf0LDQstCz0YPRgdGCX9GB0LXQv9GC0LXQvNCy0YDQuF/QvtC60YLQvtC80LLRgNC4X9C90L7QtdC80LLRgNC4X9C00LXQutC10LzQstGA0LgnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn0Y/QvdGDX9GE0LXQsl/QvNCw0YBf0LDQv9GAX9C80LDQuV/RjtC90Lhf0Y7Qu9C4X9Cw0LLQs1/RgdC10L9f0L7QutGCX9C90L7QtV/QtNC10LonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAn0L3QtdC00LXQu9GPX9C/0L7QvdC10LTQtdC70L3QuNC6X9Cy0YLQvtGA0L3QuNC6X9GB0YDRj9C00LBf0YfQtdGC0LLRitGA0YLRitC6X9C/0LXRgtGK0Lpf0YHRitCx0L7RgtCwJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn0L3QtdC0X9C/0L7QvV/QstGC0L5f0YHRgNGPX9GH0LXRgl/Qv9C10YJf0YHRitCxJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9C90LRf0L/QvV/QstGCX9GB0YBf0YfRgl/Qv9GCX9GB0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnRC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9CU0L3QtdGBINCyXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9Cj0YLRgNC1INCyXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9CyXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9CS0YfQtdGA0LAg0LJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQnNC40L3QsNC70LDRgtCwXSBkZGRkIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQnNC40L3QsNC70LjRj10gZGRkZCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfRgdC70LXQtCAlcycsXG4gICAgICAgICAgICBwYXN0OiAn0L/RgNC10LTQuCAlcycsXG4gICAgICAgICAgICBzOiAn0L3Rj9C60L7Qu9C60L4g0YHQtdC60YPQvdC00LgnLFxuICAgICAgICAgICAgc3M6ICclZCDRgdC10LrRg9C90LTQuCcsXG4gICAgICAgICAgICBtOiAn0LzQuNC90YPRgtCwJyxcbiAgICAgICAgICAgIG1tOiAnJWQg0LzQuNC90YPRgtC4JyxcbiAgICAgICAgICAgIGg6ICfRh9Cw0YEnLFxuICAgICAgICAgICAgaGg6ICclZCDRh9Cw0YHQsCcsXG4gICAgICAgICAgICBkOiAn0LTQtdC9JyxcbiAgICAgICAgICAgIGRkOiAnJWQg0LTQtdC90LAnLFxuICAgICAgICAgICAgdzogJ9GB0LXQtNC80LjRhtCwJyxcbiAgICAgICAgICAgIHd3OiAnJWQg0YHQtdC00LzQuNGG0LgnLFxuICAgICAgICAgICAgTTogJ9C80LXRgdC10YYnLFxuICAgICAgICAgICAgTU06ICclZCDQvNC10YHQtdGG0LAnLFxuICAgICAgICAgICAgeTogJ9Cz0L7QtNC40L3QsCcsXG4gICAgICAgICAgICB5eTogJyVkINCz0L7QtNC40L3QuCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0LXQsnzQtdC9fNGC0Lh80LLQuHzRgNC4fNC80LgpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGxhc3REaWdpdCA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIGxhc3QyRGlnaXRzID0gbnVtYmVyICUgMTAwO1xuICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdC10LInO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0MkRpZ2l0cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdC10L0nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0MkRpZ2l0cyA+IDEwICYmIGxhc3QyRGlnaXRzIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3RgtC4JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdERpZ2l0ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LLQuCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3REaWdpdCA9PT0gMikge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdGA0LgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0RGlnaXQgPT09IDcgfHwgbGFzdERpZ2l0ID09PSA4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LzQuCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdGC0LgnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYmc7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQmFtYmFyYSBbYm1dXG4vLyEgYXV0aG9yIDogRXN0ZWxsZSBDb21tZW50IDogaHR0cHM6Ly9naXRodWIuY29tL2VzdGVsbGVjb21tZW50XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgYm0gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdibScsIHtcbiAgICAgICAgbW9udGhzOiAnWmFud3V5ZWthbG9fRmV3dXJ1eWVrYWxvX01hcmlzaWthbG9fQXdpcmlsaWthbG9fTcmba2Fsb19adXfJm25rYWxvX1p1bHV5ZWthbG9fVXRpa2Fsb19TyZt0YW5idXJ1a2Fsb1/JlGt1dMmUYnVydWthbG9fTm93YW5idXJ1a2Fsb19EZXNhbmJ1cnVrYWxvJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ1phbl9GZXdfTWFyX0F3aV9NyZtfWnV3X1p1bF9VdGlfU8mbdF/JlGt1X05vd19EZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnS2FyaV9OdMmbbsmbbl9UYXJhdGFfQXJhYmFfQWxhbWlzYV9KdW1hX1NpYmlyaScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0thcl9OdMmbX1Rhcl9BcmFfQWxhX0p1bV9TaWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnS2FfTnRfVGFfQXJfQWxfSnVfU2knLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ01NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWSBbbMmbcsmbXSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBNTU1NIFt0aWxlXSBEIFtzYW5dIFlZWVkgW2zJm3LJm10gSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tCaSBsyZtyyZtdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbU2luaSBsyZtyyZtdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbZG9uIGzJm3LJm10gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tLdW51IGzJm3LJm10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFt0yZttyZtuZW4gbMmbcsmbXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIGvJlG7JlCcsXG4gICAgICAgICAgICBwYXN0OiAnYSBiyZsgJXMgYsmUJyxcbiAgICAgICAgICAgIHM6ICdzYW5nYSBkYW1hIGRhbWEnLFxuICAgICAgICAgICAgc3M6ICdzZWtvbmRpICVkJyxcbiAgICAgICAgICAgIG06ICdtaW5pdGkga2VsZW4nLFxuICAgICAgICAgICAgbW06ICdtaW5pdGkgJWQnLFxuICAgICAgICAgICAgaDogJ2zJm3LJmyBrZWxlbicsXG4gICAgICAgICAgICBoaDogJ2zJm3LJmyAlZCcsXG4gICAgICAgICAgICBkOiAndGlsZSBrZWxlbicsXG4gICAgICAgICAgICBkZDogJ3RpbGUgJWQnLFxuICAgICAgICAgICAgTTogJ2thbG8ga2VsZW4nLFxuICAgICAgICAgICAgTU06ICdrYWxvICVkJyxcbiAgICAgICAgICAgIHk6ICdzYW4ga2VsZW4nLFxuICAgICAgICAgICAgeXk6ICdzYW4gJWQnLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYm07XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQmVuZ2FsaSAoQmFuZ2xhZGVzaCkgW2JuLWJkXVxuLy8hIGF1dGhvciA6IEFzcmFmIEhvc3NhaW4gUGF0b2FyeSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hc2h3b29sZm9yZFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICfgp6cnLFxuICAgICAgICAgICAgMjogJ+CnqCcsXG4gICAgICAgICAgICAzOiAn4KepJyxcbiAgICAgICAgICAgIDQ6ICfgp6onLFxuICAgICAgICAgICAgNTogJ+CnqycsXG4gICAgICAgICAgICA2OiAn4KesJyxcbiAgICAgICAgICAgIDc6ICfgp60nLFxuICAgICAgICAgICAgODogJ+CnricsXG4gICAgICAgICAgICA5OiAn4KevJyxcbiAgICAgICAgICAgIDA6ICfgp6YnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn4KenJzogJzEnLFxuICAgICAgICAgICAgJ+CnqCc6ICcyJyxcbiAgICAgICAgICAgICfgp6knOiAnMycsXG4gICAgICAgICAgICAn4KeqJzogJzQnLFxuICAgICAgICAgICAgJ+Cnqyc6ICc1JyxcbiAgICAgICAgICAgICfgp6wnOiAnNicsXG4gICAgICAgICAgICAn4KetJzogJzcnLFxuICAgICAgICAgICAgJ+Cnric6ICc4JyxcbiAgICAgICAgICAgICfgp68nOiAnOScsXG4gICAgICAgICAgICAn4KemJzogJzAnLFxuICAgICAgICB9O1xuXG4gICAgdmFyIGJuQmQgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdibi1iZCcsIHtcbiAgICAgICAgbW9udGhzOiAn4Kac4Ka+4Kao4KeB4Kef4Ka+4Kaw4Ka/X+Cmq+Cnh+CmrOCnjeCmsOCngeCnn+CmvuCmsOCmv1/gpq7gpr7gprDgp43gpppf4KaP4Kaq4KeN4Kaw4Ka/4KayX+CmruCnh1/gppzgp4Hgpqhf4Kac4KeB4Kay4Ka+4KaHX+CmhuCml+CmuOCnjeCmn1/gprjgp4fgpqrgp43gpp/gp4fgpq7gp43gpqzgprBf4KaF4KaV4KeN4Kaf4KeL4Kas4KawX+CmqOCmreCnh+CmruCnjeCmrOCmsF/gpqHgpr/gprjgp4fgpq7gp43gpqzgprAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn4Kac4Ka+4Kao4KeBX+Cmq+Cnh+CmrOCnjeCmsOCngV/gpq7gpr7gprDgp43gpppf4KaP4Kaq4KeN4Kaw4Ka/4KayX+CmruCnh1/gppzgp4Hgpqhf4Kac4KeB4Kay4Ka+4KaHX+CmhuCml+CmuOCnjeCmn1/gprjgp4fgpqrgp43gpp9f4KaF4KaV4KeN4Kaf4KeLX+CmqOCmreCnh1/gpqHgpr/gprjgp4cnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn4Kaw4Kas4Ka/4Kas4Ka+4KawX+CmuOCni+CmruCmrOCmvuCmsF/gpq7gppngp43gppfgprLgpqzgpr7gprBf4Kas4KeB4Kan4Kas4Ka+4KawX+CmrOCng+CmueCmuOCnjeCmquCmpOCmv+CmrOCmvuCmsF/gprbgp4HgppXgp43gprDgpqzgpr7gprBf4Ka24Kao4Ka/4Kas4Ka+4KawJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4Kaw4Kas4Ka/X+CmuOCni+Cmrl/gpq7gppngp43gppfgprJf4Kas4KeB4KanX+CmrOCng+CmueCmuOCnjeCmquCmpOCmv1/gprbgp4HgppXgp43gprBf4Ka24Kao4Ka/Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+CmsOCmrOCmv1/gprjgp4vgpq5f4Kau4KaZ4KeN4KaX4KayX+CmrOCngeCmp1/gpqzgp4Pgprlf4Ka24KeB4KaV4KeN4KawX+CmtuCmqOCmvycuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tIOCmuOCmruCnnycsXG4gICAgICAgICAgICBMVFM6ICdBIGg6bW06c3Mg4Ka44Kau4KefJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVksIEEgaDptbSDgprjgpq7gp58nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0g4Ka44Kau4KefJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4KaG4KacXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+CmhuCml+CmvuCmruCngOCmleCmvuCmsl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkLCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+Cml+CmpOCmleCmvuCmsl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4KaX4KakXSBkZGRkLCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIOCmquCmsOCnhycsXG4gICAgICAgICAgICBwYXN0OiAnJXMg4KaG4KaX4KeHJyxcbiAgICAgICAgICAgIHM6ICfgppXgp5/gp4fgppUg4Ka44KeH4KaV4KeH4Kao4KeN4KahJyxcbiAgICAgICAgICAgIHNzOiAnJWQg4Ka44KeH4KaV4KeH4Kao4KeN4KahJyxcbiAgICAgICAgICAgIG06ICfgpo/gppUg4Kau4Ka/4Kao4Ka/4KafJyxcbiAgICAgICAgICAgIG1tOiAnJWQg4Kau4Ka/4Kao4Ka/4KafJyxcbiAgICAgICAgICAgIGg6ICfgpo/gppUg4KaY4Kao4KeN4Kaf4Ka+JyxcbiAgICAgICAgICAgIGhoOiAnJWQg4KaY4Kao4KeN4Kaf4Ka+JyxcbiAgICAgICAgICAgIGQ6ICfgpo/gppUg4Kam4Ka/4KaoJyxcbiAgICAgICAgICAgIGRkOiAnJWQg4Kam4Ka/4KaoJyxcbiAgICAgICAgICAgIE06ICfgpo/gppUg4Kau4Ka+4Ka4JyxcbiAgICAgICAgICAgIE1NOiAnJWQg4Kau4Ka+4Ka4JyxcbiAgICAgICAgICAgIHk6ICfgpo/gppUg4Kas4Kab4KawJyxcbiAgICAgICAgICAgIHl5OiAnJWQg4Kas4Kab4KawJyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Cnp+CnqOCnqeCnquCnq+CnrOCnreCnruCnr+Cnpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4Kaw4Ka+4KakfOCmreCni+CmsHzgprjgppXgpr7gprJ84Kam4KeB4Kaq4KeB4KawfOCmrOCmv+CmleCmvuCmsnzgprjgpqjgp43gpqfgp43gpq/gpr584Kaw4Ka+4KakLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4Kaw4Ka+4KakJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4Kat4KeL4KawJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CmuOCmleCmvuCmsicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpqbgp4Hgpqrgp4HgprAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMyA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4Kas4Ka/4KaV4Ka+4KayJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4Ka44Kao4KeN4Kan4KeN4Kav4Ka+Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kaw4Ka+4KakJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CmreCni+CmsCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Ka44KaV4Ka+4KayJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpqbgp4Hgpqrgp4HgprAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CmrOCmv+CmleCmvuCmsic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Ka44Kao4KeN4Kan4KeN4Kav4Ka+JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgprDgpr7gpqQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYm5CZDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBCZW5nYWxpIFtibl1cbi8vISBhdXRob3IgOiBLYXVzaGlrIEdhbmRoaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9rYXVzaGlrZ2FuZGhpXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ+CnpycsXG4gICAgICAgICAgICAyOiAn4KeoJyxcbiAgICAgICAgICAgIDM6ICfgp6knLFxuICAgICAgICAgICAgNDogJ+CnqicsXG4gICAgICAgICAgICA1OiAn4KerJyxcbiAgICAgICAgICAgIDY6ICfgp6wnLFxuICAgICAgICAgICAgNzogJ+CnrScsXG4gICAgICAgICAgICA4OiAn4KeuJyxcbiAgICAgICAgICAgIDk6ICfgp68nLFxuICAgICAgICAgICAgMDogJ+CnpicsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfgp6cnOiAnMScsXG4gICAgICAgICAgICAn4KeoJzogJzInLFxuICAgICAgICAgICAgJ+CnqSc6ICczJyxcbiAgICAgICAgICAgICfgp6onOiAnNCcsXG4gICAgICAgICAgICAn4KerJzogJzUnLFxuICAgICAgICAgICAgJ+CnrCc6ICc2JyxcbiAgICAgICAgICAgICfgp60nOiAnNycsXG4gICAgICAgICAgICAn4KeuJzogJzgnLFxuICAgICAgICAgICAgJ+Cnryc6ICc5JyxcbiAgICAgICAgICAgICfgp6YnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICB2YXIgYm4gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdibicsIHtcbiAgICAgICAgbW9udGhzOiAn4Kac4Ka+4Kao4KeB4Kef4Ka+4Kaw4Ka/X+Cmq+Cnh+CmrOCnjeCmsOCngeCnn+CmvuCmsOCmv1/gpq7gpr7gprDgp43gpppf4KaP4Kaq4KeN4Kaw4Ka/4KayX+CmruCnh1/gppzgp4Hgpqhf4Kac4KeB4Kay4Ka+4KaHX+CmhuCml+CmuOCnjeCmn1/gprjgp4fgpqrgp43gpp/gp4fgpq7gp43gpqzgprBf4KaF4KaV4KeN4Kaf4KeL4Kas4KawX+CmqOCmreCnh+CmruCnjeCmrOCmsF/gpqHgpr/gprjgp4fgpq7gp43gpqzgprAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn4Kac4Ka+4Kao4KeBX+Cmq+Cnh+CmrOCnjeCmsOCngV/gpq7gpr7gprDgp43gpppf4KaP4Kaq4KeN4Kaw4Ka/4KayX+CmruCnh1/gppzgp4Hgpqhf4Kac4KeB4Kay4Ka+4KaHX+CmhuCml+CmuOCnjeCmn1/gprjgp4fgpqrgp43gpp9f4KaF4KaV4KeN4Kaf4KeLX+CmqOCmreCnh1/gpqHgpr/gprjgp4cnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn4Kaw4Kas4Ka/4Kas4Ka+4KawX+CmuOCni+CmruCmrOCmvuCmsF/gpq7gppngp43gppfgprLgpqzgpr7gprBf4Kas4KeB4Kan4Kas4Ka+4KawX+CmrOCng+CmueCmuOCnjeCmquCmpOCmv+CmrOCmvuCmsF/gprbgp4HgppXgp43gprDgpqzgpr7gprBf4Ka24Kao4Ka/4Kas4Ka+4KawJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4Kaw4Kas4Ka/X+CmuOCni+Cmrl/gpq7gppngp43gppfgprJf4Kas4KeB4KanX+CmrOCng+CmueCmuOCnjeCmquCmpOCmv1/gprbgp4HgppXgp43gprBf4Ka24Kao4Ka/Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+CmsOCmrOCmv1/gprjgp4vgpq5f4Kau4KaZ4KeN4KaX4KayX+CmrOCngeCmp1/gpqzgp4Pgprlf4Ka24KeB4KaV4KeN4KawX+CmtuCmqOCmvycuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tIOCmuOCmruCnnycsXG4gICAgICAgICAgICBMVFM6ICdBIGg6bW06c3Mg4Ka44Kau4KefJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVksIEEgaDptbSDgprjgpq7gp58nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0g4Ka44Kau4KefJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4KaG4KacXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+CmhuCml+CmvuCmruCngOCmleCmvuCmsl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkLCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+Cml+CmpOCmleCmvuCmsl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4KaX4KakXSBkZGRkLCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIOCmquCmsOCnhycsXG4gICAgICAgICAgICBwYXN0OiAnJXMg4KaG4KaX4KeHJyxcbiAgICAgICAgICAgIHM6ICfgppXgp5/gp4fgppUg4Ka44KeH4KaV4KeH4Kao4KeN4KahJyxcbiAgICAgICAgICAgIHNzOiAnJWQg4Ka44KeH4KaV4KeH4Kao4KeN4KahJyxcbiAgICAgICAgICAgIG06ICfgpo/gppUg4Kau4Ka/4Kao4Ka/4KafJyxcbiAgICAgICAgICAgIG1tOiAnJWQg4Kau4Ka/4Kao4Ka/4KafJyxcbiAgICAgICAgICAgIGg6ICfgpo/gppUg4KaY4Kao4KeN4Kaf4Ka+JyxcbiAgICAgICAgICAgIGhoOiAnJWQg4KaY4Kao4KeN4Kaf4Ka+JyxcbiAgICAgICAgICAgIGQ6ICfgpo/gppUg4Kam4Ka/4KaoJyxcbiAgICAgICAgICAgIGRkOiAnJWQg4Kam4Ka/4KaoJyxcbiAgICAgICAgICAgIE06ICfgpo/gppUg4Kau4Ka+4Ka4JyxcbiAgICAgICAgICAgIE1NOiAnJWQg4Kau4Ka+4Ka4JyxcbiAgICAgICAgICAgIHk6ICfgpo/gppUg4Kas4Kab4KawJyxcbiAgICAgICAgICAgIHl5OiAnJWQg4Kas4Kab4KawJyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Cnp+CnqOCnqeCnquCnq+CnrOCnreCnruCnr+Cnpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CmsOCmvuCmpHzgprjgppXgpr7gprJ84Kam4KeB4Kaq4KeB4KawfOCmrOCmv+CmleCmvuCmsnzgprDgpr7gpqQvLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKG1lcmlkaWVtID09PSAn4Kaw4Ka+4KakJyAmJiBob3VyID49IDQpIHx8XG4gICAgICAgICAgICAgICAgKG1lcmlkaWVtID09PSAn4Kam4KeB4Kaq4KeB4KawJyAmJiBob3VyIDwgNSkgfHxcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ+CmrOCmv+CmleCmvuCmsidcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgprDgpr7gpqQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CmuOCmleCmvuCmsic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kam4KeB4Kaq4KeB4KawJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpqzgpr/gppXgpr7gprInO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CmsOCmvuCmpCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBibjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBUaWJldGFuIFtib11cbi8vISBhdXRob3IgOiBUaHVwdGVuIE4uIENoYWtyaXNoYXIgOiBodHRwczovL2dpdGh1Yi5jb20vdmFqcmFkb2dcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4LyhJyxcbiAgICAgICAgICAgIDI6ICfgvKInLFxuICAgICAgICAgICAgMzogJ+C8oycsXG4gICAgICAgICAgICA0OiAn4LykJyxcbiAgICAgICAgICAgIDU6ICfgvKUnLFxuICAgICAgICAgICAgNjogJ+C8picsXG4gICAgICAgICAgICA3OiAn4LynJyxcbiAgICAgICAgICAgIDg6ICfgvKgnLFxuICAgICAgICAgICAgOTogJ+C8qScsXG4gICAgICAgICAgICAwOiAn4LygJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+C8oSc6ICcxJyxcbiAgICAgICAgICAgICfgvKInOiAnMicsXG4gICAgICAgICAgICAn4LyjJzogJzMnLFxuICAgICAgICAgICAgJ+C8pCc6ICc0JyxcbiAgICAgICAgICAgICfgvKUnOiAnNScsXG4gICAgICAgICAgICAn4LymJzogJzYnLFxuICAgICAgICAgICAgJ+C8pyc6ICc3JyxcbiAgICAgICAgICAgICfgvKgnOiAnOCcsXG4gICAgICAgICAgICAn4LypJzogJzknLFxuICAgICAgICAgICAgJ+C8oCc6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciBibyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2JvJywge1xuICAgICAgICBtb250aHM6ICfgvZ/gvrPgvIvgvZbgvIvgvZHgvYTgvIvgvZTgvbxf4L2f4L6z4LyL4L2W4LyL4L2C4L2J4L2y4L2m4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9guC9puC9tOC9mOC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvZ7gvbLgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2j4L6U4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9keC+suC9tOC9guC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvZHgvbTgvZPgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2i4L6S4L6x4L2R4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9keC9guC9tOC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvYXgvbTgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2F4L204LyL4L2C4L2F4L2y4L2C4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9heC9tOC8i+C9guC9ieC9suC9puC8i+C9lCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfgvZ/gvrPgvIsxX+C9n+C+s+C8izJf4L2f4L6z4LyLM1/gvZ/gvrPgvIs0X+C9n+C+s+C8izVf4L2f4L6z4LyLNl/gvZ/gvrPgvIs3X+C9n+C+s+C8izhf4L2f4L6z4LyLOV/gvZ/gvrPgvIsxMF/gvZ/gvrPgvIsxMV/gvZ/gvrPgvIsxMicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogL14o4L2f4L6z4LyLXFxkezEsMn0pLyxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICfgvYLgvZ/gvaDgvIvgvYngvbLgvIvgvZjgvItf4L2C4L2f4L2g4LyL4L2f4L6z4LyL4L2W4LyLX+C9guC9n+C9oOC8i+C9mOC9suC9guC8i+C9keC9mOC9ouC8i1/gvYLgvZ/gvaDgvIvgvaPgvrfgvYLgvIvgvZTgvItf4L2C4L2f4L2g4LyL4L2V4L204L2i4LyL4L2W4L20X+C9guC9n+C9oOC8i+C9lOC8i+C9puC9hOC9puC8i1/gvYLgvZ/gvaDgvIvgvabgvqTgvbrgvZPgvIvgvZTgvIsnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgvYngvbLgvIvgvZjgvItf4L2f4L6z4LyL4L2W4LyLX+C9mOC9suC9guC8i+C9keC9mOC9ouC8i1/gvaPgvrfgvYLgvIvgvZTgvItf4L2V4L204L2i4LyL4L2W4L20X+C9lOC8i+C9puC9hOC9puC8i1/gvabgvqTgvbrgvZPgvIvgvZTgvIsnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4L2J4L2yX+C9n+C+s1/gvZjgvbLgvYJf4L2j4L634L2CX+C9leC9tOC9ol/gvabgvYTgvaZf4L2m4L6k4L264L2TJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdBIGg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnQSBoOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVksIEEgaDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+C9keC9suC8i+C9ouC9suC9hF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgvabgvYTgvIvgvYngvbLgvZNdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW+C9luC9keC9tOC9k+C8i+C9leC+suC9guC8i+C9ouC+l+C9uuC9puC8i+C9mF0sIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4L2B4LyL4L2m4L2EXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgvZbgvZHgvbTgvZPgvIvgvZXgvrLgvYLgvIvgvZjgvZDgvaDgvIvgvZhdIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg4L2j4LyLJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgvabgvpTgvZPgvIvgvaMnLFxuICAgICAgICAgICAgczogJ+C9o+C9mOC8i+C9puC9hCcsXG4gICAgICAgICAgICBzczogJyVkIOC9puC+kOC9ouC8i+C9huC8jScsXG4gICAgICAgICAgICBtOiAn4L2m4L6Q4L2i4LyL4L2Y4LyL4L2C4L2F4L2y4L2CJyxcbiAgICAgICAgICAgIG1tOiAnJWQg4L2m4L6Q4L2i4LyL4L2YJyxcbiAgICAgICAgICAgIGg6ICfgvYbgvbTgvIvgvZrgvbzgvZHgvIvgvYLgvYXgvbLgvYInLFxuICAgICAgICAgICAgaGg6ICclZCDgvYbgvbTgvIvgvZrgvbzgvZEnLFxuICAgICAgICAgICAgZDogJ+C9ieC9suC9k+C8i+C9guC9heC9suC9gicsXG4gICAgICAgICAgICBkZDogJyVkIOC9ieC9suC9k+C8iycsXG4gICAgICAgICAgICBNOiAn4L2f4L6z4LyL4L2W4LyL4L2C4L2F4L2y4L2CJyxcbiAgICAgICAgICAgIE1NOiAnJWQg4L2f4L6z4LyL4L2WJyxcbiAgICAgICAgICAgIHk6ICfgvaPgvbzgvIvgvYLgvYXgvbLgvYInLFxuICAgICAgICAgICAgeXk6ICclZCDgvaPgvbwnLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4Lyh4Lyi4Lyj4Lyk4Lyl4Lym4Lyn4Lyo4Lyp4LygXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4L2Y4L2a4L2T4LyL4L2Y4L28fOC9nuC9vOC9guC9puC8i+C9gOC9pnzgvYngvbLgvZPgvIvgvYLgvbTgvYR84L2R4L2C4L284L2E4LyL4L2R4L2CfOC9mOC9muC9k+C8i+C9mOC9vC8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAobWVyaWRpZW0gPT09ICfgvZjgvZrgvZPgvIvgvZjgvbwnICYmIGhvdXIgPj0gNCkgfHxcbiAgICAgICAgICAgICAgICAobWVyaWRpZW0gPT09ICfgvYngvbLgvZPgvIvgvYLgvbTgvYQnICYmIGhvdXIgPCA1KSB8fFxuICAgICAgICAgICAgICAgIG1lcmlkaWVtID09PSAn4L2R4L2C4L284L2E4LyL4L2R4L2CJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C9mOC9muC9k+C8i+C9mOC9vCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4L2e4L284L2C4L2m4LyL4L2A4L2mJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgvYngvbLgvZPgvIvgvYLgvbTgvYQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C9keC9guC9vOC9hOC8i+C9keC9gic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4L2Y4L2a4L2T4LyL4L2Y4L28JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJvO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEJyZXRvbiBbYnJdXG4vLyEgYXV0aG9yIDogSmVhbi1CYXB0aXN0ZSBMZSBEdWlnb3UgOiBodHRwczovL2dpdGh1Yi5jb20vamJsZWR1aWdvdVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lV2l0aE11dGF0aW9uKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBtbTogJ211bnV0ZW5uJyxcbiAgICAgICAgICAgIE1NOiAnbWl6JyxcbiAgICAgICAgICAgIGRkOiAnZGV2ZXpoJyxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG51bWJlciArICcgJyArIG11dGF0aW9uKGZvcm1hdFtrZXldLCBudW1iZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzcGVjaWFsTXV0YXRpb25Gb3JZZWFycyhudW1iZXIpIHtcbiAgICAgICAgc3dpdGNoIChsYXN0TnVtYmVyKG51bWJlcikpIHtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyBibG9heic7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnIHZsb2F6JztcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBsYXN0TnVtYmVyKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyID4gOSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3ROdW1iZXIobnVtYmVyICUgMTApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG11dGF0aW9uKHRleHQsIG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICByZXR1cm4gc29mdE11dGF0aW9uKHRleHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBzb2Z0TXV0YXRpb24odGV4dCkge1xuICAgICAgICB2YXIgbXV0YXRpb25UYWJsZSA9IHtcbiAgICAgICAgICAgIG06ICd2JyxcbiAgICAgICAgICAgIGI6ICd2JyxcbiAgICAgICAgICAgIGQ6ICd6JyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG11dGF0aW9uVGFibGVbdGV4dC5jaGFyQXQoMCldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtdXRhdGlvblRhYmxlW3RleHQuY2hhckF0KDApXSArIHRleHQuc3Vic3RyaW5nKDEpO1xuICAgIH1cblxuICAgIHZhciBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9eZ2VuL2ksXG4gICAgICAgICAgICAvXmNbyrxcXCddaHdlL2ksXG4gICAgICAgICAgICAvXm1ldS9pLFxuICAgICAgICAgICAgL15lYnIvaSxcbiAgICAgICAgICAgIC9ebWFlL2ksXG4gICAgICAgICAgICAvXihtZXp8ZXZlKS9pLFxuICAgICAgICAgICAgL15nb3UvaSxcbiAgICAgICAgICAgIC9eZW9zL2ksXG4gICAgICAgICAgICAvXmd3ZS9pLFxuICAgICAgICAgICAgL15oZXIvaSxcbiAgICAgICAgICAgIC9eZHUvaSxcbiAgICAgICAgICAgIC9ea2VyL2ksXG4gICAgICAgIF0sXG4gICAgICAgIG1vbnRoc1JlZ2V4ID0gL14oZ2VudmVyfGNbyrxcXCddaHdldnJlcnxtZXVyemh8ZWJyZWx8bWFlfG1lemhldmVufGdvdWVyZXxlb3N0fGd3ZW5nb2xvfGhlcmV8ZHV8a2VyenV8Z2VufGNbyrxcXCddaHdlfG1ldXxlYnJ8bWFlfGV2ZXxnb3V8ZW9zfGd3ZXxoZXJ8ZHV8a2VyKS9pLFxuICAgICAgICBtb250aHNTdHJpY3RSZWdleCA9IC9eKGdlbnZlcnxjW8q8XFwnXWh3ZXZyZXJ8bWV1cnpofGVicmVsfG1hZXxtZXpoZXZlbnxnb3VlcmV8ZW9zdHxnd2VuZ29sb3xoZXJlfGR1fGtlcnp1KS9pLFxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4ID0gL14oZ2VufGNbyrxcXCddaHdlfG1ldXxlYnJ8bWFlfGV2ZXxnb3V8ZW9zfGd3ZXxoZXJ8ZHV8a2VyKS9pLFxuICAgICAgICBmdWxsV2Vla2RheXNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9ec3VsL2ksXG4gICAgICAgICAgICAvXmx1bi9pLFxuICAgICAgICAgICAgL15tZXVyemgvaSxcbiAgICAgICAgICAgIC9ebWVyY1vKvFxcJ11oZXIvaSxcbiAgICAgICAgICAgIC9eeWFvdS9pLFxuICAgICAgICAgICAgL15nd2VuZXIvaSxcbiAgICAgICAgICAgIC9ec2Fkb3JuL2ksXG4gICAgICAgIF0sXG4gICAgICAgIHNob3J0V2Vla2RheXNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9eU3VsL2ksXG4gICAgICAgICAgICAvXkx1bi9pLFxuICAgICAgICAgICAgL15NZXUvaSxcbiAgICAgICAgICAgIC9eTWVyL2ksXG4gICAgICAgICAgICAvXllhby9pLFxuICAgICAgICAgICAgL15Hd2UvaSxcbiAgICAgICAgICAgIC9eU2FkL2ksXG4gICAgICAgIF0sXG4gICAgICAgIG1pbldlZWtkYXlzUGFyc2UgPSBbXG4gICAgICAgICAgICAvXlN1L2ksXG4gICAgICAgICAgICAvXkx1L2ksXG4gICAgICAgICAgICAvXk1lKFtecl18JCkvaSxcbiAgICAgICAgICAgIC9eTWVyL2ksXG4gICAgICAgICAgICAvXllhL2ksXG4gICAgICAgICAgICAvXkd3L2ksXG4gICAgICAgICAgICAvXlNhL2ksXG4gICAgICAgIF07XG5cbiAgICB2YXIgYnIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdicicsIHtcbiAgICAgICAgbW9udGhzOiAnR2VudmVyX0PKvGh3ZXZyZXJfTWV1cnpoX0VicmVsX01hZV9NZXpoZXZlbl9Hb3VlcmVfRW9zdF9Hd2VuZ29sb19IZXJlX0R1X0tlcnp1Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0dlbl9Dyrxod2VfTWV1X0Vicl9NYWVfRXZlX0dvdV9Fb3NfR3dlX0hlcl9EdV9LZXInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnU3VsX0x1bl9NZXVyemhfTWVyY8q8aGVyX1lhb3VfR3dlbmVyX1NhZG9ybicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N1bF9MdW5fTWV1X01lcl9ZYW9fR3dlX1NhZCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTdV9MdV9NZV9NZXJfWWFfR3dfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2U6IG1pbldlZWtkYXlzUGFyc2UsXG4gICAgICAgIGZ1bGxXZWVrZGF5c1BhcnNlOiBmdWxsV2Vla2RheXNQYXJzZSxcbiAgICAgICAgc2hvcnRXZWVrZGF5c1BhcnNlOiBzaG9ydFdlZWtkYXlzUGFyc2UsXG4gICAgICAgIG1pbldlZWtkYXlzUGFyc2U6IG1pbldlZWtkYXlzUGFyc2UsXG5cbiAgICAgICAgbW9udGhzUmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU3RyaWN0UmVnZXg6IG1vbnRoc1N0cmljdFJlZ2V4LFxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OiBtb250aHNTaG9ydFN0cmljdFJlZ2V4LFxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBbYSB2aXpdIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIFthIHZpel0gTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIFthIHZpel0gTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSGl6aXYgZGFdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbV2FyY8q8aG9hemggZGFdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbZGFdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbRGVjyrxoIGRhXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW3Bhc2V0IGRhXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2EtYmVubiAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgyrx6bycsXG4gICAgICAgICAgICBzOiAndW4gbmViZXVkIHNlZ29uZGVubm/DuScsXG4gICAgICAgICAgICBzczogJyVkIGVpbGVubicsXG4gICAgICAgICAgICBtOiAndXIgdnVudXRlbm4nLFxuICAgICAgICAgICAgbW06IHJlbGF0aXZlVGltZVdpdGhNdXRhdGlvbixcbiAgICAgICAgICAgIGg6ICd1biBldXInLFxuICAgICAgICAgICAgaGg6ICclZCBldXInLFxuICAgICAgICAgICAgZDogJ3VuIGRldmV6aCcsXG4gICAgICAgICAgICBkZDogcmVsYXRpdmVUaW1lV2l0aE11dGF0aW9uLFxuICAgICAgICAgICAgTTogJ3VyIG1peicsXG4gICAgICAgICAgICBNTTogcmVsYXRpdmVUaW1lV2l0aE11dGF0aW9uLFxuICAgICAgICAgICAgeTogJ3VyIGJsb2F6JyxcbiAgICAgICAgICAgIHl5OiBzcGVjaWFsTXV0YXRpb25Gb3JZZWFycyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KGHDsXx2ZXQpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIG91dHB1dCA9IG51bWJlciA9PT0gMSA/ICdhw7EnIDogJ3ZldCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9hLm0ufGcubS4vLCAvLyBnb3VkZSBtZXJlbm4gfCBhLXJhb2sgbWVyZW5uXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuID09PSAnZy5tLic7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91ciA8IDEyID8gJ2EubS4nIDogJ2cubS4nO1xuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJyO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEJvc25pYW4gW2JzXVxuLy8hIGF1dGhvciA6IE5lZGltIENob2xpY2ggOiBodHRwczovL2dpdGh1Yi5jb20vZnJvbnR5YXJkXG4vLyEgYmFzZWQgb24gKGhyKSB0cmFuc2xhdGlvbiBieSBCb2phbiBNYXJrb3ZpxIdcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbnVtYmVyICsgJyAnO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzZWt1bmRhJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMiB8fCBudW1iZXIgPT09IDMgfHwgbnVtYmVyID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2VrdW5kZSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzZWt1bmRpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2plZG5hIG1pbnV0YScgOiAnamVkbmUgbWludXRlJztcbiAgICAgICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWludXRhJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMiB8fCBudW1iZXIgPT09IDMgfHwgbnVtYmVyID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWludXRlJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21pbnV0YSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdqZWRhbiBzYXQnIDogJ2plZG5vZyBzYXRhJztcbiAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2F0JztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMiB8fCBudW1iZXIgPT09IDMgfHwgbnVtYmVyID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2F0YSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzYXRpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnZGFuJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2RhbmEnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtamVzZWMnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtamVzZWNhJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21qZXNlY2knO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdnb2RpbmEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdnb2RpbmUnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnZ29kaW5hJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBicyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2JzJywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJhcl9va3RvYmFyX25vdmVtYmFyX2RlY2VtYmFyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2phbi5fZmViLl9tYXIuX2Fwci5fbWFqLl9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92Ll9kZWMuJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ25lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19zcmlqZWRhX8SNZXR2cnRha19wZXRha19zdWJvdGEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICduZWQuX3Bvbi5fdXRvLl9zcmkuX8SNZXQuX3BldC5fc3ViLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICduZV9wb191dF9zcl/EjWVfcGVfc3UnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2RhbmFzIHVdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbc3V0cmEgdV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW25lZGplbGp1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3JpamVkdV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW3N1Ym90dV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gZGRkZCBbdV0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2p1xI1lciB1XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Byb8WhbHVdIGRkZGQgW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJvxaFsZV0gW3N1Ym90ZV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJvxaFsaV0gZGRkZCBbdV0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3phICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdwcmlqZSAlcycsXG4gICAgICAgICAgICBzOiAncGFyIHNla3VuZGknLFxuICAgICAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogJ2RhbicsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTTogJ21qZXNlYycsXG4gICAgICAgICAgICBNTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogJ2dvZGludScsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJzO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IENhdGFsYW4gW2NhXVxuLy8hIGF1dGhvciA6IEp1YW4gRy4gSHVydGFkbyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qdWFuZ2h1cnRhZG9cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBjYSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2NhJywge1xuICAgICAgICBtb250aHM6IHtcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6ICdnZW5lcl9mZWJyZXJfbWFyw6dfYWJyaWxfbWFpZ19qdW55X2p1bGlvbF9hZ29zdF9zZXRlbWJyZV9vY3R1YnJlX25vdmVtYnJlX2Rlc2VtYnJlJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBmb3JtYXQ6IFwiZGUgZ2VuZXJfZGUgZmVicmVyX2RlIG1hcsOnX2QnYWJyaWxfZGUgbWFpZ19kZSBqdW55X2RlIGp1bGlvbF9kJ2Fnb3N0X2RlIHNldGVtYnJlX2Qnb2N0dWJyZV9kZSBub3ZlbWJyZV9kZSBkZXNlbWJyZVwiLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiAvRFtvRF0/KFxccykrTU1NTS8sXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnZ2VuLl9mZWJyLl9tYXLDp19hYnIuX21haWdfanVueV9qdWwuX2FnLl9zZXQuX29jdC5fbm92Ll9kZXMuJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ2RpdW1lbmdlX2RpbGx1bnNfZGltYXJ0c19kaW1lY3Jlc19kaWpvdXNfZGl2ZW5kcmVzX2Rpc3NhYnRlJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnZGcuX2RsLl9kdC5fZGMuX2RqLl9kdi5fZHMuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2RnX2RsX2R0X2RjX2RqX2R2X2RzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICAgICAgbGw6ICdEIE1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBbZGVdIFlZWVkgW2EgbGVzXSBIOm1tJyxcbiAgICAgICAgICAgIGxsbDogJ0QgTU1NIFlZWVksIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFtkZV0gWVlZWSBbYSBsZXNdIEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCBEIE1NTSBZWVlZLCBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1thdnVpIGEgJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAnbGVzJyA6ICdsYScpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHREYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tkZW3DoCBhICcgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ2xlcycgOiAnbGEnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZGRkZCBbYSAnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdsZXMnIDogJ2xhJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW2FoaXIgYSAnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdsZXMnIDogJ2xhJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAnW2VsXSBkZGRkIFtwYXNzYXQgYSAnICtcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdsZXMnIDogJ2xhJykgK1xuICAgICAgICAgICAgICAgICAgICAnXSBMVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiBcImQnYXF1w60gJXNcIixcbiAgICAgICAgICAgIHBhc3Q6ICdmYSAlcycsXG4gICAgICAgICAgICBzOiAndW5zIHNlZ29ucycsXG4gICAgICAgICAgICBzczogJyVkIHNlZ29ucycsXG4gICAgICAgICAgICBtOiAndW4gbWludXQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dHMnLFxuICAgICAgICAgICAgaDogJ3VuYSBob3JhJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG9yZXMnLFxuICAgICAgICAgICAgZDogJ3VuIGRpYScsXG4gICAgICAgICAgICBkZDogJyVkIGRpZXMnLFxuICAgICAgICAgICAgTTogJ3VuIG1lcycsXG4gICAgICAgICAgICBNTTogJyVkIG1lc29zJyxcbiAgICAgICAgICAgIHk6ICd1biBhbnknLFxuICAgICAgICAgICAgeXk6ICclZCBhbnlzJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHJ8bnx0fMOofGEpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICBudW1iZXIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgPyAncidcbiAgICAgICAgICAgICAgICAgICAgOiBudW1iZXIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgPyAnbidcbiAgICAgICAgICAgICAgICAgICAgOiBudW1iZXIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgPyAncidcbiAgICAgICAgICAgICAgICAgICAgOiBudW1iZXIgPT09IDRcbiAgICAgICAgICAgICAgICAgICAgPyAndCdcbiAgICAgICAgICAgICAgICAgICAgOiAnw6gnO1xuICAgICAgICAgICAgaWYgKHBlcmlvZCA9PT0gJ3cnIHx8IHBlcmlvZCA9PT0gJ1cnKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gJ2EnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNhO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEN6ZWNoIFtjc11cbi8vISBhdXRob3IgOiBwZXRyYmVsYSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRyYmVsYVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRocyA9ICdsZWRlbl/Dum5vcl9ixZllemVuX2R1YmVuX2t2xJt0ZW5fxI1lcnZlbl/EjWVydmVuZWNfc3JwZW5fesOhxZnDrV/FmcOtamVuX2xpc3RvcGFkX3Byb3NpbmVjJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydCA9ICdsZWRfw7pub19ixZllX2R1Yl9rdsSbX8SNdm5fxI12Y19zcnBfesOhxZlfxZnDrWpfbGlzX3Bybycuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2UgPSBbXG4gICAgICAgICAgICAvXmxlZC9pLFxuICAgICAgICAgICAgL17Dum5vL2ksXG4gICAgICAgICAgICAvXmLFmWUvaSxcbiAgICAgICAgICAgIC9eZHViL2ksXG4gICAgICAgICAgICAvXmt2xJsvaSxcbiAgICAgICAgICAgIC9eKMSNdm58xI1lcnZlbiR8xI1lcnZuYSkvaSxcbiAgICAgICAgICAgIC9eKMSNdmN8xI1lcnZlbmVjfMSNZXJ2ZW5jZSkvaSxcbiAgICAgICAgICAgIC9ec3JwL2ksXG4gICAgICAgICAgICAvXnrDocWZL2ksXG4gICAgICAgICAgICAvXsWZw61qL2ksXG4gICAgICAgICAgICAvXmxpcy9pLFxuICAgICAgICAgICAgL15wcm8vaSxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gTk9URTogJ8SNZXJ2ZW4nIGlzIHN1YnN0cmluZyBvZiAnxI1lcnZlbmVjJzsgdGhlcmVmb3JlICfEjWVydmVuZWMnIG11c3QgcHJlY2VkZSAnxI1lcnZlbicgaW4gdGhlIHJlZ2V4IHRvIGJlIGZ1bGx5IG1hdGNoZWQuXG4gICAgICAgIC8vIE90aGVyd2lzZSBwYXJzZXIgbWF0Y2hlcyAnMS4gxI1lcnZlbmVjJyBhcyAnMS4gxI1lcnZlbicgKyAnZWMnLlxuICAgICAgICBtb250aHNSZWdleCA9IC9eKGxlZGVufMO6bm9yfGLFmWV6ZW58ZHViZW58a3bEm3RlbnzEjWVydmVuZWN8xI1lcnZlbmNlfMSNZXJ2ZW58xI1lcnZuYXxzcnBlbnx6w6HFmcOtfMWZw61qZW58bGlzdG9wYWR8cHJvc2luZWN8bGVkfMO6bm98YsWZZXxkdWJ8a3bEm3zEjXZufMSNdmN8c3JwfHrDocWZfMWZw61qfGxpc3xwcm8pL2k7XG5cbiAgICBmdW5jdGlvbiBwbHVyYWwobikge1xuICAgICAgICByZXR1cm4gbiA+IDEgJiYgbiA8IDUgJiYgfn4obiAvIDEwKSAhPT0gMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbnVtYmVyICsgJyAnO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAncyc6IC8vIGEgZmV3IHNlY29uZHMgLyBpbiBhIGZldyBzZWNvbmRzIC8gYSBmZXcgc2Vjb25kcyBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdww6FyIHNla3VuZCcgOiAncMOhciBzZWt1bmRhbWknO1xuICAgICAgICAgICAgY2FzZSAnc3MnOiAvLyA5IHNlY29uZHMgLyBpbiA5IHNlY29uZHMgLyA5IHNlY29uZHMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdzZWt1bmR5JyA6ICdzZWt1bmQnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ3Nla3VuZGFtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnbSc6IC8vIGEgbWludXRlIC8gaW4gYSBtaW51dGUgLyBhIG1pbnV0ZSBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdtaW51dGEnIDogaXNGdXR1cmUgPyAnbWludXR1JyA6ICdtaW51dG91JztcbiAgICAgICAgICAgIGNhc2UgJ21tJzogLy8gOSBtaW51dGVzIC8gaW4gOSBtaW51dGVzIC8gOSBtaW51dGVzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnbWludXR5JyA6ICdtaW51dCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnbWludXRhbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2gnOiAvLyBhbiBob3VyIC8gaW4gYW4gaG91ciAvIGFuIGhvdXIgYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnaG9kaW5hJyA6IGlzRnV0dXJlID8gJ2hvZGludScgOiAnaG9kaW5vdSc7XG4gICAgICAgICAgICBjYXNlICdoaCc6IC8vIDkgaG91cnMgLyBpbiA5IGhvdXJzIC8gOSBob3VycyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ2hvZGlueScgOiAnaG9kaW4nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ2hvZGluYW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdkJzogLy8gYSBkYXkgLyBpbiBhIGRheSAvIGEgZGF5IGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2RlbicgOiAnZG5lbSc7XG4gICAgICAgICAgICBjYXNlICdkZCc6IC8vIDkgZGF5cyAvIGluIDkgZGF5cyAvIDkgZGF5cyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ2RueScgOiAnZG7DrScpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnZG55JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdNJzogLy8gYSBtb250aCAvIGluIGEgbW9udGggLyBhIG1vbnRoIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ23Em3PDrWMnIDogJ23Em3PDrWNlbSc7XG4gICAgICAgICAgICBjYXNlICdNTSc6IC8vIDkgbW9udGhzIC8gaW4gOSBtb250aHMgLyA5IG1vbnRocyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ23Em3PDrWNlJyA6ICdtxJtzw61jxa8nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ23Em3PDrWNpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICd5JzogLy8gYSB5ZWFyIC8gaW4gYSB5ZWFyIC8gYSB5ZWFyIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ3JvaycgOiAncm9rZW0nO1xuICAgICAgICAgICAgY2FzZSAneXknOiAvLyA5IHllYXJzIC8gaW4gOSB5ZWFycyAvIDkgeWVhcnMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdyb2t5JyA6ICdsZXQnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ2xldHknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjcyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2NzJywge1xuICAgICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IG1vbnRoc1Nob3J0LFxuICAgICAgICBtb250aHNSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICAvLyBOT1RFOiAnxI1lcnZlbicgaXMgc3Vic3RyaW5nIG9mICfEjWVydmVuZWMnOyB0aGVyZWZvcmUgJ8SNZXJ2ZW5lYycgbXVzdCBwcmVjZWRlICfEjWVydmVuJyBpbiB0aGUgcmVnZXggdG8gYmUgZnVsbHkgbWF0Y2hlZC5cbiAgICAgICAgLy8gT3RoZXJ3aXNlIHBhcnNlciBtYXRjaGVzICcxLiDEjWVydmVuZWMnIGFzICcxLiDEjWVydmVuJyArICdlYycuXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OiAvXihsZWRlbnxsZWRuYXzDum5vcmF8w7pub3J8YsWZZXplbnxixZllem5hfGR1YmVufGR1Ym5hfGt2xJt0ZW58a3bEm3RuYXzEjWVydmVuZWN8xI1lcnZlbmNlfMSNZXJ2ZW58xI1lcnZuYXxzcnBlbnxzcnBuYXx6w6HFmcOtfMWZw61qZW58xZnDrWpuYXxsaXN0b3BhZHV8bGlzdG9wYWR8cHJvc2luZWN8cHJvc2luY2UpL2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6IC9eKGxlZHzDum5vfGLFmWV8ZHVifGt2xJt8xI12bnzEjXZjfHNycHx6w6HFmXzFmcOtanxsaXN8cHJvKS9pLFxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICB3ZWVrZGF5czogJ25lZMSbbGVfcG9uZMSbbMOtX8O6dGVyw71fc3TFmWVkYV/EjXR2cnRla19ww6F0ZWtfc29ib3RhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnbmVfcG9fw7p0X3N0X8SNdF9ww6Ffc28nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnbmVfcG9fw7p0X3N0X8SNdF9ww6Ffc28nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBsOiAnRC4gTS4gWVlZWScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2RuZXMgdl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1t6w610cmEgdl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdiBuZWTEm2xpIHZdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2XSBkZGRkIFt2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZlIHN0xZllZHUgdl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2ZSDEjXR2cnRlayB2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3YgcMOhdGVrIHZdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdiBzb2JvdHUgdl0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW3bEjWVyYSB2XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bG91IG5lZMSbbGkgdl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsw6ldIGRkZGQgW3ZdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWxvdSBzdMWZZWR1IHZdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bMO9XSBkZGRkIFt2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsb3Ugc29ib3R1IHZdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICd6YSAlcycsXG4gICAgICAgICAgICBwYXN0OiAncMWZZWQgJXMnLFxuICAgICAgICAgICAgczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNzO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IENodXZhc2ggW2N2XVxuLy8hIGF1dGhvciA6IEFuYXRvbHkgTWlyb25vdiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9taXJvbnRvbGlcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBjdiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2N2Jywge1xuICAgICAgICBtb250aHM6ICfQutOR0YDQu9Cw0Ydf0L3QsNGA05HRgV/Qv9GD0Yhf0LDQutCwX9C80LDQuV/Sq9OX0YDRgtC80LVf0YPRgtORX9Kr0YPRgNC70LBf0LDQstOR0L1f0Y7Qv9CwX9GH07PQul/RgNCw0YjRgtCw0LInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn0LrTkdGAX9C90LDRgF/Qv9GD0Yhf0LDQutCwX9C80LDQuV/Sq9OX0YBf0YPRgtORX9Kr0YPRgF/QsNCy0L1f0Y7Qv9CwX9GH07PQul/RgNCw0YgnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAn0LLRi9GA0YHQsNGA0L3QuNC60YPQvV/RgtGD0L3RgtC40LrRg9C9X9GL0YLQu9Cw0YDQuNC60YPQvV/RjtC90LrRg9C9X9C605fSq9C90LXRgNC90LjQutGD0L1f0Y3RgNC90LXQutGD0L1f0YjTkdC80LDRgtC60YPQvScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9Cy0YvRgF/RgtGD0L1f0YvRgtC7X9GO0L1f0LrTl9KrX9GN0YDQvV/RiNOR0LwnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn0LLRgF/RgtC9X9GL0YJf0Y7QvV/QutKrX9GN0YBf0YjQvCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELU1NLVlZWVknLFxuICAgICAgICAgICAgTEw6ICdZWVlZIFvSq9GD0LvRhdC4XSBNTU1NIFvRg9C505HRhdOX0L1dIERbLdC805fRiNOXXScsXG4gICAgICAgICAgICBMTEw6ICdZWVlZIFvSq9GD0LvRhdC4XSBNTU1NIFvRg9C505HRhdOX0L1dIERbLdC805fRiNOXXSwgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIFlZWVkgW9Kr0YPQu9GF0LhdIE1NTU0gW9GD0LnTkdGF05fQvV0gRFst0LzTl9GI05ddLCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9Cf0LDRj9C9XSBMVCBb0YHQtdGF0LXRgtGA0LVdJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb0KvRgNCw0L1dIExUIFvRgdC10YXQtdGC0YDQtV0nLFxuICAgICAgICAgICAgbGFzdERheTogJ1vTltC90LXRgF0gTFQgW9GB0LXRhdC10YLRgNC1XScsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vSqtC40YLQtdGBXSBkZGRkIExUIFvRgdC10YXQtdGC0YDQtV0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb0JjRgNGC0L3Tl10gZGRkZCBMVCBb0YHQtdGF0LXRgtGA0LVdJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiBmdW5jdGlvbiAob3V0cHV0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGFmZml4ID0gL9GB0LXRhdC10YIkL2kuZXhlYyhvdXRwdXQpXG4gICAgICAgICAgICAgICAgICAgID8gJ9GA0LXQvSdcbiAgICAgICAgICAgICAgICAgICAgOiAv0qvRg9C7JC9pLmV4ZWMob3V0cHV0KVxuICAgICAgICAgICAgICAgICAgICA/ICfRgtCw0L0nXG4gICAgICAgICAgICAgICAgICAgIDogJ9GA0LDQvSc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dCArIGFmZml4O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDQutCw0Y/Qu9C70LAnLFxuICAgICAgICAgICAgczogJ9C/05fRgC3QuNC6INKr0LXQutC60YPQvdGCJyxcbiAgICAgICAgICAgIHNzOiAnJWQg0qvQtdC60LrRg9C90YInLFxuICAgICAgICAgICAgbTogJ9C/05fRgCDQvNC40L3Rg9GCJyxcbiAgICAgICAgICAgIG1tOiAnJWQg0LzQuNC90YPRgicsXG4gICAgICAgICAgICBoOiAn0L/Tl9GAINGB0LXRhdC10YInLFxuICAgICAgICAgICAgaGg6ICclZCDRgdC10YXQtdGCJyxcbiAgICAgICAgICAgIGQ6ICfQv9OX0YAg0LrRg9C9JyxcbiAgICAgICAgICAgIGRkOiAnJWQg0LrRg9C9JyxcbiAgICAgICAgICAgIE06ICfQv9OX0YAg0YPQudOR0YUnLFxuICAgICAgICAgICAgTU06ICclZCDRg9C505HRhScsXG4gICAgICAgICAgICB5OiAn0L/Tl9GAINKr0YPQuycsXG4gICAgICAgICAgICB5eTogJyVkINKr0YPQuycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS3QvNOX0YgvLFxuICAgICAgICBvcmRpbmFsOiAnJWQt0LzTl9GIJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGN2O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFdlbHNoIFtjeV1cbi8vISBhdXRob3IgOiBSb2JlcnQgQWxsZW4gOiBodHRwczovL2dpdGh1Yi5jb20vcm9iZ2FsbGVuXG4vLyEgYXV0aG9yIDogaHR0cHM6Ly9naXRodWIuY29tL3J5YW5ncmVhdmVzXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgY3kgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdjeScsIHtcbiAgICAgICAgbW9udGhzOiAnSW9uYXdyX0Nod2Vmcm9yX01hd3J0aF9FYnJpbGxfTWFpX01laGVmaW5fR29yZmZlbm5hZl9Bd3N0X01lZGlfSHlkcmVmX1RhY2h3ZWRkX1JoYWdmeXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSW9uX0Nod2VfTWF3X0Vicl9NYWlfTWVoX0dvcl9Bd3NfTWVkX0h5ZF9UYWNoX1JoYWcnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAnRHlkZCBTdWxfRHlkZCBMbHVuX0R5ZGQgTWF3cnRoX0R5ZGQgTWVyY2hlcl9EeWRkIElhdV9EeWRkIEd3ZW5lcl9EeWRkIFNhZHdybicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N1bF9MbHVuX01hd19NZXJfSWF1X0d3ZV9TYWQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU3VfTGxfTWFfTWVfSWFfR3dfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgLy8gdGltZSBmb3JtYXRzIGFyZSB0aGUgc2FtZSBhcyBlbi1nYlxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0hlZGRpdyBhbV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tZZm9yeSBhbV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthbV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tEZG9lIGFtXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2Rpd2V0aGFmIGFtXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ21ld24gJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIHluIMO0bCcsXG4gICAgICAgICAgICBzOiAneWNoeWRpZyBlaWxpYWRhdScsXG4gICAgICAgICAgICBzczogJyVkIGVpbGlhZCcsXG4gICAgICAgICAgICBtOiAnbXVudWQnLFxuICAgICAgICAgICAgbW06ICclZCBtdW51ZCcsXG4gICAgICAgICAgICBoOiAnYXdyJyxcbiAgICAgICAgICAgIGhoOiAnJWQgYXdyJyxcbiAgICAgICAgICAgIGQ6ICdkaXdybm9kJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGl3cm5vZCcsXG4gICAgICAgICAgICBNOiAnbWlzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWlzJyxcbiAgICAgICAgICAgIHk6ICdibHd5ZGR5bicsXG4gICAgICAgICAgICB5eTogJyVkIGZseW5lZGQnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oZmVkfGFpbnxhZnxpbHx5ZGR8ZWR8ZWcpLyxcbiAgICAgICAgLy8gdHJhZGl0aW9uYWwgb3JkaW5hbCBudW1iZXJzIGFib3ZlIDMxIGFyZSBub3QgY29tbW9ubHkgdXNlZCBpbiBjb2xsb3F1aWFsIFdlbHNoXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICcnLFxuICAgICAgICAgICAgICAgIGxvb2t1cCA9IFtcbiAgICAgICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgICAgICdhZicsXG4gICAgICAgICAgICAgICAgICAgICdpbCcsXG4gICAgICAgICAgICAgICAgICAgICd5ZGQnLFxuICAgICAgICAgICAgICAgICAgICAneWRkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2VkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2VkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2VkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2ZlZCcsXG4gICAgICAgICAgICAgICAgICAgICdmZWQnLFxuICAgICAgICAgICAgICAgICAgICAnZmVkJywgLy8gMWFmIHRvIDEwZmVkXG4gICAgICAgICAgICAgICAgICAgICdlZycsXG4gICAgICAgICAgICAgICAgICAgICdmZWQnLFxuICAgICAgICAgICAgICAgICAgICAnZWcnLFxuICAgICAgICAgICAgICAgICAgICAnZWcnLFxuICAgICAgICAgICAgICAgICAgICAnZmVkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2VnJyxcbiAgICAgICAgICAgICAgICAgICAgJ2VnJyxcbiAgICAgICAgICAgICAgICAgICAgJ2ZlZCcsXG4gICAgICAgICAgICAgICAgICAgICdlZycsXG4gICAgICAgICAgICAgICAgICAgICdmZWQnLCAvLyAxMWVnIHRvIDIwZmVkXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmIChiID4gMjApIHtcbiAgICAgICAgICAgICAgICBpZiAoYiA9PT0gNDAgfHwgYiA9PT0gNTAgfHwgYiA9PT0gNjAgfHwgYiA9PT0gODAgfHwgYiA9PT0gMTAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICdmZWQnOyAvLyBub3QgMzBhaW4sIDcwYWluIG9yIDkwYWluXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ2Fpbic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChiID4gMCkge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IGxvb2t1cFtiXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBjeTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBEYW5pc2ggW2RhXVxuLy8hIGF1dGhvciA6IFVscmlrIE5pZWxzZW4gOiBodHRwczovL2dpdGh1Yi5jb20vbXJiYXNlXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZGEgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdkYScsIHtcbiAgICAgICAgbW9udGhzOiAnamFudWFyX2ZlYnJ1YXJfbWFydHNfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFuX2ZlYl9tYXJfYXByX21hal9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnc8O4bmRhZ19tYW5kYWdfdGlyc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbMO4cmRhZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3PDuG5fbWFuX3Rpcl9vbnNfdG9yX2ZyZV9sw7hyJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ3PDuF9tYV90aV9vbl90b19mcl9sw7gnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBbZC5dIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2kgZGFnIGtsLl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tpIG1vcmdlbiBrbC5dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAncMOlIGRkZGQgW2tsLl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tpIGfDpXIga2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tpXSBkZGRkW3Mga2wuXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ29tICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBzaWRlbicsXG4gICAgICAgICAgICBzOiAnZsOlIHNla3VuZGVyJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VrdW5kZXInLFxuICAgICAgICAgICAgbTogJ2V0IG1pbnV0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXR0ZXInLFxuICAgICAgICAgICAgaDogJ2VuIHRpbWUnLFxuICAgICAgICAgICAgaGg6ICclZCB0aW1lcicsXG4gICAgICAgICAgICBkOiAnZW4gZGFnJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGFnZScsXG4gICAgICAgICAgICBNOiAnZW4gbcOlbmVkJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbcOlbmVkZXInLFxuICAgICAgICAgICAgeTogJ2V0IMOlcicsXG4gICAgICAgICAgICB5eTogJyVkIMOlcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGE7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogR2VybWFuIChBdXN0cmlhKSBbZGUtYXRdXG4vLyEgYXV0aG9yIDogbGx1Y2hzIDogaHR0cHM6Ly9naXRodWIuY29tL2xsdWNoc1xuLy8hIGF1dGhvcjogTWVuZWxpb24gRWxlbnPDumxlOiBodHRwczovL2dpdGh1Yi5jb20vT2lyZVxuLy8hIGF1dGhvciA6IE1hcnRpbiBHcm9sbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL01hZE1HXG4vLyEgYXV0aG9yIDogTWlrb2xhaiBEYWRlbGEgOiBodHRwczovL2dpdGh1Yi5jb20vbWlrMDFhalxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgIG06IFsnZWluZSBNaW51dGUnLCAnZWluZXIgTWludXRlJ10sXG4gICAgICAgICAgICBoOiBbJ2VpbmUgU3R1bmRlJywgJ2VpbmVyIFN0dW5kZSddLFxuICAgICAgICAgICAgZDogWydlaW4gVGFnJywgJ2VpbmVtIFRhZyddLFxuICAgICAgICAgICAgZGQ6IFtudW1iZXIgKyAnIFRhZ2UnLCBudW1iZXIgKyAnIFRhZ2VuJ10sXG4gICAgICAgICAgICB3OiBbJ2VpbmUgV29jaGUnLCAnZWluZXIgV29jaGUnXSxcbiAgICAgICAgICAgIE06IFsnZWluIE1vbmF0JywgJ2VpbmVtIE1vbmF0J10sXG4gICAgICAgICAgICBNTTogW251bWJlciArICcgTW9uYXRlJywgbnVtYmVyICsgJyBNb25hdGVuJ10sXG4gICAgICAgICAgICB5OiBbJ2VpbiBKYWhyJywgJ2VpbmVtIEphaHInXSxcbiAgICAgICAgICAgIHl5OiBbbnVtYmVyICsgJyBKYWhyZScsIG51bWJlciArICcgSmFocmVuJ10sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICB2YXIgZGVBdCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2RlLWF0Jywge1xuICAgICAgICBtb250aHM6ICdKw6RubmVyX0ZlYnJ1YXJfTcOkcnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSsOkbi5fRmViLl9Nw6Ryel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ1Nvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU28uX01vLl9EaS5fTWkuX0RvLl9Gci5fU2EuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1NvX01vX0RpX01pX0RvX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRC4gTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbaGV1dGUgdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW21vcmdlbiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFt1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbGFzdERheTogJ1tnZXN0ZXJuIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tsZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0nLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICd2b3IgJXMnLFxuICAgICAgICAgICAgczogJ2VpbiBwYWFyIFNla3VuZGVuJyxcbiAgICAgICAgICAgIHNzOiAnJWQgU2VrdW5kZW4nLFxuICAgICAgICAgICAgbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG1tOiAnJWQgTWludXRlbicsXG4gICAgICAgICAgICBoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaGg6ICclZCBTdHVuZGVuJyxcbiAgICAgICAgICAgIGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHc6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB3dzogJyVkIFdvY2hlbicsXG4gICAgICAgICAgICBNOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTU06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeXk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGVBdDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBHZXJtYW4gKFN3aXR6ZXJsYW5kKSBbZGUtY2hdXG4vLyEgYXV0aG9yIDogc3NjaHVlbGxlciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zc2NodWVsbGVyXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgbTogWydlaW5lIE1pbnV0ZScsICdlaW5lciBNaW51dGUnXSxcbiAgICAgICAgICAgIGg6IFsnZWluZSBTdHVuZGUnLCAnZWluZXIgU3R1bmRlJ10sXG4gICAgICAgICAgICBkOiBbJ2VpbiBUYWcnLCAnZWluZW0gVGFnJ10sXG4gICAgICAgICAgICBkZDogW251bWJlciArICcgVGFnZScsIG51bWJlciArICcgVGFnZW4nXSxcbiAgICAgICAgICAgIHc6IFsnZWluZSBXb2NoZScsICdlaW5lciBXb2NoZSddLFxuICAgICAgICAgICAgTTogWydlaW4gTW9uYXQnLCAnZWluZW0gTW9uYXQnXSxcbiAgICAgICAgICAgIE1NOiBbbnVtYmVyICsgJyBNb25hdGUnLCBudW1iZXIgKyAnIE1vbmF0ZW4nXSxcbiAgICAgICAgICAgIHk6IFsnZWluIEphaHInLCAnZWluZW0gSmFociddLFxuICAgICAgICAgICAgeXk6IFtudW1iZXIgKyAnIEphaHJlJywgbnVtYmVyICsgJyBKYWhyZW4nXSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyBmb3JtYXRba2V5XVswXSA6IGZvcm1hdFtrZXldWzFdO1xuICAgIH1cblxuICAgIHZhciBkZUNoID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZGUtY2gnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcl9GZWJydWFyX03DpHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbi5fRmViLl9Nw6Ryel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ1Nvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU29fTW9fRGlfTWlfRG9fRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU29fTW9fRGlfTWlfRG9fRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1toZXV0ZSB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbbW9yZ2VuIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3VtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2dlc3Rlcm4gdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2xldHp0ZW5dIGRkZGQgW3VtXSBMVCBbVWhyXScsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnaW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3ZvciAlcycsXG4gICAgICAgICAgICBzOiAnZWluIHBhYXIgU2VrdW5kZW4nLFxuICAgICAgICAgICAgc3M6ICclZCBTZWt1bmRlbicsXG4gICAgICAgICAgICBtOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbW06ICclZCBNaW51dGVuJyxcbiAgICAgICAgICAgIGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoaDogJyVkIFN0dW5kZW4nLFxuICAgICAgICAgICAgZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGRkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgdzogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHd3OiAnJWQgV29jaGVuJyxcbiAgICAgICAgICAgIE06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5eTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBkZUNoO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEdlcm1hbiBbZGVdXG4vLyEgYXV0aG9yIDogbGx1Y2hzIDogaHR0cHM6Ly9naXRodWIuY29tL2xsdWNoc1xuLy8hIGF1dGhvcjogTWVuZWxpb24gRWxlbnPDumxlOiBodHRwczovL2dpdGh1Yi5jb20vT2lyZVxuLy8hIGF1dGhvciA6IE1pa29sYWogRGFkZWxhIDogaHR0cHM6Ly9naXRodWIuY29tL21pazAxYWpcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBtOiBbJ2VpbmUgTWludXRlJywgJ2VpbmVyIE1pbnV0ZSddLFxuICAgICAgICAgICAgaDogWydlaW5lIFN0dW5kZScsICdlaW5lciBTdHVuZGUnXSxcbiAgICAgICAgICAgIGQ6IFsnZWluIFRhZycsICdlaW5lbSBUYWcnXSxcbiAgICAgICAgICAgIGRkOiBbbnVtYmVyICsgJyBUYWdlJywgbnVtYmVyICsgJyBUYWdlbiddLFxuICAgICAgICAgICAgdzogWydlaW5lIFdvY2hlJywgJ2VpbmVyIFdvY2hlJ10sXG4gICAgICAgICAgICBNOiBbJ2VpbiBNb25hdCcsICdlaW5lbSBNb25hdCddLFxuICAgICAgICAgICAgTU06IFtudW1iZXIgKyAnIE1vbmF0ZScsIG51bWJlciArICcgTW9uYXRlbiddLFxuICAgICAgICAgICAgeTogWydlaW4gSmFocicsICdlaW5lbSBKYWhyJ10sXG4gICAgICAgICAgICB5eTogW251bWJlciArICcgSmFocmUnLCBudW1iZXIgKyAnIEphaHJlbiddLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/IGZvcm1hdFtrZXldWzBdIDogZm9ybWF0W2tleV1bMV07XG4gICAgfVxuXG4gICAgdmFyIGRlID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZGUnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcl9GZWJydWFyX03DpHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbi5fRmViLl9Nw6Ryel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ1Nvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU28uX01vLl9EaS5fTWkuX0RvLl9Gci5fU2EuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1NvX01vX0RpX01pX0RvX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRC4gTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbaGV1dGUgdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW21vcmdlbiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFt1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbGFzdERheTogJ1tnZXN0ZXJuIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tsZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0nLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICd2b3IgJXMnLFxuICAgICAgICAgICAgczogJ2VpbiBwYWFyIFNla3VuZGVuJyxcbiAgICAgICAgICAgIHNzOiAnJWQgU2VrdW5kZW4nLFxuICAgICAgICAgICAgbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG1tOiAnJWQgTWludXRlbicsXG4gICAgICAgICAgICBoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaGg6ICclZCBTdHVuZGVuJyxcbiAgICAgICAgICAgIGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHc6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB3dzogJyVkIFdvY2hlbicsXG4gICAgICAgICAgICBNOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTU06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeXk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGU7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTWFsZGl2aWFuIFtkdl1cbi8vISBhdXRob3IgOiBKYXdpc2ggSGFtZWVkIDogaHR0cHM6Ly9naXRodWIuY29tL2phd2lzaFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRocyA9IFtcbiAgICAgICAgICAgICfelt6s3oLeqt6H3qbeg96pJyxcbiAgICAgICAgICAgICfeit6s3oTesN6D3qreh96m3oPeqScsXG4gICAgICAgICAgICAn3onep96D3qjel96qJyxcbiAgICAgICAgICAgICfeh96t3pXesN6D3qnejd6qJyxcbiAgICAgICAgICAgICfeid6tJyxcbiAgICAgICAgICAgICfelt6r3oLesCcsXG4gICAgICAgICAgICAn3pbeqt6N3qbeh96oJyxcbiAgICAgICAgICAgICfeh96v3o7ept6Q3rDek96qJyxcbiAgICAgICAgICAgICfekN6s3pXesN6T3qzeid6w3oTept6D3qonLFxuICAgICAgICAgICAgJ96H3q7eht6w3pPer96E3qbeg96qJyxcbiAgICAgICAgICAgICfegt6u3ojerN6J3rDehN6m3oPeqicsXG4gICAgICAgICAgICAn3pHeqN6Q3qzeid6w3oTept6D3qonLFxuICAgICAgICBdLFxuICAgICAgICB3ZWVrZGF5cyA9IFtcbiAgICAgICAgICAgICfeh96n3oveqN6H3rDejN6mJyxcbiAgICAgICAgICAgICfegN6v3onepicsXG4gICAgICAgICAgICAn3ofept6C3rDejt6n3oPepicsXG4gICAgICAgICAgICAn3oTeqt6L3qYnLFxuICAgICAgICAgICAgJ96E3qreg96n3pDesN6K3qbejN6oJyxcbiAgICAgICAgICAgICfegN6q3obeqt6D3qonLFxuICAgICAgICAgICAgJ96A3q7egt6o3oDeqN6D3qonLFxuICAgICAgICBdO1xuXG4gICAgdmFyIGR2ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZHYnLCB7XG4gICAgICAgIG1vbnRoczogbW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydDogbW9udGhzLFxuICAgICAgICB3ZWVrZGF5czogd2Vla2RheXMsXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6IHdlZWtkYXlzLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ96H3qfei96oX96A3q/eid6mX96H3qbegt6wX96E3qrei96mX96E3qreg96nX96A3qreht6qX96A3q7egt6oJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnRC9NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/eid6GfN6J3oovLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAn3oneiicgPT09IGlucHV0O1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn3onehic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn3oneiic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW96J3qjeh96m3oveql0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1veid6n3ovept6J3qddIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW96H3qjeh96w3pTerF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb3orep96H3qjejN6q3ojeqF0gZGRkZCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ96M3qzeg96t3o7ept6H3qggJXMnLFxuICAgICAgICAgICAgcGFzdDogJ96G3qreg96o3oLesCAlcycsXG4gICAgICAgICAgICBzOiAn3pDeqN6G3qregt6w3ozeqt6G3q7ehd6s3ofesCcsXG4gICAgICAgICAgICBzczogJ2QlIN6Q3qjeht6q3oLesN6M3qonLFxuICAgICAgICAgICAgbTogJ96J3qjegt6o3pPerN6H3rAnLFxuICAgICAgICAgICAgbW06ICfeid6o3oLeqN6T3qogJWQnLFxuICAgICAgICAgICAgaDogJ96O3qbekd6o3ofeqN6D3qzeh96wJyxcbiAgICAgICAgICAgIGhoOiAn3o7ept6R3qjeh96o3oPeqiAlZCcsXG4gICAgICAgICAgICBkOiAn3oveqt6I3qbegN6s3ofesCcsXG4gICAgICAgICAgICBkZDogJ96L3qreiN6m3pDesCAlZCcsXG4gICAgICAgICAgICBNOiAn3onept6A3qzeh96wJyxcbiAgICAgICAgICAgIE1NOiAn3onept6Q3rAgJWQnLFxuICAgICAgICAgICAgeTogJ96H3qbegN6m3oPerN6H3rAnLFxuICAgICAgICAgICAgeXk6ICfeh96m3oDept6D3qogJWQnLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC/YjC9nLCAnLCcpO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLywvZywgJ9iMJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogNywgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDEyLCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxMnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGR2O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEdyZWVrIFtlbF1cbi8vISBhdXRob3IgOiBBZ2dlbG9zIEthcmFsaWFzIDogaHR0cHM6Ly9naXRodWIuY29tL21laGllbFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gaXNGdW5jdGlvbihpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHR5cGVvZiBGdW5jdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgaW5wdXQgaW5zdGFuY2VvZiBGdW5jdGlvbikgfHxcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgZWwgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbCcsIHtcbiAgICAgICAgbW9udGhzTm9taW5hdGl2ZUVsOiAnzpnOsc69zr/Phc6sz4HOuc6/z4JfzqbOtc6yz4HOv8+FzqzPgc65zr/Pgl/OnM6sz4HPhM65zr/Pgl/Okc+Az4HOr867zrnOv8+CX86czqzOuc6/z4JfzpnOv8+Nzr3Ouc6/z4JfzpnOv8+NzrvOuc6/z4JfzpHPjc6zzr/Phc+Dz4TOv8+CX86jzrXPgM+Ezq3OvM6yz4HOuc6/z4Jfzp/Ous+Ez47Oss+BzrnOv8+CX86dzr/Orc68zrLPgc65zr/Pgl/OlM61zrrOrc68zrLPgc65zr/Pgicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzR2VuaXRpdmVFbDogJ86ZzrHOvc6/z4XOsc+Bzq/Ov8+FX86mzrXOss+Bzr/Phc6xz4HOr86/z4VfzpzOsc+Bz4TOr86/z4VfzpHPgM+BzrnOu86vzr/PhV/OnM6xzpDOv8+FX86Zzr/Phc69zq/Ov8+FX86Zzr/Phc67zq/Ov8+FX86Rz4XOs86/z43Pg8+Ezr/PhV/Oo861z4DPhM61zrzOss+Bzq/Ov8+FX86fzrrPhM+JzrLPgc6vzr/PhV/Onc6/zrXOvM6yz4HOr86/z4VfzpTOtc66zrXOvM6yz4HOr86/z4UnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoczogZnVuY3Rpb24gKG1vbWVudFRvRm9ybWF0LCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICghbW9tZW50VG9Gb3JtYXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzTm9taW5hdGl2ZUVsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICB0eXBlb2YgZm9ybWF0ID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgIC9ELy50ZXN0KGZvcm1hdC5zdWJzdHJpbmcoMCwgZm9ybWF0LmluZGV4T2YoJ01NTU0nKSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIGRheSBudW1iZXIgYmVmb3JlICdNTU1NJ1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNHZW5pdGl2ZUVsW21vbWVudFRvRm9ybWF0Lm1vbnRoKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzTm9taW5hdGl2ZUVsW21vbWVudFRvRm9ybWF0Lm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDogJ86ZzrHOvV/Ops61zrJfzpzOsc+BX86Rz4DPgV/OnM6xz4pfzpnOv8+Fzr1fzpnOv8+FzrtfzpHPhc6zX86jzrXPgF/On866z4Rfzp3Ov861X86UzrXOuicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfOms+Fz4HOuc6xzrrOrl/OlM61z4XPhM6tz4HOsV/OpM+Bzq/PhM63X86kzrXPhM6sz4HPhM63X86gzq3OvM+Az4TOt1/OoM6xz4HOsc+DzrrOtc+Fzq5fzqPOrM6yzrLOsc+Ezr8nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfOms+Fz4FfzpTOtc+FX86kz4HOuV/OpM61z4RfzqDOtc68X86gzrHPgV/Oo86xzrInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnzprPhV/OlM61X86kz4FfzqTOtV/OoM61X86gzrFfzqPOsScuc3BsaXQoJ18nKSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzID4gMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICfOvM68JyA6ICfOnM6cJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnz4DOvCcgOiAnzqDOnCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIChpbnB1dCArICcnKS50b0xvd2VyQ2FzZSgpWzBdID09PSAnzrwnO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvW86gzpxdXFwuP86cP1xcLj8vaSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXJFbDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vOo86uzrzOtc+BzrEge31dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbzpHPjc+BzrnOvyB7fV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFt7fV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vOp864zrXPgiB7fV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbz4TOvyDPgM+Bzr/Ot86zzr/Pjc68zrXOvc6/XSBkZGRkIFt7fV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbz4TOt869IM+Az4HOv863zrPOv8+NzrzOtc69zrddIGRkZGQgW3t9XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiBmdW5jdGlvbiAoa2V5LCBtb20pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9jYWxlbmRhckVsW2tleV0sXG4gICAgICAgICAgICAgICAgaG91cnMgPSBtb20gJiYgbW9tLmhvdXJzKCk7XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihvdXRwdXQpKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LmFwcGx5KG1vbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0LnJlcGxhY2UoJ3t9JywgaG91cnMgJSAxMiA9PT0gMSA/ICfPg8+EzrcnIDogJ8+Dz4TOuc+CJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnz4POtSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgz4DPgc65zr0nLFxuICAgICAgICAgICAgczogJ867zq/Os86xIM60zrXPhc+EzrXPgc+MzrvOtc+Az4TOsScsXG4gICAgICAgICAgICBzczogJyVkIM60zrXPhc+EzrXPgc+MzrvOtc+Az4TOsScsXG4gICAgICAgICAgICBtOiAnzq3Ovc6xIM67zrXPgM+Ez4wnLFxuICAgICAgICAgICAgbW06ICclZCDOu861z4DPhM6sJyxcbiAgICAgICAgICAgIGg6ICfOvM6vzrEgz47Pgc6xJyxcbiAgICAgICAgICAgIGhoOiAnJWQgz47Pgc61z4InLFxuICAgICAgICAgICAgZDogJ868zq/OsSDOvM6tz4HOsScsXG4gICAgICAgICAgICBkZDogJyVkIM68zq3Pgc61z4InLFxuICAgICAgICAgICAgTTogJ86tzr3Osc+CIM68zq7Ovc6xz4InLFxuICAgICAgICAgICAgTU06ICclZCDOvM6uzr3Otc+CJyxcbiAgICAgICAgICAgIHk6ICfOrc69zrHPgiDPh8+Bz4zOvc6/z4InLFxuICAgICAgICAgICAgeXk6ICclZCDPh8+Bz4zOvc65zrEnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Oty8sXG4gICAgICAgIG9yZGluYWw6ICclZM63JyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVsO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEVuZ2xpc2ggKEF1c3RyYWxpYSkgW2VuLWF1XVxuLy8hIGF1dGhvciA6IEphcmVkIE1vcnNlIDogaHR0cHM6Ly9naXRodWIuY29tL2phcmNvYWxcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBlbkF1ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZW4tYXUnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ2g6bW0gQScsXG4gICAgICAgICAgICBMVFM6ICdoOm1tOnNzIEEnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW1RvbW9ycm93IGF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbTGFzdF0gZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnaW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGFnbycsXG4gICAgICAgICAgICBzOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgICAgICBzczogJyVkIHNlY29uZHMnLFxuICAgICAgICAgICAgbTogJ2EgbWludXRlJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgICAgICBoOiAnYW4gaG91cicsXG4gICAgICAgICAgICBoaDogJyVkIGhvdXJzJyxcbiAgICAgICAgICAgIGQ6ICdhIGRheScsXG4gICAgICAgICAgICBkZDogJyVkIGRheXMnLFxuICAgICAgICAgICAgTTogJ2EgbW9udGgnLFxuICAgICAgICAgICAgTU06ICclZCBtb250aHMnLFxuICAgICAgICAgICAgeTogJ2EgeWVhcicsXG4gICAgICAgICAgICB5eTogJyVkIHllYXJzJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0fG5kfHJkfHRoKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICAgICAgfn4oKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3RoJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3JkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAndGgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVuQXU7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRW5nbGlzaCAoQ2FuYWRhKSBbZW4tY2FdXG4vLyEgYXV0aG9yIDogSm9uYXRoYW4gQWJvdXJiaWggOiBodHRwczovL2dpdGh1Yi5jb20vam9uYmNhXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZW5DYSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VuLWNhJywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ01NTU0gRCwgWVlZWSBoOm1tIEEnLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEnLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW5DYTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBFbmdsaXNoIChVbml0ZWQgS2luZ2RvbSkgW2VuLWdiXVxuLy8hIGF1dGhvciA6IENocmlzIEdlZHJpbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc2dlZHJpbVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGVuR2IgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbi1nYicsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBlbkdiO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEVuZ2xpc2ggKElyZWxhbmQpIFtlbi1pZV1cbi8vISBhdXRob3IgOiBDaHJpcyBDYXJ0bGlkZ2UgOiBodHRwczovL2dpdGh1Yi5jb20vY2hyaXNjYXJ0bGlkZ2VcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBlbkllID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZW4taWUnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBlbkllO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEVuZ2xpc2ggKElzcmFlbCkgW2VuLWlsXVxuLy8hIGF1dGhvciA6IENocmlzIEdlZHJpbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc2dlZHJpbVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGVuSWwgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbi1pbCcsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW5JbDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBFbmdsaXNoIChJbmRpYSkgW2VuLWluXVxuLy8hIGF1dGhvciA6IEphdGluIEFncmF3YWwgOiBodHRwczovL2dpdGh1Yi5jb20vamF0aW5hZzIyXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZW5JbiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VuLWluJywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBlbkluO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEVuZ2xpc2ggKE5ldyBaZWFsYW5kKSBbZW4tbnpdXG4vLyEgYXV0aG9yIDogTHVrZSBNY0dyZWdvciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9sdWtlbWNncmVnb3JcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBlbk56ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZW4tbnonLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ2g6bW0gQScsXG4gICAgICAgICAgICBMVFM6ICdoOm1tOnNzIEEnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW1RvbW9ycm93IGF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbTGFzdF0gZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnaW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGFnbycsXG4gICAgICAgICAgICBzOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgICAgICBzczogJyVkIHNlY29uZHMnLFxuICAgICAgICAgICAgbTogJ2EgbWludXRlJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgICAgICBoOiAnYW4gaG91cicsXG4gICAgICAgICAgICBoaDogJyVkIGhvdXJzJyxcbiAgICAgICAgICAgIGQ6ICdhIGRheScsXG4gICAgICAgICAgICBkZDogJyVkIGRheXMnLFxuICAgICAgICAgICAgTTogJ2EgbW9udGgnLFxuICAgICAgICAgICAgTU06ICclZCBtb250aHMnLFxuICAgICAgICAgICAgeTogJ2EgeWVhcicsXG4gICAgICAgICAgICB5eTogJyVkIHllYXJzJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0fG5kfHJkfHRoKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICAgICAgfn4oKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3RoJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3JkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAndGgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVuTno7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRW5nbGlzaCAoU2luZ2Fwb3JlKSBbZW4tc2ddXG4vLyEgYXV0aG9yIDogTWF0dGhldyBDYXN0cmlsbG9uLU1hZHJpZ2FsIDogaHR0cHM6Ly9naXRodWIuY29tL3RlY2hkaW1lbnNpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBlblNnID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZW4tc2cnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgYWdvJyxcbiAgICAgICAgICAgIHM6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgICAgICBtOiAnYSBtaW51dGUnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG91cnMnLFxuICAgICAgICAgICAgZDogJ2EgZGF5JyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgICAgICBNOiAnYSBtb250aCcsXG4gICAgICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgICAgICB5OiAnYSB5ZWFyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgeWVhcnMnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3R8bmR8cmR8dGgpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB+figobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3N0J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICduZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW5TZztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBFc3BlcmFudG8gW2VvXVxuLy8hIGF1dGhvciA6IENvbGluIERlYW4gOiBodHRwczovL2dpdGh1Yi5jb20vY29saW5kZWFuXG4vLyEgYXV0aG9yIDogTWlhIE5vcmRlbnRvZnQgSW1wZXJhdG9yaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9taWVzdGFzbWlhXG4vLyEgY29tbWVudCA6IG1pZXN0YXNtaWEgY29ycmVjdGVkIHRoZSB0cmFuc2xhdGlvbiBieSBjb2xpbmRlYW5cbi8vISBjb21tZW50IDogVml2YWt2byBjb3JyZWN0ZWQgdGhlIHRyYW5zbGF0aW9uIGJ5IGNvbGluZGVhbiBhbmQgbWllc3Rhc21pYVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGVvID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZW8nLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcm9fZmVicnVhcm9fbWFydG9fYXByaWxvX21ham9fanVuaW9fanVsaW9fYcWtZ3VzdG9fc2VwdGVtYnJvX29rdG9icm9fbm92ZW1icm9fZGVjZW1icm8nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFuX2ZlYl9tYXJ0X2Fwcl9tYWpfanVuX2p1bF9hxa1nX3NlcHRfb2t0X25vdl9kZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnZGltYW7EiW9fbHVuZG9fbWFyZG9fbWVya3JlZG9fxLVhxa1kb192ZW5kcmVkb19zYWJhdG8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkaW1fbHVuX21hcmRfbWVya1/EtWHFrV92ZW5fc2FiJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2RpX2x1X21hX21lX8S1YV92ZV9zYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgTEw6ICdbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ1tsYV0gRFstYW4gZGVdIE1NTU0sIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGRbbl0sIFtsYV0gRFstYW4gZGVdIE1NTU0sIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCwgW2xhXSBEWy1hbiBkZV0gTU1NLCBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL1thcF1cXC50XFwubS9pLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSA9PT0gJ3AnO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91cnMgPiAxMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ3AudC5tLicgOiAnUC5ULk0uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnYS50Lm0uJyA6ICdBLlQuTS4nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tIb2RpYcWtIGplXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW01vcmdhxa0gamVdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZFtuIGplXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0hpZXJhxa0gamVdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW3Bhc2ludGFuXSBkZGRkW24gamVdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAncG9zdCAlcycsXG4gICAgICAgICAgICBwYXN0OiAnYW50YcWtICVzJyxcbiAgICAgICAgICAgIHM6ICdrZWxrYWogc2VrdW5kb2onLFxuICAgICAgICAgICAgc3M6ICclZCBzZWt1bmRvaicsXG4gICAgICAgICAgICBtOiAndW51IG1pbnV0bycsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0b2onLFxuICAgICAgICAgICAgaDogJ3VudSBob3JvJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG9yb2onLFxuICAgICAgICAgICAgZDogJ3VudSB0YWdvJywgLy9uZSAnZGl1cm5vJywgxIlhciBlc3RhcyB1eml0YSBwb3IgcHJva3NpbXVtb1xuICAgICAgICAgICAgZGQ6ICclZCB0YWdvaicsXG4gICAgICAgICAgICBNOiAndW51IG1vbmF0bycsXG4gICAgICAgICAgICBNTTogJyVkIG1vbmF0b2onLFxuICAgICAgICAgICAgeTogJ3VudSBqYXJvJyxcbiAgICAgICAgICAgIHl5OiAnJWQgamFyb2onLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1hLyxcbiAgICAgICAgb3JkaW5hbDogJyVkYScsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBlbztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTcGFuaXNoIChEb21pbmljYW4gUmVwdWJsaWMpIFtlcy1kb11cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHNTaG9ydERvdCA9ICdlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQgPSAnZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL15lbmUvaSxcbiAgICAgICAgICAgIC9eZmViL2ksXG4gICAgICAgICAgICAvXm1hci9pLFxuICAgICAgICAgICAgL15hYnIvaSxcbiAgICAgICAgICAgIC9ebWF5L2ksXG4gICAgICAgICAgICAvXmp1bi9pLFxuICAgICAgICAgICAgL15qdWwvaSxcbiAgICAgICAgICAgIC9eYWdvL2ksXG4gICAgICAgICAgICAvXnNlcC9pLFxuICAgICAgICAgICAgL15vY3QvaSxcbiAgICAgICAgICAgIC9ebm92L2ksXG4gICAgICAgICAgICAvXmRpYy9pLFxuICAgICAgICBdLFxuICAgICAgICBtb250aHNSZWdleCA9IC9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmV8ZW5lXFwuP3xmZWJcXC4/fG1hclxcLj98YWJyXFwuP3xtYXlcXC4/fGp1blxcLj98anVsXFwuP3xhZ29cXC4/fHNlcFxcLj98b2N0XFwuP3xub3ZcXC4/fGRpY1xcLj8pL2k7XG5cbiAgICB2YXIgZXNEbyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VzLWRvJywge1xuICAgICAgICBtb250aHM6ICdlbmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogZnVuY3Rpb24gKG0sIGZvcm1hdCkge1xuICAgICAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0RG90O1xuICAgICAgICAgICAgfSBlbHNlIGlmICgvLU1NTS0vLnRlc3QoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFttLm1vbnRoKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnREb3RbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzUmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU3RyaWN0UmVnZXg6IC9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6IC9eKGVuZVxcLj98ZmViXFwuP3xtYXJcXC4/fGFiclxcLj98bWF5XFwuP3xqdW5cXC4/fGp1bFxcLj98YWdvXFwuP3xzZXBcXC4/fG9jdFxcLj98bm92XFwuP3xkaWNcXC4/KS9pLFxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICB3ZWVrZGF5czogJ2RvbWluZ29fbHVuZXNfbWFydGVzX21pw6lyY29sZXNfanVldmVzX3ZpZXJuZXNfc8OhYmFkbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2RvbS5fbHVuLl9tYXIuX21pw6kuX2p1ZS5fdmllLl9zw6FiLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkb19sdV9tYV9taV9qdV92aV9zw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tob3kgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHREYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1ttYcOxYW5hIGEgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZGRkZCBbYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1theWVyIGEgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICdbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhJyArXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnXSBMVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2hhY2UgJXMnLFxuICAgICAgICAgICAgczogJ3Vub3Mgc2VndW5kb3MnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWd1bmRvcycsXG4gICAgICAgICAgICBtOiAndW4gbWludXRvJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRvcycsXG4gICAgICAgICAgICBoOiAndW5hIGhvcmEnLFxuICAgICAgICAgICAgaGg6ICclZCBob3JhcycsXG4gICAgICAgICAgICBkOiAndW4gZMOtYScsXG4gICAgICAgICAgICBkZDogJyVkIGTDrWFzJyxcbiAgICAgICAgICAgIHc6ICd1bmEgc2VtYW5hJyxcbiAgICAgICAgICAgIHd3OiAnJWQgc2VtYW5hcycsXG4gICAgICAgICAgICBNOiAndW4gbWVzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWVzZXMnLFxuICAgICAgICAgICAgeTogJ3VuIGHDsW8nLFxuICAgICAgICAgICAgeXk6ICclZCBhw7FvcycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfcK6LyxcbiAgICAgICAgb3JkaW5hbDogJyVkwronLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZXNEbztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTcGFuaXNoIChNZXhpY28pIFtlcy1teF1cbi8vISBhdXRob3IgOiBKQyBGcmFuY28gOiBodHRwczovL2dpdGh1Yi5jb20vamNmcmFuY29cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHNTaG9ydERvdCA9ICdlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQgPSAnZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL15lbmUvaSxcbiAgICAgICAgICAgIC9eZmViL2ksXG4gICAgICAgICAgICAvXm1hci9pLFxuICAgICAgICAgICAgL15hYnIvaSxcbiAgICAgICAgICAgIC9ebWF5L2ksXG4gICAgICAgICAgICAvXmp1bi9pLFxuICAgICAgICAgICAgL15qdWwvaSxcbiAgICAgICAgICAgIC9eYWdvL2ksXG4gICAgICAgICAgICAvXnNlcC9pLFxuICAgICAgICAgICAgL15vY3QvaSxcbiAgICAgICAgICAgIC9ebm92L2ksXG4gICAgICAgICAgICAvXmRpYy9pLFxuICAgICAgICBdLFxuICAgICAgICBtb250aHNSZWdleCA9IC9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmV8ZW5lXFwuP3xmZWJcXC4/fG1hclxcLj98YWJyXFwuP3xtYXlcXC4/fGp1blxcLj98anVsXFwuP3xhZ29cXC4/fHNlcFxcLj98b2N0XFwuP3xub3ZcXC4/fGRpY1xcLj8pL2k7XG5cbiAgICB2YXIgZXNNeCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VzLW14Jywge1xuICAgICAgICBtb250aHM6ICdlbmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogZnVuY3Rpb24gKG0sIGZvcm1hdCkge1xuICAgICAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0RG90O1xuICAgICAgICAgICAgfSBlbHNlIGlmICgvLU1NTS0vLnRlc3QoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFttLm1vbnRoKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnREb3RbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzUmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU3RyaWN0UmVnZXg6IC9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6IC9eKGVuZVxcLj98ZmViXFwuP3xtYXJcXC4/fGFiclxcLj98bWF5XFwuP3xqdW5cXC4/fGp1bFxcLj98YWdvXFwuP3xzZXBcXC4/fG9jdFxcLj98bm92XFwuP3xkaWNcXC4/KS9pLFxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICB3ZWVrZGF5czogJ2RvbWluZ29fbHVuZXNfbWFydGVzX21pw6lyY29sZXNfanVldmVzX3ZpZXJuZXNfc8OhYmFkbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2RvbS5fbHVuLl9tYXIuX21pw6kuX2p1ZS5fdmllLl9zw6FiLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkb19sdV9tYV9taV9qdV92aV9zw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbaG95IGEgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0RGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbbWHDsWFuYSBhIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RkZGQgW2EgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbYXllciBhIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAnW2VsXSBkZGRkIFtwYXNhZG8gYSBsYScgK1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgJ10gTFQnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2VuICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdoYWNlICVzJyxcbiAgICAgICAgICAgIHM6ICd1bm9zIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VndW5kb3MnLFxuICAgICAgICAgICAgbTogJ3VuIG1pbnV0bycsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0b3MnLFxuICAgICAgICAgICAgaDogJ3VuYSBob3JhJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG9yYXMnLFxuICAgICAgICAgICAgZDogJ3VuIGTDrWEnLFxuICAgICAgICAgICAgZGQ6ICclZCBkw61hcycsXG4gICAgICAgICAgICB3OiAndW5hIHNlbWFuYScsXG4gICAgICAgICAgICB3dzogJyVkIHNlbWFuYXMnLFxuICAgICAgICAgICAgTTogJ3VuIG1lcycsXG4gICAgICAgICAgICBNTTogJyVkIG1lc2VzJyxcbiAgICAgICAgICAgIHk6ICd1biBhw7FvJyxcbiAgICAgICAgICAgIHl5OiAnJWQgYcOxb3MnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Cui8sXG4gICAgICAgIG9yZGluYWw6ICclZMK6JyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgICAgICBpbnZhbGlkRGF0ZTogJ0ZlY2hhIGludsOhbGlkYScsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZXNNeDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTcGFuaXNoIChVbml0ZWQgU3RhdGVzKSBbZXMtdXNdXG4vLyEgYXV0aG9yIDogYnVzdHRhIDogaHR0cHM6Ly9naXRodWIuY29tL2J1c3R0YVxuLy8hIGF1dGhvciA6IGNocmlzcm9keiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3JvZHpcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHNTaG9ydERvdCA9ICdlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQgPSAnZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL15lbmUvaSxcbiAgICAgICAgICAgIC9eZmViL2ksXG4gICAgICAgICAgICAvXm1hci9pLFxuICAgICAgICAgICAgL15hYnIvaSxcbiAgICAgICAgICAgIC9ebWF5L2ksXG4gICAgICAgICAgICAvXmp1bi9pLFxuICAgICAgICAgICAgL15qdWwvaSxcbiAgICAgICAgICAgIC9eYWdvL2ksXG4gICAgICAgICAgICAvXnNlcC9pLFxuICAgICAgICAgICAgL15vY3QvaSxcbiAgICAgICAgICAgIC9ebm92L2ksXG4gICAgICAgICAgICAvXmRpYy9pLFxuICAgICAgICBdLFxuICAgICAgICBtb250aHNSZWdleCA9IC9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmV8ZW5lXFwuP3xmZWJcXC4/fG1hclxcLj98YWJyXFwuP3xtYXlcXC4/fGp1blxcLj98anVsXFwuP3xhZ29cXC4/fHNlcFxcLj98b2N0XFwuP3xub3ZcXC4/fGRpY1xcLj8pL2k7XG5cbiAgICB2YXIgZXNVcyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VzLXVzJywge1xuICAgICAgICBtb250aHM6ICdlbmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogZnVuY3Rpb24gKG0sIGZvcm1hdCkge1xuICAgICAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0RG90O1xuICAgICAgICAgICAgfSBlbHNlIGlmICgvLU1NTS0vLnRlc3QoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFttLm1vbnRoKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnREb3RbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzUmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU3RyaWN0UmVnZXg6IC9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6IC9eKGVuZVxcLj98ZmViXFwuP3xtYXJcXC4/fGFiclxcLj98bWF5XFwuP3xqdW5cXC4/fGp1bFxcLj98YWdvXFwuP3xzZXBcXC4/fG9jdFxcLj98bm92XFwuP3xkaWNcXC4/KS9pLFxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICB3ZWVrZGF5czogJ2RvbWluZ29fbHVuZXNfbWFydGVzX21pw6lyY29sZXNfanVldmVzX3ZpZXJuZXNfc8OhYmFkbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2RvbS5fbHVuLl9tYXIuX21pw6kuX2p1ZS5fdmllLl9zw6FiLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkb19sdV9tYV9taV9qdV92aV9zw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMOiAnTU0vREQvWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tob3kgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHREYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1ttYcOxYW5hIGEgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZGRkZCBbYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1theWVyIGEgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICdbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhJyArXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnXSBMVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2hhY2UgJXMnLFxuICAgICAgICAgICAgczogJ3Vub3Mgc2VndW5kb3MnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWd1bmRvcycsXG4gICAgICAgICAgICBtOiAndW4gbWludXRvJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRvcycsXG4gICAgICAgICAgICBoOiAndW5hIGhvcmEnLFxuICAgICAgICAgICAgaGg6ICclZCBob3JhcycsXG4gICAgICAgICAgICBkOiAndW4gZMOtYScsXG4gICAgICAgICAgICBkZDogJyVkIGTDrWFzJyxcbiAgICAgICAgICAgIHc6ICd1bmEgc2VtYW5hJyxcbiAgICAgICAgICAgIHd3OiAnJWQgc2VtYW5hcycsXG4gICAgICAgICAgICBNOiAndW4gbWVzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWVzZXMnLFxuICAgICAgICAgICAgeTogJ3VuIGHDsW8nLFxuICAgICAgICAgICAgeXk6ICclZCBhw7FvcycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfcK6LyxcbiAgICAgICAgb3JkaW5hbDogJyVkwronLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZXNVcztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTcGFuaXNoIFtlc11cbi8vISBhdXRob3IgOiBKdWxpbyBOYXB1csOtIDogaHR0cHM6Ly9naXRodWIuY29tL2p1bGlvbmNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHNTaG9ydERvdCA9ICdlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQgPSAnZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL15lbmUvaSxcbiAgICAgICAgICAgIC9eZmViL2ksXG4gICAgICAgICAgICAvXm1hci9pLFxuICAgICAgICAgICAgL15hYnIvaSxcbiAgICAgICAgICAgIC9ebWF5L2ksXG4gICAgICAgICAgICAvXmp1bi9pLFxuICAgICAgICAgICAgL15qdWwvaSxcbiAgICAgICAgICAgIC9eYWdvL2ksXG4gICAgICAgICAgICAvXnNlcC9pLFxuICAgICAgICAgICAgL15vY3QvaSxcbiAgICAgICAgICAgIC9ebm92L2ksXG4gICAgICAgICAgICAvXmRpYy9pLFxuICAgICAgICBdLFxuICAgICAgICBtb250aHNSZWdleCA9IC9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmV8ZW5lXFwuP3xmZWJcXC4/fG1hclxcLj98YWJyXFwuP3xtYXlcXC4/fGp1blxcLj98anVsXFwuP3xhZ29cXC4/fHNlcFxcLj98b2N0XFwuP3xub3ZcXC4/fGRpY1xcLj8pL2k7XG5cbiAgICB2YXIgZXMgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlcycsIHtcbiAgICAgICAgbW9udGhzOiAnZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6IGZ1bmN0aW9uIChtLCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydERvdDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoLy1NTU0tLy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0RG90W20ubW9udGgoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1JlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OiAvXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlKS9pLFxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OiAvXihlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaSxcbiAgICAgICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgd2Vla2RheXM6ICdkb21pbmdvX2x1bmVzX21hcnRlc19tacOpcmNvbGVzX2p1ZXZlc192aWVybmVzX3PDoWJhZG8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkb20uX2x1bi5fbWFyLl9tacOpLl9qdWUuX3ZpZS5fc8OhYi4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZG9fbHVfbWFfbWlfanVfdmlfc8OhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW2hveSBhIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dERheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW21hw7FhbmEgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdkZGRkIFthIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW2F5ZXIgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgJ1tlbF0gZGRkZCBbcGFzYWRvIGEgbGEnICtcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgICddIExUJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdlbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAnaGFjZSAlcycsXG4gICAgICAgICAgICBzOiAndW5vcyBzZWd1bmRvcycsXG4gICAgICAgICAgICBzczogJyVkIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIG06ICd1biBtaW51dG8nLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dG9zJyxcbiAgICAgICAgICAgIGg6ICd1bmEgaG9yYScsXG4gICAgICAgICAgICBoaDogJyVkIGhvcmFzJyxcbiAgICAgICAgICAgIGQ6ICd1biBkw61hJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZMOtYXMnLFxuICAgICAgICAgICAgdzogJ3VuYSBzZW1hbmEnLFxuICAgICAgICAgICAgd3c6ICclZCBzZW1hbmFzJyxcbiAgICAgICAgICAgIE06ICd1biBtZXMnLFxuICAgICAgICAgICAgTU06ICclZCBtZXNlcycsXG4gICAgICAgICAgICB5OiAndW4gYcOxbycsXG4gICAgICAgICAgICB5eTogJyVkIGHDsW9zJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICAgICAgaW52YWxpZERhdGU6ICdGZWNoYSBpbnbDoWxpZGEnLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVzO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEVzdG9uaWFuIFtldF1cbi8vISBhdXRob3IgOiBIZW5yeSBLZWhsbWFubiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYWRoZW5yeVxuLy8hIGltcHJvdmVtZW50cyA6IElsbGltYXIgVGFtYmVrIDogaHR0cHM6Ly9naXRodWIuY29tL3JhZ3Vsa2FcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBzOiBbJ23DtW5lIHNla3VuZGknLCAnbcO1bmkgc2VrdW5kJywgJ3BhYXIgc2VrdW5kaXQnXSxcbiAgICAgICAgICAgIHNzOiBbbnVtYmVyICsgJ3Nla3VuZGknLCBudW1iZXIgKyAnc2VrdW5kaXQnXSxcbiAgICAgICAgICAgIG06IFsnw7xoZSBtaW51dGknLCAnw7xrcyBtaW51dCddLFxuICAgICAgICAgICAgbW06IFtudW1iZXIgKyAnIG1pbnV0aScsIG51bWJlciArICcgbWludXRpdCddLFxuICAgICAgICAgICAgaDogWyfDvGhlIHR1bm5pJywgJ3R1bmQgYWVnYScsICfDvGtzIHR1bmQnXSxcbiAgICAgICAgICAgIGhoOiBbbnVtYmVyICsgJyB0dW5uaScsIG51bWJlciArICcgdHVuZGknXSxcbiAgICAgICAgICAgIGQ6IFsnw7xoZSBww6RldmEnLCAnw7xrcyBww6RldiddLFxuICAgICAgICAgICAgTTogWydrdXUgYWphJywgJ2t1dSBhZWdhJywgJ8O8a3Mga3V1J10sXG4gICAgICAgICAgICBNTTogW251bWJlciArICcga3V1JywgbnVtYmVyICsgJyBrdXVkJ10sXG4gICAgICAgICAgICB5OiBbJ8O8aGUgYWFzdGEnLCAnYWFzdGEnLCAnw7xrcyBhYXN0YSddLFxuICAgICAgICAgICAgeXk6IFtudW1iZXIgKyAnIGFhc3RhJywgbnVtYmVyICsgJyBhYXN0YXQnXSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRba2V5XVsyXSA/IGZvcm1hdFtrZXldWzJdIDogZm9ybWF0W2tleV1bMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICB2YXIgZXQgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdldCcsIHtcbiAgICAgICAgbW9udGhzOiAnamFhbnVhcl92ZWVicnVhcl9tw6RydHNfYXByaWxsX21haV9qdXVuaV9qdXVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9vYmVyX25vdmVtYmVyX2RldHNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdqYWFuX3ZlZWJyX23DpHJ0c19hcHJfbWFpX2p1dW5pX2p1dWxpX2F1Z19zZXB0X29rdF9ub3ZfZGV0cycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICdww7xoYXDDpGV2X2VzbWFzcMOkZXZfdGVpc2lww6Rldl9rb2xtYXDDpGV2X25lbGphcMOkZXZfcmVlZGVfbGF1cMOkZXYnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdQX0VfVF9LX05fUl9MJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1BfRV9UX0tfTl9SX0wnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tUw6RuYSxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbSG9tbWUsXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1tKw6RyZ21pbmVdIGRkZGQgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tFaWxlLF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbRWVsbWluZV0gZGRkZCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIHDDpHJhc3QnLFxuICAgICAgICAgICAgcGFzdDogJyVzIHRhZ2FzaScsXG4gICAgICAgICAgICBzOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgc3M6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbW06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQ6ICclZCBww6RldmEnLFxuICAgICAgICAgICAgTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHl5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGV0O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEJhc3F1ZSBbZXVdXG4vLyEgYXV0aG9yIDogRW5la28gSWxsYXJyYW1lbmRpIDogaHR0cHM6Ly9naXRodWIuY29tL2VpbGxhcnJhXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZXUgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdldScsIHtcbiAgICAgICAgbW9udGhzOiAndXJ0YXJyaWxhX290c2FpbGFfbWFydHhvYV9hcGlyaWxhX21haWF0emFfZWthaW5hX3V6dGFpbGFfYWJ1enR1YV9pcmFpbGFfdXJyaWFfYXphcm9hX2FiZW5kdWEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAndXJ0Ll9vdHMuX21hci5fYXBpLl9tYWkuX2VrYS5fdXp0Ll9hYnUuX2lyYS5fdXJyLl9hemEuX2FiZS4nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnaWdhbmRlYV9hc3RlbGVoZW5hX2FzdGVhcnRlYV9hc3RlYXprZW5hX29zdGVndW5hX29zdGlyYWxhX2xhcnVuYmF0YScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2lnLl9hbC5fYXIuX2F6Ll9vZy5fb2wuX2xyLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdpZ19hbF9hcl9hel9vZ19vbF9scicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS1NTS1ERCcsXG4gICAgICAgICAgICBMTDogJ1lZWVlba29dIE1NTU1bcmVuXSBEW2FdJyxcbiAgICAgICAgICAgIExMTDogJ1lZWVlba29dIE1NTU1bcmVuXSBEW2FdIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBZWVlZW2tvXSBNTU1NW3Jlbl0gRFthXSBISDptbScsXG4gICAgICAgICAgICBsOiAnWVlZWS1NLUQnLFxuICAgICAgICAgICAgbGw6ICdZWVlZW2tvXSBNTU0gRFthXScsXG4gICAgICAgICAgICBsbGw6ICdZWVlZW2tvXSBNTU0gRFthXSBISDptbScsXG4gICAgICAgICAgICBsbGxsOiAnZGRkLCBZWVlZW2tvXSBNTU0gRFthXSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2dhdXJdIExUW2V0YW5dJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbYmloYXJdIExUW2V0YW5dJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBMVFtldGFuXScsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2F0em9dIExUW2V0YW5dJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2F1cnJla29dIGRkZGQgTFRbZXRhbl0nLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyBiYXJydScsXG4gICAgICAgICAgICBwYXN0OiAnZHVlbGEgJXMnLFxuICAgICAgICAgICAgczogJ3NlZ3VuZG8gYmF0enVrJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VndW5kbycsXG4gICAgICAgICAgICBtOiAnbWludXR1IGJhdCcsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0dScsXG4gICAgICAgICAgICBoOiAnb3JkdSBiYXQnLFxuICAgICAgICAgICAgaGg6ICclZCBvcmR1JyxcbiAgICAgICAgICAgIGQ6ICdlZ3VuIGJhdCcsXG4gICAgICAgICAgICBkZDogJyVkIGVndW4nLFxuICAgICAgICAgICAgTTogJ2hpbGFiZXRlIGJhdCcsXG4gICAgICAgICAgICBNTTogJyVkIGhpbGFiZXRlJyxcbiAgICAgICAgICAgIHk6ICd1cnRlIGJhdCcsXG4gICAgICAgICAgICB5eTogJyVkIHVydGUnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGV1O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFBlcnNpYW4gW2ZhXVxuLy8hIGF1dGhvciA6IEVicmFoaW0gQnlhZ293aSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9lYnJhbWluaW9cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn27EnLFxuICAgICAgICAgICAgMjogJ9uyJyxcbiAgICAgICAgICAgIDM6ICfbsycsXG4gICAgICAgICAgICA0OiAn27QnLFxuICAgICAgICAgICAgNTogJ9u1JyxcbiAgICAgICAgICAgIDY6ICfbticsXG4gICAgICAgICAgICA3OiAn27cnLFxuICAgICAgICAgICAgODogJ9u4JyxcbiAgICAgICAgICAgIDk6ICfbuScsXG4gICAgICAgICAgICAwOiAn27AnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn27EnOiAnMScsXG4gICAgICAgICAgICAn27InOiAnMicsXG4gICAgICAgICAgICAn27MnOiAnMycsXG4gICAgICAgICAgICAn27QnOiAnNCcsXG4gICAgICAgICAgICAn27UnOiAnNScsXG4gICAgICAgICAgICAn27YnOiAnNicsXG4gICAgICAgICAgICAn27cnOiAnNycsXG4gICAgICAgICAgICAn27gnOiAnOCcsXG4gICAgICAgICAgICAn27knOiAnOScsXG4gICAgICAgICAgICAn27AnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICB2YXIgZmEgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdmYScsIHtcbiAgICAgICAgbW9udGhzOiAn2pjYp9mG2YjbjNmHX9mB2YjYsduM2Ydf2YXYp9ix2LNf2KLZiNix24zZhF/ZhdmHX9qY2YjYptmGX9qY2YjYptuM2Ydf2KfZiNiqX9iz2b7Yqtin2YXYqNixX9in2qnYqtio2LFf2YbZiNin2YXYqNixX9iv2LPYp9mF2KjYsScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfamNin2YbZiNuM2Ydf2YHZiNix24zZh1/Zhdin2LHYs1/YotmI2LHbjNmEX9mF2Ydf2pjZiNim2YZf2pjZiNim24zZh1/Yp9mI2Kpf2LPZvtiq2KfZhdio2LFf2Kfaqdiq2KjYsV/ZhtmI2KfZhdio2LFf2K/Ys9in2YXYqNixJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ9uM2qlcXHUyMDBj2LTZhtio2Ydf2K/ZiNi02YbYqNmHX9iz2YdcXHUyMDBj2LTZhtio2Ydf2obZh9in2LHYtNmG2KjZh1/ZvtmG2KxcXHUyMDBj2LTZhtio2Ydf2KzZhdi52Ydf2LTZhtio2YcnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfbjNqpXFx1MjAwY9i02YbYqNmHX9iv2YjYtNmG2KjZh1/Ys9mHXFx1MjAwY9i02YbYqNmHX9qG2YfYp9ix2LTZhtio2Ydf2b7ZhtisXFx1MjAwY9i02YbYqNmHX9is2YXYudmHX9i02YbYqNmHJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9uMX9ivX9izX9qGX9m+X9isX9i0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9mC2KjZhCDYp9iyINi42YfYsXzYqNi52K8g2KfYsiDYuNmH2LEvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAv2KjYudivINin2LIg2LjZh9ixLy50ZXN0KGlucHV0KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9mC2KjZhCDYp9iyINi42YfYsSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2KjYudivINin2LIg2LjZh9ixJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb2KfZhdix2YjYsiDYs9in2LnYql0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vZgdix2K/YpyDYs9in2LnYql0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYs9in2LnYql0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vYr9uM2LHZiNiyINiz2KfYudiqXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9m+24zYtF0gW9iz2KfYudiqXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9iv2LEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzINm+24zYtCcsXG4gICAgICAgICAgICBzOiAn2obZhtivINir2KfZhtuM2YcnLFxuICAgICAgICAgICAgc3M6ICclZCDYq9in2YbbjNmHJyxcbiAgICAgICAgICAgIG06ICfbjNqpINiv2YLbjNmC2YcnLFxuICAgICAgICAgICAgbW06ICclZCDYr9mC24zZgtmHJyxcbiAgICAgICAgICAgIGg6ICfbjNqpINiz2KfYudiqJyxcbiAgICAgICAgICAgIGhoOiAnJWQg2LPYp9i52KonLFxuICAgICAgICAgICAgZDogJ9uM2qkg2LHZiNiyJyxcbiAgICAgICAgICAgIGRkOiAnJWQg2LHZiNiyJyxcbiAgICAgICAgICAgIE06ICfbjNqpINmF2KfZhycsXG4gICAgICAgICAgICBNTTogJyVkINmF2KfZhycsXG4gICAgICAgICAgICB5OiAn24zaqSDYs9in2YQnLFxuICAgICAgICAgICAgeXk6ICclZCDYs9in2YQnLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9b27At27ldL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC/YjC9nLCAnLCcpO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ92YUvLFxuICAgICAgICBvcmRpbmFsOiAnJWTZhScsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogNiwgLy8gU2F0dXJkYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogMTIsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDEydGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmE7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRmlubmlzaCBbZmldXG4vLyEgYXV0aG9yIDogVGFybW8gQWlkYW50YXVzdGEgOiBodHRwczovL2dpdGh1Yi5jb20vYmxlYWRvZlxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG51bWJlcnNQYXN0ID0gJ25vbGxhIHlrc2kga2Frc2kga29sbWUgbmVsasOkIHZpaXNpIGt1dXNpIHNlaXRzZW3DpG4ga2FoZGVrc2FuIHloZGVrc8Okbicuc3BsaXQoXG4gICAgICAgICAgICAnICdcbiAgICAgICAgKSxcbiAgICAgICAgbnVtYmVyc0Z1dHVyZSA9IFtcbiAgICAgICAgICAgICdub2xsYScsXG4gICAgICAgICAgICAneWhkZW4nLFxuICAgICAgICAgICAgJ2thaGRlbicsXG4gICAgICAgICAgICAna29sbWVuJyxcbiAgICAgICAgICAgICduZWxqw6RuJyxcbiAgICAgICAgICAgICd2aWlkZW4nLFxuICAgICAgICAgICAgJ2t1dWRlbicsXG4gICAgICAgICAgICBudW1iZXJzUGFzdFs3XSxcbiAgICAgICAgICAgIG51bWJlcnNQYXN0WzhdLFxuICAgICAgICAgICAgbnVtYmVyc1Bhc3RbOV0sXG4gICAgICAgIF07XG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAnbXV1dGFtYW4gc2VrdW5uaW4nIDogJ211dXRhbWEgc2VrdW50aSc7XG4gICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAnc2VrdW5uaW4nIDogJ3Nla3VudGlhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICdtaW51dXRpbicgOiAnbWludXV0dGknO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ21pbnV1dGluJyA6ICdtaW51dXR0aWEnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ3R1bm5pbicgOiAndHVudGknO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ3R1bm5pbicgOiAndHVudGlhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICdww6RpdsOkbicgOiAncMOkaXbDpCc7XG4gICAgICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAncMOkaXbDpG4nIDogJ3DDpGl2w6TDpCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAna3V1a2F1ZGVuJyA6ICdrdXVrYXVzaSc7XG4gICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAna3V1a2F1ZGVuJyA6ICdrdXVrYXV0dGEnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ3Z1b2RlbicgOiAndnVvc2knO1xuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ3Z1b2RlbicgOiAndnVvdHRhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgPSB2ZXJiYWxOdW1iZXIobnVtYmVyLCBpc0Z1dHVyZSkgKyAnICcgKyByZXN1bHQ7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZlcmJhbE51bWJlcihudW1iZXIsIGlzRnV0dXJlKSB7XG4gICAgICAgIHJldHVybiBudW1iZXIgPCAxMFxuICAgICAgICAgICAgPyBpc0Z1dHVyZVxuICAgICAgICAgICAgICAgID8gbnVtYmVyc0Z1dHVyZVtudW1iZXJdXG4gICAgICAgICAgICAgICAgOiBudW1iZXJzUGFzdFtudW1iZXJdXG4gICAgICAgICAgICA6IG51bWJlcjtcbiAgICB9XG5cbiAgICB2YXIgZmkgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdmaScsIHtcbiAgICAgICAgbW9udGhzOiAndGFtbWlrdXVfaGVsbWlrdXVfbWFhbGlza3V1X2h1aHRpa3V1X3RvdWtva3V1X2tlc8Oka3V1X2hlaW7DpGt1dV9lbG9rdXVfc3l5c2t1dV9sb2tha3V1X21hcnJhc2t1dV9qb3VsdWt1dScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICd0YW1taV9oZWxtaV9tYWFsaXNfaHVodGlfdG91a29fa2Vzw6RfaGVpbsOkX2Vsb19zeXlzX2xva2FfbWFycmFzX2pvdWx1Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ3N1bm51bnRhaV9tYWFuYW50YWlfdGlpc3RhaV9rZXNraXZpaWtrb190b3JzdGFpX3BlcmphbnRhaV9sYXVhbnRhaScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3N1X21hX3RpX2tlX3RvX3BlX2xhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ3N1X21hX3RpX2tlX3RvX3BlX2xhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISC5tbScsXG4gICAgICAgICAgICBMVFM6ICdISC5tbS5zcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0RvIE1NTU1bdGFdIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRG8gTU1NTVt0YV0gWVlZWSwgW2tsb10gSEgubW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIERvIE1NTU1bdGFdIFlZWVksIFtrbG9dIEhILm1tJyxcbiAgICAgICAgICAgIGw6ICdELk0uWVlZWScsXG4gICAgICAgICAgICBsbDogJ0RvIE1NTSBZWVlZJyxcbiAgICAgICAgICAgIGxsbDogJ0RvIE1NTSBZWVlZLCBba2xvXSBISC5tbScsXG4gICAgICAgICAgICBsbGxsOiAnZGRkLCBEbyBNTU0gWVlZWSwgW2tsb10gSEgubW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1t0w6Ruw6TDpG5dIFtrbG9dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbaHVvbWVubmFdIFtrbG9dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBba2xvXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2VpbGVuXSBba2xvXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1t2aWltZV0gZGRkZFtuYV0gW2tsb10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyBww6TDpHN0w6QnLFxuICAgICAgICAgICAgcGFzdDogJyVzIHNpdHRlbicsXG4gICAgICAgICAgICBzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHk6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmk7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRmlsaXBpbm8gW2ZpbF1cbi8vISBhdXRob3IgOiBEYW4gSGFnbWFuIDogaHR0cHM6Ly9naXRodWIuY29tL2hhZ21hbmRhblxuLy8hIGF1dGhvciA6IE1hdHRoZXcgQ28gOiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGhld2RlZWNvXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZmlsID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZmlsJywge1xuICAgICAgICBtb250aHM6ICdFbmVyb19QZWJyZXJvX01hcnNvX0FicmlsX01heW9fSHVueW9fSHVseW9fQWdvc3RvX1NldHllbWJyZV9Pa3R1YnJlX05vYnllbWJyZV9EaXN5ZW1icmUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnRW5lX1BlYl9NYXJfQWJyX01heV9IdW5fSHVsX0Fnb19TZXRfT2t0X05vYl9EaXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnTGluZ2dvX0x1bmVzX01hcnRlc19NaXllcmt1bGVzX0h1d2ViZXNfQml5ZXJuZXNfU2FiYWRvJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnTGluX0x1bl9NYXJfTWl5X0h1d19CaXlfU2FiJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ0xpX0x1X01hX01pX0h1X0JpX1NhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ01NL0QvWVlZWScsXG4gICAgICAgICAgICBMTDogJ01NTU0gRCwgWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdNTU1NIEQsIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIE1NTU0gREQsIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ0xUIFtuZ2F5b25nIGFyYXddJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbQnVrYXMgbmddIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnTFQgW3NhIHN1c3Vub2QgbmFdIGRkZGQnLFxuICAgICAgICAgICAgbGFzdERheTogJ0xUIFtrYWhhcG9uXScsXG4gICAgICAgICAgICBsYXN0V2VlazogJ0xUIFtub29uZyBuYWthcmFhbmddIGRkZGQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdzYSBsb29iIG5nICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhbmcgbmFrYWxpcGFzJyxcbiAgICAgICAgICAgIHM6ICdpbGFuZyBzZWd1bmRvJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VndW5kbycsXG4gICAgICAgICAgICBtOiAnaXNhbmcgbWludXRvJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRvJyxcbiAgICAgICAgICAgIGg6ICdpc2FuZyBvcmFzJyxcbiAgICAgICAgICAgIGhoOiAnJWQgb3JhcycsXG4gICAgICAgICAgICBkOiAnaXNhbmcgYXJhdycsXG4gICAgICAgICAgICBkZDogJyVkIGFyYXcnLFxuICAgICAgICAgICAgTTogJ2lzYW5nIGJ1d2FuJyxcbiAgICAgICAgICAgIE1NOiAnJWQgYnV3YW4nLFxuICAgICAgICAgICAgeTogJ2lzYW5nIHRhb24nLFxuICAgICAgICAgICAgeXk6ICclZCB0YW9uJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZpbDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBGYXJvZXNlIFtmb11cbi8vISBhdXRob3IgOiBSYWduYXIgSm9oYW5uZXNlbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9yYWduYXIxMjNcbi8vISBhdXRob3IgOiBLcmlzdGlhbiBTYWthcmlzc29uIDogaHR0cHM6Ly9naXRodWIuY29tL3Nha2FyaXNzb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBmbyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2ZvJywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJfZmVicnVhcl9tYXJzX2FwcsOtbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdqYW5fZmViX21hcl9hcHJfbWFpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2Rlcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdzdW5udWRhZ3VyX23DoW5hZGFndXJfdMO9c2RhZ3VyX21pa3VkYWd1cl9ow7NzZGFndXJfZnLDrWdnamFkYWd1cl9sZXlnYXJkYWd1cicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3N1bl9tw6FuX3TDvXNfbWlrX2jDs3NfZnLDrV9sZXknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnc3VfbcOhX3TDvV9taV9ow7NfZnJfbGUnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRC4gTU1NTSwgWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW8ONIGRhZyBrbC5dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbw40gbW9yZ2luIGtsLl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtrbC5dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbw40gZ2rDoXIga2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tzw63DsHN0dV0gZGRkZCBba2xdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAndW0gJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIHPDrcOwYW5pJyxcbiAgICAgICAgICAgIHM6ICdmw6Egc2VrdW5kJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VrdW5kaXInLFxuICAgICAgICAgICAgbTogJ2VpbiBtaW51dHR1cicsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0dGlyJyxcbiAgICAgICAgICAgIGg6ICdlaW4gdMOtbWknLFxuICAgICAgICAgICAgaGg6ICclZCB0w61tYXInLFxuICAgICAgICAgICAgZDogJ2VpbiBkYWd1cicsXG4gICAgICAgICAgICBkZDogJyVkIGRhZ2FyJyxcbiAgICAgICAgICAgIE06ICdlaW4gbcOhbmHDsHVyJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbcOhbmHDsGlyJyxcbiAgICAgICAgICAgIHk6ICdlaXR0IMOhcicsXG4gICAgICAgICAgICB5eTogJyVkIMOhcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZm87XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRnJlbmNoIChDYW5hZGEpIFtmci1jYV1cbi8vISBhdXRob3IgOiBKb25hdGhhbiBBYm91cmJpaCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb25iY2FcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBmckNhID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZnItY2EnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnZpZXJfZsOpdnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2Fvw7t0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2TDqWNlbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdqYW52Ll9mw6l2ci5fbWFyc19hdnIuX21haV9qdWluX2p1aWwuX2Fvw7t0X3NlcHQuX29jdC5fbm92Ll9kw6ljLicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdkaW1hbmNoZV9sdW5kaV9tYXJkaV9tZXJjcmVkaV9qZXVkaV92ZW5kcmVkaV9zYW1lZGknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2RpX2x1X21hX21lX2plX3ZlX3NhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tBdWpvdXJk4oCZaHVpIMOgXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0RlbWFpbiDDoF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvDoF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tIaWVyIMOgXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2Rlcm5pZXIgw6BdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZGFucyAlcycsXG4gICAgICAgICAgICBwYXN0OiAnaWwgeSBhICVzJyxcbiAgICAgICAgICAgIHM6ICdxdWVscXVlcyBzZWNvbmRlcycsXG4gICAgICAgICAgICBzczogJyVkIHNlY29uZGVzJyxcbiAgICAgICAgICAgIG06ICd1bmUgbWludXRlJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgICAgICBoOiAndW5lIGhldXJlJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaGV1cmVzJyxcbiAgICAgICAgICAgIGQ6ICd1biBqb3VyJyxcbiAgICAgICAgICAgIGRkOiAnJWQgam91cnMnLFxuICAgICAgICAgICAgTTogJ3VuIG1vaXMnLFxuICAgICAgICAgICAgTU06ICclZCBtb2lzJyxcbiAgICAgICAgICAgIHk6ICd1biBhbicsXG4gICAgICAgICAgICB5eTogJyVkIGFucycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShlcnxlKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICAvLyBXb3JkcyB3aXRoIG1hc2N1bGluZSBncmFtbWF0aWNhbCBnZW5kZXI6IG1vaXMsIHRyaW1lc3RyZSwgam91clxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnUSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChudW1iZXIgPT09IDEgPyAnZXInIDogJ2UnKTtcblxuICAgICAgICAgICAgICAgIC8vIFdvcmRzIHdpdGggZmVtaW5pbmUgZ3JhbW1hdGljYWwgZ2VuZGVyOiBzZW1haW5lXG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAobnVtYmVyID09PSAxID8gJ3JlJyA6ICdlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZnJDYTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBGcmVuY2ggKFN3aXR6ZXJsYW5kKSBbZnItY2hdXG4vLyEgYXV0aG9yIDogR2FzcGFyZCBCdWNoZXIgOiBodHRwczovL2dpdGh1Yi5jb20vZ2FzcGFyZFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGZyQ2ggPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdmci1jaCcsIHtcbiAgICAgICAgbW9udGhzOiAnamFudmllcl9mw6l2cmllcl9tYXJzX2F2cmlsX21haV9qdWluX2p1aWxsZXRfYW/Du3Rfc2VwdGVtYnJlX29jdG9icmVfbm92ZW1icmVfZMOpY2VtYnJlJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2phbnYuX2bDqXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW/Du3Rfc2VwdC5fb2N0Ll9ub3YuX2TDqWMuJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ2RpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2RpbS5fbHVuLl9tYXIuX21lci5famV1Ll92ZW4uX3NhbS4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZGlfbHVfbWFfbWVfamVfdmVfc2EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0F1am91cmTigJlodWkgw6BdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbRGVtYWluIMOgXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW8OgXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0hpZXIgw6BdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbZGVybmllciDDoF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdkYW5zICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdpbCB5IGEgJXMnLFxuICAgICAgICAgICAgczogJ3F1ZWxxdWVzIHNlY29uZGVzJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vjb25kZXMnLFxuICAgICAgICAgICAgbTogJ3VuZSBtaW51dGUnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgICAgIGg6ICd1bmUgaGV1cmUnLFxuICAgICAgICAgICAgaGg6ICclZCBoZXVyZXMnLFxuICAgICAgICAgICAgZDogJ3VuIGpvdXInLFxuICAgICAgICAgICAgZGQ6ICclZCBqb3VycycsXG4gICAgICAgICAgICBNOiAndW4gbW9pcycsXG4gICAgICAgICAgICBNTTogJyVkIG1vaXMnLFxuICAgICAgICAgICAgeTogJ3VuIGFuJyxcbiAgICAgICAgICAgIHl5OiAnJWQgYW5zJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KGVyfGUpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIC8vIFdvcmRzIHdpdGggbWFzY3VsaW5lIGdyYW1tYXRpY2FsIGdlbmRlcjogbW9pcywgdHJpbWVzdHJlLCBqb3VyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICBjYXNlICdRJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKG51bWJlciA9PT0gMSA/ICdlcicgOiAnZScpO1xuXG4gICAgICAgICAgICAgICAgLy8gV29yZHMgd2l0aCBmZW1pbmluZSBncmFtbWF0aWNhbCBnZW5kZXI6IHNlbWFpbmVcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChudW1iZXIgPT09IDEgPyAncmUnIDogJ2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZyQ2g7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRnJlbmNoIFtmcl1cbi8vISBhdXRob3IgOiBKb2huIEZpc2NoZXIgOiBodHRwczovL2dpdGh1Yi5jb20vamZyb2ZmaWNlXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzU3RyaWN0UmVnZXggPSAvXihqYW52aWVyfGbDqXZyaWVyfG1hcnN8YXZyaWx8bWFpfGp1aW58anVpbGxldHxhb8O7dHxzZXB0ZW1icmV8b2N0b2JyZXxub3ZlbWJyZXxkw6ljZW1icmUpL2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXggPSAvKGphbnZcXC4/fGbDqXZyXFwuP3xtYXJzfGF2clxcLj98bWFpfGp1aW58anVpbFxcLj98YW/Du3R8c2VwdFxcLj98b2N0XFwuP3xub3ZcXC4/fGTDqWNcXC4/KS9pLFxuICAgICAgICBtb250aHNSZWdleCA9IC8oamFudlxcLj98ZsOpdnJcXC4/fG1hcnN8YXZyXFwuP3xtYWl8anVpbnxqdWlsXFwuP3xhb8O7dHxzZXB0XFwuP3xvY3RcXC4/fG5vdlxcLj98ZMOpY1xcLj98amFudmllcnxmw6l2cmllcnxtYXJzfGF2cmlsfG1haXxqdWlufGp1aWxsZXR8YW/Du3R8c2VwdGVtYnJlfG9jdG9icmV8bm92ZW1icmV8ZMOpY2VtYnJlKS9pLFxuICAgICAgICBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9eamFudi9pLFxuICAgICAgICAgICAgL15mw6l2ci9pLFxuICAgICAgICAgICAgL15tYXJzL2ksXG4gICAgICAgICAgICAvXmF2ci9pLFxuICAgICAgICAgICAgL15tYWkvaSxcbiAgICAgICAgICAgIC9eanVpbi9pLFxuICAgICAgICAgICAgL15qdWlsL2ksXG4gICAgICAgICAgICAvXmFvw7t0L2ksXG4gICAgICAgICAgICAvXnNlcHQvaSxcbiAgICAgICAgICAgIC9eb2N0L2ksXG4gICAgICAgICAgICAvXm5vdi9pLFxuICAgICAgICAgICAgL15kw6ljL2ksXG4gICAgICAgIF07XG5cbiAgICB2YXIgZnIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdmcicsIHtcbiAgICAgICAgbW9udGhzOiAnamFudmllcl9mw6l2cmllcl9tYXJzX2F2cmlsX21haV9qdWluX2p1aWxsZXRfYW/Du3Rfc2VwdGVtYnJlX29jdG9icmVfbm92ZW1icmVfZMOpY2VtYnJlJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2phbnYuX2bDqXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW/Du3Rfc2VwdC5fb2N0Ll9ub3YuX2TDqWMuJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTdHJpY3RSZWdleDogbW9udGhzU3RyaWN0UmVnZXgsXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6IG1vbnRoc1Nob3J0U3RyaWN0UmVnZXgsXG4gICAgICAgIG1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgbG9uZ01vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgc2hvcnRNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHdlZWtkYXlzOiAnZGltYW5jaGVfbHVuZGlfbWFyZGlfbWVyY3JlZGlfamV1ZGlfdmVuZHJlZGlfc2FtZWRpJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkaV9sdV9tYV9tZV9qZV92ZV9zYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbQXVqb3VyZOKAmWh1aSDDoF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tEZW1haW4gw6BdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbw6BdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSGllciDDoF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtkZXJuaWVyIMOgXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2RhbnMgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2lsIHkgYSAlcycsXG4gICAgICAgICAgICBzOiAncXVlbHF1ZXMgc2Vjb25kZXMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRlcycsXG4gICAgICAgICAgICBtOiAndW5lIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ3VuZSBoZXVyZScsXG4gICAgICAgICAgICBoaDogJyVkIGhldXJlcycsXG4gICAgICAgICAgICBkOiAndW4gam91cicsXG4gICAgICAgICAgICBkZDogJyVkIGpvdXJzJyxcbiAgICAgICAgICAgIHc6ICd1bmUgc2VtYWluZScsXG4gICAgICAgICAgICB3dzogJyVkIHNlbWFpbmVzJyxcbiAgICAgICAgICAgIE06ICd1biBtb2lzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9pcycsXG4gICAgICAgICAgICB5OiAndW4gYW4nLFxuICAgICAgICAgICAgeXk6ICclZCBhbnMnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oZXJ8KS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBSZXR1cm4gJ2UnIHdoZW4gZGF5IG9mIG1vbnRoID4gMS4gTW92ZSB0aGlzIGNhc2UgaW5zaWRlXG4gICAgICAgICAgICAgICAgLy8gYmxvY2sgZm9yIG1hc2N1bGluZSB3b3JkcyBiZWxvdy5cbiAgICAgICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzMzNzVcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChudW1iZXIgPT09IDEgPyAnZXInIDogJycpO1xuXG4gICAgICAgICAgICAgICAgLy8gV29yZHMgd2l0aCBtYXNjdWxpbmUgZ3JhbW1hdGljYWwgZ2VuZGVyOiBtb2lzLCB0cmltZXN0cmUsIGpvdXJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1EnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAobnVtYmVyID09PSAxID8gJ2VyJyA6ICdlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBXb3JkcyB3aXRoIGZlbWluaW5lIGdyYW1tYXRpY2FsIGdlbmRlcjogc2VtYWluZVxuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKG51bWJlciA9PT0gMSA/ICdyZScgOiAnZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZnI7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRnJpc2lhbiBbZnldXG4vLyEgYXV0aG9yIDogUm9iaW4gdmFuIGRlciBWbGlldCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9yb2JpbjB2YW4wZGVyMHZcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHNTaG9ydFdpdGhEb3RzID0gJ2phbi5fZmViLl9tcnQuX2Fwci5fbWFpX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2Rlcy4nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0V2l0aG91dERvdHMgPSAnamFuX2ZlYl9tcnRfYXByX21haV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZXMnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICk7XG5cbiAgICB2YXIgZnkgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdmeScsIHtcbiAgICAgICAgbW9udGhzOiAnamFubmV3YXJpc19mZWJyZXdhcmlzX21hYXJ0X2FwcmlsX21hYWllX2p1bnlfanVseV9hdWd1c3R1c19zZXB0aW1iZXJfb2t0b2Jlcl9ub3ZpbWJlcl9kZXNpbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6IGZ1bmN0aW9uIChtLCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhEb3RzO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgvLU1NTS0vLnRlc3QoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhvdXREb3RzW20ubW9udGgoKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhEb3RzW20ubW9udGgoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnc25laW5fbW9hbmRlaV90aWlzZGVpX3dvYW5zZGVpX3RvbmdlcnNkZWlfZnJlZWRfc25lb24nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdzaS5fbW8uX3RpLl93by5fdG8uX2ZyLl9zby4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU2lfTW9fVGlfV29fVG9fRnJfU28nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELU1NLVlZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2hqb2VkIG9tXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW21vYXJuIG9tXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW29tXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2p1c3RlciBvbV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbw7RmcsO7bmVdIGRkZGQgW29tXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ29lciAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgbHluJyxcbiAgICAgICAgICAgIHM6ICdpbiBwZWFyIHNla29uZGVuJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vrb25kZW4nLFxuICAgICAgICAgICAgbTogJ2llbiBtaW7DunQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVuJyxcbiAgICAgICAgICAgIGg6ICdpZW4gb2VyZScsXG4gICAgICAgICAgICBoaDogJyVkIG9lcmVuJyxcbiAgICAgICAgICAgIGQ6ICdpZW4gZGVpJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGFnZW4nLFxuICAgICAgICAgICAgTTogJ2llbiBtb2FubmUnLFxuICAgICAgICAgICAgTU06ICclZCBtb2FubmVuJyxcbiAgICAgICAgICAgIHk6ICdpZW4gamllcicsXG4gICAgICAgICAgICB5eTogJyVkIGppZXJyZW4nLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3RlfGRlKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgbnVtYmVyICtcbiAgICAgICAgICAgICAgICAobnVtYmVyID09PSAxIHx8IG51bWJlciA9PT0gOCB8fCBudW1iZXIgPj0gMjAgPyAnc3RlJyA6ICdkZScpXG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZnk7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogSXJpc2ggb3IgSXJpc2ggR2FlbGljIFtnYV1cbi8vISBhdXRob3IgOiBBbmRyw6kgU2lsdmEgOiBodHRwczovL2dpdGh1Yi5jb20vYXNrcHRcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHMgPSBbXG4gICAgICAgICAgICAnRWFuw6FpcicsXG4gICAgICAgICAgICAnRmVhYmhyYScsXG4gICAgICAgICAgICAnTcOhcnRhJyxcbiAgICAgICAgICAgICdBaWJyZcOhbicsXG4gICAgICAgICAgICAnQmVhbHRhaW5lJyxcbiAgICAgICAgICAgICdNZWl0aGVhbWgnLFxuICAgICAgICAgICAgJ0nDumlsJyxcbiAgICAgICAgICAgICdMw7puYXNhJyxcbiAgICAgICAgICAgICdNZcOhbiBGw7NtaGFpcicsXG4gICAgICAgICAgICAnRGVpcmVhZGggRsOzbWhhaXInLFxuICAgICAgICAgICAgJ1NhbWhhaW4nLFxuICAgICAgICAgICAgJ05vbGxhaWcnLFxuICAgICAgICBdLFxuICAgICAgICBtb250aHNTaG9ydCA9IFtcbiAgICAgICAgICAgICdFYW4nLFxuICAgICAgICAgICAgJ0ZlYWJoJyxcbiAgICAgICAgICAgICdNw6FydCcsXG4gICAgICAgICAgICAnQWliJyxcbiAgICAgICAgICAgICdCZWFsJyxcbiAgICAgICAgICAgICdNZWl0aCcsXG4gICAgICAgICAgICAnScO6aWwnLFxuICAgICAgICAgICAgJ0zDum4nLFxuICAgICAgICAgICAgJ00uRi4nLFxuICAgICAgICAgICAgJ0QuRi4nLFxuICAgICAgICAgICAgJ1NhbWgnLFxuICAgICAgICAgICAgJ05vbGwnLFxuICAgICAgICBdLFxuICAgICAgICB3ZWVrZGF5cyA9IFtcbiAgICAgICAgICAgICdEw6kgRG9taG5haWdoJyxcbiAgICAgICAgICAgICdEw6kgTHVhaW4nLFxuICAgICAgICAgICAgJ0TDqSBNw6FpcnQnLFxuICAgICAgICAgICAgJ0TDqSBDw6lhZGFvaW4nLFxuICAgICAgICAgICAgJ0TDqWFyZGFvaW4nLFxuICAgICAgICAgICAgJ0TDqSBoQW9pbmUnLFxuICAgICAgICAgICAgJ0TDqSBTYXRoYWlybicsXG4gICAgICAgIF0sXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgPSBbJ0RvbWgnLCAnTHVhbicsICdNw6FpcnQnLCAnQ8OpYWQnLCAnRMOpYXInLCAnQW9pbmUnLCAnU2F0aCddLFxuICAgICAgICB3ZWVrZGF5c01pbiA9IFsnRG8nLCAnTHUnLCAnTcOhJywgJ0PDqScsICdEw6knLCAnQScsICdTYSddO1xuXG4gICAgdmFyIGdhID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZ2EnLCB7XG4gICAgICAgIG1vbnRoczogbW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydDogbW9udGhzU2hvcnQsXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiB3ZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogd2Vla2RheXNTaG9ydCxcbiAgICAgICAgd2Vla2RheXNNaW46IHdlZWtkYXlzTWluLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0lubml1IGFnXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0Ftw6FyYWNoIGFnXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2FnXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0lubsOpIGFnXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW3NlbyBjYWl0ZV0gW2FnXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2kgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIMOzIHNoaW4nLFxuICAgICAgICAgICAgczogJ2PDunBsYSBzb2ljaW5kJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc29pY2luZCcsXG4gICAgICAgICAgICBtOiAnbsOzaW3DqWFkJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbsOzaW3DqWFkJyxcbiAgICAgICAgICAgIGg6ICd1YWlyIGFuIGNobG9pZycsXG4gICAgICAgICAgICBoaDogJyVkIHVhaXIgYW4gY2hsb2lnJyxcbiAgICAgICAgICAgIGQ6ICdsw6EnLFxuICAgICAgICAgICAgZGQ6ICclZCBsw6EnLFxuICAgICAgICAgICAgTTogJ23DrScsXG4gICAgICAgICAgICBNTTogJyVkIG3DrW9ubmEnLFxuICAgICAgICAgICAgeTogJ2JsaWFpbicsXG4gICAgICAgICAgICB5eTogJyVkIGJsaWFpbicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShkfG5hfG1oKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSBudW1iZXIgPT09IDEgPyAnZCcgOiBudW1iZXIgJSAxMCA9PT0gMiA/ICduYScgOiAnbWgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdhO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFNjb3R0aXNoIEdhZWxpYyBbZ2RdXG4vLyEgYXV0aG9yIDogSm9uIEFzaGRvd24gOiBodHRwczovL2dpdGh1Yi5jb20vam9uYXNoZG93blxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRocyA9IFtcbiAgICAgICAgICAgICdBbSBGYW9pbGxlYWNoJyxcbiAgICAgICAgICAgICdBbiBHZWFycmFuJyxcbiAgICAgICAgICAgICdBbSBNw6BydCcsXG4gICAgICAgICAgICAnQW4gR2libGVhbicsXG4gICAgICAgICAgICAnQW4gQ8OoaXRlYW4nLFxuICAgICAgICAgICAgJ0FuIHQtw5JnbWhpb3MnLFxuICAgICAgICAgICAgJ0FuIHQtSXVjaGFyJyxcbiAgICAgICAgICAgICdBbiBMw7luYXN0YWwnLFxuICAgICAgICAgICAgJ0FuIHQtU3VsdGFpbicsXG4gICAgICAgICAgICAnQW4gRMOgbWhhaXInLFxuICAgICAgICAgICAgJ0FuIHQtU2FtaGFpbicsXG4gICAgICAgICAgICAnQW4gRMO5YmhsYWNoZCcsXG4gICAgICAgIF0sXG4gICAgICAgIG1vbnRoc1Nob3J0ID0gW1xuICAgICAgICAgICAgJ0Zhb2knLFxuICAgICAgICAgICAgJ0dlYXInLFxuICAgICAgICAgICAgJ03DoHJ0JyxcbiAgICAgICAgICAgICdHaWJsJyxcbiAgICAgICAgICAgICdDw6hpdCcsXG4gICAgICAgICAgICAnw5JnbWgnLFxuICAgICAgICAgICAgJ0l1Y2gnLFxuICAgICAgICAgICAgJ0zDuW4nLFxuICAgICAgICAgICAgJ1N1bHQnLFxuICAgICAgICAgICAgJ0TDoG1oJyxcbiAgICAgICAgICAgICdTYW1oJyxcbiAgICAgICAgICAgICdEw7liaCcsXG4gICAgICAgIF0sXG4gICAgICAgIHdlZWtkYXlzID0gW1xuICAgICAgICAgICAgJ0RpZMOybWhuYWljaCcsXG4gICAgICAgICAgICAnRGlsdWFpbicsXG4gICAgICAgICAgICAnRGltw6BpcnQnLFxuICAgICAgICAgICAgJ0RpY2lhZGFpbicsXG4gICAgICAgICAgICAnRGlhcmRhb2luJyxcbiAgICAgICAgICAgICdEaWhhb2luZScsXG4gICAgICAgICAgICAnRGlzYXRoYWlybmUnLFxuICAgICAgICBdLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0ID0gWydEaWQnLCAnRGlsJywgJ0RpbScsICdEaWMnLCAnRGlhJywgJ0RpaCcsICdEaXMnXSxcbiAgICAgICAgd2Vla2RheXNNaW4gPSBbJ0TDsicsICdMdScsICdNw6AnLCAnQ2knLCAnQXInLCAnSGEnLCAnU2EnXTtcblxuICAgIHZhciBnZCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2dkJywge1xuICAgICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IG1vbnRoc1Nob3J0LFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogd2Vla2RheXMsXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6IHdlZWtkYXlzU2hvcnQsXG4gICAgICAgIHdlZWtkYXlzTWluOiB3ZWVrZGF5c01pbixcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tBbi1kaXVnaCBhaWddIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbQS1tw6BpcmVhY2ggYWlnXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2FpZ10gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tBbi1kw6ggYWlnXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW3NlbyBjaGFpZGhdIFthaWddIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnYW5uIGFuICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdiaG8gY2hpb25uICVzJyxcbiAgICAgICAgICAgIHM6ICdiZWFnYW4gZGlvZ2FuJyxcbiAgICAgICAgICAgIHNzOiAnJWQgZGlvZ2FuJyxcbiAgICAgICAgICAgIG06ICdtaW9uYWlkJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWlvbmFpZGVhbicsXG4gICAgICAgICAgICBoOiAndWFpcicsXG4gICAgICAgICAgICBoaDogJyVkIHVhaXJlYW4nLFxuICAgICAgICAgICAgZDogJ2xhdGhhJyxcbiAgICAgICAgICAgIGRkOiAnJWQgbGF0aGEnLFxuICAgICAgICAgICAgTTogJ23DrG9zJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbcOsb3NhbicsXG4gICAgICAgICAgICB5OiAnYmxpYWRobmEnLFxuICAgICAgICAgICAgeXk6ICclZCBibGlhZGhuYScsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShkfG5hfG1oKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSBudW1iZXIgPT09IDEgPyAnZCcgOiBudW1iZXIgJSAxMCA9PT0gMiA/ICduYScgOiAnbWgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdkO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEdhbGljaWFuIFtnbF1cbi8vISBhdXRob3IgOiBKdWFuIEcuIEh1cnRhZG8gOiBodHRwczovL2dpdGh1Yi5jb20vanVhbmdodXJ0YWRvXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZ2wgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdnbCcsIHtcbiAgICAgICAgbW9udGhzOiAneGFuZWlyb19mZWJyZWlyb19tYXJ6b19hYnJpbF9tYWlvX3h1w7FvX3h1bGxvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlY2VtYnJvJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ3hhbi5fZmViLl9tYXIuX2Fici5fbWFpLl94dcOxLl94dWwuX2Fnby5fc2V0Ll9vdXQuX25vdi5fZGVjLicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdkb21pbmdvX2x1bnNfbWFydGVzX23DqXJjb3Jlc194b3Zlc192ZW5yZXNfc8OhYmFkbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2RvbS5fbHVuLl9tYXIuX23DqXIuX3hvdi5fdmVuLl9zw6FiLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkb19sdV9tYV9tw6lfeG9fdmVfc8OhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW2hveGUgJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAnw6FzJyA6ICfDoScpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHREYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1ttYcOxw6EgJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAnw6FzJyA6ICfDoScpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdkZGRkIFsnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICfDoXMnIDogJ2EnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbb250ZSAnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICfDoScgOiAnYScpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgJ1tvXSBkZGRkIFtwYXNhZG8gJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAnw6FzJyA6ICdhJykgKyAnXSBMVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0ci5pbmRleE9mKCd1bicpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnbicgKyBzdHI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAnZW4gJyArIHN0cjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXN0OiAnaGFpICVzJyxcbiAgICAgICAgICAgIHM6ICd1bnMgc2VndW5kb3MnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWd1bmRvcycsXG4gICAgICAgICAgICBtOiAndW4gbWludXRvJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRvcycsXG4gICAgICAgICAgICBoOiAndW5oYSBob3JhJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG9yYXMnLFxuICAgICAgICAgICAgZDogJ3VuIGTDrWEnLFxuICAgICAgICAgICAgZGQ6ICclZCBkw61hcycsXG4gICAgICAgICAgICBNOiAndW4gbWVzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWVzZXMnLFxuICAgICAgICAgICAgeTogJ3VuIGFubycsXG4gICAgICAgICAgICB5eTogJyVkIGFub3MnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Cui8sXG4gICAgICAgIG9yZGluYWw6ICclZMK6JyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdsO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEtvbmthbmkgRGV2YW5hZ2FyaSBzY3JpcHQgW2dvbS1kZXZhXVxuLy8hIGF1dGhvciA6IFRoZSBEaXNjb3ZlcmVyIDogaHR0cHM6Ly9naXRodWIuY29tL1dpa2lEaXNjb3ZlcmVyXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgczogWyfgpKXgpYvgpKHgpK/gpL4g4KS44KWF4KSV4KSC4KSh4KS+4KSC4KSo4KWAJywgJ+CkpeCli+CkoeClhyDgpLjgpYXgpJXgpILgpKEnXSxcbiAgICAgICAgICAgIHNzOiBbbnVtYmVyICsgJyDgpLjgpYXgpJXgpILgpKHgpL7gpILgpKjgpYAnLCBudW1iZXIgKyAnIOCkuOClheCkleCkguCkoSddLFxuICAgICAgICAgICAgbTogWyfgpI/gpJXgpL4g4KSu4KS/4KSj4KSf4KS+4KSoJywgJ+Ckj+CklSDgpK7gpL/gpKjgpYLgpJ8nXSxcbiAgICAgICAgICAgIG1tOiBbbnVtYmVyICsgJyDgpK7gpL/gpKPgpJ/gpL7gpILgpKjgpYAnLCBudW1iZXIgKyAnIOCkruCkv+Cko+Ckn+CkvuCkgiddLFxuICAgICAgICAgICAgaDogWyfgpI/gpJXgpL4g4KS14KSw4KS+4KSoJywgJ+Ckj+CklSDgpLXgpLAnXSxcbiAgICAgICAgICAgIGhoOiBbbnVtYmVyICsgJyDgpLXgpLDgpL7gpILgpKjgpYAnLCBudW1iZXIgKyAnIOCkteCksOCkvuCkgiddLFxuICAgICAgICAgICAgZDogWyfgpI/gpJXgpL4g4KSm4KS/4KS44KS+4KSoJywgJ+Ckj+CklSDgpKbgpYDgpLgnXSxcbiAgICAgICAgICAgIGRkOiBbbnVtYmVyICsgJyDgpKbgpL/gpLjgpL7gpILgpKjgpYAnLCBudW1iZXIgKyAnIOCkpuClgOCkuCddLFxuICAgICAgICAgICAgTTogWyfgpI/gpJXgpL4g4KSu4KWN4KS54KSv4KSo4KWN4KSv4KS+4KSoJywgJ+Ckj+CklSDgpK7gpY3gpLngpK/gpKjgpYsnXSxcbiAgICAgICAgICAgIE1NOiBbbnVtYmVyICsgJyDgpK7gpY3gpLngpK/gpKjgpY3gpK/gpL7gpKjgpYAnLCBudW1iZXIgKyAnIOCkruCljeCkueCkr+CkqOClhyddLFxuICAgICAgICAgICAgeTogWyfgpI/gpJXgpL4g4KS14KSw4KWN4KS44KS+4KSoJywgJ+Ckj+CklSDgpLXgpLDgpY3gpLgnXSxcbiAgICAgICAgICAgIHl5OiBbbnVtYmVyICsgJyDgpLXgpLDgpY3gpLjgpL7gpILgpKjgpYAnLCBudW1iZXIgKyAnIOCkteCksOCljeCkuOCkvuCkgiddLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyBmb3JtYXRba2V5XVswXSA6IGZvcm1hdFtrZXldWzFdO1xuICAgIH1cblxuICAgIHZhciBnb21EZXZhID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZ29tLWRldmEnLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgc3RhbmRhbG9uZTogJ+CknOCkvuCkqOClh+CkteCkvuCksOClgF/gpKvgpYfgpKzgpY3gpLDgpYHgpLXgpL7gpLDgpYBf4KSu4KS+4KSw4KWN4KSaX+Ckj+CkquCljeCksOClgOCksl/gpK7gpYdf4KSc4KWC4KSoX+CknOClgeCksuCkr1/gpJHgpJfgpLjgpY3gpJ9f4KS44KSq4KWN4KSf4KWH4KSC4KSs4KSwX+CkkeCkleCljeCkn+Cli+CkrOCksF/gpKjgpYvgpLXgpY3gpLngpYfgpILgpKzgpLBf4KSh4KS/4KS44KWH4KSC4KSs4KSwJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBmb3JtYXQ6ICfgpJzgpL7gpKjgpYfgpLXgpL7gpLDgpYDgpJrgpY3gpK/gpL5f4KSr4KWH4KSs4KWN4KSw4KWB4KS14KS+4KSw4KWA4KSa4KWN4KSv4KS+X+CkruCkvuCksOCljeCkmuCkvuCkmuCljeCkr+Ckvl/gpI/gpKrgpY3gpLDgpYDgpLLgpL7gpJrgpY3gpK/gpL5f4KSu4KWH4KSv4KS+4KSa4KWN4KSv4KS+X+CknOClguCkqOCkvuCkmuCljeCkr+Ckvl/gpJzgpYHgpLLgpK/gpL7gpJrgpY3gpK/gpL5f4KSR4KSX4KS44KWN4KSf4KS+4KSa4KWN4KSv4KS+X+CkuOCkquCljeCkn+Clh+CkguCkrOCksOCkvuCkmuCljeCkr+Ckvl/gpJHgpJXgpY3gpJ/gpYvgpKzgpLDgpL7gpJrgpY3gpK/gpL5f4KSo4KWL4KS14KWN4KS54KWH4KSC4KSs4KSw4KS+4KSa4KWN4KSv4KS+X+CkoeCkv+CkuOClh+CkguCkrOCksOCkvuCkmuCljeCkr+Ckvicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgaXNGb3JtYXQ6IC9NTU1NKFxccykrRFtvRF0/LyxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfgpJzgpL7gpKjgpYcuX+Ckq+Clh+CkrOCljeCksOClgS5f4KSu4KS+4KSw4KWN4KSaX+Ckj+CkquCljeCksOClgC5f4KSu4KWHX+CknOClguCkqF/gpJzgpYHgpLIuX+CkkeCkly5f4KS44KSq4KWN4KSf4KWH4KSCLl/gpJHgpJXgpY3gpJ/gpYsuX+CkqOCli+CkteCljeCkueClh+Ckgi5f4KSh4KS/4KS44KWH4KSCLicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICfgpIbgpK/gpKTgpL7gpLBf4KS44KWL4KSu4KS+4KSwX+CkruCkguCkl+Cks+CkvuCksF/gpKzgpYHgpKfgpLXgpL7gpLBf4KSs4KS/4KSw4KWH4KS44KWN4KSk4KS+4KSwX+CkuOClgeCkleCljeCksOCkvuCksF/gpLbgpYfgpKjgpLXgpL7gpLAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgpIbgpK/gpKQuX+CkuOCli+Ckri5f4KSu4KSC4KSX4KSzLl/gpKzgpYHgpKcuX+CkrOCljeCksOClh+CkuOCljeCkpC5f4KS44KWB4KSV4KWN4KSwLl/gpLbgpYfgpKguJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+Ckhl/gpLjgpYtf4KSu4KSCX+CkrOClgV/gpKzgpY3gpLDgpYdf4KS44KWBX+CktuClhycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdBIGg6bW0gW+CkteCkvuCknOCkpOCkvuCkgl0nLFxuICAgICAgICAgICAgTFRTOiAnQSBoOm1tOnNzIFvgpLXgpL7gpJzgpKTgpL7gpIJdJyxcbiAgICAgICAgICAgIEw6ICdERC1NTS1ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgQSBoOm1tIFvgpLXgpL7gpJzgpKTgpL7gpIJdJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBNTU1NIERvLCBZWVlZLCBBIGg6bW0gW+CkteCkvuCknOCkpOCkvuCkgl0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCwgRCBNTU0gWVlZWSwgQSBoOm1tIFvgpLXgpL7gpJzgpKTgpL7gpIJdJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4KSG4KSv4KScXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+Ckq+CkvuCksuCljeCkr+CkvuCkgl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb4KSr4KWB4KSh4KSy4KWLXSBkZGRkWyxdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4KSV4KS+4KSyXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgpKvgpL7gpJ/gpLLgpYtdIGRkZGRbLF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMg4KSG4KSm4KWA4KSCJyxcbiAgICAgICAgICAgIHM6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBzczogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5eTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KOCkteClh+CksCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhlIG9yZGluYWwgJ+CkteClh+CksCcgb25seSBhcHBsaWVzIHRvIGRheSBvZiB0aGUgbW9udGhcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfgpLXgpYfgpLAnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnUSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vla1xuICAgICAgICAgICAgZG95OiAzLCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIgKDcgKyAwIC0gNClcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CksOCkvuCkpOClgHzgpLjgpJXgpL7gpLPgpYDgpIJ84KSm4KSo4KSq4KS+4KSw4KS+4KSCfOCkuOCkvuCkguCknOClhy8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+CksOCkvuCkpOClgCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CkuOCkleCkvuCks+ClgOCkgicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpKbgpKjgpKrgpL7gpLDgpL7gpIInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPiAxMiA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4KS44KS+4KSC4KSc4KWHJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CksOCkvuCkpOClgCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KS44KSV4KS+4KSz4KWA4KSCJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpKbgpKjgpKrgpL7gpLDgpL7gpIInO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkuOCkvuCkguCknOClhyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSw4KS+4KSk4KWAJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBnb21EZXZhO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEtvbmthbmkgTGF0aW4gc2NyaXB0IFtnb20tbGF0bl1cbi8vISBhdXRob3IgOiBUaGUgRGlzY292ZXJlciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9XaWtpRGlzY292ZXJlclxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgIHM6IFsndGhvZGRlYSBzZWtvbmRhbW5pJywgJ3Rob2RkZSBzZWtvbmQnXSxcbiAgICAgICAgICAgIHNzOiBbbnVtYmVyICsgJyBzZWtvbmRhbW5pJywgbnVtYmVyICsgJyBzZWtvbmQnXSxcbiAgICAgICAgICAgIG06IFsnZWthIG1pbnRhbicsICdlayBtaW51dCddLFxuICAgICAgICAgICAgbW06IFtudW1iZXIgKyAnIG1pbnRhbW5pJywgbnVtYmVyICsgJyBtaW50YW0nXSxcbiAgICAgICAgICAgIGg6IFsnZWthIHZvcmFuJywgJ2VrIHZvciddLFxuICAgICAgICAgICAgaGg6IFtudW1iZXIgKyAnIHZvcmFtbmknLCBudW1iZXIgKyAnIHZvcmFtJ10sXG4gICAgICAgICAgICBkOiBbJ2VrYSBkaXNhbicsICdlayBkaXMnXSxcbiAgICAgICAgICAgIGRkOiBbbnVtYmVyICsgJyBkaXNhbW5pJywgbnVtYmVyICsgJyBkaXMnXSxcbiAgICAgICAgICAgIE06IFsnZWthIG1ob2luZWFuJywgJ2VrIG1ob2lubyddLFxuICAgICAgICAgICAgTU06IFtudW1iZXIgKyAnIG1ob2luZWFtbmknLCBudW1iZXIgKyAnIG1ob2luZSddLFxuICAgICAgICAgICAgeTogWydla2Egdm9yc2FuJywgJ2VrIHZvcm9zJ10sXG4gICAgICAgICAgICB5eTogW251bWJlciArICcgdm9yc2FtbmknLCBudW1iZXIgKyAnIHZvcnNhbSddLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyBmb3JtYXRba2V5XVswXSA6IGZvcm1hdFtrZXldWzFdO1xuICAgIH1cblxuICAgIHZhciBnb21MYXRuID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZ29tLWxhdG4nLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgc3RhbmRhbG9uZTogJ0phbmVyX0ZlYnJlcl9NYXJzX0FicmlsX01haV9KdW5fSnVsYWlfQWdvc3RfU2V0ZW1icl9PdHVicl9Ob3ZlbWJyX0RlemVtYnInLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGZvcm1hdDogJ0phbmVyYWNoZWFfRmVicmVyYWNoZWFfTWFyc2FjaGVhX0FicmlsYWNoZWFfTWFpYWNoZWFfSnVuYWNoZWFfSnVsYWlhY2hlYV9BZ29zdGFjaGVhX1NldGVtYnJhY2hlYV9PdHVicmFjaGVhX05vdmVtYnJhY2hlYV9EZXplbWJyYWNoZWEnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiAvTU1NTShcXHMpK0Rbb0RdPy8sXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuLl9GZWIuX01hcnNfQWJyLl9NYWlfSnVuX0p1bC5fQWdvLl9TZXQuX090dS5fTm92Ll9EZXouJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogXCJBaXRhcl9Tb21hcl9Nb25nbGxhcl9CdWRodmFyX0JpcmVzdGFyX1N1a3Jhcl9Tb24ndmFyXCIuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0FpdC5fU29tLl9Nb24uX0J1ZC5fQnJlLl9TdWsuX1Nvbi4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnQWlfU21fTW9fQnVfQnJfU3VfU24nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tIFt2YXp0YV0nLFxuICAgICAgICAgICAgTFRTOiAnQSBoOm1tOnNzIFt2YXp0YV0nLFxuICAgICAgICAgICAgTDogJ0RELU1NLVlZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBBIGg6bW0gW3ZhenRhXScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgTU1NTSBEbywgWVlZWSwgQSBoOm1tIFt2YXp0YV0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCwgRCBNTU0gWVlZWSwgQSBoOm1tIFt2YXp0YV0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tBaXpdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbRmFsZWFtXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1tGdWRkbG9dIGRkZGRbLF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tLYWxdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0ZhdHRsb10gZGRkZFssXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhZGltJyxcbiAgICAgICAgICAgIHM6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBzczogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5eTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KGVyKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICAvLyB0aGUgb3JkaW5hbCAnZXInIG9ubHkgYXBwbGllcyB0byBkYXkgb2YgdGhlIG1vbnRoXG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnZXInO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnUSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vla1xuICAgICAgICAgICAgZG95OiAzLCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIgKDcgKyAwIC0gNClcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL3JhdGl8c29rYWxsaW18ZG9ucGFyYW18c2FuamUvLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICdyYXRpJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnc29rYWxsaW0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnZG9ucGFyYW0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPiAxMiA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnc2FuamUnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAncmF0aSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAnc29rYWxsaW0nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RvbnBhcmFtJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdzYW5qZSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAncmF0aSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZ29tTGF0bjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBHdWphcmF0aSBbZ3VdXG4vLyEgYXV0aG9yIDogS2F1c2hpayBUaGFua2kgOiBodHRwczovL2dpdGh1Yi5jb20vS2F1c2hpazE5ODdcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4KunJyxcbiAgICAgICAgICAgIDI6ICfgq6gnLFxuICAgICAgICAgICAgMzogJ+CrqScsXG4gICAgICAgICAgICA0OiAn4KuqJyxcbiAgICAgICAgICAgIDU6ICfgq6snLFxuICAgICAgICAgICAgNjogJ+CrrCcsXG4gICAgICAgICAgICA3OiAn4KutJyxcbiAgICAgICAgICAgIDg6ICfgq64nLFxuICAgICAgICAgICAgOTogJ+CrrycsXG4gICAgICAgICAgICAwOiAn4KumJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+Crpyc6ICcxJyxcbiAgICAgICAgICAgICfgq6gnOiAnMicsXG4gICAgICAgICAgICAn4KupJzogJzMnLFxuICAgICAgICAgICAgJ+Crqic6ICc0JyxcbiAgICAgICAgICAgICfgq6snOiAnNScsXG4gICAgICAgICAgICAn4KusJzogJzYnLFxuICAgICAgICAgICAgJ+CrrSc6ICc3JyxcbiAgICAgICAgICAgICfgq64nOiAnOCcsXG4gICAgICAgICAgICAn4KuvJzogJzknLFxuICAgICAgICAgICAgJ+Crpic6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciBndSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2d1Jywge1xuICAgICAgICBtb250aHM6ICfgqpzgqr7gqqjgq43gqq/gq4HgqobgqrDgq4Bf4Kqr4KuH4Kqs4KuN4Kqw4KuB4KqG4Kqw4KuAX+CqruCqvuCqsOCrjeCqml/gqo/gqqrgq43gqrDgqr/gqrJf4Kqu4KuHX+CqnOCrguCqqF/gqpzgq4HgqrLgqr7gqohf4KqR4KqX4Kq44KuN4KqfX+CquOCqquCrjeCqn+Crh+CqruCrjeCqrOCqsF/gqpHgqpXgq43gqp/gq43gqqzgqrBf4Kqo4Kq14KuH4Kqu4KuN4Kqs4KqwX+CqoeCqv+CquOCrh+CqruCrjeCqrOCqsCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfgqpzgqr7gqqjgq43gqq/gq4EuX+Cqq+Crh+CqrOCrjeCqsOCrgS5f4Kqu4Kq+4Kqw4KuN4KqaX+Cqj+CqquCrjeCqsOCqvy5f4Kqu4KuHX+CqnOCrguCqqF/gqpzgq4HgqrLgqr4uX+CqkeCqly5f4Kq44Kqq4KuN4Kqf4KuHLl/gqpHgqpXgq43gqp/gq40uX+CqqOCqteCrhy5f4Kqh4Kq/4Kq44KuHLicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICfgqrDgqrXgqr/gqrXgqr7gqrBf4Kq44KuL4Kqu4Kq14Kq+4KqwX+CqruCqguCql+Cqs+CqteCqvuCqsF/gqqzgq4Hgqqfgq43gqrXgqr7gqrBf4KqX4KuB4Kqw4KuB4Kq14Kq+4KqwX+CqtuCrgeCqleCrjeCqsOCqteCqvuCqsF/gqrbgqqjgqr/gqrXgqr7gqrAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgqrDgqrXgqr9f4Kq44KuL4KquX+CqruCqguCql+Cqs1/gqqzgq4Hgqqfgq41f4KqX4KuB4Kqw4KuBX+CqtuCrgeCqleCrjeCqsF/gqrbgqqjgqr8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4KqwX+CquOCri1/gqq7gqoJf4Kqs4KuBX+Cql+CrgV/gqrbgq4Ff4Kq2Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdBIGg6bW0g4Kq14Kq+4KqX4KuN4Kqv4KuHJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcyDgqrXgqr7gqpfgq43gqq/gq4cnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgQSBoOm1tIOCqteCqvuCql+CrjeCqr+CrhycsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgqrXgqr7gqpfgq43gqq/gq4cnLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgqobgqpxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4KqV4Kq+4Kqy4KuHXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4KqX4KqH4KqV4Kq+4Kqy4KuHXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgqqrgqr7gqpvgqrLgqr5dIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg4Kqu4Kq+JyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgqqrgqrngq4fgqrLgqr4nLFxuICAgICAgICAgICAgczogJ+CqheCqruCrgeCqlSDgqqrgqrPgq4snLFxuICAgICAgICAgICAgc3M6ICclZCDgqrjgq4fgqpXgqoLgqqEnLFxuICAgICAgICAgICAgbTogJ+Cqj+CqlSDgqq7gqr/gqqjgqr/gqp8nLFxuICAgICAgICAgICAgbW06ICclZCDgqq7gqr/gqqjgqr/gqp8nLFxuICAgICAgICAgICAgaDogJ+Cqj+CqlSDgqpXgqrLgqr7gqpUnLFxuICAgICAgICAgICAgaGg6ICclZCDgqpXgqrLgqr7gqpUnLFxuICAgICAgICAgICAgZDogJ+Cqj+CqlSDgqqbgqr/gqrXgqrgnLFxuICAgICAgICAgICAgZGQ6ICclZCDgqqbgqr/gqrXgqrgnLFxuICAgICAgICAgICAgTTogJ+Cqj+CqlSDgqq7gqrngqr/gqqjgq4snLFxuICAgICAgICAgICAgTU06ICclZCDgqq7gqrngqr/gqqjgq4snLFxuICAgICAgICAgICAgeTogJ+Cqj+CqlSDgqrXgqrDgq43gqrcnLFxuICAgICAgICAgICAgeXk6ICclZCDgqrXgqrDgq43gqrcnLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4Kun4Kuo4Kup4Kuq4Kur4Kus4Kut4Kuu4Kuv4KumXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAvLyBHdWphcmF0aSBub3RhdGlvbiBmb3IgbWVyaWRpZW1zIGFyZSBxdWl0ZSBmdXp6eSBpbiBwcmFjdGljZS4gV2hpbGUgdGhlcmUgZXhpc3RzXG4gICAgICAgIC8vIGEgcmlnaWQgbm90aW9uIG9mIGEgJ1BhaGFyJyBpdCBpcyBub3QgdXNlZCBhcyByaWdpZGx5IGluIG1vZGVybiBHdWphcmF0aS5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CqsOCqvuCqpHzgqqzgqqrgq4vgqrB84Kq44Kq14Kq+4KqwfOCquOCqvuCqguCqnC8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+CqsOCqvuCqpCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CquOCqteCqvuCqsCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgqqzgqqrgq4vgqrAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTAgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CquOCqvuCqguCqnCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqrDgqr7gqqQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CquOCqteCqvuCqsCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kqs4Kqq4KuL4KqwJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqrjgqr7gqoLgqpwnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CqsOCqvuCqpCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBndTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBIZWJyZXcgW2hlXVxuLy8hIGF1dGhvciA6IFRvbWVyIENvaGVuIDogaHR0cHM6Ly9naXRodWIuY29tL3RvbWVyXG4vLyEgYXV0aG9yIDogTW9zaGUgU2ltYW50b3YgOiBodHRwczovL2dpdGh1Yi5jb20vRGV2ZWxvcG1lbnRJTFxuLy8hIGF1dGhvciA6IFRhbCBBdGVyIDogaHR0cHM6Ly9naXRodWIuY29tL1RhbEF0ZXJcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBoZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2hlJywge1xuICAgICAgICBtb250aHM6ICfXmdeg15XXkNeoX9ek15HXqNeV15DXqF/Xnteo16Vf15DXpNeo15nXnF/XnteQ15lf15nXldeg15lf15nXldec15lf15DXldeS15XXodeYX9eh16TXmNee15HXqF/XkNeV16fXmNeV15HXqF/XoNeV15HXnteR16hf15PXptee15HXqCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfXmdeg15XXs1/XpNeR16jXs1/Xnteo16Vf15DXpNeo17Nf157XkNeZX9eZ15XXoNeZX9eZ15XXnNeZX9eQ15XXktezX9eh16TXmNezX9eQ15XXp9ezX9eg15XXkdezX9eT16bXntezJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ9eo15DXqdeV159f16nXoNeZX9ep15zXmdep15lf16jXkdeZ16LXmV/Xl9ee15nXqdeZX9ep15nXqdeZX9ep15HXqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9eQ17Nf15HXs1/XktezX9eT17Nf15TXs1/XldezX9ep17MnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn15Bf15Ff15Jf15Nf15Rf15Vf16knLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBb15FdTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgW9eRXU1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBb15FdTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIGw6ICdEL00vWVlZWScsXG4gICAgICAgICAgICBsbDogJ0QgTU1NIFlZWVknLFxuICAgICAgICAgICAgbGxsOiAnRCBNTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBsbGxsOiAnZGRkLCBEIE1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb15TXmdeV150g15HWvl1MVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9ee15fXqCDXkda+XUxUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb15HXqdei15RdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb15DXqtee15XXnCDXkda+XUxUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW9eR15nXldedXSBkZGRkIFvXlNeQ15fXqNeV158g15HXqdei15RdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn15HXoteV15MgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ9ec16TXoNeZICVzJyxcbiAgICAgICAgICAgIHM6ICfXnteh16TXqCDXqdeg15nXldeqJyxcbiAgICAgICAgICAgIHNzOiAnJWQg16nXoNeZ15XXqicsXG4gICAgICAgICAgICBtOiAn15PXp9eUJyxcbiAgICAgICAgICAgIG1tOiAnJWQg15PXp9eV16onLFxuICAgICAgICAgICAgaDogJ9ep16LXlCcsXG4gICAgICAgICAgICBoaDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICfXqdei16rXmdeZ150nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyDXqdei15XXqic7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZDogJ9eZ15XXnScsXG4gICAgICAgICAgICBkZDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICfXmdeV157XmdeZ150nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyDXmdee15nXnSc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgTTogJ9eX15XXk9epJyxcbiAgICAgICAgICAgIE1NOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ9eX15XXk9ep15nXmdedJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcg15fXldeT16nXmdedJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB5OiAn16nXoNeUJyxcbiAgICAgICAgICAgIHl5OiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ9ep16DXqteZ15nXnSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgJSAxMCA9PT0gMCAmJiBudW1iZXIgIT09IDEwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnINep16DXlCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnINep16DXmdedJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/XkNeX15RcItemfNec16TXoNeUXCLXpnzXkNeX16jXmSDXlNem15TXqNeZ15nXnXzXnNek16DXmSDXlNem15TXqNeZ15nXnXzXnNek16DXldeqINeR15XXp9eofNeR15HXlden16h815HXoteo15EvaSxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL14o15DXl9eUXCLXpnzXkNeX16jXmSDXlNem15TXqNeZ15nXnXzXkdei16jXkSkkLy50ZXN0KGlucHV0KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn15zXpNeg15XXqiDXkdeV16fXqCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn15HXkdeV16fXqCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ9ec16TXoNeUXCLXpicgOiAn15zXpNeg15kg15TXpteU16jXmdeZ150nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICfXkNeX15RcItemJyA6ICfXkNeX16jXmSDXlNem15TXqNeZ15nXnSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn15HXoteo15EnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGhlO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEhpbmRpIFtoaV1cbi8vISBhdXRob3IgOiBNYXlhbmsgU2luZ2hhbCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXlhbmtzaW5naGFsXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ+ClpycsXG4gICAgICAgICAgICAyOiAn4KWoJyxcbiAgICAgICAgICAgIDM6ICfgpaknLFxuICAgICAgICAgICAgNDogJ+ClqicsXG4gICAgICAgICAgICA1OiAn4KWrJyxcbiAgICAgICAgICAgIDY6ICfgpawnLFxuICAgICAgICAgICAgNzogJ+ClrScsXG4gICAgICAgICAgICA4OiAn4KWuJyxcbiAgICAgICAgICAgIDk6ICfgpa8nLFxuICAgICAgICAgICAgMDogJ+ClpicsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfgpacnOiAnMScsXG4gICAgICAgICAgICAn4KWoJzogJzInLFxuICAgICAgICAgICAgJ+ClqSc6ICczJyxcbiAgICAgICAgICAgICfgpaonOiAnNCcsXG4gICAgICAgICAgICAn4KWrJzogJzUnLFxuICAgICAgICAgICAgJ+ClrCc6ICc2JyxcbiAgICAgICAgICAgICfgpa0nOiAnNycsXG4gICAgICAgICAgICAn4KWuJzogJzgnLFxuICAgICAgICAgICAgJ+Clryc6ICc5JyxcbiAgICAgICAgICAgICfgpaYnOiAnMCcsXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL17gpJzgpKgvaSxcbiAgICAgICAgICAgIC9e4KSr4KS84KSwfOCkq+CksC9pLFxuICAgICAgICAgICAgL17gpK7gpL7gpLDgpY3gpJovaSxcbiAgICAgICAgICAgIC9e4KSF4KSq4KWN4KSw4KWIL2ksXG4gICAgICAgICAgICAvXuCkruCkiC9pLFxuICAgICAgICAgICAgL17gpJzgpYLgpKgvaSxcbiAgICAgICAgICAgIC9e4KSc4KWB4KSyL2ksXG4gICAgICAgICAgICAvXuCkheCkly9pLFxuICAgICAgICAgICAgL17gpLjgpL/gpKTgpIJ84KS44KS/4KSkL2ksXG4gICAgICAgICAgICAvXuCkheCkleCljeCkn+Clgi9pLFxuICAgICAgICAgICAgL17gpKjgpLV84KSo4KS14KSCL2ksXG4gICAgICAgICAgICAvXuCkpuCkv+CkuOCkgnzgpKbgpL/gpLgvaSxcbiAgICAgICAgXSxcbiAgICAgICAgc2hvcnRNb250aHNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9e4KSc4KSoL2ksXG4gICAgICAgICAgICAvXuCkq+CkvOCksC9pLFxuICAgICAgICAgICAgL17gpK7gpL7gpLDgpY3gpJovaSxcbiAgICAgICAgICAgIC9e4KSF4KSq4KWN4KSw4KWIL2ksXG4gICAgICAgICAgICAvXuCkruCkiC9pLFxuICAgICAgICAgICAgL17gpJzgpYLgpKgvaSxcbiAgICAgICAgICAgIC9e4KSc4KWB4KSyL2ksXG4gICAgICAgICAgICAvXuCkheCkly9pLFxuICAgICAgICAgICAgL17gpLjgpL/gpKQvaSxcbiAgICAgICAgICAgIC9e4KSF4KSV4KWN4KSf4KWCL2ksXG4gICAgICAgICAgICAvXuCkqOCktS9pLFxuICAgICAgICAgICAgL17gpKbgpL/gpLgvaSxcbiAgICAgICAgXTtcblxuICAgIHZhciBoaSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2hpJywge1xuICAgICAgICBtb250aHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogJ+CknOCkqOCkteCksOClgF/gpKvgpLzgpLDgpLXgpLDgpYBf4KSu4KS+4KSw4KWN4KSaX+CkheCkquCljeCksOCliOCksl/gpK7gpIhf4KSc4KWC4KSoX+CknOClgeCksuCkvuCkiF/gpIXgpJfgpLjgpY3gpKRf4KS44KS/4KSk4KSu4KWN4KSs4KSwX+CkheCkleCljeCkn+ClguCkrOCksF/gpKjgpLXgpK7gpY3gpKzgpLBf4KSm4KS/4KS44KSu4KWN4KSs4KSwJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGFuZGFsb25lOiAn4KSc4KSo4KS14KSw4KWAX+Ckq+CksOCkteCksOClgF/gpK7gpL7gpLDgpY3gpJpf4KSF4KSq4KWN4KSw4KWI4KSyX+CkruCkiF/gpJzgpYLgpKhf4KSc4KWB4KSy4KS+4KSIX+CkheCkl+CkuOCljeCkpF/gpLjgpL/gpKTgpILgpKzgpLBf4KSF4KSV4KWN4KSf4KWC4KSs4KSwX+CkqOCkteCkguCkrOCksF/gpKbgpL/gpLjgpILgpKzgpLAnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfgpJzgpKguX+Ckq+CkvOCksC5f4KSu4KS+4KSw4KWN4KSaX+CkheCkquCljeCksOCliC5f4KSu4KSIX+CknOClguCkqF/gpJzgpYHgpLIuX+CkheCkly5f4KS44KS/4KSkLl/gpIXgpJXgpY3gpJ/gpYIuX+CkqOCktS5f4KSm4KS/4KS4Licuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfgpLDgpLXgpL/gpLXgpL7gpLBf4KS44KWL4KSu4KS14KS+4KSwX+CkruCkguCkl+CksuCkteCkvuCksF/gpKzgpYHgpKfgpLXgpL7gpLBf4KSX4KWB4KSw4KWC4KS14KS+4KSwX+CktuClgeCkleCljeCksOCkteCkvuCksF/gpLbgpKjgpL/gpLXgpL7gpLAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgpLDgpLXgpL9f4KS44KWL4KSuX+CkruCkguCkl+Cksl/gpKzgpYHgpKdf4KSX4KWB4KSw4KWCX+CktuClgeCkleCljeCksF/gpLbgpKjgpL8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4KSwX+CkuOCli1/gpK7gpIJf4KSs4KWBX+Ckl+ClgV/gpLbgpYFf4KS2Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdBIGg6bW0g4KSs4KSc4KWHJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcyDgpKzgpJzgpYcnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgQSBoOm1tIOCkrOCknOClhycsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgpKzgpJzgpYcnLFxuICAgICAgICB9LFxuXG4gICAgICAgIG1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgbG9uZ01vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgc2hvcnRNb250aHNQYXJzZTogc2hvcnRNb250aHNQYXJzZSxcblxuICAgICAgICBtb250aHNSZWdleDogL14o4KSc4KSo4KS14KSw4KWAfOCknOCkqFxcLj984KSr4KS84KSw4KS14KSw4KWAfOCkq+CksOCkteCksOClgHzgpKvgpLzgpLBcXC4/fOCkruCkvuCksOCljeCkmj984KSF4KSq4KWN4KSw4KWI4KSyfOCkheCkquCljeCksOCliFxcLj984KSu4KSIP3zgpJzgpYLgpKg/fOCknOClgeCksuCkvuCkiHzgpJzgpYHgpLJcXC4/fOCkheCkl+CkuOCljeCkpHzgpIXgpJdcXC4/fOCkuOCkv+CkpOCkruCljeCkrOCksHzgpLjgpL/gpKTgpILgpKzgpLB84KS44KS/4KSkXFwuP3zgpIXgpJXgpY3gpJ/gpYLgpKzgpLB84KSF4KSV4KWN4KSf4KWCXFwuP3zgpKjgpLXgpK7gpY3gpKzgpLB84KSo4KS14KSC4KSs4KSwfOCkqOCktVxcLj984KSm4KS/4KS44KSu4KWN4KSs4KSwfOCkpuCkv+CkuOCkguCkrOCksHzgpKbgpL/gpLhcXC4/KS9pLFxuXG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6IC9eKOCknOCkqOCkteCksOClgHzgpJzgpKhcXC4/fOCkq+CkvOCksOCkteCksOClgHzgpKvgpLDgpLXgpLDgpYB84KSr4KS84KSwXFwuP3zgpK7gpL7gpLDgpY3gpJo/fOCkheCkquCljeCksOCliOCksnzgpIXgpKrgpY3gpLDgpYhcXC4/fOCkruCkiD984KSc4KWC4KSoP3zgpJzgpYHgpLLgpL7gpIh84KSc4KWB4KSyXFwuP3zgpIXgpJfgpLjgpY3gpKR84KSF4KSXXFwuP3zgpLjgpL/gpKTgpK7gpY3gpKzgpLB84KS44KS/4KSk4KSC4KSs4KSwfOCkuOCkv+CkpFxcLj984KSF4KSV4KWN4KSf4KWC4KSs4KSwfOCkheCkleCljeCkn+ClglxcLj984KSo4KS14KSu4KWN4KSs4KSwfOCkqOCkteCkguCkrOCksHzgpKjgpLVcXC4/fOCkpuCkv+CkuOCkruCljeCkrOCksHzgpKbgpL/gpLjgpILgpKzgpLB84KSm4KS/4KS4XFwuPykvaSxcblxuICAgICAgICBtb250aHNTdHJpY3RSZWdleDogL14o4KSc4KSo4KS14KSw4KWAP3zgpKvgpLzgpLDgpLXgpLDgpYB84KSr4KSw4KS14KSw4KWAP3zgpK7gpL7gpLDgpY3gpJo/fOCkheCkquCljeCksOCliOCksj984KSu4KSIP3zgpJzgpYLgpKg/fOCknOClgeCksuCkvuCkiD984KSF4KSX4KS44KWN4KSkP3zgpLjgpL/gpKTgpK7gpY3gpKzgpLB84KS44KS/4KSk4KSC4KSs4KSwfOCkuOCkv+CkpD9cXC4/fOCkheCkleCljeCkn+ClguCkrOCksHzgpIXgpJXgpY3gpJ/gpYJcXC4/fOCkqOCkteCkruCljeCkrOCksHzgpKjgpLXgpILgpKzgpLA/fOCkpuCkv+CkuOCkruCljeCkrOCksHzgpKbgpL/gpLjgpILgpKzgpLA/KS9pLFxuXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6IC9eKOCknOCkqFxcLj984KSr4KS84KSwXFwuP3zgpK7gpL7gpLDgpY3gpJo/fOCkheCkquCljeCksOCliFxcLj984KSu4KSIP3zgpJzgpYLgpKg/fOCknOClgeCkslxcLj984KSF4KSXXFwuP3zgpLjgpL/gpKRcXC4/fOCkheCkleCljeCkn+ClglxcLj984KSo4KS1XFwuP3zgpKbgpL/gpLhcXC4/KS9pLFxuXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+CkhuCknF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgpJXgpLJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgpJXgpLJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+CkquCkv+Ckm+CksuClh10gZGRkZCwgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDgpK7gpYfgpIInLFxuICAgICAgICAgICAgcGFzdDogJyVzIOCkquCkueCksuClhycsXG4gICAgICAgICAgICBzOiAn4KSV4KWB4KSbIOCkueClgCDgpJXgpY3gpLfgpKMnLFxuICAgICAgICAgICAgc3M6ICclZCDgpLjgpYfgpJXgpILgpKEnLFxuICAgICAgICAgICAgbTogJ+Ckj+CklSDgpK7gpL/gpKjgpJ8nLFxuICAgICAgICAgICAgbW06ICclZCDgpK7gpL/gpKjgpJ8nLFxuICAgICAgICAgICAgaDogJ+Ckj+CklSDgpJjgpILgpJ/gpL4nLFxuICAgICAgICAgICAgaGg6ICclZCDgpJjgpILgpJ/gpYcnLFxuICAgICAgICAgICAgZDogJ+Ckj+CklSDgpKbgpL/gpKgnLFxuICAgICAgICAgICAgZGQ6ICclZCDgpKbgpL/gpKgnLFxuICAgICAgICAgICAgTTogJ+Ckj+CklSDgpK7gpLngpYDgpKjgpYcnLFxuICAgICAgICAgICAgTU06ICclZCDgpK7gpLngpYDgpKjgpYcnLFxuICAgICAgICAgICAgeTogJ+Ckj+CklSDgpLXgpLDgpY3gpLcnLFxuICAgICAgICAgICAgeXk6ICclZCDgpLXgpLDgpY3gpLcnLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4KWn4KWo4KWp4KWq4KWr4KWs4KWt4KWu4KWv4KWmXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAvLyBIaW5kaSBub3RhdGlvbiBmb3IgbWVyaWRpZW1zIGFyZSBxdWl0ZSBmdXp6eSBpbiBwcmFjdGljZS4gV2hpbGUgdGhlcmUgZXhpc3RzXG4gICAgICAgIC8vIGEgcmlnaWQgbm90aW9uIG9mIGEgJ1BhaGFyJyBpdCBpcyBub3QgdXNlZCBhcyByaWdpZGx5IGluIG1vZGVybiBIaW5kaS5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CksOCkvuCkpHzgpLjgpYHgpKzgpLl84KSm4KWL4KSq4KS54KSwfOCktuCkvuCkri8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+CksOCkvuCkpCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CkuOClgeCkrOCkuScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpKbgpYvgpKrgpLngpLAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTAgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CktuCkvuCkricpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLDgpL7gpKQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkuOClgeCkrOCkuSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSm4KWL4KSq4KS54KSwJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLbgpL7gpK4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CksOCkvuCkpCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBoaTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBDcm9hdGlhbiBbaHJdXG4vLyEgYXV0aG9yIDogQm9qYW4gTWFya292acSHIDogaHR0cHM6Ly9naXRodWIuY29tL2JtYXJrb3ZpY1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3Nla3VuZGEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzZWt1bmRlJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3Nla3VuZGknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnamVkbmEgbWludXRhJyA6ICdqZWRuZSBtaW51dGUnO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtaW51dGEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtaW51dGUnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWludXRhJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2plZGFuIHNhdCcgOiAnamVkbm9nIHNhdGEnO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzYXQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzYXRhJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3NhdGknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdkYW4nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnZGFuYSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21qZXNlYyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21qZXNlY2EnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWplc2VjaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2dvZGluYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2dvZGluZSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdnb2RpbmEnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGhyID0gbW9tZW50LmRlZmluZUxvY2FsZSgnaHInLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgZm9ybWF0OiAnc2lqZcSNbmphX3ZlbGphxI1lX2/FvnVqa2FfdHJhdm5qYV9zdmlibmphX2xpcG5qYV9zcnBuamFfa29sb3ZvemFfcnVqbmFfbGlzdG9wYWRhX3N0dWRlbm9nYV9wcm9zaW5jYScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTogJ3NpamXEjWFual92ZWxqYcSNYV9vxb51amFrX3RyYXZhbmpfc3ZpYmFual9saXBhbmpfc3JwYW5qX2tvbG92b3pfcnVqYW5fbGlzdG9wYWRfc3R1ZGVuaV9wcm9zaW5hYycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDogJ3Npai5fdmVsai5fb8W+dS5fdHJhLl9zdmkuX2xpcC5fc3JwLl9rb2wuX3J1ai5fbGlzLl9zdHUuX3Byby4nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnbmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfxI1ldHZydGFrX3BldGFrX3N1Ym90YScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ25lZC5fcG9uLl91dG8uX3NyaS5fxI1ldC5fcGV0Ll9zdWIuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ25lX3BvX3V0X3NyX8SNZV9wZV9zdScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEbyBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRG8gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIERvIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbZGFuYXMgdV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tzdXRyYSB1XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbbmVkamVsanVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtzcmlqZWR1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3Vib3R1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBkZGRkIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbanXEjWVyIHVdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Byb8WhbHVdIFtuZWRqZWxqdV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJvxaFsdV0gW3NyaWplZHVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Byb8WhbGVdIFtzdWJvdGVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Byb8WhbGldIGRkZGQgW3VdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICd6YSAlcycsXG4gICAgICAgICAgICBwYXN0OiAncHJpamUgJXMnLFxuICAgICAgICAgICAgczogJ3BhciBzZWt1bmRpJyxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQ6ICdkYW4nLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06ICdtamVzZWMnLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHk6ICdnb2RpbnUnLFxuICAgICAgICAgICAgeXk6IHRyYW5zbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBocjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBIdW5nYXJpYW4gW2h1XVxuLy8hIGF1dGhvciA6IEFkYW0gQnJ1bm5lciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hZGFtYnJ1bm5lclxuLy8hIGF1dGhvciA6IFBldGVyIFZpc3p0ICA6IGh0dHBzOi8vZ2l0aHViLmNvbS9wYXNzYXRndFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHdlZWtFbmRpbmdzID0gJ3Zhc8Ohcm5hcCBow6l0ZsWRbiBrZWRkZW4gc3plcmTDoW4gY3PDvHTDtnJ0w7Zrw7ZuIHDDqW50ZWtlbiBzem9tYmF0b24nLnNwbGl0KFxuICAgICAgICAnICdcbiAgICApO1xuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIG51bSA9IG51bWJlcjtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgID8gJ27DqWjDoW55IG3DoXNvZHBlcmMnXG4gICAgICAgICAgICAgICAgICAgIDogJ27DqWjDoW55IG3DoXNvZHBlcmNlJztcbiAgICAgICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtICsgKGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXgpXG4gICAgICAgICAgICAgICAgICAgID8gJyBtw6Fzb2RwZXJjJ1xuICAgICAgICAgICAgICAgICAgICA6ICcgbcOhc29kcGVyY2UnO1xuICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdlZ3knICsgKGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXggPyAnIHBlcmMnIDogJyBwZXJjZScpO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW0gKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgcGVyYycgOiAnIHBlcmNlJyk7XG4gICAgICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VneScgKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgw7NyYScgOiAnIMOzcsOhamEnKTtcbiAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtICsgKGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXggPyAnIMOzcmEnIDogJyDDs3LDoWphJyk7XG4gICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VneScgKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgbmFwJyA6ICcgbmFwamEnKTtcbiAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtICsgKGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXggPyAnIG5hcCcgOiAnIG5hcGphJyk7XG4gICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VneScgKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgaMOzbmFwJyA6ICcgaMOzbmFwamEnKTtcbiAgICAgICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtICsgKGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXggPyAnIGjDs25hcCcgOiAnIGjDs25hcGphJyk7XG4gICAgICAgICAgICBjYXNlICd5JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VneScgKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgw6l2JyA6ICcgw6l2ZScpO1xuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW0gKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgw6l2JyA6ICcgw6l2ZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgZnVuY3Rpb24gd2Vlayhpc0Z1dHVyZSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGlzRnV0dXJlID8gJycgOiAnW23Dumx0XSAnKSArXG4gICAgICAgICAgICAnWycgK1xuICAgICAgICAgICAgd2Vla0VuZGluZ3NbdGhpcy5kYXkoKV0gK1xuICAgICAgICAgICAgJ10gTFRbLWtvcl0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIGh1ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnaHUnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnXDoXJfZmVicnXDoXJfbcOhcmNpdXNfw6FwcmlsaXNfbcOhanVzX2rDum5pdXNfasO6bGl1c19hdWd1c3p0dXNfc3plcHRlbWJlcl9va3TDs2Jlcl9ub3ZlbWJlcl9kZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdqYW4uX2ZlYi5fbcOhcmMuX8OhcHIuX23DoWouX2rDum4uX2rDumwuX2F1Zy5fc3plcHQuX29rdC5fbm92Ll9kZWMuJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ3Zhc8Ohcm5hcF9ow6l0ZsWRX2tlZGRfc3plcmRhX2Nzw7x0w7ZydMO2a19ww6ludGVrX3N6b21iYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICd2YXNfaMOpdF9rZWRkX3N6ZV9jc8O8dF9ww6luX3N6bycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICd2X2hfa19zemVfY3NfcF9zem8nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS5NTS5ERC4nLFxuICAgICAgICAgICAgTEw6ICdZWVlZLiBNTU1NIEQuJyxcbiAgICAgICAgICAgIExMTDogJ1lZWVkuIE1NTU0gRC4gSDptbScsXG4gICAgICAgICAgICBMTExMOiAnWVlZWS4gTU1NTSBELiwgZGRkZCBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL2RlfGR1L2ksXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0LmNoYXJBdCgxKS50b0xvd2VyQ2FzZSgpID09PSAndSc7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPT09IHRydWUgPyAnZGUnIDogJ0RFJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPT09IHRydWUgPyAnZHUnIDogJ0RVJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbbWFdIExUWy1rb3JdJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbaG9sbmFwXSBMVFsta29yXScsXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3ZWVrLmNhbGwodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogJ1t0ZWduYXBdIExUWy1rb3JdJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdlZWsuY2FsbCh0aGlzLCBmYWxzZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyBtw7psdmEnLFxuICAgICAgICAgICAgcGFzdDogJyVzJyxcbiAgICAgICAgICAgIHM6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeXk6IHRyYW5zbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBodTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBBcm1lbmlhbiBbaHktYW1dXG4vLyEgYXV0aG9yIDogQXJtZW5kYXJhYnlhbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hcm1lbmRhcmFieWFuXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgaHlBbSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2h5LWFtJywge1xuICAgICAgICBtb250aHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogJ9Ww1bjWgtW21b7VodaA1atf1oPVpdW/1oDVvtWh1oDVq1/VtNWh1oDVv9WrX9Wh1brWgNWr1azVq1/VtNWh1bXVq9W91atf1bDVuNaC1bbVq9W91atf1bDVuNaC1azVq9W91atf1oXVo9W41b3Vv9W41b3Vq1/VvdWl1brVv9Wl1bTVotWl1oDVq1/VsNW41a/Vv9Wl1bTVotWl1oDVq1/VttW41bXVpdW01aLVpdaA1atf1aTVpdWv1b/VpdW01aLVpdaA1asnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6ICfVsNW41oLVttW+1aHWgF/Wg9Wl1b/WgNW+1aHWgF/VtNWh1oDVv1/VodW61oDVq9WsX9W01aHVtdWr1b1f1bDVuNaC1bbVq9W9X9Ww1bjWgtWs1avVvV/WhdWj1bjVvdW/1bjVvV/VvdWl1brVv9Wl1bTVotWl1oBf1bDVuNWv1b/VpdW01aLVpdaAX9W21bjVtdWl1bTVotWl1oBf1aTVpdWv1b/VpdW01aLVpdaAJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn1bDVttW+X9aD1b/WgF/VtNaA1b9f1aHVutaAX9W01bXVvV/VsNW21b1f1bDVrNW9X9aF1aPVvV/VvdW61b9f1bDVr9W/X9W21bTVol/VpNWv1b8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAn1a/Vq9aA1aHVr9WrX9Wl1oDVr9W41oLVt9Wh1aLVqdWrX9Wl1oDVpdaE1bfVodWi1anVq1/VudW41oDVpdaE1bfVodWi1anVq1/VsNWr1bbVo9W31aHVotWp1atf1bjWgtaA1aLVodWpX9W31aHVotWh1aknLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfVr9aA1a9f1aXWgNWvX9Wl1oDWhF/VudaA1oRf1bDVttWjX9W41oLWgNWiX9W31aLVqScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfVr9aA1a9f1aXWgNWvX9Wl1oDWhF/VudaA1oRf1bDVttWjX9W41oLWgNWiX9W31aLVqScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWSDVqS4nLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkg1akuLCBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkg1akuLCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9Wh1bXVvdaF1oBdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb1b7VodWy1ahdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb1aXWgNWl1a9dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdkZGRkIFvWhdaA1agg1arVodW01ahdIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW9Wh1bbWgdWh1a5dIGRkZGQgW9aF1oDVqCDVqtWh1bTVqF0gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg1bDVpdW/1bgnLFxuICAgICAgICAgICAgcGFzdDogJyVzINWh1bzVodW7JyxcbiAgICAgICAgICAgIHM6ICfVtNWrINaE1aHVttWrINW+1aHVtdaA1a/VtdWh1bYnLFxuICAgICAgICAgICAgc3M6ICclZCDVvtWh1bXWgNWv1bXVodW2JyxcbiAgICAgICAgICAgIG06ICfWgNW41brVpScsXG4gICAgICAgICAgICBtbTogJyVkINaA1bjVutWlJyxcbiAgICAgICAgICAgIGg6ICfVqtWh1bQnLFxuICAgICAgICAgICAgaGg6ICclZCDVqtWh1bQnLFxuICAgICAgICAgICAgZDogJ9aF1oAnLFxuICAgICAgICAgICAgZGQ6ICclZCDWhdaAJyxcbiAgICAgICAgICAgIE06ICfVodW01avVvScsXG4gICAgICAgICAgICBNTTogJyVkINWh1bTVq9W9JyxcbiAgICAgICAgICAgIHk6ICfVv9Wh1oDVqycsXG4gICAgICAgICAgICB5eTogJyVkINW/1aHWgNWrJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9Wj1avVt9Wl1oDVvtWhfNWh1bzVodW+1bjVv9W+1aF81oHVpdaA1aXVr9W+1aF81aXWgNWl1a/VuNW11aHVti8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIC9eKNaB1aXWgNWl1a/VvtWhfNWl1oDVpdWv1bjVtdWh1bYpJC8udGVzdChpbnB1dCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfVo9Wr1bfVpdaA1b7VoSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn1aHVvNWh1b7VuNW/1b7VoSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn1oHVpdaA1aXVr9W+1aEnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9Wl1oDVpdWv1bjVtdWh1bYnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn18XFxkezEsMn0tKNWr1bZ81oDVpCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICBjYXNlICdERERvJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct1avVtic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct1oDVpCc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGh5QW07XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogSW5kb25lc2lhbiBbaWRdXG4vLyEgYXV0aG9yIDogTW9oYW1tYWQgU2F0cmlvIFV0b21vIDogaHR0cHM6Ly9naXRodWIuY29tL3R5b2tcbi8vISByZWZlcmVuY2U6IGh0dHA6Ly9pZC53aWtpc291cmNlLm9yZy93aWtpL1BlZG9tYW5fVW11bV9FamFhbl9CYWhhc2FfSW5kb25lc2lhX3lhbmdfRGlzZW1wdXJuYWthblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGlkID0gbW9tZW50LmRlZmluZUxvY2FsZSgnaWQnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcmlfRmVicnVhcmlfTWFyZXRfQXByaWxfTWVpX0p1bmlfSnVsaV9BZ3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rlc2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFyX0Fwcl9NZWlfSnVuX0p1bF9BZ3RfU2VwX09rdF9Ob3ZfRGVzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ01pbmdndV9TZW5pbl9TZWxhc2FfUmFidV9LYW1pc19KdW1hdF9TYWJ0dScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ01pbl9TZW5fU2VsX1JhYl9LYW1fSnVtX1NhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdNZ19Tbl9TbF9SYl9LbV9KbV9TYicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEgubW0nLFxuICAgICAgICAgICAgTFRTOiAnSEgubW0uc3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL3BhZ2l8c2lhbmd8c29yZXxtYWxhbS8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ3BhZ2knKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnc2lhbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ3NvcmUnIHx8IG1lcmlkaWVtID09PSAnbWFsYW0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3BhZ2knO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdzaWFuZyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3NvcmUnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21hbGFtJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSGFyaSBpbmkgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbQmVzb2sgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbcHVrdWxdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbS2VtYXJpbiBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtsYWx1IHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2RhbGFtICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyB5YW5nIGxhbHUnLFxuICAgICAgICAgICAgczogJ2JlYmVyYXBhIGRldGlrJyxcbiAgICAgICAgICAgIHNzOiAnJWQgZGV0aWsnLFxuICAgICAgICAgICAgbTogJ3NlbWVuaXQnLFxuICAgICAgICAgICAgbW06ICclZCBtZW5pdCcsXG4gICAgICAgICAgICBoOiAnc2VqYW0nLFxuICAgICAgICAgICAgaGg6ICclZCBqYW0nLFxuICAgICAgICAgICAgZDogJ3NlaGFyaScsXG4gICAgICAgICAgICBkZDogJyVkIGhhcmknLFxuICAgICAgICAgICAgTTogJ3NlYnVsYW4nLFxuICAgICAgICAgICAgTU06ICclZCBidWxhbicsXG4gICAgICAgICAgICB5OiAnc2V0YWh1bicsXG4gICAgICAgICAgICB5eTogJyVkIHRhaHVuJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlkO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEljZWxhbmRpYyBbaXNdXG4vLyEgYXV0aG9yIDogSGlucmlrIMOWcm4gU2lndXLDsHNzb24gOiBodHRwczovL2dpdGh1Yi5jb20vaGlucmlrXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiBwbHVyYWwobikge1xuICAgICAgICBpZiAobiAlIDEwMCA9PT0gMTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKG4gJSAxMCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZVxuICAgICAgICAgICAgICAgICAgICA/ICdub2trcmFyIHNla8O6bmR1cidcbiAgICAgICAgICAgICAgICAgICAgOiAnbm9ra3J1bSBzZWvDum5kdW0nO1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIGlmIChwbHVyYWwobnVtYmVyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ3Nla8O6bmR1cicgOiAnc2Vrw7puZHVtJylcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdzZWvDum5kYSc7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdtw61uw7p0YScgOiAnbcOtbsO6dHUnO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIGlmIChwbHVyYWwobnVtYmVyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICsgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbcOtbsO6dHVyJyA6ICdtw61uw7p0dW0nKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ23DrW7DunRhJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdtw61uw7p0dSc7XG4gICAgICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICAgICAgaWYgKHBsdXJhbChudW1iZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdrbHVra3VzdHVuZGlyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2tsdWtrdXN0dW5kdW0nKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ2tsdWtrdXN0dW5kJztcbiAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnZGFndXInO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAnZGFnJyA6ICdkZWdpJztcbiAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICBpZiAocGx1cmFsKG51bWJlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnZGFnYXInO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAoaXNGdXR1cmUgPyAnZGFnYScgOiAnZMO2Z3VtJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnZGFndXInO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKGlzRnV0dXJlID8gJ2RhZycgOiAnZGVnaScpO1xuICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdtw6FudcOwdXInO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAnbcOhbnXDsCcgOiAnbcOhbnXDsGknO1xuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIGlmIChwbHVyYWwobnVtYmVyKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdtw6FudcOwaXInO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAoaXNGdXR1cmUgPyAnbcOhbnXDsGknIDogJ23DoW51w7B1bScpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ23DoW51w7B1cic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAoaXNGdXR1cmUgPyAnbcOhbnXDsCcgOiAnbcOhbnXDsGknKTtcbiAgICAgICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ8OhcicgOiAnw6FyaSc7XG4gICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgaWYgKHBsdXJhbChudW1iZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICfDoXInIDogJ8OhcnVtJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICfDoXInIDogJ8OhcmknKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBpcyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2lzJywge1xuICAgICAgICBtb250aHM6ICdqYW7DumFyX2ZlYnLDumFyX21hcnNfYXByw61sX21hw61fasO6bsOtX2rDumzDrV/DoWfDunN0X3NlcHRlbWJlcl9va3TDs2Jlcl9uw7N2ZW1iZXJfZGVzZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFuX2ZlYl9tYXJfYXByX21hw61fasO6bl9qw7psX8OhZ8O6X3NlcF9va3RfbsOzdl9kZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnc3VubnVkYWd1cl9tw6FudWRhZ3VyX8O+cmnDsGp1ZGFndXJfbWnDsHZpa3VkYWd1cl9maW1tdHVkYWd1cl9mw7ZzdHVkYWd1cl9sYXVnYXJkYWd1cicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3N1bl9tw6FuX8O+cmlfbWnDsF9maW1fZsO2c19sYXUnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU3VfTcOhX8Oecl9NaV9GaV9Gw7ZfTGEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgW2tsLl0gSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRC4gTU1NTSBZWVlZIFtrbC5dIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vDrSBkYWcga2wuXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW8OhIG1vcmd1biBrbC5dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBba2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW8OtIGfDpnIga2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tzw63DsGFzdGFdIGRkZGQgW2tsLl0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdlZnRpciAlcycsXG4gICAgICAgICAgICBwYXN0OiAnZnlyaXIgJXMgc8Otw7BhbicsXG4gICAgICAgICAgICBzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6ICdrbHVra3VzdHVuZCcsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlzO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEl0YWxpYW4gKFN3aXR6ZXJsYW5kKSBbaXQtY2hdXG4vLyEgYXV0aG9yIDogeGZoIDogaHR0cHM6Ly9naXRodWIuY29tL3hmaFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGl0Q2ggPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdpdC1jaCcsIHtcbiAgICAgICAgbW9udGhzOiAnZ2VubmFpb19mZWJicmFpb19tYXJ6b19hcHJpbGVfbWFnZ2lvX2dpdWdub19sdWdsaW9fYWdvc3RvX3NldHRlbWJyZV9vdHRvYnJlX25vdmVtYnJlX2RpY2VtYnJlJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2dlbl9mZWJfbWFyX2Fwcl9tYWdfZ2l1X2x1Z19hZ29fc2V0X290dF9ub3ZfZGljJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ2RvbWVuaWNhX2x1bmVkw6xfbWFydGVkw6xfbWVyY29sZWTDrF9naW92ZWTDrF92ZW5lcmTDrF9zYWJhdG8nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkb21fbHVuX21hcl9tZXJfZ2lvX3Zlbl9zYWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZG9fbHVfbWFfbWVfZ2lfdmVfc2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tPZ2dpIGFsbGVdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbRG9tYW5pIGFsbGVdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYWxsZV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tJZXJpIGFsbGVdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW2xhIHNjb3JzYV0gZGRkZCBbYWxsZV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbG8gc2NvcnNvXSBkZGRkIFthbGxlXSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiBmdW5jdGlvbiAocykge1xuICAgICAgICAgICAgICAgIHJldHVybiAoL15bMC05XS4rJC8udGVzdChzKSA/ICd0cmEnIDogJ2luJykgKyAnICcgKyBzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBmYScsXG4gICAgICAgICAgICBzOiAnYWxjdW5pIHNlY29uZGknLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRpJyxcbiAgICAgICAgICAgIG06ICd1biBtaW51dG8nLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGknLFxuICAgICAgICAgICAgaDogXCJ1bidvcmFcIixcbiAgICAgICAgICAgIGhoOiAnJWQgb3JlJyxcbiAgICAgICAgICAgIGQ6ICd1biBnaW9ybm8nLFxuICAgICAgICAgICAgZGQ6ICclZCBnaW9ybmknLFxuICAgICAgICAgICAgTTogJ3VuIG1lc2UnLFxuICAgICAgICAgICAgTU06ICclZCBtZXNpJyxcbiAgICAgICAgICAgIHk6ICd1biBhbm5vJyxcbiAgICAgICAgICAgIHl5OiAnJWQgYW5uaScsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfcK6LyxcbiAgICAgICAgb3JkaW5hbDogJyVkwronLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaXRDaDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBJdGFsaWFuIFtpdF1cbi8vISBhdXRob3IgOiBMb3JlbnpvIDogaHR0cHM6Ly9naXRodWIuY29tL2FsaWVtXG4vLyEgYXV0aG9yOiBNYXR0aWEgTGFyZW50aXM6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub3N0YWxnaWF6XG4vLyEgYXV0aG9yOiBNYXJjbyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9NYW5mcmU5OFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGl0ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnaXQnLCB7XG4gICAgICAgIG1vbnRoczogJ2dlbm5haW9fZmViYnJhaW9fbWFyem9fYXByaWxlX21hZ2dpb19naXVnbm9fbHVnbGlvX2Fnb3N0b19zZXR0ZW1icmVfb3R0b2JyZV9ub3ZlbWJyZV9kaWNlbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdnZW5fZmViX21hcl9hcHJfbWFnX2dpdV9sdWdfYWdvX3NldF9vdHRfbm92X2RpYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdkb21lbmljYV9sdW5lZMOsX21hcnRlZMOsX21lcmNvbGVkw6xfZ2lvdmVkw6xfdmVuZXJkw6xfc2FiYXRvJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnZG9tX2x1bl9tYXJfbWVyX2dpb192ZW5fc2FiJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2RvX2x1X21hX21lX2dpX3ZlX3NhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAnW09nZ2kgYScgK1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpID4gMSA/ICdsbGUgJyA6IHRoaXMuaG91cnMoKSA9PT0gMCA/ICcgJyA6IFwibGwnXCIpICtcbiAgICAgICAgICAgICAgICAgICAgJ11MVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHREYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAnW0RvbWFuaSBhJyArXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmhvdXJzKCkgPiAxID8gJ2xsZSAnIDogdGhpcy5ob3VycygpID09PSAwID8gJyAnIDogXCJsbCdcIikgK1xuICAgICAgICAgICAgICAgICAgICAnXUxUJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAnZGRkZCBbYScgK1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpID4gMSA/ICdsbGUgJyA6IHRoaXMuaG91cnMoKSA9PT0gMCA/ICcgJyA6IFwibGwnXCIpICtcbiAgICAgICAgICAgICAgICAgICAgJ11MVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAnW0llcmkgYScgK1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpID4gMSA/ICdsbGUgJyA6IHRoaXMuaG91cnMoKSA9PT0gMCA/ICcgJyA6IFwibGwnXCIpICtcbiAgICAgICAgICAgICAgICAgICAgJ11MVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1tMYSBzY29yc2FdIGRkZGQgW2EnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdsbGUgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaG91cnMoKSA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwibGwnXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXUxUJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1tMbyBzY29yc29dIGRkZGQgW2EnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdsbGUgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaG91cnMoKSA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwibGwnXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXUxUJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICd0cmEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGZhJyxcbiAgICAgICAgICAgIHM6ICdhbGN1bmkgc2Vjb25kaScsXG4gICAgICAgICAgICBzczogJyVkIHNlY29uZGknLFxuICAgICAgICAgICAgbTogJ3VuIG1pbnV0bycsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0aScsXG4gICAgICAgICAgICBoOiBcInVuJ29yYVwiLFxuICAgICAgICAgICAgaGg6ICclZCBvcmUnLFxuICAgICAgICAgICAgZDogJ3VuIGdpb3JubycsXG4gICAgICAgICAgICBkZDogJyVkIGdpb3JuaScsXG4gICAgICAgICAgICB3OiAndW5hIHNldHRpbWFuYScsXG4gICAgICAgICAgICB3dzogJyVkIHNldHRpbWFuZScsXG4gICAgICAgICAgICBNOiAndW4gbWVzZScsXG4gICAgICAgICAgICBNTTogJyVkIG1lc2knLFxuICAgICAgICAgICAgeTogJ3VuIGFubm8nLFxuICAgICAgICAgICAgeXk6ICclZCBhbm5pJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBpdDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBKYXBhbmVzZSBbamFdXG4vLyEgYXV0aG9yIDogTEkgTG9uZyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9iYXJ5b25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBqYSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2phJywge1xuICAgICAgICBlcmFzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcyMDE5LTA1LTAxJyxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgbmFtZTogJ+S7pOWSjCcsXG4gICAgICAgICAgICAgICAgbmFycm93OiAn44u/JyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnUicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNpbmNlOiAnMTk4OS0wMS0wOCcsXG4gICAgICAgICAgICAgICAgdW50aWw6ICcyMDE5LTA0LTMwJyxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgbmFtZTogJ+W5s+aIkCcsXG4gICAgICAgICAgICAgICAgbmFycm93OiAn4427JyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnSCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNpbmNlOiAnMTkyNi0xMi0yNScsXG4gICAgICAgICAgICAgICAgdW50aWw6ICcxOTg5LTAxLTA3JyxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgbmFtZTogJ+aYreWSjCcsXG4gICAgICAgICAgICAgICAgbmFycm93OiAn4428JyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnUycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNpbmNlOiAnMTkxMi0wNy0zMCcsXG4gICAgICAgICAgICAgICAgdW50aWw6ICcxOTI2LTEyLTI0JyxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgbmFtZTogJ+Wkp+atoycsXG4gICAgICAgICAgICAgICAgbmFycm93OiAn4429JyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnVCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNpbmNlOiAnMTg3My0wMS0wMScsXG4gICAgICAgICAgICAgICAgdW50aWw6ICcxOTEyLTA3LTI5JyxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDYsXG4gICAgICAgICAgICAgICAgbmFtZTogJ+aYjuayuycsXG4gICAgICAgICAgICAgICAgbmFycm93OiAn442+JyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnTScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNpbmNlOiAnMDAwMS0wMS0wMScsXG4gICAgICAgICAgICAgICAgdW50aWw6ICcxODczLTEyLTMxJyxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgbmFtZTogJ+ilv+aapicsXG4gICAgICAgICAgICAgICAgbmFycm93OiAnQUQnLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdBRCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNpbmNlOiAnMDAwMC0xMi0zMScsXG4gICAgICAgICAgICAgICAgdW50aWw6IC1JbmZpbml0eSxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgbmFtZTogJ+e0gOWFg+WJjScsXG4gICAgICAgICAgICAgICAgbmFycm93OiAnQkMnLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdCQycsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBlcmFZZWFyT3JkaW5hbFJlZ2V4OiAvKOWFg3xcXGQrKeW5tC8sXG4gICAgICAgIGVyYVllYXJPcmRpbmFsUGFyc2U6IGZ1bmN0aW9uIChpbnB1dCwgbWF0Y2gpIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaFsxXSA9PT0gJ+WFgycgPyAxIDogcGFyc2VJbnQobWF0Y2hbMV0gfHwgaW5wdXQsIDEwKTtcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzOiAnMeaciF8y5pyIXzPmnIhfNOaciF815pyIXzbmnIhfN+aciF845pyIXznmnIhfMTDmnIhfMTHmnIhfMTLmnIgnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnMeaciF8y5pyIXzPmnIhfNOaciF815pyIXzbmnIhfN+aciF845pyIXznmnIhfMTDmnIhfMTHmnIhfMTLmnIgnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn5pel5puc5pelX+aciOabnOaXpV/ngavmm5zml6Vf5rC05puc5pelX+acqOabnOaXpV/ph5Hmm5zml6Vf5Zyf5puc5pelJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn5pelX+aciF/ngatf5rC0X+acqF/ph5Ff5ZyfJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+aXpV/mnIhf54GrX+awtF/mnKhf6YeRX+Wcnycuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVkvTU0vREQnLFxuICAgICAgICAgICAgTEw6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICAgICAgTExMOiAnWVlZWeW5tE3mnIhE5pelIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdZWVlZ5bm0TeaciETml6UgZGRkZCBISDptbScsXG4gICAgICAgICAgICBsOiAnWVlZWS9NTS9ERCcsXG4gICAgICAgICAgICBsbDogJ1lZWVnlubRN5pyIROaXpScsXG4gICAgICAgICAgICBsbGw6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ1lZWVnlubRN5pyIROaXpShkZGQpIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+WNiOWJjXzljYjlvowvaSxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgPT09ICfljYjlvownO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5Y2I5YmNJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfljYjlvownO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vku4rml6VdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb5piO5pelXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKG5vdykge1xuICAgICAgICAgICAgICAgIGlmIChub3cud2VlaygpICE9PSB0aGlzLndlZWsoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vmnaXpgLFdZGRkZCBMVCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkZGRkIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogJ1vmmKjml6VdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAobm93KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMud2VlaygpICE9PSBub3cud2VlaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW+WFiOmAsV1kZGRkIExUJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2RkZGQgTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3ml6UvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgPT09IDEgPyAn5YWD5bm0JyA6IG51bWJlciArICflubQnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5pelJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVz5b6MJyxcbiAgICAgICAgICAgIHBhc3Q6ICclc+WJjScsXG4gICAgICAgICAgICBzOiAn5pWw56eSJyxcbiAgICAgICAgICAgIHNzOiAnJWTnp5InLFxuICAgICAgICAgICAgbTogJzHliIYnLFxuICAgICAgICAgICAgbW06ICclZOWIhicsXG4gICAgICAgICAgICBoOiAnMeaZgumWkycsXG4gICAgICAgICAgICBoaDogJyVk5pmC6ZaTJyxcbiAgICAgICAgICAgIGQ6ICcx5pelJyxcbiAgICAgICAgICAgIGRkOiAnJWTml6UnLFxuICAgICAgICAgICAgTTogJzHjg7bmnIgnLFxuICAgICAgICAgICAgTU06ICclZOODtuaciCcsXG4gICAgICAgICAgICB5OiAnMeW5tCcsXG4gICAgICAgICAgICB5eTogJyVk5bm0JyxcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBqYTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBKYXZhbmVzZSBbanZdXG4vLyEgYXV0aG9yIDogUm9ueSBMYW50aXAgOiBodHRwczovL2dpdGh1Yi5jb20vbGFudGlwXG4vLyEgcmVmZXJlbmNlOiBodHRwOi8vanYud2lraXBlZGlhLm9yZy93aWtpL0Jhc2FfSmF3YVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGp2ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnanYnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcmlfRmVicnVhcmlfTWFyZXRfQXByaWxfTWVpX0p1bmlfSnVsaV9BZ3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vcGVtYmVyX0Rlc2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFyX0Fwcl9NZWlfSnVuX0p1bF9BZ3NfU2VwX09rdF9Ob3BfRGVzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ01pbmdndV9TZW5lbl9TZWxvc29fUmVidV9LZW1pc19KZW11d2FoX1NlcHR1Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnTWluX1Nlbl9TZWxfUmViX0tlbV9KZW1fU2VwJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ01nX1NuX1NsX1JiX0ttX0ptX1NwJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISC5tbScsXG4gICAgICAgICAgICBMVFM6ICdISC5tbS5zcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvZW5qaW5nfHNpeWFuZ3xzb250ZW58bmRhbHUvLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICdlbmppbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnc2l5YW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdzb250ZW4nIHx8IG1lcmlkaWVtID09PSAnbmRhbHUnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VuamluZyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3NpeWFuZyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3NvbnRlbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbmRhbHUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tEaW50ZW4gcHVuaWtvIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW01iZW5qYW5nIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3B1a3VsXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0thbGEgd2luZ2kgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBba2VwZW5na2VyIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3dvbnRlbiBpbmcgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGluZ2thbmcga2VwZW5na2VyJyxcbiAgICAgICAgICAgIHM6ICdzYXdldGF3aXMgZGV0aWsnLFxuICAgICAgICAgICAgc3M6ICclZCBkZXRpaycsXG4gICAgICAgICAgICBtOiAnc2V0dW5nZ2FsIG1lbml0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWVuaXQnLFxuICAgICAgICAgICAgaDogJ3NldHVuZ2dhbCBqYW0nLFxuICAgICAgICAgICAgaGg6ICclZCBqYW0nLFxuICAgICAgICAgICAgZDogJ3NlZGludGVuJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGludGVuJyxcbiAgICAgICAgICAgIE06ICdzZXd1bGFuJyxcbiAgICAgICAgICAgIE1NOiAnJWQgd3VsYW4nLFxuICAgICAgICAgICAgeTogJ3NldGF1bicsXG4gICAgICAgICAgICB5eTogJyVkIHRhdW4nLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4ganY7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogR2VvcmdpYW4gW2thXVxuLy8hIGF1dGhvciA6IElyYWtsaSBKYW5pYXNodmlsaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9JcmFrbGlKYW5pXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIga2EgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdrYScsIHtcbiAgICAgICAgbW9udGhzOiAn4YOY4YOQ4YOc4YOV4YOQ4YOg4YOYX+GDl+GDlOGDkeGDlOGDoOGDleGDkOGDmuGDmF/hg5vhg5Dhg6Dhg6Lhg5hf4YOQ4YOe4YOg4YOY4YOa4YOYX+GDm+GDkOGDmOGDoeGDmF/hg5jhg5Xhg5zhg5jhg6Hhg5hf4YOY4YOV4YOa4YOY4YOh4YOYX+GDkOGDkuGDleGDmOGDoeGDouGDnV/hg6Hhg5Thg6Xhg6Lhg5Thg5vhg5Hhg5Thg6Dhg5hf4YOd4YOl4YOi4YOd4YOb4YOR4YOU4YOg4YOYX+GDnOGDneGDlOGDm+GDkeGDlOGDoOGDmF/hg5Phg5Thg5nhg5Thg5vhg5Hhg5Thg6Dhg5gnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn4YOY4YOQ4YOcX+GDl+GDlOGDkV/hg5vhg5Dhg6Bf4YOQ4YOe4YOgX+GDm+GDkOGDmF/hg5jhg5Xhg5xf4YOY4YOV4YOaX+GDkOGDkuGDlV/hg6Hhg5Thg6Vf4YOd4YOl4YOiX+GDnOGDneGDlF/hg5Phg5Thg5knLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiB7XG4gICAgICAgICAgICBzdGFuZGFsb25lOiAn4YOZ4YOV4YOY4YOg4YOQX+GDneGDoOGDqOGDkOGDkeGDkOGDl+GDmF/hg6Hhg5Dhg5vhg6jhg5Dhg5Hhg5Dhg5fhg5hf4YOd4YOX4YOu4YOo4YOQ4YOR4YOQ4YOX4YOYX+GDruGDo+GDl+GDqOGDkOGDkeGDkOGDl+GDmF/hg57hg5Dhg6Dhg5Dhg6Hhg5nhg5Thg5Xhg5hf4YOo4YOQ4YOR4YOQ4YOX4YOYJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBmb3JtYXQ6ICfhg5nhg5Xhg5jhg6Dhg5Dhg6Ff4YOd4YOg4YOo4YOQ4YOR4YOQ4YOX4YOhX+GDoeGDkOGDm+GDqOGDkOGDkeGDkOGDl+GDoV/hg53hg5fhg67hg6jhg5Dhg5Hhg5Dhg5fhg6Ff4YOu4YOj4YOX4YOo4YOQ4YOR4YOQ4YOX4YOhX+GDnuGDkOGDoOGDkOGDoeGDmeGDlOGDleGDoV/hg6jhg5Dhg5Hhg5Dhg5fhg6EnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiAvKOGDrOGDmOGDnOGDkHzhg6jhg5Thg5vhg5Phg5Thg5IpLyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+GDmeGDleGDmF/hg53hg6Dhg6hf4YOh4YOQ4YObX+GDneGDl+GDrl/hg67hg6Phg5df4YOe4YOQ4YOgX+GDqOGDkOGDkScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfhg5nhg5Vf4YOd4YOgX+GDoeGDkF/hg53hg5df4YOu4YOjX+GDnuGDkF/hg6jhg5AnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4YOT4YOm4YOU4YOhXSBMVFst4YOW4YOUXScsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+GDruGDleGDkOGDml0gTFRbLeGDluGDlF0nLFxuICAgICAgICAgICAgbGFzdERheTogJ1vhg5Lhg6Phg6jhg5jhg5xdIExUWy3hg5bhg5RdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW+GDqOGDlOGDm+GDk+GDlOGDkl0gZGRkZCBMVFst4YOW4YOUXScsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vhg6zhg5jhg5zhg5BdIGRkZGQgTFQt4YOW4YOUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiBmdW5jdGlvbiAocykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzLnJlcGxhY2UoLyjhg6zhg5Dhg5t84YOs4YOj4YOXfOGDoeGDkOGDkOGDl3zhg6zhg5Thg5p84YOT4YOmfOGDl+GDlSko4YOYfOGDlCkvLCBmdW5jdGlvbiAoXG4gICAgICAgICAgICAgICAgICAgICQwLFxuICAgICAgICAgICAgICAgICAgICAkMSxcbiAgICAgICAgICAgICAgICAgICAgJDJcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQyID09PSAn4YOYJyA/ICQxICsgJ+GDqOGDmCcgOiAkMSArICQyICsgJ+GDqOGDmCc7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFzdDogZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoLyjhg6zhg5Dhg5vhg5h84YOs4YOj4YOX4YOYfOGDoeGDkOGDkOGDl+GDmHzhg5Phg6bhg5R84YOX4YOV4YOUKS8udGVzdChzKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC8o4YOYfOGDlCkkLywgJ+GDmOGDoSDhg6zhg5jhg5wnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKC/hg6zhg5Thg5rhg5gvLnRlc3QocykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgv4YOs4YOU4YOa4YOYJC8sICfhg6zhg5rhg5jhg6Eg4YOs4YOY4YOcJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHM6ICfhg6Dhg5Dhg5vhg5Phg5Thg5zhg5jhg5vhg5Qg4YOs4YOQ4YOb4YOYJyxcbiAgICAgICAgICAgIHNzOiAnJWQg4YOs4YOQ4YOb4YOYJyxcbiAgICAgICAgICAgIG06ICfhg6zhg6Phg5fhg5gnLFxuICAgICAgICAgICAgbW06ICclZCDhg6zhg6Phg5fhg5gnLFxuICAgICAgICAgICAgaDogJ+GDoeGDkOGDkOGDl+GDmCcsXG4gICAgICAgICAgICBoaDogJyVkIOGDoeGDkOGDkOGDl+GDmCcsXG4gICAgICAgICAgICBkOiAn4YOT4YOm4YOUJyxcbiAgICAgICAgICAgIGRkOiAnJWQg4YOT4YOm4YOUJyxcbiAgICAgICAgICAgIE06ICfhg5fhg5Xhg5QnLFxuICAgICAgICAgICAgTU06ICclZCDhg5fhg5Xhg5QnLFxuICAgICAgICAgICAgeTogJ+GDrOGDlOGDmuGDmCcsXG4gICAgICAgICAgICB5eTogJyVkIOGDrOGDlOGDmuGDmCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC8wfDEt4YOa4YOYfOGDm+GDlC1cXGR7MSwyfXxcXGR7MSwyfS3hg5QvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3hg5rhg5gnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG51bWJlciA8IDIwIHx8XG4gICAgICAgICAgICAgICAgKG51bWJlciA8PSAxMDAgJiYgbnVtYmVyICUgMjAgPT09IDApIHx8XG4gICAgICAgICAgICAgICAgbnVtYmVyICUgMTAwID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+GDm+GDlC0nICsgbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct4YOUJztcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLFxuICAgICAgICAgICAgZG95OiA3LFxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGthO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEthemFraCBba2tdXG4vLyEgYXV0aG9ycyA6IE51cmxhbiBSYWtoaW16aGFub3YgOiBodHRwczovL2dpdGh1Yi5jb20vbnVybGFuXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3VmZml4ZXMgPSB7XG4gICAgICAgIDA6ICct0YjRlicsXG4gICAgICAgIDE6ICct0YjRlicsXG4gICAgICAgIDI6ICct0YjRlicsXG4gICAgICAgIDM6ICct0YjRlicsXG4gICAgICAgIDQ6ICct0YjRlicsXG4gICAgICAgIDU6ICct0YjRlicsXG4gICAgICAgIDY6ICct0YjRiycsXG4gICAgICAgIDc6ICct0YjRlicsXG4gICAgICAgIDg6ICct0YjRlicsXG4gICAgICAgIDk6ICct0YjRiycsXG4gICAgICAgIDEwOiAnLdGI0YsnLFxuICAgICAgICAyMDogJy3RiNGLJyxcbiAgICAgICAgMzA6ICct0YjRiycsXG4gICAgICAgIDQwOiAnLdGI0YsnLFxuICAgICAgICA1MDogJy3RiNGWJyxcbiAgICAgICAgNjA6ICct0YjRiycsXG4gICAgICAgIDcwOiAnLdGI0ZYnLFxuICAgICAgICA4MDogJy3RiNGWJyxcbiAgICAgICAgOTA6ICct0YjRiycsXG4gICAgICAgIDEwMDogJy3RiNGWJyxcbiAgICB9O1xuXG4gICAgdmFyIGtrID0gbW9tZW50LmRlZmluZUxvY2FsZSgna2snLCB7XG4gICAgICAgIG1vbnRoczogJ9Kb0LDSo9GC0LDRgF/QsNKb0L/QsNC9X9C90LDRg9GA0YvQt1/RgdOZ0YPRltGAX9C80LDQvNGL0YBf0LzQsNGD0YHRi9C8X9GI0ZbQu9C00LVf0YLQsNC80YvQt1/Sm9GL0YDQutKv0LnQtdC6X9Kb0LDQt9Cw0L1f0pvQsNGA0LDRiNCwX9C20LXQu9GC0L7Sm9GB0LDQvScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfSm9Cw0qNf0LDSm9C/X9C90LDRg1/RgdOZ0YNf0LzQsNC8X9C80LDRg1/RiNGW0Ltf0YLQsNC8X9Kb0YvRgF/Sm9Cw0Ldf0pvQsNGAX9C20LXQuycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfQttC10LrRgdC10L3QsdGWX9C00q/QudGB0LXQvdCx0ZZf0YHQtdC50YHQtdC90LHRll/RgdOZ0YDRgdC10L3QsdGWX9Cx0LXQudGB0LXQvdCx0ZZf0LbSsdC80LBf0YHQtdC90LHRlicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9C20LXQul/QtNKv0Llf0YHQtdC5X9GB05nRgF/QsdC10Llf0LbSsdC8X9GB0LXQvScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfQttC6X9C00Llf0YHQuV/RgdGAX9Cx0Llf0LbQvF/RgdC9Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9CR0q/Qs9GW0L0g0YHQsNKT0LDRgl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQldGA0YLQtdKjINGB0LDSk9Cw0YJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb0YHQsNKT0LDRgl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vQmtC10YjQtSDRgdCw0pPQsNGCXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vTqNGC0LrQtdC9INCw0L/RgtCw0L3Ri9KjXSBkZGRkIFvRgdCw0pPQsNGCXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzINGW0YjRltC90LTQtScsXG4gICAgICAgICAgICBwYXN0OiAnJXMg0LHSsdGA0YvQvScsXG4gICAgICAgICAgICBzOiAn0LHRltGA0L3QtdGI0LUg0YHQtdC60YPQvdC0JyxcbiAgICAgICAgICAgIHNzOiAnJWQg0YHQtdC60YPQvdC0JyxcbiAgICAgICAgICAgIG06ICfQsdGW0YAg0LzQuNC90YPRgicsXG4gICAgICAgICAgICBtbTogJyVkINC80LjQvdGD0YInLFxuICAgICAgICAgICAgaDogJ9Cx0ZbRgCDRgdCw0pPQsNGCJyxcbiAgICAgICAgICAgIGhoOiAnJWQg0YHQsNKT0LDRgicsXG4gICAgICAgICAgICBkOiAn0LHRltGAINC60q/QvScsXG4gICAgICAgICAgICBkZDogJyVkINC60q/QvScsXG4gICAgICAgICAgICBNOiAn0LHRltGAINCw0LknLFxuICAgICAgICAgICAgTU06ICclZCDQsNC5JyxcbiAgICAgICAgICAgIHk6ICfQsdGW0YAg0LbRi9C7JyxcbiAgICAgICAgICAgIHl5OiAnJWQg0LbRi9C7JyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LSjRiNGWfNGI0YspLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGEgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBiID0gbnVtYmVyID49IDEwMCA/IDEwMCA6IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHN1ZmZpeGVzW251bWJlcl0gfHwgc3VmZml4ZXNbYV0gfHwgc3VmZml4ZXNbYl0pO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4ga2s7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQ2FtYm9kaWFuIFtrbV1cbi8vISBhdXRob3IgOiBLcnV5IFZhbm5hIDogaHR0cHM6Ly9naXRodWIuY29tL2tydXl2YW5uYVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICfhn6EnLFxuICAgICAgICAgICAgMjogJ+GfoicsXG4gICAgICAgICAgICAzOiAn4Z+jJyxcbiAgICAgICAgICAgIDQ6ICfhn6QnLFxuICAgICAgICAgICAgNTogJ+GfpScsXG4gICAgICAgICAgICA2OiAn4Z+mJyxcbiAgICAgICAgICAgIDc6ICfhn6cnLFxuICAgICAgICAgICAgODogJ+GfqCcsXG4gICAgICAgICAgICA5OiAn4Z+pJyxcbiAgICAgICAgICAgIDA6ICfhn6AnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn4Z+hJzogJzEnLFxuICAgICAgICAgICAgJ+Gfoic6ICcyJyxcbiAgICAgICAgICAgICfhn6MnOiAnMycsXG4gICAgICAgICAgICAn4Z+kJzogJzQnLFxuICAgICAgICAgICAgJ+GfpSc6ICc1JyxcbiAgICAgICAgICAgICfhn6YnOiAnNicsXG4gICAgICAgICAgICAn4Z+nJzogJzcnLFxuICAgICAgICAgICAgJ+GfqCc6ICc4JyxcbiAgICAgICAgICAgICfhn6knOiAnOScsXG4gICAgICAgICAgICAn4Z+gJzogJzAnLFxuICAgICAgICB9O1xuXG4gICAgdmFyIGttID0gbW9tZW50LmRlZmluZUxvY2FsZSgna20nLCB7XG4gICAgICAgIG1vbnRoczogJ+GemOGegOGemuGetl/hnoDhnrvhnpjhn5Lhnpfhn4hf4Z6Y4Z644Z6T4Z62X+GemOGfgeGen+Getl/hnqfhnp/hnpfhnrZf4Z6Y4Z634Z6Q4Z674Z6T4Z62X+GegOGegOGfkuGegOGeiuGetl/hnp/hnrjhnqDhnrZf4Z6A4Z6J4Z+S4Z6J4Z62X+Gej+Geu+Gem+Getl/hnpzhnrfhnoXhn5LhnobhnrfhnoDhnrZf4Z6S4Z+S4Z6T4Z68Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ+GemOGegOGemuGetl/hnoDhnrvhnpjhn5Lhnpfhn4hf4Z6Y4Z644Z6T4Z62X+GemOGfgeGen+Getl/hnqfhnp/hnpfhnrZf4Z6Y4Z634Z6Q4Z674Z6T4Z62X+GegOGegOGfkuGegOGeiuGetl/hnp/hnrjhnqDhnrZf4Z6A4Z6J4Z+S4Z6J4Z62X+Gej+Geu+Gem+Getl/hnpzhnrfhnoXhn5LhnobhnrfhnoDhnrZf4Z6S4Z+S4Z6T4Z68Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+GeouGetuGekeGet+Gej+GfkuGemV/hnoXhn5DhnpPhn5LhnpFf4Z6i4Z6E4Z+S4Z6C4Z624Z6aX+GeluGeu+Gekl/hnpbhn5LhnprhnqDhnp/hn5LhnpThno/hnrfhn41f4Z6f4Z674Z6A4Z+S4Z6aX+Gen+GfheGemuGfjScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+GeouGetl/hnoVf4Z6iX+Gell/hnpbhn5Lhnppf4Z6f4Z67X+Genycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfhnqLhnrZf4Z6FX+Geol/hnpZf4Z6W4Z+S4Z6aX+Gen+Geu1/hnp8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4Z6W4Z+S4Z6a4Z654Z6AfOGem+GfkuGehOGetuGehS8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ID09PSAn4Z6b4Z+S4Z6E4Z624Z6FJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+GeluGfkuGemuGeueGegCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Z6b4Z+S4Z6E4Z624Z6FJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4Z6Q4Z+S4Z6E4Z+D4Z6T4Z+B4Z+HIOGemOGfieGfhOGehF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vhnp/hn5LhnqLhn4LhnoAg4Z6Y4Z+J4Z+E4Z6EXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW+GemOGfieGfhOGehF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vhnpjhn5Lhnp/hnrfhnpvhnpjhnrfhnokg4Z6Y4Z+J4Z+E4Z6EXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW+Gen+GelOGfkuGej+GetuGeoOGfjeGemOGeu+Gek10gW+GemOGfieGfhOGehF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclc+GekeGfgOGejycsXG4gICAgICAgICAgICBwYXN0OiAnJXPhnpjhnrvhnpMnLFxuICAgICAgICAgICAgczogJ+GelOGfieGeu+Gek+GfkuGemOGetuGek+GenOGet+Gek+GetuGekeGeuCcsXG4gICAgICAgICAgICBzczogJyVkIOGenOGet+Gek+GetuGekeGeuCcsXG4gICAgICAgICAgICBtOiAn4Z6Y4Z694Z6Z4Z6T4Z624Z6R4Z64JyxcbiAgICAgICAgICAgIG1tOiAnJWQg4Z6T4Z624Z6R4Z64JyxcbiAgICAgICAgICAgIGg6ICfhnpjhnr3hnpnhnpjhn4nhn4ThnoQnLFxuICAgICAgICAgICAgaGg6ICclZCDhnpjhn4nhn4ThnoQnLFxuICAgICAgICAgICAgZDogJ+GemOGeveGemeGekOGfkuGehOGfgycsXG4gICAgICAgICAgICBkZDogJyVkIOGekOGfkuGehOGfgycsXG4gICAgICAgICAgICBNOiAn4Z6Y4Z694Z6Z4Z6B4Z+CJyxcbiAgICAgICAgICAgIE1NOiAnJWQg4Z6B4Z+CJyxcbiAgICAgICAgICAgIHk6ICfhnpjhnr3hnpnhnobhn5LhnpPhnrbhn4YnLFxuICAgICAgICAgICAgeXk6ICclZCDhnobhn5LhnpPhnrbhn4YnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAv4Z6R4Z64XFxkezEsMn0vLFxuICAgICAgICBvcmRpbmFsOiAn4Z6R4Z64JWQnLFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4Z+h4Z+i4Z+j4Z+k4Z+l4Z+m4Z+n4Z+o4Z+p4Z+gXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4ga207XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogS2FubmFkYSBba25dXG4vLyEgYXV0aG9yIDogUmFqZWV2IE5haWsgOiBodHRwczovL2dpdGh1Yi5jb20vcmFqZWV2bmFpa3RlXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ+CzpycsXG4gICAgICAgICAgICAyOiAn4LOoJyxcbiAgICAgICAgICAgIDM6ICfgs6knLFxuICAgICAgICAgICAgNDogJ+CzqicsXG4gICAgICAgICAgICA1OiAn4LOrJyxcbiAgICAgICAgICAgIDY6ICfgs6wnLFxuICAgICAgICAgICAgNzogJ+CzrScsXG4gICAgICAgICAgICA4OiAn4LOuJyxcbiAgICAgICAgICAgIDk6ICfgs68nLFxuICAgICAgICAgICAgMDogJ+CzpicsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfgs6cnOiAnMScsXG4gICAgICAgICAgICAn4LOoJzogJzInLFxuICAgICAgICAgICAgJ+CzqSc6ICczJyxcbiAgICAgICAgICAgICfgs6onOiAnNCcsXG4gICAgICAgICAgICAn4LOrJzogJzUnLFxuICAgICAgICAgICAgJ+CzrCc6ICc2JyxcbiAgICAgICAgICAgICfgs60nOiAnNycsXG4gICAgICAgICAgICAn4LOuJzogJzgnLFxuICAgICAgICAgICAgJ+Czryc6ICc5JyxcbiAgICAgICAgICAgICfgs6YnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICB2YXIga24gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdrbicsIHtcbiAgICAgICAgbW9udGhzOiAn4LKc4LKo4LK14LKw4LK/X+Cyq+CzhuCyrOCzjeCysOCyteCysOCyv1/gsq7gsr7gsrDgs43gsprgs41f4LKP4LKq4LON4LKw4LK/4LKy4LONX+CyruCzhuCzlV/gspzgs4Lgsqjgs41f4LKc4LOB4LKy4LOG4LOWX+CyhuCyl+CyuOCzjeCyn+CzjV/gsrjgs4bgsqrgs43gsp/gs4bgsoLgsqzgsrDgs41f4LKF4LKV4LON4LKf4LOG4LOC4LOV4LKs4LKw4LONX+CyqOCyteCzhuCyguCyrOCysOCzjV/gsqHgsr/gsrjgs4bgsoLgsqzgsrDgs40nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn4LKc4LKoX+Cyq+CzhuCyrOCzjeCysF/gsq7gsr7gsrDgs43gsprgs41f4LKP4LKq4LON4LKw4LK/4LKy4LONX+CyruCzhuCzlV/gspzgs4Lgsqjgs41f4LKc4LOB4LKy4LOG4LOWX+CyhuCyl+CyuOCzjeCyn+CzjV/gsrjgs4bgsqrgs43gsp/gs4bgsoJf4LKF4LKV4LON4LKf4LOG4LOC4LOVX+CyqOCyteCzhuCygl/gsqHgsr/gsrjgs4bgsoInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAn4LKt4LK+4LKo4LOB4LK14LK+4LKwX+CyuOCzhuCzguCzleCyruCyteCyvuCysF/gsq7gsoLgspfgsrPgsrXgsr7gsrBf4LKs4LOB4LKn4LK14LK+4LKwX+Cyl+CzgeCysOCzgeCyteCyvuCysF/gsrbgs4HgspXgs43gsrDgsrXgsr7gsrBf4LK24LKo4LK/4LK14LK+4LKwJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4LKt4LK+4LKo4LOBX+CyuOCzhuCzguCzleCyrl/gsq7gsoLgspfgsrNf4LKs4LOB4LKnX+Cyl+CzgeCysOCzgV/gsrbgs4HgspXgs43gsrBf4LK24LKo4LK/Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+CyreCyvl/gsrjgs4bgs4Lgs5Vf4LKu4LKCX+CyrOCzgV/gspfgs4Ff4LK24LOBX+Cyticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgsofgsoLgsqbgs4FdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4LKo4LK+4LKz4LOGXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4LKo4LK/4LKo4LON4LKo4LOGXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgspXgs4bgs4Lgsqjgs4bgsq9dIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg4LKo4LKC4LKk4LKwJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgsrngsr/gsoLgsqbgs4YnLFxuICAgICAgICAgICAgczogJ+CyleCzhuCysuCyteCzgSDgspXgs43gsrfgsqPgspfgsrPgs4EnLFxuICAgICAgICAgICAgc3M6ICclZCDgsrjgs4bgspXgs4bgsoLgsqHgs4HgspfgsrPgs4EnLFxuICAgICAgICAgICAgbTogJ+CykuCyguCypuCzgSDgsqjgsr/gsq7gsr/gsrcnLFxuICAgICAgICAgICAgbW06ICclZCDgsqjgsr/gsq7gsr/gsrcnLFxuICAgICAgICAgICAgaDogJ+CykuCyguCypuCzgSDgspfgsoLgsp/gs4YnLFxuICAgICAgICAgICAgaGg6ICclZCDgspfgsoLgsp/gs4YnLFxuICAgICAgICAgICAgZDogJ+CykuCyguCypuCzgSDgsqbgsr/gsqgnLFxuICAgICAgICAgICAgZGQ6ICclZCDgsqbgsr/gsqgnLFxuICAgICAgICAgICAgTTogJ+CykuCyguCypuCzgSDgsqTgsr/gsoLgspfgsrPgs4EnLFxuICAgICAgICAgICAgTU06ICclZCDgsqTgsr/gsoLgspfgsrPgs4EnLFxuICAgICAgICAgICAgeTogJ+CykuCyguCypuCzgSDgsrXgsrDgs43gsrcnLFxuICAgICAgICAgICAgeXk6ICclZCDgsrXgsrDgs43gsrcnLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4LOn4LOo4LOp4LOq4LOr4LOs4LOt4LOu4LOv4LOmXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4LKw4LK+4LKk4LON4LKw4LK/fOCyrOCzhuCys+Cyv+Cyl+CzjeCyl+Czhnzgsq7gsqfgs43gsq/gsr7gsrngs43gsqh84LK44LKC4LKc4LOGLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4LKw4LK+4LKk4LON4LKw4LK/Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4LKs4LOG4LKz4LK/4LKX4LON4LKX4LOGJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CyruCyp+CzjeCyr+CyvuCyueCzjeCyqCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4LK44LKC4LKc4LOGJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CysOCyvuCypOCzjeCysOCyvyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LKs4LOG4LKz4LK/4LKX4LON4LKX4LOGJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgsq7gsqfgs43gsq/gsr7gsrngs43gsqgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CyuOCyguCynOCzhic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LKw4LK+4LKk4LON4LKw4LK/JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KOCyqOCzhuCzlSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+CyqOCzhuCzlSc7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBrbjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBLb3JlYW4gW2tvXVxuLy8hIGF1dGhvciA6IEt5dW5nd29vaywgUGFyayA6IGh0dHBzOi8vZ2l0aHViLmNvbS9reXVuZ3cwMGtcbi8vISBhdXRob3IgOiBKZWVleXVsIExlZSA8amVlZXl1bEBnbWFpbC5jb20+XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIga28gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdrbycsIHtcbiAgICAgICAgbW9udGhzOiAnMeyblF8y7JuUXzPsm5RfNOyblF817JuUXzbsm5RfN+yblF847JuUXznsm5RfMTDsm5RfMTHsm5RfMTLsm5QnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnMeyblF8y7JuUXzPsm5RfNOyblF817JuUXzbsm5RfN+yblF847JuUXznsm5RfMTDsm5RfMTHsm5RfMTLsm5QnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn7J287JqU7J28X+yblOyalOydvF/tmZTsmpTsnbxf7IiY7JqU7J28X+uqqeyalOydvF/quIjsmpTsnbxf7Yag7JqU7J28Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn7J28X+yblF/tmZRf7IiYX+uqqV/quIhf7YagJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+ydvF/sm5Rf7ZmUX+yImF/rqqlf6riIX+2GoCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS5NTS5ERC4nLFxuICAgICAgICAgICAgTEw6ICdZWVlZ64WEIE1NTU0gROydvCcsXG4gICAgICAgICAgICBMTEw6ICdZWVlZ64WEIE1NTU0gROydvCBBIGg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ1lZWVnrhYQgTU1NTSBE7J28IGRkZGQgQSBoOm1tJyxcbiAgICAgICAgICAgIGw6ICdZWVlZLk1NLkRELicsXG4gICAgICAgICAgICBsbDogJ1lZWVnrhYQgTU1NTSBE7J28JyxcbiAgICAgICAgICAgIGxsbDogJ1lZWVnrhYQgTU1NTSBE7J28IEEgaDptbScsXG4gICAgICAgICAgICBsbGxsOiAnWVlZWeuFhCBNTU1NIETsnbwgZGRkZCBBIGg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ+yYpOuKmCBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAn64K07J28IExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAn7Ja07KCcIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAn7KeA64Kc7KO8IGRkZGQgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDtm4QnLFxuICAgICAgICAgICAgcGFzdDogJyVzIOyghCcsXG4gICAgICAgICAgICBzOiAn66qHIOy0iCcsXG4gICAgICAgICAgICBzczogJyVk7LSIJyxcbiAgICAgICAgICAgIG06ICcx67aEJyxcbiAgICAgICAgICAgIG1tOiAnJWTrtoQnLFxuICAgICAgICAgICAgaDogJ+2VnCDsi5zqsIQnLFxuICAgICAgICAgICAgaGg6ICclZOyLnOqwhCcsXG4gICAgICAgICAgICBkOiAn7ZWY66OoJyxcbiAgICAgICAgICAgIGRkOiAnJWTsnbwnLFxuICAgICAgICAgICAgTTogJ+2VnCDri6wnLFxuICAgICAgICAgICAgTU06ICclZOuLrCcsXG4gICAgICAgICAgICB5OiAn7J28IOuFhCcsXG4gICAgICAgICAgICB5eTogJyVk64WEJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KOydvHzsm5R87KO8KS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+ydvCc7XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn7JuUJztcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfso7wnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/smKTsoIR87Jik7ZuELyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW4gPT09ICfsmKTtm4QnO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNVcHBlcikge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCAxMiA/ICfsmKTsoIQnIDogJ+yYpO2bhCc7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4ga287XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogS3VyZGlzaCBba3VdXG4vLyEgYXV0aG9yIDogU2hhaHJhbSBNZWJhc2hhciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9TaGFocmFtTWViYXNoYXJcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn2aEnLFxuICAgICAgICAgICAgMjogJ9miJyxcbiAgICAgICAgICAgIDM6ICfZoycsXG4gICAgICAgICAgICA0OiAn2aQnLFxuICAgICAgICAgICAgNTogJ9mlJyxcbiAgICAgICAgICAgIDY6ICfZpicsXG4gICAgICAgICAgICA3OiAn2acnLFxuICAgICAgICAgICAgODogJ9moJyxcbiAgICAgICAgICAgIDk6ICfZqScsXG4gICAgICAgICAgICAwOiAn2aAnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn2aEnOiAnMScsXG4gICAgICAgICAgICAn2aInOiAnMicsXG4gICAgICAgICAgICAn2aMnOiAnMycsXG4gICAgICAgICAgICAn2aQnOiAnNCcsXG4gICAgICAgICAgICAn2aUnOiAnNScsXG4gICAgICAgICAgICAn2aYnOiAnNicsXG4gICAgICAgICAgICAn2acnOiAnNycsXG4gICAgICAgICAgICAn2agnOiAnOCcsXG4gICAgICAgICAgICAn2aknOiAnOScsXG4gICAgICAgICAgICAn2aAnOiAnMCcsXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRocyA9IFtcbiAgICAgICAgICAgICfaqdin2YbZiNmG24wg2K/ZiNmI25XZhScsXG4gICAgICAgICAgICAn2LTZiNio2KfYqicsXG4gICAgICAgICAgICAn2KbYp9iy2KfYsScsXG4gICAgICAgICAgICAn2YbbjNiz2KfZhicsXG4gICAgICAgICAgICAn2KbYp9uM2KfYsScsXG4gICAgICAgICAgICAn2K3ZiNiy25XbjNix2KfZhicsXG4gICAgICAgICAgICAn2KrbldmF2YXZiNiyJyxcbiAgICAgICAgICAgICfYptin2KgnLFxuICAgICAgICAgICAgJ9im25XbjNmE2YjZiNmEJyxcbiAgICAgICAgICAgICfYqti02LHbjNmG24wg24zbldmD25XZhScsXG4gICAgICAgICAgICAn2KrYtNix24zZhtuMINiv2YjZiNuV2YUnLFxuICAgICAgICAgICAgJ9mD2KfZhtmI2YbbjCDbjNuV2qnbldmFJyxcbiAgICAgICAgXTtcblxuICAgIHZhciBrdSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2t1Jywge1xuICAgICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IG1vbnRocyxcbiAgICAgICAgd2Vla2RheXM6ICfbjNmH4oCM2YPYtNmH4oCM2YXZhdmH4oCMX9iv2YjZiNi02YfigIzZhdmF2YfigIxf2LPbjti02YfigIzZhdmF2YfigIxf2obZiNin2LHYtNmH4oCM2YXZhdmH4oCMX9m+247Zhtis2LTZh+KAjNmF2YXZh+KAjF/Zh9mH4oCM24zZhtuMX9i02YfigIzZhdmF2YfigIwnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfbjNmH4oCM2YPYtNmH4oCM2YVf2K/ZiNmI2LTZh+KAjNmFX9iz247YtNmH4oCM2YVf2obZiNin2LHYtNmH4oCM2YVf2b7bjtmG2KzYtNmH4oCM2YVf2YfZh+KAjNuM2YbbjF/YtNmH4oCM2YXZhdmH4oCMJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9uMX9ivX9izX9qGX9m+X9mHX9i0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9im247ZiNin2LHZh+KAjHzYqNmH4oCM24zYp9mG24wvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAv2KbbjtmI2KfYsdmH4oCMLy50ZXN0KGlucHV0KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9io2YfigIzbjNin2YbbjCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2KbbjtmI2KfYsdmH4oCMJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb2KbZh+KAjNmF2LHbhiDZg9in2KramNmF247YsV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vYqNmH4oCM24zYp9mG24wg2YPYp9iq2pjZhduO2LFdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2YPYp9iq2pjZhduO2LFdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2K/ZiNuO2YbbjiDZg9in2KramNmF247YsV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvZg9in2KramNmF247YsV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfZhNmH4oCMICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcycsXG4gICAgICAgICAgICBzOiAn2obZh+KAjNmG2K8g2obYsdmD2YfigIzbjNmH4oCM2YMnLFxuICAgICAgICAgICAgc3M6ICfahtix2YPZh+KAjCAlZCcsXG4gICAgICAgICAgICBtOiAn24zZh+KAjNmDINiu2YjZhNmH4oCM2YMnLFxuICAgICAgICAgICAgbW06ICclZCDYrtmI2YTZh+KAjNmDJyxcbiAgICAgICAgICAgIGg6ICfbjNmH4oCM2YMg2YPYp9iq2pjZhduO2LEnLFxuICAgICAgICAgICAgaGg6ICclZCDZg9in2KramNmF247YsScsXG4gICAgICAgICAgICBkOiAn24zZh+KAjNmDINqV24bamCcsXG4gICAgICAgICAgICBkZDogJyVkINqV24bamCcsXG4gICAgICAgICAgICBNOiAn24zZh+KAjNmDINmF2KfZhtqvJyxcbiAgICAgICAgICAgIE1NOiAnJWQg2YXYp9mG2q8nLFxuICAgICAgICAgICAgeTogJ9uM2YfigIzZgyDYs9in2rUnLFxuICAgICAgICAgICAgeXk6ICclZCDYs9in2rUnLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9b2aHZotmj2aTZpdmm2afZqNmp2aBdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC/YjC9nLCAnLCcpO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiA2LCAvLyBTYXR1cmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiAxMiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMTJ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBrdTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBLeXJneXogW2t5XVxuLy8hIGF1dGhvciA6IENoeW5neXogQXJ5c3RhbiB1dWx1IDogaHR0cHM6Ly9naXRodWIuY29tL2NoeW5neXpcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzdWZmaXhlcyA9IHtcbiAgICAgICAgMDogJy3Rh9KvJyxcbiAgICAgICAgMTogJy3Rh9C4JyxcbiAgICAgICAgMjogJy3Rh9C4JyxcbiAgICAgICAgMzogJy3Rh9KvJyxcbiAgICAgICAgNDogJy3Rh9KvJyxcbiAgICAgICAgNTogJy3Rh9C4JyxcbiAgICAgICAgNjogJy3Rh9GLJyxcbiAgICAgICAgNzogJy3Rh9C4JyxcbiAgICAgICAgODogJy3Rh9C4JyxcbiAgICAgICAgOTogJy3Rh9GDJyxcbiAgICAgICAgMTA6ICct0YfRgycsXG4gICAgICAgIDIwOiAnLdGH0YsnLFxuICAgICAgICAzMDogJy3Rh9GDJyxcbiAgICAgICAgNDA6ICct0YfRiycsXG4gICAgICAgIDUwOiAnLdGH0q8nLFxuICAgICAgICA2MDogJy3Rh9GLJyxcbiAgICAgICAgNzA6ICct0YfQuCcsXG4gICAgICAgIDgwOiAnLdGH0LgnLFxuICAgICAgICA5MDogJy3Rh9GDJyxcbiAgICAgICAgMTAwOiAnLdGH0q8nLFxuICAgIH07XG5cbiAgICB2YXIga3kgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdreScsIHtcbiAgICAgICAgbW9udGhzOiAn0Y/QvdCy0LDRgNGMX9GE0LXQstGA0LDQu9GMX9C80LDRgNGCX9Cw0L/RgNC10LvRjF/QvNCw0Llf0LjRjtC90Yxf0LjRjtC70Yxf0LDQstCz0YPRgdGCX9GB0LXQvdGC0Y/QsdGA0Yxf0L7QutGC0Y/QsdGA0Yxf0L3QvtGP0LHRgNGMX9C00LXQutCw0LHRgNGMJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ9GP0L3Qsl/RhNC10LJf0LzQsNGA0YJf0LDQv9GAX9C80LDQuV/QuNGO0L3RjF/QuNGO0LvRjF/QsNCy0LNf0YHQtdC9X9C+0LrRgl/QvdC+0Y9f0LTQtdC6Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ9CW0LXQutGI0LXQvNCx0Lhf0JTSr9C50YjTqdC80LHSr1/QqNC10LnRiNC10LzQsdC4X9Co0LDRgNGI0LXQvNCx0Lhf0JHQtdC50YjQtdC80LHQuF/QltGD0LzQsF/QmNGI0LXQvNCx0LgnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfQltC10Lpf0JTSr9C5X9Co0LXQuV/QqNCw0YBf0JHQtdC5X9CW0YPQvF/QmNGI0LUnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn0JbQul/QlNC5X9Co0Llf0KjRgF/QkdC5X9CW0Lxf0JjRiCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vQkdKv0LPSr9C9INGB0LDQsNGCXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9Ct0YDRgtC10qMg0YHQsNCw0YJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb0YHQsNCw0YJdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb0JrQtdGH0Y3RjSDRgdCw0LDRgl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb06jRgtC606nQvSDQsNC/0YLQsNC90YvQvV0gZGRkZCBb0LrSr9C90q9dIFvRgdCw0LDRgl0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDQuNGH0LjQvdC00LUnLFxuICAgICAgICAgICAgcGFzdDogJyVzINC80YPRgNGD0L0nLFxuICAgICAgICAgICAgczogJ9Cx0LjRgNC90LXRh9C1INGB0LXQutGD0L3QtCcsXG4gICAgICAgICAgICBzczogJyVkINGB0LXQutGD0L3QtCcsXG4gICAgICAgICAgICBtOiAn0LHQuNGAINC80q/QvdOp0YInLFxuICAgICAgICAgICAgbW06ICclZCDQvNKv0L3TqdGCJyxcbiAgICAgICAgICAgIGg6ICfQsdC40YAg0YHQsNCw0YInLFxuICAgICAgICAgICAgaGg6ICclZCDRgdCw0LDRgicsXG4gICAgICAgICAgICBkOiAn0LHQuNGAINC60q/QvScsXG4gICAgICAgICAgICBkZDogJyVkINC60q/QvScsXG4gICAgICAgICAgICBNOiAn0LHQuNGAINCw0LknLFxuICAgICAgICAgICAgTU06ICclZCDQsNC5JyxcbiAgICAgICAgICAgIHk6ICfQsdC40YAg0LbRi9C7JyxcbiAgICAgICAgICAgIHl5OiAnJWQg0LbRi9C7JyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LSjRh9C4fNGH0Yt80YfSr3zRh9GDKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBhID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgYiA9IG51bWJlciA+PSAxMDAgPyAxMDAgOiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChzdWZmaXhlc1tudW1iZXJdIHx8IHN1ZmZpeGVzW2FdIHx8IHN1ZmZpeGVzW2JdKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGt5O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEx1eGVtYm91cmdpc2ggW2xiXVxuLy8hIGF1dGhvciA6IG13ZWltZXJza2lyY2ggOiBodHRwczovL2dpdGh1Yi5jb20vbXdlaW1lcnNraXJjaFxuLy8hIGF1dGhvciA6IERhdmlkIFJhaXNvbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9rd2lzYXR6XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgbTogWydlbmcgTWludXR0JywgJ2VuZ2VyIE1pbnV0dCddLFxuICAgICAgICAgICAgaDogWydlbmcgU3Rvbm4nLCAnZW5nZXIgU3Rvbm4nXSxcbiAgICAgICAgICAgIGQ6IFsnZWVuIERhZycsICdlbmdlbSBEYWcnXSxcbiAgICAgICAgICAgIE06IFsnZWUgTW91bnQnLCAnZW5nZW0gTW91bnQnXSxcbiAgICAgICAgICAgIHk6IFsnZWUgSm9lcicsICdlbmdlbSBKb2VyJ10sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJvY2Vzc0Z1dHVyZVRpbWUoc3RyaW5nKSB7XG4gICAgICAgIHZhciBudW1iZXIgPSBzdHJpbmcuc3Vic3RyKDAsIHN0cmluZy5pbmRleE9mKCcgJykpO1xuICAgICAgICBpZiAoZWlmZWxlclJlZ2VsQXBwbGllc1RvTnVtYmVyKG51bWJlcikpIHtcbiAgICAgICAgICAgIHJldHVybiAnYSAnICsgc3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnYW4gJyArIHN0cmluZztcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJvY2Vzc1Bhc3RUaW1lKHN0cmluZykge1xuICAgICAgICB2YXIgbnVtYmVyID0gc3RyaW5nLnN1YnN0cigwLCBzdHJpbmcuaW5kZXhPZignICcpKTtcbiAgICAgICAgaWYgKGVpZmVsZXJSZWdlbEFwcGxpZXNUb051bWJlcihudW1iZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3ZpcnUgJyArIHN0cmluZztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ3ZpcnVuICcgKyBzdHJpbmc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgd29yZCBiZWZvcmUgdGhlIGdpdmVuIG51bWJlciBsb3NlcyB0aGUgJy1uJyBlbmRpbmcuXG4gICAgICogZS5nLiAnYW4gMTAgRGVlZycgYnV0ICdhIDUgRGVlZydcbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW1iZXIge2ludGVnZXJ9XG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgZnVuY3Rpb24gZWlmZWxlclJlZ2VsQXBwbGllc1RvTnVtYmVyKG51bWJlcikge1xuICAgICAgICBudW1iZXIgPSBwYXJzZUludChudW1iZXIsIDEwKTtcbiAgICAgICAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgLy8gTmVnYXRpdmUgTnVtYmVyIC0tPiBhbHdheXMgdHJ1ZVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAobnVtYmVyIDwgMTApIHtcbiAgICAgICAgICAgIC8vIE9ubHkgMSBkaWdpdFxuICAgICAgICAgICAgaWYgKDQgPD0gbnVtYmVyICYmIG51bWJlciA8PSA3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAobnVtYmVyIDwgMTAwKSB7XG4gICAgICAgICAgICAvLyAyIGRpZ2l0c1xuICAgICAgICAgICAgdmFyIGxhc3REaWdpdCA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIGZpcnN0RGlnaXQgPSBudW1iZXIgLyAxMDtcbiAgICAgICAgICAgIGlmIChsYXN0RGlnaXQgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWlmZWxlclJlZ2VsQXBwbGllc1RvTnVtYmVyKGZpcnN0RGlnaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVpZmVsZXJSZWdlbEFwcGxpZXNUb051bWJlcihsYXN0RGlnaXQpO1xuICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA8IDEwMDAwKSB7XG4gICAgICAgICAgICAvLyAzIG9yIDQgZGlnaXRzIC0tPiByZWN1cnNpdmVseSBjaGVjayBmaXJzdCBkaWdpdFxuICAgICAgICAgICAgd2hpbGUgKG51bWJlciA+PSAxMCkge1xuICAgICAgICAgICAgICAgIG51bWJlciA9IG51bWJlciAvIDEwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVpZmVsZXJSZWdlbEFwcGxpZXNUb051bWJlcihudW1iZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQW55dGhpbmcgbGFyZ2VyIHRoYW4gNCBkaWdpdHM6IHJlY3Vyc2l2ZWx5IGNoZWNrIGZpcnN0IG4tMyBkaWdpdHNcbiAgICAgICAgICAgIG51bWJlciA9IG51bWJlciAvIDEwMDA7XG4gICAgICAgICAgICByZXR1cm4gZWlmZWxlclJlZ2VsQXBwbGllc1RvTnVtYmVyKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbGIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdsYicsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyX0ZlYnJ1YXJfTcOkZXJ6X0FicsOrbGxfTWVlX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuLl9GZWJyLl9NcnouX0Fici5fTWVlX0p1bi5fSnVsLl9BdWcuX1NlcHQuX09rdC5fTm92Ll9EZXouJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ1Nvbm5kZWdfTcOpaW5kZWdfRMOrbnNjaGRlZ19Nw6t0dHdvY2hfRG9ubmVzY2hkZWdfRnJlaWRlZ19TYW1zY2hkZWcnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTby5fTcOpLl9Ew6suX03Dqy5fRG8uX0ZyLl9TYS4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU29fTcOpX0TDq19Nw6tfRG9fRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbSBbQXVlcl0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcyBbQXVlcl0nLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEg6bW0gW0F1ZXJdJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkgSDptbSBbQXVlcl0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tIYXV0IHVtXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tNdWVyIHVtXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3VtXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0fDq3NjaHRlciB1bV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAvLyBEaWZmZXJlbnQgZGF0ZSBzdHJpbmcgZm9yICdEw6tuc2NoZGVnJyAoVHVlc2RheSkgYW5kICdEb25uZXNjaGRlZycgKFRodXJzZGF5KSBkdWUgdG8gcGhvbm9sb2dpY2FsIHJ1bGVcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tMZXNjaHRlbl0gZGRkZCBbdW1dIExUJztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW0xlc2NodGVdIGRkZGQgW3VtXSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6IHByb2Nlc3NGdXR1cmVUaW1lLFxuICAgICAgICAgICAgcGFzdDogcHJvY2Vzc1Bhc3RUaW1lLFxuICAgICAgICAgICAgczogJ2UgcHVlciBTZWtvbm5lbicsXG4gICAgICAgICAgICBzczogJyVkIFNla29ubmVuJyxcbiAgICAgICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbTogJyVkIE1pbnV0dGVuJyxcbiAgICAgICAgICAgIGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoaDogJyVkIFN0b25uZW4nLFxuICAgICAgICAgICAgZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGRkOiAnJWQgRGVlZycsXG4gICAgICAgICAgICBNOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTU06ICclZCBNw6lpbnQnLFxuICAgICAgICAgICAgeTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHl5OiAnJWQgSm9lcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbGI7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTGFvIFtsb11cbi8vISBhdXRob3IgOiBSeWFuIEhhcnQgOiBodHRwczovL2dpdGh1Yi5jb20vcnlhbmhhcnQyXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbG8gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdsbycsIHtcbiAgICAgICAgbW9udGhzOiAn4Lqh4Lqx4LqH4LqB4Lqt4LqZX+C6geC6uOC6oeC6nuC6sl/guqHgurXgupngurJf4LuA4Lqh4Lqq4LqyX+C6nuC6tuC6lOC6quC6sOC6nuC6sl/guqHgurTgupbgurjgupngurJf4LqB4LuN4Lql4Lqw4LqB4Lq74LqUX+C6quC6tOC6h+C6q+C6sl/guoHgurHgupnguo3gurJf4LqV4Lq44Lql4LqyX+C6nuC6sOC6iOC6tOC6gV/gupfgurHgupnguqfgurInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn4Lqh4Lqx4LqH4LqB4Lqt4LqZX+C6geC6uOC6oeC6nuC6sl/guqHgurXgupngurJf4LuA4Lqh4Lqq4LqyX+C6nuC6tuC6lOC6quC6sOC6nuC6sl/guqHgurTgupbgurjgupngurJf4LqB4LuN4Lql4Lqw4LqB4Lq74LqUX+C6quC6tOC6h+C6q+C6sl/guoHgurHgupnguo3gurJf4LqV4Lq44Lql4LqyX+C6nuC6sOC6iOC6tOC6gV/gupfgurHgupnguqfgurInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn4Lqt4Lqy4LqX4Lq04LqUX+C6iOC6seC6mV/guq3gurHguofguoTgurLguplf4Lqe4Lq44LqUX+C6nuC6sOC6q+C6seC6lF/guqrgurjguoFf4LuA4Lqq4Lq74LqyJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4LqX4Lq04LqUX+C6iOC6seC6mV/guq3gurHguofguoTgurLguplf4Lqe4Lq44LqUX+C6nuC6sOC6q+C6seC6lF/guqrgurjguoFf4LuA4Lqq4Lq74LqyJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+C6l1/guohf4Lqt4LqEX+C6nl/gup7guqtf4Lqq4LqBX+C6qicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICfguqfgurHguplkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+C6leC6reC6meC7gOC6iuC6u+C7ieC6snzgupXguq3gupngu4HguqXguocvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCA9PT0gJ+C6leC6reC6meC7geC6peC6hyc7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgupXguq3gupngu4Dguorgurvgu4ngurInO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C6leC6reC6meC7geC6peC6hyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+C6oeC6t+C7ieC6meC6teC7ieC7gOC6p+C6peC6sl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vguqHgurfgu4nguq3gurfgu4jgupngu4DguqfguqXgurJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW+C6p+C6seC6mV1kZGRkW+C7nOC7ieC6suC7gOC6p+C6peC6sl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vguqHgurfgu4nguqfgurLgupngupngurXgu4ngu4DguqfguqXgurJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+C6p+C6seC6mV1kZGRkW+C7geC6peC7ieC6p+C6meC6teC7ieC7gOC6p+C6peC6sl0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfguq3gurXguoEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVz4Lqc4LuI4Lqy4LqZ4Lqh4LqyJyxcbiAgICAgICAgICAgIHM6ICfguprgu43gu4jgu4Dgupfgurvgu4jgurLgu4PgupTguqfgurTgupngurLgupfgurUnLFxuICAgICAgICAgICAgc3M6ICclZCDguqfgurTgupngurLgupfgurUnLFxuICAgICAgICAgICAgbTogJzEg4LqZ4Lqy4LqX4Lq1JyxcbiAgICAgICAgICAgIG1tOiAnJWQg4LqZ4Lqy4LqX4Lq1JyxcbiAgICAgICAgICAgIGg6ICcxIOC6iuC6u+C7iOC6p+C7guC6oeC6hycsXG4gICAgICAgICAgICBoaDogJyVkIOC6iuC6u+C7iOC6p+C7guC6oeC6hycsXG4gICAgICAgICAgICBkOiAnMSDguqHgurfgu4knLFxuICAgICAgICAgICAgZGQ6ICclZCDguqHgurfgu4knLFxuICAgICAgICAgICAgTTogJzEg4LuA4LqU4Lq34Lqt4LqZJyxcbiAgICAgICAgICAgIE1NOiAnJWQg4LuA4LqU4Lq34Lqt4LqZJyxcbiAgICAgICAgICAgIHk6ICcxIOC6m+C6tScsXG4gICAgICAgICAgICB5eTogJyVkIOC6m+C6tScsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC8o4LqX4Lq14LuIKVxcZHsxLDJ9LyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuICfgupfgurXgu4gnICsgbnVtYmVyO1xuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGxvO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IExpdGh1YW5pYW4gW2x0XVxuLy8hIGF1dGhvciA6IE1pbmRhdWdhcyBNb3rFq3JhcyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tbW96dXJhc1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHVuaXRzID0ge1xuICAgICAgICBzczogJ3Nla3VuZMSXX3Nla3VuZMW+acWzX3Nla3VuZGVzJyxcbiAgICAgICAgbTogJ21pbnV0xJdfbWludXTEl3NfbWludXTEmScsXG4gICAgICAgIG1tOiAnbWludXTEl3NfbWludcSNacWzX21pbnV0ZXMnLFxuICAgICAgICBoOiAndmFsYW5kYV92YWxhbmRvc192YWxhbmTEhScsXG4gICAgICAgIGhoOiAndmFsYW5kb3NfdmFsYW5kxbNfdmFsYW5kYXMnLFxuICAgICAgICBkOiAnZGllbmFfZGllbm9zX2RpZW7EhScsXG4gICAgICAgIGRkOiAnZGllbm9zX2RpZW7Fs19kaWVuYXMnLFxuICAgICAgICBNOiAnbcSXbnVvX23El25lc2lvX23El25lc8SvJyxcbiAgICAgICAgTU06ICdtxJduZXNpYWlfbcSXbmVzacWzX23El25lc2l1cycsXG4gICAgICAgIHk6ICdtZXRhaV9tZXTFs19tZXR1cycsXG4gICAgICAgIHl5OiAnbWV0YWlfbWV0xbNfbWV0dXMnLFxuICAgIH07XG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlU2Vjb25kcyhudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgIHJldHVybiAna2VsaW9zIHNla3VuZMSXcyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAna2VsacWzIHNla3VuZMW+acWzJyA6ICdrZWxpYXMgc2VrdW5kZXMnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZVNpbmd1bGFyKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeFxuICAgICAgICAgICAgPyBmb3JtcyhrZXkpWzBdXG4gICAgICAgICAgICA6IGlzRnV0dXJlXG4gICAgICAgICAgICA/IGZvcm1zKGtleSlbMV1cbiAgICAgICAgICAgIDogZm9ybXMoa2V5KVsyXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3BlY2lhbChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG51bWJlciAlIDEwID09PSAwIHx8IChudW1iZXIgPiAxMCAmJiBudW1iZXIgPCAyMCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZvcm1zKGtleSkge1xuICAgICAgICByZXR1cm4gdW5pdHNba2V5XS5zcGxpdCgnXycpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgcmVzdWx0ICsgdHJhbnNsYXRlU2luZ3VsYXIobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXlbMF0sIGlzRnV0dXJlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHNwZWNpYWwobnVtYmVyKSA/IGZvcm1zKGtleSlbMV0gOiBmb3JtcyhrZXkpWzBdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyBmb3JtcyhrZXkpWzFdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHNwZWNpYWwobnVtYmVyKSA/IGZvcm1zKGtleSlbMV0gOiBmb3JtcyhrZXkpWzJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgbHQgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdsdCcsIHtcbiAgICAgICAgbW9udGhzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6ICdzYXVzaW9fdmFzYXJpb19rb3ZvX2JhbGFuZMW+aW9fZ2VndcW+xJdzX2JpcsW+ZWxpb19saWVwb3NfcnVncGrFq8SNaW9fcnVnc8SXam9fc3BhbGlvX2xhcGtyacSNaW9fZ3J1b2TFvmlvJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGFuZGFsb25lOiAnc2F1c2lzX3Zhc2FyaXNfa292YXNfYmFsYW5kaXNfZ2VndcW+xJdfYmlyxb5lbGlzX2xpZXBhX3J1Z3Bqxat0aXNfcnVnc8SXamlzX3NwYWxpc19sYXBrcml0aXNfZ3J1b2Rpcycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgaXNGb3JtYXQ6IC9EW29EXT8oXFxbW15cXFtcXF1dKlxcXXxcXHMpK01NTU0/fE1NTU0/KFxcW1teXFxbXFxdXSpcXF18XFxzKStEW29EXT8vLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDogJ3NhdV92YXNfa292X2JhbF9nZWdfYmlyX2xpZV9yZ3BfcmdzX3NwYV9sYXBfZ3JkJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czoge1xuICAgICAgICAgICAgZm9ybWF0OiAnc2VrbWFkaWVuxK9fcGlybWFkaWVuxK9fYW50cmFkaWVuxK9fdHJlxI1pYWRpZW7Er19rZXR2aXJ0YWRpZW7Er19wZW5rdGFkaWVuxK9fxaFlxaF0YWRpZW7Erycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTogJ3Nla21hZGllbmlzX3Bpcm1hZGllbmlzX2FudHJhZGllbmlzX3RyZcSNaWFkaWVuaXNfa2V0dmlydGFkaWVuaXNfcGVua3RhZGllbmlzX8WhZcWhdGFkaWVuaXMnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiAvZGRkZCBISDptbS8sXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTZWtfUGlyX0FudF9UcmVfS2V0X1Blbl/FoGXFoScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTX1BfQV9UX0tfUG5fxaAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgTEw6ICdZWVlZIFttLl0gTU1NTSBEIFtkLl0nLFxuICAgICAgICAgICAgTExMOiAnWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBISDptbSBbdmFsLl0nLFxuICAgICAgICAgICAgTExMTDogJ1lZWVkgW20uXSBNTU1NIEQgW2QuXSwgZGRkZCwgSEg6bW0gW3ZhbC5dJyxcbiAgICAgICAgICAgIGw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIGxsOiAnWVlZWSBbbS5dIE1NTU0gRCBbZC5dJyxcbiAgICAgICAgICAgIGxsbDogJ1lZWVkgW20uXSBNTU1NIEQgW2QuXSwgSEg6bW0gW3ZhbC5dJyxcbiAgICAgICAgICAgIGxsbGw6ICdZWVlZIFttLl0gTU1NTSBEIFtkLl0sIGRkZCwgSEg6bW0gW3ZhbC5dJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbxaBpYW5kaWVuXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW1J5dG9qXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tWYWthcl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbUHJhxJdqdXPEr10gZGRkZCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3BvICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdwcmllxaEgJXMnLFxuICAgICAgICAgICAgczogdHJhbnNsYXRlU2Vjb25kcyxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdGVTaW5ndWxhcixcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdGVTaW5ndWxhcixcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiB0cmFuc2xhdGVTaW5ndWxhcixcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiB0cmFuc2xhdGVTaW5ndWxhcixcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiB0cmFuc2xhdGVTaW5ndWxhcixcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS1vamkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy1vamknO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbHQ7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTGF0dmlhbiBbbHZdXG4vLyEgYXV0aG9yIDogS3Jpc3RhcHMgS2FybHNvbnMgOiBodHRwczovL2dpdGh1Yi5jb20vc2tha3JpXG4vLyEgYXV0aG9yIDogSsSBbmlzIEVsbWVyaXMgOiBodHRwczovL2dpdGh1Yi5jb20vSmFuaXNFXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdW5pdHMgPSB7XG4gICAgICAgIHNzOiAnc2VrdW5kZXNfc2VrdW5kxJNtX3Nla3VuZGVfc2VrdW5kZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIG06ICdtaW7Fq3Rlc19taW7Fq3TEk21fbWluxat0ZV9taW7Fq3Rlcycuc3BsaXQoJ18nKSxcbiAgICAgICAgbW06ICdtaW7Fq3Rlc19taW7Fq3TEk21fbWluxat0ZV9taW7Fq3Rlcycuc3BsaXQoJ18nKSxcbiAgICAgICAgaDogJ3N0dW5kYXNfc3R1bmTEgW1fc3R1bmRhX3N0dW5kYXMnLnNwbGl0KCdfJyksXG4gICAgICAgIGhoOiAnc3R1bmRhc19zdHVuZMSBbV9zdHVuZGFfc3R1bmRhcycuc3BsaXQoJ18nKSxcbiAgICAgICAgZDogJ2RpZW5hc19kaWVuxIFtX2RpZW5hX2RpZW5hcycuc3BsaXQoJ18nKSxcbiAgICAgICAgZGQ6ICdkaWVuYXNfZGllbsSBbV9kaWVuYV9kaWVuYXMnLnNwbGl0KCdfJyksXG4gICAgICAgIE06ICdtxJNuZcWhYV9txJNuZcWhaWVtX23Ek25lc2lzX23Ek25lxaFpJy5zcGxpdCgnXycpLFxuICAgICAgICBNTTogJ23Ek25lxaFhX23Ek25lxaFpZW1fbcSTbmVzaXNfbcSTbmXFoWknLnNwbGl0KCdfJyksXG4gICAgICAgIHk6ICdnYWRhX2dhZGllbV9nYWRzX2dhZGknLnNwbGl0KCdfJyksXG4gICAgICAgIHl5OiAnZ2FkYV9nYWRpZW1fZ2Fkc19nYWRpJy5zcGxpdCgnXycpLFxuICAgIH07XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHdpdGhvdXRTdWZmaXggYm9vbGVhbiB0cnVlID0gYSBsZW5ndGggb2YgdGltZTsgZmFsc2UgPSBiZWZvcmUvYWZ0ZXIgYSBwZXJpb2Qgb2YgdGltZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmb3JtYXQoZm9ybXMsIG51bWJlciwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgLy8gRS5nLiBcIjIxIG1pbsWrdGVcIiwgXCIzIG1pbsWrdGVzXCIuXG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICUgMTAgPT09IDEgJiYgbnVtYmVyICUgMTAwICE9PSAxMSA/IGZvcm1zWzJdIDogZm9ybXNbM107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBFLmcuIFwiMjEgbWluxat0ZXNcIiBhcyBpbiBcInDEk2MgMjEgbWluxat0ZXNcIi5cbiAgICAgICAgICAgIC8vIEUuZy4gXCIzIG1pbsWrdMSTbVwiIGFzIGluIFwicMSTYyAzIG1pbsWrdMSTbVwiLlxuICAgICAgICAgICAgcmV0dXJuIG51bWJlciAlIDEwID09PSAxICYmIG51bWJlciAlIDEwMCAhPT0gMTEgPyBmb3Jtc1swXSA6IGZvcm1zWzFdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZVdpdGhQbHVyYWwobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIG51bWJlciArICcgJyArIGZvcm1hdCh1bml0c1trZXldLCBudW1iZXIsIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWVXaXRoU2luZ3VsYXIobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdCh1bml0c1trZXldLCBudW1iZXIsIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVNlY29uZHMobnVtYmVyLCB3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2Rhxb5hcyBzZWt1bmRlcycgOiAnZGHFvsSBbSBzZWt1bmTEk20nO1xuICAgIH1cblxuICAgIHZhciBsdiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2x2Jywge1xuICAgICAgICBtb250aHM6ICdqYW52xIFyaXNfZmVicnXEgXJpc19tYXJ0c19hcHLEq2xpc19tYWlqc19qxatuaWpzX2rFq2xpanNfYXVndXN0c19zZXB0ZW1icmlzX29rdG9icmlzX25vdmVtYnJpc19kZWNlbWJyaXMnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFuX2ZlYl9tYXJfYXByX21haV9qxatuX2rFq2xfYXVnX3NlcF9va3Rfbm92X2RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdzdsSTdGRpZW5hX3Bpcm1kaWVuYV9vdHJkaWVuYV90cmXFoWRpZW5hX2NldHVydGRpZW5hX3BpZWt0ZGllbmFfc2VzdGRpZW5hJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU3ZfUF9PX1RfQ19Qa19TJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1N2X1BfT19UX0NfUGtfUycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWS4nLFxuICAgICAgICAgICAgTEw6ICdZWVlZLiBbZ2FkYV0gRC4gTU1NTScsXG4gICAgICAgICAgICBMTEw6ICdZWVlZLiBbZ2FkYV0gRC4gTU1NTSwgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ1lZWVkuIFtnYWRhXSBELiBNTU1NLCBkZGRkLCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW8Wgb2RpZW4gcHVsa3N0ZW5dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbUsSrdCBwdWxrc3Rlbl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtwdWxrc3Rlbl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tWYWthciBwdWxrc3Rlbl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbUGFnxIFqdcWhxIFdIGRkZGQgW3B1bGtzdGVuXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3DEk2MgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3Bpcm1zICVzJyxcbiAgICAgICAgICAgIHM6IHJlbGF0aXZlU2Vjb25kcyxcbiAgICAgICAgICAgIHNzOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgbTogcmVsYXRpdmVUaW1lV2l0aFNpbmd1bGFyLFxuICAgICAgICAgICAgbW06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBoOiByZWxhdGl2ZVRpbWVXaXRoU2luZ3VsYXIsXG4gICAgICAgICAgICBoaDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIGQ6IHJlbGF0aXZlVGltZVdpdGhTaW5ndWxhcixcbiAgICAgICAgICAgIGRkOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgTTogcmVsYXRpdmVUaW1lV2l0aFNpbmd1bGFyLFxuICAgICAgICAgICAgTU06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICB5OiByZWxhdGl2ZVRpbWVXaXRoU2luZ3VsYXIsXG4gICAgICAgICAgICB5eTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBsdjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBNb250ZW5lZ3JpbiBbbWVdXG4vLyEgYXV0aG9yIDogTWlvZHJhZyBOaWthxI0gPG1pb2RyYWdAcmVzdGFydGl0Lm1lPiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9taW9kcmFnbmlrYWNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB0cmFuc2xhdG9yID0ge1xuICAgICAgICB3b3Jkczoge1xuICAgICAgICAgICAgLy9EaWZmZXJlbnQgZ3JhbW1hdGljYWwgY2FzZXNcbiAgICAgICAgICAgIHNzOiBbJ3Nla3VuZCcsICdzZWt1bmRhJywgJ3Nla3VuZGknXSxcbiAgICAgICAgICAgIG06IFsnamVkYW4gbWludXQnLCAnamVkbm9nIG1pbnV0YSddLFxuICAgICAgICAgICAgbW06IFsnbWludXQnLCAnbWludXRhJywgJ21pbnV0YSddLFxuICAgICAgICAgICAgaDogWydqZWRhbiBzYXQnLCAnamVkbm9nIHNhdGEnXSxcbiAgICAgICAgICAgIGhoOiBbJ3NhdCcsICdzYXRhJywgJ3NhdGknXSxcbiAgICAgICAgICAgIGRkOiBbJ2RhbicsICdkYW5hJywgJ2RhbmEnXSxcbiAgICAgICAgICAgIE1NOiBbJ21qZXNlYycsICdtamVzZWNhJywgJ21qZXNlY2knXSxcbiAgICAgICAgICAgIHl5OiBbJ2dvZGluYScsICdnb2RpbmUnLCAnZ29kaW5hJ10sXG4gICAgICAgIH0sXG4gICAgICAgIGNvcnJlY3RHcmFtbWF0aWNhbENhc2U6IGZ1bmN0aW9uIChudW1iZXIsIHdvcmRLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgPT09IDFcbiAgICAgICAgICAgICAgICA/IHdvcmRLZXlbMF1cbiAgICAgICAgICAgICAgICA6IG51bWJlciA+PSAyICYmIG51bWJlciA8PSA0XG4gICAgICAgICAgICAgICAgPyB3b3JkS2V5WzFdXG4gICAgICAgICAgICAgICAgOiB3b3JkS2V5WzJdO1xuICAgICAgICB9LFxuICAgICAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uIChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICAgICAgdmFyIHdvcmRLZXkgPSB0cmFuc2xhdG9yLndvcmRzW2tleV07XG4gICAgICAgICAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gd29yZEtleVswXSA6IHdvcmRLZXlbMV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIG51bWJlciArXG4gICAgICAgICAgICAgICAgICAgICcgJyArXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0b3IuY29ycmVjdEdyYW1tYXRpY2FsQ2FzZShudW1iZXIsIHdvcmRLZXkpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgdmFyIG1lID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbWUnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcl9mZWJydWFyX21hcnRfYXByaWxfbWFqX2p1bl9qdWxfYXZndXN0X3NlcHRlbWJhcl9va3RvYmFyX25vdmVtYmFyX2RlY2VtYmFyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2phbi5fZmViLl9tYXIuX2Fwci5fbWFqX2p1bl9qdWxfYXZnLl9zZXAuX29rdC5fbm92Ll9kZWMuJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ25lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19zcmlqZWRhX8SNZXR2cnRha19wZXRha19zdWJvdGEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICduZWQuX3Bvbi5fdXRvLl9zcmkuX8SNZXQuX3BldC5fc3ViLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICduZV9wb191dF9zcl/EjWVfcGVfc3UnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2RhbmFzIHVdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbc2p1dHJhIHVdIExUJyxcblxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW25lZGplbGp1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3JpamVkdV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW3N1Ym90dV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gZGRkZCBbdV0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2p1xI1lIHVdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxhc3RXZWVrRGF5cyA9IFtcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxlXSBbbmVkamVsamVdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsb2ddIFtwb25lZGplbGprYV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW3V0b3JrYV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxlXSBbc3JpamVkZV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW8SNZXR2cnRrYV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW3BldGthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbGVdIFtzdWJvdGVdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGFzdFdlZWtEYXlzW3RoaXMuZGF5KCldO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnemEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3ByaWplICVzJyxcbiAgICAgICAgICAgIHM6ICduZWtvbGlrbyBzZWt1bmRpJyxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiAnZGFuJyxcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06ICdtamVzZWMnLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogJ2dvZGludScsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWU7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTWFvcmkgW21pXVxuLy8hIGF1dGhvciA6IEpvaG4gQ29ycmlnYW4gPHJvYmJpZWNsb3NldEBnbWFpbC5jb20+IDogaHR0cHM6Ly9naXRodWIuY29tL2pvaG5pZGVhbFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1pID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbWknLCB7XG4gICAgICAgIG1vbnRoczogJ0tvaGktdMSBdGVfSHVpLXRhbmd1cnVfUG91dMWrLXRlLXJhbmdpX1BhZW5nYS13aMSBd2jEgV9IYXJhdHVhX1BpcGlyaV9IxY1uZ29pbmdvaV9IZXJlLXR1cmkta8WNa8SBX01haHVydV9XaGlyaW5nYS3EgS1udWt1X1doaXJpbmdhLcSBLXJhbmdpX0hha2loZWEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnS29oaV9IdWlfUG91X1BhZV9IYXJhX1BpcGlfSMWNbmdvaV9IZXJlX01haHVfV2hpLW51X1doaS1yYV9IYWtpJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNSZWdleDogLyg/OlsnYS16XFx1MDEwMVxcdTAxNERcXHUwMTZCXStcXC0/KXsxLDN9L2ksXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OiAvKD86WydhLXpcXHUwMTAxXFx1MDE0RFxcdTAxNkJdK1xcLT8pezEsM30vaSxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogLyg/OlsnYS16XFx1MDEwMVxcdTAxNERcXHUwMTZCXStcXC0/KXsxLDN9L2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6IC8oPzpbJ2EtelxcdTAxMDFcXHUwMTREXFx1MDE2Ql0rXFwtPyl7MSwyfS9pLFxuICAgICAgICB3ZWVrZGF5czogJ1LEgXRhcHVfTWFuZV9UxatyZWlfV2VuZXJlaV9UxIFpdGVfUGFyYWlyZV9IxIF0YXJlaScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1RhX01hX1TFq19XZV9UxIFpX1BhX0jEgScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdUYV9NYV9UxatfV2VfVMSBaV9QYV9IxIEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgW2ldIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBbaV0gSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tpIHRlaWUgbWFoYW5hLCBpXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2Fwb3BvIGldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbaV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tpbmFuYWhpIGldIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbd2hha2FtdXR1bmdhIGldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnaSByb3RvIGkgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGkgbXVhJyxcbiAgICAgICAgICAgIHM6ICd0ZSBoxJNrb25hIHJ1YXJ1YScsXG4gICAgICAgICAgICBzczogJyVkIGjEk2tvbmEnLFxuICAgICAgICAgICAgbTogJ2hlIG1lbmV0aScsXG4gICAgICAgICAgICBtbTogJyVkIG1lbmV0aScsXG4gICAgICAgICAgICBoOiAndGUgaGFvcmEnLFxuICAgICAgICAgICAgaGg6ICclZCBoYW9yYScsXG4gICAgICAgICAgICBkOiAnaGUgcmEnLFxuICAgICAgICAgICAgZGQ6ICclZCByYScsXG4gICAgICAgICAgICBNOiAnaGUgbWFyYW1hJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWFyYW1hJyxcbiAgICAgICAgICAgIHk6ICdoZSB0YXUnLFxuICAgICAgICAgICAgeXk6ICclZCB0YXUnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Cui8sXG4gICAgICAgIG9yZGluYWw6ICclZMK6JyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1pO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE1hY2Vkb25pYW4gW21rXVxuLy8hIGF1dGhvciA6IEJvcmlzbGF2IE1pY2tvdiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9CMGswXG4vLyEgYXV0aG9yIDogU2FzaGtvIFRvZG9yb3YgOiBodHRwczovL2dpdGh1Yi5jb20vYmt5Y2VoXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbWsgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtaycsIHtcbiAgICAgICAgbW9udGhzOiAn0ZjQsNC90YPQsNGA0Lhf0YTQtdCy0YDRg9Cw0YDQuF/QvNCw0YDRgl/QsNC/0YDQuNC7X9C80LDRmF/RmNGD0L3QuF/RmNGD0LvQuF/QsNCy0LPRg9GB0YJf0YHQtdC/0YLQtdC80LLRgNC4X9C+0LrRgtC+0LzQstGA0Lhf0L3QvtC10LzQstGA0Lhf0LTQtdC60LXQvNCy0YDQuCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfRmNCw0L1f0YTQtdCyX9C80LDRgF/QsNC/0YBf0LzQsNGYX9GY0YPQvV/RmNGD0Ltf0LDQstCzX9GB0LXQv1/QvtC60YJf0L3QvtC1X9C00LXQuicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfQvdC10LTQtdC70LBf0L/QvtC90LXQtNC10LvQvdC40Lpf0LLRgtC+0YDQvdC40Lpf0YHRgNC10LTQsF/Rh9C10YLQstGA0YLQvtC6X9C/0LXRgtC+0Lpf0YHQsNCx0L7RgtCwJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn0L3QtdC0X9C/0L7QvV/QstGC0L5f0YHRgNC1X9GH0LXRgl/Qv9C10YJf0YHQsNCxJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9C9ZV/Qv29f0LLRgl/RgdGAX9GH0LVf0L/QtV/RgWEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnRC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9CU0LXQvdC10YEg0LLQvl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQo9GC0YDQtSDQstC+XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vQktC+XSBkZGRkIFvQstC+XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9CS0YfQtdGA0LAg0LLQvl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CY0LfQvNC40L3QsNGC0LDRgtCwXSBkZGRkIFvQstC+XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CY0LfQvNC40L3QsNGC0LjQvtGCXSBkZGRkIFvQstC+XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn0LfQsCAlcycsXG4gICAgICAgICAgICBwYXN0OiAn0L/RgNC10LQgJXMnLFxuICAgICAgICAgICAgczogJ9C90LXQutC+0LvQutGDINGB0LXQutGD0L3QtNC4JyxcbiAgICAgICAgICAgIHNzOiAnJWQg0YHQtdC60YPQvdC00LgnLFxuICAgICAgICAgICAgbTogJ9C10LTQvdCwINC80LjQvdGD0YLQsCcsXG4gICAgICAgICAgICBtbTogJyVkINC80LjQvdGD0YLQuCcsXG4gICAgICAgICAgICBoOiAn0LXQtNC10L0g0YfQsNGBJyxcbiAgICAgICAgICAgIGhoOiAnJWQg0YfQsNGB0LAnLFxuICAgICAgICAgICAgZDogJ9C10LTQtdC9INC00LXQvScsXG4gICAgICAgICAgICBkZDogJyVkINC00LXQvdCwJyxcbiAgICAgICAgICAgIE06ICfQtdC00LXQvSDQvNC10YHQtdGGJyxcbiAgICAgICAgICAgIE1NOiAnJWQg0LzQtdGB0LXRhtC4JyxcbiAgICAgICAgICAgIHk6ICfQtdC00L3QsCDQs9C+0LTQuNC90LAnLFxuICAgICAgICAgICAgeXk6ICclZCDQs9C+0LTQuNC90LgnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0tKNC10LJ80LXQvXzRgtC4fNCy0Lh80YDQuHzQvNC4KS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBsYXN0RGlnaXQgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBsYXN0MkRpZ2l0cyA9IG51bWJlciAlIDEwMDtcbiAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QtdCyJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdDJEaWdpdHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QtdC9JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdDJEaWdpdHMgPiAxMCAmJiBsYXN0MkRpZ2l0cyA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0YLQuCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3REaWdpdCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdCy0LgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0RGlnaXQgPT09IDIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3RgNC4JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdERpZ2l0ID09PSA3IHx8IGxhc3REaWdpdCA9PT0gOCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdC80LgnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3RgtC4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1rO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE1hbGF5YWxhbSBbbWxdXG4vLyEgYXV0aG9yIDogRmxveWQgUGluayA6IGh0dHBzOi8vZ2l0aHViLmNvbS9mbG95ZHBpbmtcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtbCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ21sJywge1xuICAgICAgICBtb250aHM6ICfgtJzgtKjgtYHgtLXgtLDgtL9f4LSr4LWG4LSs4LWN4LSw4LWB4LS14LSw4LS/X+C0ruC0vuC1vOC0muC1jeC0muC1jV/gtI/gtKrgtY3gtLDgtL/gtb1f4LSu4LWH4LSv4LWNX+C0nOC1guC1ul/gtJzgtYLgtLLgtYhf4LST4LSX4LS44LWN4LSx4LWN4LSx4LWNX+C0uOC1huC0quC1jeC0seC1jeC0seC0guC0rOC1vF/gtJLgtJXgtY3gtJ/gtYvgtKzgtbxf4LSo4LS14LSC4LSs4LW8X+C0oeC0v+C0uOC0guC0rOC1vCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfgtJzgtKjgtYEuX+C0q+C1huC0rOC1jeC0sOC1gS5f4LSu4LS+4LW8Ll/gtI/gtKrgtY3gtLDgtL8uX+C0ruC1h+C0r+C1jV/gtJzgtYLgtbpf4LSc4LWC4LSy4LWILl/gtJPgtJcuX+C0uOC1huC0quC1jeC0seC1jeC0sS5f4LSS4LSV4LWN4LSf4LWLLl/gtKjgtLXgtIIuX+C0oeC0v+C0uOC0gi4nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAn4LSe4LS+4LSv4LSx4LS+4LS04LWN4LSaX+C0pOC0v+C0meC1jeC0leC0s+C0vuC0tOC1jeC0ml/gtJrgtYrgtLXgtY3gtLXgtL7gtLTgtY3gtJpf4LSs4LWB4LSn4LSo4LS+4LS04LWN4LSaX+C0teC1jeC0r+C0vuC0tOC0vuC0tOC1jeC0ml/gtLXgtYbgtLPgtY3gtLPgtL/gtK/gtL7gtLTgtY3gtJpf4LS24LSo4LS/4LSv4LS+4LS04LWN4LSaJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4LSe4LS+4LSv4LW8X+C0pOC0v+C0meC1jeC0leC1vl/gtJrgtYrgtLXgtY3gtLVf4LSs4LWB4LSn4LW7X+C0teC1jeC0r+C0vuC0tOC0gl/gtLXgtYbgtLPgtY3gtLPgtL9f4LS24LSo4LS/Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+C0nuC0vl/gtKTgtL9f4LSa4LWKX+C0rOC1gV/gtLXgtY3gtK/gtL5f4LS14LWGX+C0ticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tIC3gtKjgtYEnLFxuICAgICAgICAgICAgTFRTOiAnQSBoOm1tOnNzIC3gtKjgtYEnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgQSBoOm1tIC3gtKjgtYEnLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gLeC0qOC1gScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+C0h+C0qOC1jeC0qOC1jV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgtKjgtL7gtLPgtYZdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgtIfgtKjgtY3gtKjgtLLgtYZdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+C0leC0tOC0v+C0nuC1jeC0nl0gZGRkZCwgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDgtJXgtLTgtL/gtJ7gtY3gtJ7gtY0nLFxuICAgICAgICAgICAgcGFzdDogJyVzIOC0ruC1geC1u+C0quC1jScsXG4gICAgICAgICAgICBzOiAn4LSF4LW94LSqIOC0qOC0v+C0ruC0v+C0t+C0meC1jeC0meC1vicsXG4gICAgICAgICAgICBzczogJyVkIOC0uOC1huC0leC1jeC0leC1u+C0oeC1jScsXG4gICAgICAgICAgICBtOiAn4LSS4LSw4LWBIOC0ruC0v+C0qOC0v+C0seC1jeC0seC1jScsXG4gICAgICAgICAgICBtbTogJyVkIOC0ruC0v+C0qOC0v+C0seC1jeC0seC1jScsXG4gICAgICAgICAgICBoOiAn4LSS4LSw4LWBIOC0ruC0o+C0v+C0leC1jeC0leC1guC1vCcsXG4gICAgICAgICAgICBoaDogJyVkIOC0ruC0o+C0v+C0leC1jeC0leC1guC1vCcsXG4gICAgICAgICAgICBkOiAn4LSS4LSw4LWBIOC0puC0v+C0teC0uOC0gicsXG4gICAgICAgICAgICBkZDogJyVkIOC0puC0v+C0teC0uOC0gicsXG4gICAgICAgICAgICBNOiAn4LSS4LSw4LWBIOC0ruC0vuC0uOC0gicsXG4gICAgICAgICAgICBNTTogJyVkIOC0ruC0vuC0uOC0gicsXG4gICAgICAgICAgICB5OiAn4LSS4LSw4LWBIOC0teC1vOC0t+C0gicsXG4gICAgICAgICAgICB5eTogJyVkIOC0teC1vOC0t+C0gicsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gtLDgtL7gtKTgtY3gtLDgtL984LSw4LS+4LS14LS/4LSy4LWGfOC0ieC0muC1jeC0miDgtJXgtLTgtL/gtJ7gtY3gtJ7gtY184LS14LWI4LSV4LWB4LSo4LWN4LSo4LWH4LSw4LSCfOC0sOC0vuC0pOC1jeC0sOC0vy9pLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKG1lcmlkaWVtID09PSAn4LSw4LS+4LSk4LWN4LSw4LS/JyAmJiBob3VyID49IDQpIHx8XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPT09ICfgtIngtJrgtY3gtJog4LSV4LS04LS/4LSe4LWN4LSe4LWNJyB8fFxuICAgICAgICAgICAgICAgIG1lcmlkaWVtID09PSAn4LS14LWI4LSV4LWB4LSo4LWN4LSo4LWH4LSw4LSCJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C0sOC0vuC0pOC1jeC0sOC0vyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LSw4LS+4LS14LS/4LSy4LWGJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgtIngtJrgtY3gtJog4LSV4LS04LS/4LSe4LWN4LSe4LWNJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgtLXgtYjgtJXgtYHgtKjgtY3gtKjgtYfgtLDgtIInO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C0sOC0vuC0pOC1jeC0sOC0vyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWw7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTW9uZ29saWFuIFttbl1cbi8vISBhdXRob3IgOiBKYXZraGxhbnR1Z3MgTnlhbWRvcmogOiBodHRwczovL2dpdGh1Yi5jb20vamF2a2hhYW5qN1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAn0YXRjdC00YXRjdC9INGB0LXQutGD0L3QtCcgOiAn0YXRjdC00YXRjdC9INGB0LXQutGD0L3QtNGL0L0nO1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAod2l0aG91dFN1ZmZpeCA/ICcg0YHQtdC60YPQvdC0JyA6ICcg0YHQtdC60YPQvdC00YvQvScpO1xuICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICh3aXRob3V0U3VmZml4ID8gJyDQvNC40L3Rg9GCJyA6ICcg0LzQuNC90YPRgtGL0L0nKTtcbiAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAod2l0aG91dFN1ZmZpeCA/ICcg0YbQsNCzJyA6ICcg0YbQsNCz0LjQudC9Jyk7XG4gICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHdpdGhvdXRTdWZmaXggPyAnINOp0LTTqdGAJyA6ICcg06nQtNGA0LjQudC9Jyk7XG4gICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHdpdGhvdXRTdWZmaXggPyAnINGB0LDRgCcgOiAnINGB0LDRgNGL0L0nKTtcbiAgICAgICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAod2l0aG91dFN1ZmZpeCA/ICcg0LbQuNC7JyA6ICcg0LbQuNC70LjQudC9Jyk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbW4gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtbicsIHtcbiAgICAgICAgbW9udGhzOiAn0J3RjdCz0LTSr9Cz0Y3RjdGAINGB0LDRgF/QpdC+0ZHRgNC00YPQs9Cw0LDRgCDRgdCw0YBf0JPRg9GA0LDQstC00YPQs9Cw0LDRgCDRgdCw0YBf0JTTqdGA06nQstC00q/Qs9GN0Y3RgCDRgdCw0YBf0KLQsNCy0LTRg9Cz0LDQsNGAINGB0LDRgF/Ql9GD0YDQs9Cw0LTRg9Cz0LDQsNGAINGB0LDRgF/QlNC+0LvQtNGD0LPQsNCw0YAg0YHQsNGAX9Cd0LDQudC80LTRg9Cz0LDQsNGAINGB0LDRgF/QldGB0LTSr9Cz0Y3RjdGAINGB0LDRgF/QkNGA0LDQstC00YPQs9Cw0LDRgCDRgdCw0YBf0JDRgNCy0LDQvSDQvdGN0LPQtNKv0LPRjdGN0YAg0YHQsNGAX9CQ0YDQstCw0L0g0YXQvtGR0YDQtNGD0LPQsNCw0YAg0YHQsNGAJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJzEg0YHQsNGAXzIg0YHQsNGAXzMg0YHQsNGAXzQg0YHQsNGAXzUg0YHQsNGAXzYg0YHQsNGAXzcg0YHQsNGAXzgg0YHQsNGAXzkg0YHQsNGAXzEwINGB0LDRgF8xMSDRgdCw0YBfMTIg0YHQsNGAJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ9Cd0Y/QvF/QlNCw0LLQsNCwX9Cc0Y/Qs9C80LDRgF/Qm9GF0LDQs9Cy0LBf0J/Sr9GA0Y3Qsl/QkdCw0LDRgdCw0L1f0JHRj9C80LHQsCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9Cd0Y/QvF/QlNCw0LJf0JzRj9CzX9Cb0YXQsF/Qn9Kv0YBf0JHQsNCwX9CR0Y/QvCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfQndGPX9CU0LBf0JzRj1/Qm9GFX9Cf0q9f0JHQsF/QkdGPJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMOiAnWVlZWSDQvtC90YsgTU1NTdGL0L0gRCcsXG4gICAgICAgICAgICBMTEw6ICdZWVlZINC+0L3RiyBNTU1N0YvQvSBEIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBZWVlZINC+0L3RiyBNTU1N0YvQvSBEIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9Ku06h80q7QpS9pLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCA9PT0gJ9Ku0KUnO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0q7TqCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0q7QpSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9Oo0L3TqdOp0LTTqdGAXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9Cc0LDRgNCz0LDQsNGIXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vQmNGA0Y3RhV0gZGRkZCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9Oo0YfQuNCz0LTTqdGAXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vTqNC90LPTqdGA0YHTqdC9XSBkZGRkIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg0LTQsNGA0LDQsCcsXG4gICAgICAgICAgICBwYXN0OiAnJXMg06nQvNC906knLFxuICAgICAgICAgICAgczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0g06nQtNOp0YAvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcg06nQtNOp0YAnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbW47XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTWFyYXRoaSBbbXJdXG4vLyEgYXV0aG9yIDogSGFyc2hhZCBLYWxlIDogaHR0cHM6Ly9naXRodWIuY29tL2thbGVodlxuLy8hIGF1dGhvciA6IFZpdmVrIEF0aGFseWUgOiBodHRwczovL2dpdGh1Yi5jb20vdm5hdGhhbHllXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ+ClpycsXG4gICAgICAgICAgICAyOiAn4KWoJyxcbiAgICAgICAgICAgIDM6ICfgpaknLFxuICAgICAgICAgICAgNDogJ+ClqicsXG4gICAgICAgICAgICA1OiAn4KWrJyxcbiAgICAgICAgICAgIDY6ICfgpawnLFxuICAgICAgICAgICAgNzogJ+ClrScsXG4gICAgICAgICAgICA4OiAn4KWuJyxcbiAgICAgICAgICAgIDk6ICfgpa8nLFxuICAgICAgICAgICAgMDogJ+ClpicsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfgpacnOiAnMScsXG4gICAgICAgICAgICAn4KWoJzogJzInLFxuICAgICAgICAgICAgJ+ClqSc6ICczJyxcbiAgICAgICAgICAgICfgpaonOiAnNCcsXG4gICAgICAgICAgICAn4KWrJzogJzUnLFxuICAgICAgICAgICAgJ+ClrCc6ICc2JyxcbiAgICAgICAgICAgICfgpa0nOiAnNycsXG4gICAgICAgICAgICAn4KWuJzogJzgnLFxuICAgICAgICAgICAgJ+Clryc6ICc5JyxcbiAgICAgICAgICAgICfgpaYnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWVNcihudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIG91dHB1dCA9ICcnO1xuICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgc3dpdGNoIChzdHJpbmcpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+CkleCkvuCkueClgCDgpLjgpYfgpJXgpILgpKYnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpLjgpYfgpJXgpILgpKYnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CklSDgpK7gpL/gpKjgpL/gpJ8nO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpK7gpL/gpKjgpL/gpJ/gpYcnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CklSDgpKTgpL7gpLgnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpKTgpL7gpLgnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CklSDgpKbgpL/gpLXgpLgnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpKbgpL/gpLXgpLgnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CklSDgpK7gpLngpL/gpKjgpL4nO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpK7gpLngpL/gpKjgpYcnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICd5JzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CklSDgpLXgpLDgpY3gpLcnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpLXgpLDgpY3gpLfgpYcnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN3aXRjaCAoc3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICfgpJXgpL7gpLngpYAg4KS44KWH4KSV4KSC4KSm4KS+4KSCJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnJWQg4KS44KWH4KSV4KSC4KSm4KS+4KSCJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICfgpI/gpJXgpL4g4KSu4KS/4KSo4KS/4KSf4KS+JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnJWQg4KSu4KS/4KSo4KS/4KSf4KS+4KSCJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICfgpI/gpJXgpL4g4KSk4KS+4KS44KS+JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnJWQg4KSk4KS+4KS44KS+4KSCJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICfgpI/gpJXgpL4g4KSm4KS/4KS14KS44KS+JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnJWQg4KSm4KS/4KS14KS44KS+4KSCJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICfgpI/gpJXgpL4g4KSu4KS54KS/4KSo4KWN4KSv4KS+JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnJWQg4KSu4KS54KS/4KSo4KWN4KSv4KS+4KSCJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICfgpI/gpJXgpL4g4KS14KSw4KWN4KS34KS+JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnJWQg4KS14KSw4KWN4KS34KS+4KSCJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dC5yZXBsYWNlKC8lZC9pLCBudW1iZXIpO1xuICAgIH1cblxuICAgIHZhciBtciA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ21yJywge1xuICAgICAgICBtb250aHM6ICfgpJzgpL7gpKjgpYfgpLXgpL7gpLDgpYBf4KSr4KWH4KSs4KWN4KSw4KWB4KS14KS+4KSw4KWAX+CkruCkvuCksOCljeCkml/gpI/gpKrgpY3gpLDgpL/gpLJf4KSu4KWHX+CknOClguCkqF/gpJzgpYHgpLLgpYhf4KSR4KSX4KS44KWN4KSfX+CkuOCkquCljeCkn+Clh+CkguCkrOCksF/gpJHgpJXgpY3gpJ/gpYvgpKzgpLBf4KSo4KWL4KS14KWN4KS54KWH4KSC4KSs4KSwX+CkoeCkv+CkuOClh+CkguCkrOCksCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfgpJzgpL7gpKjgpYcuX+Ckq+Clh+CkrOCljeCksOClgS5f4KSu4KS+4KSw4KWN4KSaLl/gpI/gpKrgpY3gpLDgpL8uX+CkruClhy5f4KSc4KWC4KSoLl/gpJzgpYHgpLLgpYguX+CkkeCkly5f4KS44KSq4KWN4KSf4KWH4KSCLl/gpJHgpJXgpY3gpJ/gpYsuX+CkqOCli+CkteCljeCkueClh+Ckgi5f4KSh4KS/4KS44KWH4KSCLicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICfgpLDgpLXgpL/gpLXgpL7gpLBf4KS44KWL4KSu4KS14KS+4KSwX+CkruCkguCkl+Cks+CkteCkvuCksF/gpKzgpYHgpKfgpLXgpL7gpLBf4KSX4KWB4KSw4KWC4KS14KS+4KSwX+CktuClgeCkleCljeCksOCkteCkvuCksF/gpLbgpKjgpL/gpLXgpL7gpLAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgpLDgpLXgpL9f4KS44KWL4KSuX+CkruCkguCkl+Cks1/gpKzgpYHgpKdf4KSX4KWB4KSw4KWCX+CktuClgeCkleCljeCksF/gpLbgpKjgpL8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4KSwX+CkuOCli1/gpK7gpIJf4KSs4KWBX+Ckl+ClgV/gpLbgpYFf4KS2Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdBIGg6bW0g4KS14KS+4KSc4KSk4KS+JyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcyDgpLXgpL7gpJzgpKTgpL4nLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgQSBoOm1tIOCkteCkvuCknOCkpOCkvicsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgpLXgpL7gpJzgpKTgpL4nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgpIbgpJxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4KSJ4KSm4KWN4KSv4KS+XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4KSV4KS+4KSyXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgpK7gpL7gpJfgpYDgpLJdIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXPgpK7gpKfgpY3gpK/gpYcnLFxuICAgICAgICAgICAgcGFzdDogJyVz4KSq4KWC4KSw4KWN4KS14KWAJyxcbiAgICAgICAgICAgIHM6IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgc3M6IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgbTogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICBtbTogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICBoOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgICAgIGhoOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgICAgIGQ6IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgZGQ6IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgTTogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICBNTTogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICB5OiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgICAgIHl5OiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Clp+ClqOClqeClquClq+ClrOClreClruClr+Clpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CkquCkueCkvuCkn+Clh3zgpLjgpJXgpL7gpLPgpYB84KSm4KWB4KSq4KS+4KSw4KWAfOCkuOCkvuCkr+CkguCkleCkvuCks+ClgHzgpLDgpL7gpKTgpY3gpLDgpYAvLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICfgpKrgpLngpL7gpJ/gpYcnIHx8IG1lcmlkaWVtID09PSAn4KS44KSV4KS+4KSz4KWAJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ+CkpuClgeCkquCkvuCksOClgCcgfHxcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ+CkuOCkvuCkr+CkguCkleCkvuCks+ClgCcgfHxcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ+CksOCkvuCkpOCljeCksOClgCdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDEyID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyID49IDAgJiYgaG91ciA8IDYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkquCkueCkvuCkn+Clhyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KS44KSV4KS+4KSz4KWAJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpKbgpYHgpKrgpL7gpLDgpYAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkuOCkvuCkr+CkguCkleCkvuCks+ClgCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSw4KS+4KSk4KWN4KSw4KWAJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1yO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE1hbGF5IFttcy1teV1cbi8vISBub3RlIDogREVQUkVDQVRFRCwgdGhlIGNvcnJlY3Qgb25lIGlzIFttc11cbi8vISBhdXRob3IgOiBXZWxkYW4gSmFtaWxpIDogaHR0cHM6Ly9naXRodWIuY29tL3dlbGRhblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1zTXkgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtcy1teScsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyaV9GZWJydWFyaV9NYWNfQXByaWxfTWVpX0p1bl9KdWxhaV9PZ29zX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rpc2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFjX0Fwcl9NZWlfSnVuX0p1bF9PZ3NfU2VwX09rdF9Ob3ZfRGlzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ0FoYWRfSXNuaW5fU2VsYXNhX1JhYnVfS2hhbWlzX0p1bWFhdF9TYWJ0dScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0FoZF9Jc25fU2VsX1JhYl9LaGFfSnVtX1NhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdBaF9Jc19TbF9SYl9LbV9KbV9TYicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEgubW0nLFxuICAgICAgICAgICAgTFRTOiAnSEgubW0uc3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL3BhZ2l8dGVuZ2FoYXJpfHBldGFuZ3xtYWxhbS8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ3BhZ2knKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAndGVuZ2FoYXJpJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdwZXRhbmcnIHx8IG1lcmlkaWVtID09PSAnbWFsYW0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3BhZ2knO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0ZW5nYWhhcmknO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdwZXRhbmcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21hbGFtJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSGFyaSBpbmkgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbRXNvayBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tLZWxtYXJpbiBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtsZXBhcyBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdkYWxhbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgeWFuZyBsZXBhcycsXG4gICAgICAgICAgICBzOiAnYmViZXJhcGEgc2FhdCcsXG4gICAgICAgICAgICBzczogJyVkIHNhYXQnLFxuICAgICAgICAgICAgbTogJ3NlbWluaXQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW5pdCcsXG4gICAgICAgICAgICBoOiAnc2VqYW0nLFxuICAgICAgICAgICAgaGg6ICclZCBqYW0nLFxuICAgICAgICAgICAgZDogJ3NlaGFyaScsXG4gICAgICAgICAgICBkZDogJyVkIGhhcmknLFxuICAgICAgICAgICAgTTogJ3NlYnVsYW4nLFxuICAgICAgICAgICAgTU06ICclZCBidWxhbicsXG4gICAgICAgICAgICB5OiAnc2V0YWh1bicsXG4gICAgICAgICAgICB5eTogJyVkIHRhaHVuJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1zTXk7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTWFsYXkgW21zXVxuLy8hIGF1dGhvciA6IFdlbGRhbiBKYW1pbGkgOiBodHRwczovL2dpdGh1Yi5jb20vd2VsZGFuXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbXMgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtcycsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyaV9GZWJydWFyaV9NYWNfQXByaWxfTWVpX0p1bl9KdWxhaV9PZ29zX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rpc2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFjX0Fwcl9NZWlfSnVuX0p1bF9PZ3NfU2VwX09rdF9Ob3ZfRGlzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ0FoYWRfSXNuaW5fU2VsYXNhX1JhYnVfS2hhbWlzX0p1bWFhdF9TYWJ0dScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0FoZF9Jc25fU2VsX1JhYl9LaGFfSnVtX1NhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdBaF9Jc19TbF9SYl9LbV9KbV9TYicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEgubW0nLFxuICAgICAgICAgICAgTFRTOiAnSEgubW0uc3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL3BhZ2l8dGVuZ2FoYXJpfHBldGFuZ3xtYWxhbS8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ3BhZ2knKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAndGVuZ2FoYXJpJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdwZXRhbmcnIHx8IG1lcmlkaWVtID09PSAnbWFsYW0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3BhZ2knO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0ZW5nYWhhcmknO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdwZXRhbmcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21hbGFtJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSGFyaSBpbmkgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbRXNvayBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tLZWxtYXJpbiBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtsZXBhcyBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdkYWxhbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgeWFuZyBsZXBhcycsXG4gICAgICAgICAgICBzOiAnYmViZXJhcGEgc2FhdCcsXG4gICAgICAgICAgICBzczogJyVkIHNhYXQnLFxuICAgICAgICAgICAgbTogJ3NlbWluaXQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW5pdCcsXG4gICAgICAgICAgICBoOiAnc2VqYW0nLFxuICAgICAgICAgICAgaGg6ICclZCBqYW0nLFxuICAgICAgICAgICAgZDogJ3NlaGFyaScsXG4gICAgICAgICAgICBkZDogJyVkIGhhcmknLFxuICAgICAgICAgICAgTTogJ3NlYnVsYW4nLFxuICAgICAgICAgICAgTU06ICclZCBidWxhbicsXG4gICAgICAgICAgICB5OiAnc2V0YWh1bicsXG4gICAgICAgICAgICB5eTogJyVkIHRhaHVuJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1zO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE1hbHRlc2UgKE1hbHRhKSBbbXRdXG4vLyEgYXV0aG9yIDogQWxlc3NhbmRybyBNYXJ1Y2NpYSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbGVzbWFcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtdCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ210Jywge1xuICAgICAgICBtb250aHM6ICdKYW5uYXJfRnJhcl9NYXJ6dV9BcHJpbF9NZWpqdV/EoHVuanVfTHVsanVfQXd3aXNzdV9TZXR0ZW1icnVfT3R0dWJydV9Ob3ZlbWJydV9EacSLZW1icnUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZyYV9NYXJfQXByX01lal/EoHVuX0x1bF9Bd3dfU2V0X090dF9Ob3ZfRGnEiycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdJbC3EpmFkZF9JdC1UbmVqbl9JdC1UbGlldGFfTC1FcmJnxKdhX0lsLcSmYW1pc19JbC3EoGltZ8SnYV9Jcy1TaWJ0Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnxKZhZF9UbmVfVGxpX0VyYl/EpmFtX8SgaW1fU2liJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ8SmYV9Ubl9UbF9Fcl/EpmFfxKBpX1NpJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0lsbHVtIGZpbC1dTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tHxKdhZGEgZmlsLV1MVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2ZpbC1dTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tJbC1iaWVyYcSnIGZpbC1dTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtsaSBnxKdhZGRhXSBbZmlsLV1MVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2bigJkgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGlsdScsXG4gICAgICAgICAgICBzOiAnZnRpdCBzZWtvbmRpJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vrb25kaScsXG4gICAgICAgICAgICBtOiAnbWludXRhJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRpJyxcbiAgICAgICAgICAgIGg6ICdzaWVnxKdhJyxcbiAgICAgICAgICAgIGhoOiAnJWQgc2llZ8SnYXQnLFxuICAgICAgICAgICAgZDogJ8ShdXJuYXRhJyxcbiAgICAgICAgICAgIGRkOiAnJWQgxKFyYW5ldCcsXG4gICAgICAgICAgICBNOiAneGFoYXInLFxuICAgICAgICAgICAgTU06ICclZCB4aHVyJyxcbiAgICAgICAgICAgIHk6ICdzZW5hJyxcbiAgICAgICAgICAgIHl5OiAnJWQgc25pJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBtdDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBCdXJtZXNlIFtteV1cbi8vISBhdXRob3IgOiBTcXVhciB0ZWFtLCBteXNxdWFyLmNvbVxuLy8hIGF1dGhvciA6IERhdmlkIFJvc3NlbGxhdCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9naG9sYWRyXG4vLyEgYXV0aG9yIDogVGluIEF1bmcgTGluIDogaHR0cHM6Ly9naXRodWIuY29tL3RoYW55YXd6aW5taW5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4YGBJyxcbiAgICAgICAgICAgIDI6ICfhgYInLFxuICAgICAgICAgICAgMzogJ+GBgycsXG4gICAgICAgICAgICA0OiAn4YGEJyxcbiAgICAgICAgICAgIDU6ICfhgYUnLFxuICAgICAgICAgICAgNjogJ+GBhicsXG4gICAgICAgICAgICA3OiAn4YGHJyxcbiAgICAgICAgICAgIDg6ICfhgYgnLFxuICAgICAgICAgICAgOTogJ+GBiScsXG4gICAgICAgICAgICAwOiAn4YGAJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+GBgSc6ICcxJyxcbiAgICAgICAgICAgICfhgYInOiAnMicsXG4gICAgICAgICAgICAn4YGDJzogJzMnLFxuICAgICAgICAgICAgJ+GBhCc6ICc0JyxcbiAgICAgICAgICAgICfhgYUnOiAnNScsXG4gICAgICAgICAgICAn4YGGJzogJzYnLFxuICAgICAgICAgICAgJ+GBhyc6ICc3JyxcbiAgICAgICAgICAgICfhgYgnOiAnOCcsXG4gICAgICAgICAgICAn4YGJJzogJzknLFxuICAgICAgICAgICAgJ+GBgCc6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciBteSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ215Jywge1xuICAgICAgICBtb250aHM6ICfhgIfhgJThgLrhgJThgJ3hgKvhgJvhgK5f4YCW4YCx4YCW4YCx4YCs4YC64YCd4YCr4YCb4YCuX+GAmeGAkOGAul/hgKfhgJXhgLzhgK5f4YCZ4YCxX+GAh+GAveGAlOGAul/hgIfhgLDhgJzhgK3hgK/hgIThgLpf4YCe4YC84YCC4YCv4YCQ4YC6X+GAheGAgOGAuuGAkOGAhOGAuuGAmOGArF/hgKHhgLHhgKzhgIDhgLrhgJDhgK3hgK/hgJjhgKxf4YCU4YCt4YCv4YCd4YCE4YC64YCY4YCsX+GAkuGAruGAh+GAhOGAuuGAmOGArCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfhgIfhgJThgLpf4YCW4YCxX+GAmeGAkOGAul/hgJXhgLzhgK5f4YCZ4YCxX+GAh+GAveGAlOGAul/hgJzhgK3hgK/hgIThgLpf4YCe4YC8X+GAheGAgOGAul/hgKHhgLHhgKzhgIDhgLpf4YCU4YCt4YCvX+GAkuGAricuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfhgJDhgJThgIThgLrhgLnhgILhgJThgL3hgLFf4YCQ4YCU4YCE4YC64YC54YCc4YCsX+GAoeGAhOGAuuGAueGAguGAq1/hgJfhgK/hgJLhgLnhgJPhgJ/hgLDhgLhf4YCA4YC84YCs4YCe4YCV4YCQ4YCx4YC4X+GAnuGAseGArOGAgOGAvOGArF/hgIXhgJThgLEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfhgJThgL3hgLFf4YCc4YCsX+GAguGAq1/hgJ/hgLDhgLhf4YCA4YC84YCsX+GAnuGAseGArF/hgJThgLEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4YCU4YC94YCxX+GAnOGArF/hgILhgKtf4YCf4YCw4YC4X+GAgOGAvOGArF/hgJ7hgLHhgKxf4YCU4YCxJy5zcGxpdCgnXycpLFxuXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vhgJrhgJThgLEuXSBMVCBb4YCZ4YC+4YCsXScsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+GAmeGAlOGAgOGAuuGAluGAvOGAlOGAul0gTFQgW+GAmeGAvuGArF0nLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIExUIFvhgJnhgL7hgKxdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4YCZ4YCU4YCxLuGAgF0gTFQgW+GAmeGAvuGArF0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4YCV4YC84YCu4YC44YCB4YCy4YC34YCe4YCx4YCsXSBkZGRkIExUIFvhgJnhgL7hgKxdJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn4YCc4YCs4YCZ4YCK4YC64YC3ICVzIOGAmeGAvuGArCcsXG4gICAgICAgICAgICBwYXN0OiAn4YCc4YC94YCU4YC64YCB4YCy4YC34YCe4YCx4YCsICVzIOGAgCcsXG4gICAgICAgICAgICBzOiAn4YCF4YCA4YC54YCA4YCU4YC6LuGAoeGAlOGAiuGAuuGAuOGAhOGAmuGAuicsXG4gICAgICAgICAgICBzczogJyVkIOGAheGAgOGAueGAgOGAlOGAt+GAuicsXG4gICAgICAgICAgICBtOiAn4YCQ4YCF4YC64YCZ4YCt4YCU4YCF4YC6JyxcbiAgICAgICAgICAgIG1tOiAnJWQg4YCZ4YCt4YCU4YCF4YC6JyxcbiAgICAgICAgICAgIGg6ICfhgJDhgIXhgLrhgJThgKzhgJvhgK4nLFxuICAgICAgICAgICAgaGg6ICclZCDhgJThgKzhgJvhgK4nLFxuICAgICAgICAgICAgZDogJ+GAkOGAheGAuuGAm+GAgOGAuicsXG4gICAgICAgICAgICBkZDogJyVkIOGAm+GAgOGAuicsXG4gICAgICAgICAgICBNOiAn4YCQ4YCF4YC64YCcJyxcbiAgICAgICAgICAgIE1NOiAnJWQg4YCcJyxcbiAgICAgICAgICAgIHk6ICfhgJDhgIXhgLrhgJThgL7hgIXhgLonLFxuICAgICAgICAgICAgeXk6ICclZCDhgJThgL7hgIXhgLonLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4YGB4YGC4YGD4YGE4YGF4YGG4YGH4YGI4YGJ4YGAXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbXk7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTm9yd2VnaWFuIEJva23DpWwgW25iXVxuLy8hIGF1dGhvcnMgOiBFc3BlbiBIb3ZsYW5kc2RhbCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZXh4YXJzXG4vLyEgICAgICAgICAgIFNpZ3VyZCBHYXJ0bWFubiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zaWd1cmRnYVxuLy8hICAgICAgICAgICBTdGVwaGVuIFJhbXRodW4gOiBodHRwczovL2dpdGh1Yi5jb20vc3RlcGhlbnJhbXRodW5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBuYiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ25iJywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJfZmVicnVhcl9tYXJzX2FwcmlsX21haV9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2Rlc2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2phbi5fZmViLl9tYXJzX2Fwci5fbWFpX2p1bmlfanVsaV9hdWcuX3NlcC5fb2t0Ll9ub3YuX2Rlcy4nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnc8O4bmRhZ19tYW5kYWdfdGlyc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbMO4cmRhZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3PDuC5fbWEuX3RpLl9vbi5fdG8uX2ZyLl9sw7guJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ3PDuF9tYV90aV9vbl90b19mcl9sw7gnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2kgZGFnIGtsLl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tpIG1vcmdlbiBrbC5dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBba2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2kgZ8OlciBrbC5dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2ZvcnJpZ2VdIGRkZGQgW2tsLl0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdvbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgc2lkZW4nLFxuICAgICAgICAgICAgczogJ25vZW4gc2VrdW5kZXInLFxuICAgICAgICAgICAgc3M6ICclZCBzZWt1bmRlcicsXG4gICAgICAgICAgICBtOiAnZXR0IG1pbnV0dCcsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0dGVyJyxcbiAgICAgICAgICAgIGg6ICdlbiB0aW1lJyxcbiAgICAgICAgICAgIGhoOiAnJWQgdGltZXInLFxuICAgICAgICAgICAgZDogJ2VuIGRhZycsXG4gICAgICAgICAgICBkZDogJyVkIGRhZ2VyJyxcbiAgICAgICAgICAgIHc6ICdlbiB1a2UnLFxuICAgICAgICAgICAgd3c6ICclZCB1a2VyJyxcbiAgICAgICAgICAgIE06ICdlbiBtw6VuZWQnLFxuICAgICAgICAgICAgTU06ICclZCBtw6VuZWRlcicsXG4gICAgICAgICAgICB5OiAnZXR0IMOlcicsXG4gICAgICAgICAgICB5eTogJyVkIMOlcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmI7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTmVwYWxlc2UgW25lXVxuLy8hIGF1dGhvciA6IHN1dmFzaCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zdXZhc2hcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4KWnJyxcbiAgICAgICAgICAgIDI6ICfgpagnLFxuICAgICAgICAgICAgMzogJ+ClqScsXG4gICAgICAgICAgICA0OiAn4KWqJyxcbiAgICAgICAgICAgIDU6ICfgpasnLFxuICAgICAgICAgICAgNjogJ+ClrCcsXG4gICAgICAgICAgICA3OiAn4KWtJyxcbiAgICAgICAgICAgIDg6ICfgpa4nLFxuICAgICAgICAgICAgOTogJ+ClrycsXG4gICAgICAgICAgICAwOiAn4KWmJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+Clpyc6ICcxJyxcbiAgICAgICAgICAgICfgpagnOiAnMicsXG4gICAgICAgICAgICAn4KWpJzogJzMnLFxuICAgICAgICAgICAgJ+Clqic6ICc0JyxcbiAgICAgICAgICAgICfgpasnOiAnNScsXG4gICAgICAgICAgICAn4KWsJzogJzYnLFxuICAgICAgICAgICAgJ+ClrSc6ICc3JyxcbiAgICAgICAgICAgICfgpa4nOiAnOCcsXG4gICAgICAgICAgICAn4KWvJzogJzknLFxuICAgICAgICAgICAgJ+Clpic6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciBuZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ25lJywge1xuICAgICAgICBtb250aHM6ICfgpJzgpKjgpLXgpLDgpYBf4KSr4KWH4KSs4KWN4KSw4KWB4KS14KSw4KWAX+CkruCkvuCksOCljeCkml/gpIXgpKrgpY3gpLDgpL/gpLJf4KSu4KSIX+CknOClgeCkqF/gpJzgpYHgpLLgpL7gpIhf4KSF4KSX4KS34KWN4KSfX+CkuOClh+CkquCljeCkn+Clh+CkruCljeCkrOCksF/gpIXgpJXgpY3gpJ/gpYvgpKzgpLBf4KSo4KWL4KSt4KWH4KSu4KWN4KSs4KSwX+CkoeCkv+CkuOClh+CkruCljeCkrOCksCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfgpJzgpKguX+Ckq+Clh+CkrOCljeCksOClgS5f4KSu4KS+4KSw4KWN4KSaX+CkheCkquCljeCksOCkvy5f4KSu4KSIX+CknOClgeCkqF/gpJzgpYHgpLLgpL7gpIguX+CkheCkly5f4KS44KWH4KSq4KWN4KSfLl/gpIXgpJXgpY3gpJ/gpYsuX+CkqOCli+CkreClhy5f4KSh4KS/4KS44KWHLicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICfgpIbgpIfgpKTgpKzgpL7gpLBf4KS44KWL4KSu4KSs4KS+4KSwX+CkruCkmeCljeCkl+CksuCkrOCkvuCksF/gpKzgpYHgpKfgpKzgpL7gpLBf4KSs4KS/4KS54KS/4KSs4KS+4KSwX+CktuClgeCkleCljeCksOCkrOCkvuCksF/gpLbgpKjgpL/gpKzgpL7gpLAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgpIbgpIfgpKQuX+CkuOCli+Ckri5f4KSu4KSZ4KWN4KSX4KSyLl/gpKzgpYHgpKcuX+CkrOCkv+CkueCkvy5f4KS24KWB4KSV4KWN4KSwLl/gpLbgpKjgpL8uJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+Ckhi5f4KS44KWLLl/gpK7gpIIuX+CkrOClgS5f4KSs4KS/Ll/gpLbgpYEuX+Ckti4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQeCkleCliyBoOm1tIOCkrOCknOClhycsXG4gICAgICAgICAgICBMVFM6ICdB4KSV4KWLIGg6bW06c3Mg4KSs4KSc4KWHJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVksIEHgpJXgpYsgaDptbSDgpKzgpJzgpYcnLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBB4KSV4KWLIGg6bW0g4KSs4KSc4KWHJyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Clp+ClqOClqeClquClq+ClrOClreClruClr+Clpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CksOCkvuCkpOCkv3zgpKzgpL/gpLngpL7gpKh84KSm4KS/4KSJ4KSB4KS44KWLfOCkuOCkvuCkgeCknS8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+CksOCkvuCkpOCkvycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CkrOCkv+CkueCkvuCkqCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpKbgpL/gpIngpIHgpLjgpYsnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTAgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CkuOCkvuCkgeCknScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLDgpL7gpKTgpL8nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkrOCkv+CkueCkvuCkqCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSm4KS/4KSJ4KSB4KS44KWLJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLjgpL7gpIHgpJ0nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CksOCkvuCkpOCkvyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+CkhuCknF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgpK3gpYvgpLLgpL9dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW+CkhuCkieCkgeCkpuCli10gZGRkZFssXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+CkueCkv+CknOCli10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4KSX4KSP4KSV4KWLXSBkZGRkWyxdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXPgpK7gpL4nLFxuICAgICAgICAgICAgcGFzdDogJyVzIOCkheCkl+CkvuCkoeCkvycsXG4gICAgICAgICAgICBzOiAn4KSV4KWH4KS54KWAIOCkleCljeCkt+CkoycsXG4gICAgICAgICAgICBzczogJyVkIOCkuOClh+CkleClh+Cko+CljeCkoScsXG4gICAgICAgICAgICBtOiAn4KSP4KSVIOCkruCkv+CkqOClh+CknycsXG4gICAgICAgICAgICBtbTogJyVkIOCkruCkv+CkqOClh+CknycsXG4gICAgICAgICAgICBoOiAn4KSP4KSVIOCkmOCko+CljeCkn+CkvicsXG4gICAgICAgICAgICBoaDogJyVkIOCkmOCko+CljeCkn+CkvicsXG4gICAgICAgICAgICBkOiAn4KSP4KSVIOCkpuCkv+CkqCcsXG4gICAgICAgICAgICBkZDogJyVkIOCkpuCkv+CkqCcsXG4gICAgICAgICAgICBNOiAn4KSP4KSVIOCkruCkueCkv+CkqOCkvicsXG4gICAgICAgICAgICBNTTogJyVkIOCkruCkueCkv+CkqOCkvicsXG4gICAgICAgICAgICB5OiAn4KSP4KSVIOCkrOCksOCljeCktycsXG4gICAgICAgICAgICB5eTogJyVkIOCkrOCksOCljeCktycsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBuZTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBEdXRjaCAoQmVsZ2l1bSkgW25sLWJlXVxuLy8hIGF1dGhvciA6IEpvcmlzIFLDtmxpbmcgOiBodHRwczovL2dpdGh1Yi5jb20vam9yaXNyb2xpbmdcbi8vISBhdXRob3IgOiBKYWNvYiBNaWRkYWcgOiBodHRwczovL2dpdGh1Yi5jb20vbWlkZGFnalxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRoc1Nob3J0V2l0aERvdHMgPSAnamFuLl9mZWIuX21ydC5fYXByLl9tZWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVjLicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnRXaXRob3V0RG90cyA9ICdqYW5fZmViX21ydF9hcHJfbWVpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2UgPSBbXG4gICAgICAgICAgICAvXmphbi9pLFxuICAgICAgICAgICAgL15mZWIvaSxcbiAgICAgICAgICAgIC9ebWFhcnR8bXJ0Lj8kL2ksXG4gICAgICAgICAgICAvXmFwci9pLFxuICAgICAgICAgICAgL15tZWkkL2ksXG4gICAgICAgICAgICAvXmp1bltpLl0/JC9pLFxuICAgICAgICAgICAgL15qdWxbaS5dPyQvaSxcbiAgICAgICAgICAgIC9eYXVnL2ksXG4gICAgICAgICAgICAvXnNlcC9pLFxuICAgICAgICAgICAgL15va3QvaSxcbiAgICAgICAgICAgIC9ebm92L2ksXG4gICAgICAgICAgICAvXmRlYy9pLFxuICAgICAgICBdLFxuICAgICAgICBtb250aHNSZWdleCA9IC9eKGphbnVhcml8ZmVicnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXJ8amFuXFwuP3xmZWJcXC4/fG1ydFxcLj98YXByXFwuP3xqdVtubF1cXC4/fGF1Z1xcLj98c2VwXFwuP3xva3RcXC4/fG5vdlxcLj98ZGVjXFwuPykvaTtcblxuICAgIHZhciBubEJlID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbmwtYmUnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcmlfZmVicnVhcmlfbWFhcnRfYXByaWxfbWVpX2p1bmlfanVsaV9hdWd1c3R1c19zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6IGZ1bmN0aW9uIChtLCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhEb3RzO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgvLU1NTS0vLnRlc3QoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhvdXREb3RzW20ubW9udGgoKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhEb3RzW20ubW9udGgoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgbW9udGhzUmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU3RyaWN0UmVnZXg6IC9eKGphbnVhcml8ZmVicnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6IC9eKGphblxcLj98ZmViXFwuP3xtcnRcXC4/fGFwclxcLj98bWVpfGp1W25sXVxcLj98YXVnXFwuP3xzZXBcXC4/fG9rdFxcLj98bm92XFwuP3xkZWNcXC4/KS9pLFxuXG4gICAgICAgIG1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgbG9uZ01vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgc2hvcnRNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG5cbiAgICAgICAgd2Vla2RheXM6ICd6b25kYWdfbWFhbmRhZ19kaW5zZGFnX3dvZW5zZGFnX2RvbmRlcmRhZ192cmlqZGFnX3phdGVyZGFnJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnem8uX21hLl9kaS5fd28uX2RvLl92ci5femEuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ3pvX21hX2RpX3dvX2RvX3ZyX3phJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1t2YW5kYWFnIG9tXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW21vcmdlbiBvbV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtvbV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tnaXN0ZXJlbiBvbV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbYWZnZWxvcGVuXSBkZGRkIFtvbV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdvdmVyICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBnZWxlZGVuJyxcbiAgICAgICAgICAgIHM6ICdlZW4gcGFhciBzZWNvbmRlbicsXG4gICAgICAgICAgICBzczogJyVkIHNlY29uZGVuJyxcbiAgICAgICAgICAgIG06ICfDqcOpbiBtaW51dXQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVuJyxcbiAgICAgICAgICAgIGg6ICfDqcOpbiB1dXInLFxuICAgICAgICAgICAgaGg6ICclZCB1dXInLFxuICAgICAgICAgICAgZDogJ8Opw6luIGRhZycsXG4gICAgICAgICAgICBkZDogJyVkIGRhZ2VuJyxcbiAgICAgICAgICAgIE06ICfDqcOpbiBtYWFuZCcsXG4gICAgICAgICAgICBNTTogJyVkIG1hYW5kZW4nLFxuICAgICAgICAgICAgeTogJ8Opw6luIGphYXInLFxuICAgICAgICAgICAgeXk6ICclZCBqYWFyJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0ZXxkZSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIG51bWJlciArXG4gICAgICAgICAgICAgICAgKG51bWJlciA9PT0gMSB8fCBudW1iZXIgPT09IDggfHwgbnVtYmVyID49IDIwID8gJ3N0ZScgOiAnZGUnKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5sQmU7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRHV0Y2ggW25sXVxuLy8hIGF1dGhvciA6IEpvcmlzIFLDtmxpbmcgOiBodHRwczovL2dpdGh1Yi5jb20vam9yaXNyb2xpbmdcbi8vISBhdXRob3IgOiBKYWNvYiBNaWRkYWcgOiBodHRwczovL2dpdGh1Yi5jb20vbWlkZGFnalxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRoc1Nob3J0V2l0aERvdHMgPSAnamFuLl9mZWIuX21ydC5fYXByLl9tZWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVjLicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnRXaXRob3V0RG90cyA9ICdqYW5fZmViX21ydF9hcHJfbWVpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2UgPSBbXG4gICAgICAgICAgICAvXmphbi9pLFxuICAgICAgICAgICAgL15mZWIvaSxcbiAgICAgICAgICAgIC9ebWFhcnR8bXJ0Lj8kL2ksXG4gICAgICAgICAgICAvXmFwci9pLFxuICAgICAgICAgICAgL15tZWkkL2ksXG4gICAgICAgICAgICAvXmp1bltpLl0/JC9pLFxuICAgICAgICAgICAgL15qdWxbaS5dPyQvaSxcbiAgICAgICAgICAgIC9eYXVnL2ksXG4gICAgICAgICAgICAvXnNlcC9pLFxuICAgICAgICAgICAgL15va3QvaSxcbiAgICAgICAgICAgIC9ebm92L2ksXG4gICAgICAgICAgICAvXmRlYy9pLFxuICAgICAgICBdLFxuICAgICAgICBtb250aHNSZWdleCA9IC9eKGphbnVhcml8ZmVicnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXJ8amFuXFwuP3xmZWJcXC4/fG1ydFxcLj98YXByXFwuP3xqdVtubF1cXC4/fGF1Z1xcLj98c2VwXFwuP3xva3RcXC4/fG5vdlxcLj98ZGVjXFwuPykvaTtcblxuICAgIHZhciBubCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ25sJywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJpX2ZlYnJ1YXJpX21hYXJ0X2FwcmlsX21laV9qdW5pX2p1bGlfYXVndXN0dXNfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiBmdW5jdGlvbiAobSwgZm9ybWF0KSB7XG4gICAgICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRoRG90cztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoLy1NTU0tLy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRob3V0RG90c1ttLm1vbnRoKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRoRG90c1ttLm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG1vbnRoc1JlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OiAvXihqYW51YXJpfGZlYnJ1YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pLFxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OiAvXihqYW5cXC4/fGZlYlxcLj98bXJ0XFwuP3xhcHJcXC4/fG1laXxqdVtubF1cXC4/fGF1Z1xcLj98c2VwXFwuP3xva3RcXC4/fG5vdlxcLj98ZGVjXFwuPykvaSxcblxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuXG4gICAgICAgIHdlZWtkYXlzOiAnem9uZGFnX21hYW5kYWdfZGluc2RhZ193b2Vuc2RhZ19kb25kZXJkYWdfdnJpamRhZ196YXRlcmRhZycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3pvLl9tYS5fZGkuX3dvLl9kby5fdnIuX3phLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICd6b19tYV9kaV93b19kb192cl96YScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQtTU0tWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbdmFuZGFhZyBvbV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1ttb3JnZW4gb21dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbb21dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZ2lzdGVyZW4gb21dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2FmZ2Vsb3Blbl0gZGRkZCBbb21dIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnb3ZlciAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgZ2VsZWRlbicsXG4gICAgICAgICAgICBzOiAnZWVuIHBhYXIgc2Vjb25kZW4nLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRlbicsXG4gICAgICAgICAgICBtOiAnw6nDqW4gbWludXV0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlbicsXG4gICAgICAgICAgICBoOiAnw6nDqW4gdXVyJyxcbiAgICAgICAgICAgIGhoOiAnJWQgdXVyJyxcbiAgICAgICAgICAgIGQ6ICfDqcOpbiBkYWcnLFxuICAgICAgICAgICAgZGQ6ICclZCBkYWdlbicsXG4gICAgICAgICAgICB3OiAnw6nDqW4gd2VlaycsXG4gICAgICAgICAgICB3dzogJyVkIHdla2VuJyxcbiAgICAgICAgICAgIE06ICfDqcOpbiBtYWFuZCcsXG4gICAgICAgICAgICBNTTogJyVkIG1hYW5kZW4nLFxuICAgICAgICAgICAgeTogJ8Opw6luIGphYXInLFxuICAgICAgICAgICAgeXk6ICclZCBqYWFyJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0ZXxkZSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIG51bWJlciArXG4gICAgICAgICAgICAgICAgKG51bWJlciA9PT0gMSB8fCBudW1iZXIgPT09IDggfHwgbnVtYmVyID49IDIwID8gJ3N0ZScgOiAnZGUnKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5sO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE55bm9yc2sgW25uXVxuLy8hIGF1dGhvcnMgOiBodHRwczovL2dpdGh1Yi5jb20vbWVjaHV3aW5kXG4vLyEgICAgICAgICAgIFN0ZXBoZW4gUmFtdGh1biA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zdGVwaGVucmFtdGh1blxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG5uID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbm4nLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcl9mZWJydWFyX21hcnNfYXByaWxfbWFpX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVzZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFuLl9mZWIuX21hcnNfYXByLl9tYWlfanVuaV9qdWxpX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVzLicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdzdW5kYWdfbcOlbmRhZ190eXNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2xhdXJkYWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdzdS5fbcOlLl90eS5fb24uX3RvLl9mci5fbGF1Licuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdzdV9tw6VfdHlfb25fdG9fZnJfbGEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIFtrbC5dIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSSBkYWcga2xva2thXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0kgbW9yZ29uIGtsb2trYV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtrbG9ra2FdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSSBnw6VyIGtsb2trYV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbRsO4cmVnw6VhbmRlXSBkZGRkIFtrbG9ra2FdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnb20gJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIHNpZGFuJyxcbiAgICAgICAgICAgIHM6ICdub2tyZSBzZWt1bmQnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWt1bmQnLFxuICAgICAgICAgICAgbTogJ2VpdCBtaW51dHQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dHQnLFxuICAgICAgICAgICAgaDogJ2VpbiB0aW1lJyxcbiAgICAgICAgICAgIGhoOiAnJWQgdGltYXInLFxuICAgICAgICAgICAgZDogJ2VpbiBkYWcnLFxuICAgICAgICAgICAgZGQ6ICclZCBkYWdhcicsXG4gICAgICAgICAgICB3OiAnZWkgdmVrZScsXG4gICAgICAgICAgICB3dzogJyVkIHZla2VyJyxcbiAgICAgICAgICAgIE06ICdlaW4gbcOlbmFkJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbcOlbmFkZXInLFxuICAgICAgICAgICAgeTogJ2VpdCDDpXInLFxuICAgICAgICAgICAgeXk6ICclZCDDpXInLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5uO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE9jY2l0YW4sIGxlbmdhZG9jaWFuIGRpYWxlY3RlIFtvYy1sbmNdXG4vLyEgYXV0aG9yIDogUXVlbnRpbiBQQUfDiFMgOiBodHRwczovL2dpdGh1Yi5jb20vUXVlbnR5MzFcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBvY0xuYyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ29jLWxuYycsIHtcbiAgICAgICAgbW9udGhzOiB7XG4gICAgICAgICAgICBzdGFuZGFsb25lOiAnZ2VuacOocl9mZWJyacOocl9tYXLDp19hYnJpbF9tYWlfanVuaF9qdWxoZXRfYWdvc3Rfc2V0ZW1icmVfb2N0w7JicmVfbm92ZW1icmVfZGVjZW1icmUnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGZvcm1hdDogXCJkZSBnZW5pw6hyX2RlIGZlYnJpw6hyX2RlIG1hcsOnX2QnYWJyaWxfZGUgbWFpX2RlIGp1bmhfZGUganVsaGV0X2QnYWdvc3RfZGUgc2V0ZW1icmVfZCdvY3TDsmJyZV9kZSBub3ZlbWJyZV9kZSBkZWNlbWJyZVwiLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiAvRFtvRF0/KFxccykrTU1NTS8sXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnZ2VuLl9mZWJyLl9tYXLDp19hYnIuX21haV9qdW5oX2p1bGguX2Fnby5fc2V0Ll9vY3QuX25vdi5fZGVjLicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdkaW1lbmdlX2RpbHVuc19kaW1hcnNfZGltw6hjcmVzX2RpasOydXNfZGl2ZW5kcmVzX2Rpc3NhYnRlJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnZGcuX2RsLl9kbS5fZGMuX2RqLl9kdi5fZHMuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2RnX2RsX2RtX2RjX2RqX2R2X2RzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICAgICAgbGw6ICdEIE1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBbZGVdIFlZWVkgW2FdIEg6bW0nLFxuICAgICAgICAgICAgbGxsOiAnRCBNTU0gWVlZWSwgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gW2RlXSBZWVlZIFthXSBIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQgRCBNTU0gWVlZWSwgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW3XDqGkgYV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tkZW1hbiBhXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2FdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbacOociBhXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW3Bhc3NhdCBhXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogXCJkJ2FxdcOtICVzXCIsXG4gICAgICAgICAgICBwYXN0OiAnZmEgJXMnLFxuICAgICAgICAgICAgczogJ3VuYXMgc2Vnb25kYXMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWdvbmRhcycsXG4gICAgICAgICAgICBtOiAndW5hIG1pbnV0YScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0YXMnLFxuICAgICAgICAgICAgaDogJ3VuYSBvcmEnLFxuICAgICAgICAgICAgaGg6ICclZCBvcmFzJyxcbiAgICAgICAgICAgIGQ6ICd1biBqb3JuJyxcbiAgICAgICAgICAgIGRkOiAnJWQgam9ybnMnLFxuICAgICAgICAgICAgTTogJ3VuIG1lcycsXG4gICAgICAgICAgICBNTTogJyVkIG1lc2VzJyxcbiAgICAgICAgICAgIHk6ICd1biBhbicsXG4gICAgICAgICAgICB5eTogJyVkIGFucycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShyfG58dHzDqHxhKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgdmFyIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgbnVtYmVyID09PSAxXG4gICAgICAgICAgICAgICAgICAgID8gJ3InXG4gICAgICAgICAgICAgICAgICAgIDogbnVtYmVyID09PSAyXG4gICAgICAgICAgICAgICAgICAgID8gJ24nXG4gICAgICAgICAgICAgICAgICAgIDogbnVtYmVyID09PSAzXG4gICAgICAgICAgICAgICAgICAgID8gJ3InXG4gICAgICAgICAgICAgICAgICAgIDogbnVtYmVyID09PSA0XG4gICAgICAgICAgICAgICAgICAgID8gJ3QnXG4gICAgICAgICAgICAgICAgICAgIDogJ8OoJztcbiAgICAgICAgICAgIGlmIChwZXJpb2QgPT09ICd3JyB8fCBwZXJpb2QgPT09ICdXJykge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9ICdhJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2NMbmM7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogUHVuamFiaSAoSW5kaWEpIFtwYS1pbl1cbi8vISBhdXRob3IgOiBIYXJwcmVldCBTaW5naCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9oYXJwcmVldGtoYWxzYWd0Yml0XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ+CppycsXG4gICAgICAgICAgICAyOiAn4KmoJyxcbiAgICAgICAgICAgIDM6ICfgqaknLFxuICAgICAgICAgICAgNDogJ+CpqicsXG4gICAgICAgICAgICA1OiAn4KmrJyxcbiAgICAgICAgICAgIDY6ICfgqawnLFxuICAgICAgICAgICAgNzogJ+CprScsXG4gICAgICAgICAgICA4OiAn4KmuJyxcbiAgICAgICAgICAgIDk6ICfgqa8nLFxuICAgICAgICAgICAgMDogJ+CppicsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfgqacnOiAnMScsXG4gICAgICAgICAgICAn4KmoJzogJzInLFxuICAgICAgICAgICAgJ+CpqSc6ICczJyxcbiAgICAgICAgICAgICfgqaonOiAnNCcsXG4gICAgICAgICAgICAn4KmrJzogJzUnLFxuICAgICAgICAgICAgJ+CprCc6ICc2JyxcbiAgICAgICAgICAgICfgqa0nOiAnNycsXG4gICAgICAgICAgICAn4KmuJzogJzgnLFxuICAgICAgICAgICAgJ+Cpryc6ICc5JyxcbiAgICAgICAgICAgICfgqaYnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICB2YXIgcGFJbiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3BhLWluJywge1xuICAgICAgICAvLyBUaGVyZSBhcmUgbW9udGhzIG5hbWUgYXMgcGVyIE5hbmFrc2hhaGkgQ2FsZW5kYXIgYnV0IHRoZXkgYXJlIG5vdCB1c2VkIGFzIHJpZ2lkbHkgaW4gbW9kZXJuIFB1bmphYmkuXG4gICAgICAgIG1vbnRoczogJ+ConOCoqOCoteCosOCpgF/gqKvgqLzgqLDgqLXgqLDgqYBf4Kiu4Ki+4Kiw4KiaX+CoheCoquCpjeCosOCpiOCosl/gqK7gqIhf4Kic4KmC4KioX+ConOCpgeCosuCovuCoiF/gqIXgqJfgqLjgqKRf4Ki44Kik4Kmw4Kis4KiwX+CoheColeCopOCpguCorOCosF/gqKjgqLXgqbDgqKzgqLBf4Kim4Ki44Kmw4Kis4KiwJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ+ConOCoqOCoteCosOCpgF/gqKvgqLzgqLDgqLXgqLDgqYBf4Kiu4Ki+4Kiw4KiaX+CoheCoquCpjeCosOCpiOCosl/gqK7gqIhf4Kic4KmC4KioX+ConOCpgeCosuCovuCoiF/gqIXgqJfgqLjgqKRf4Ki44Kik4Kmw4Kis4KiwX+CoheColeCopOCpguCorOCosF/gqKjgqLXgqbDgqKzgqLBf4Kim4Ki44Kmw4Kis4KiwJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+CokOCopOCoteCovuCosF/gqLjgqYvgqK7gqLXgqL7gqLBf4Kiu4Kmw4KiX4Kiy4Ki14Ki+4KiwX+CorOCpgeCop+CoteCovuCosF/gqLXgqYDgqLDgqLXgqL7gqLBf4Ki44Ki84KmB4Kmx4KiV4Kiw4Ki14Ki+4KiwX+CouOCovOCoqOCpgOComuCosOCoteCovuCosCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+CokOCopF/gqLjgqYvgqK5f4Kiu4Kmw4KiX4KiyX+CorOCpgeCop1/gqLXgqYDgqLBf4Ki44Ki84KmB4KiV4KiwX+CouOCovOCoqOCpgCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfgqJDgqKRf4Ki44KmL4KiuX+CoruCpsOCol+Cosl/gqKzgqYHgqKdf4Ki14KmA4KiwX+CouOCovOCpgeColeCosF/gqLjgqLzgqKjgqYAnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0EgaDptbSDgqLXgqJzgqYcnLFxuICAgICAgICAgICAgTFRTOiAnQSBoOm1tOnNzIOCoteConOCphycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0g4Ki14Kic4KmHJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIOCoteConOCphycsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+CoheConF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgqJXgqLJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW+CoheCol+CosuCovl0gZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgqJXgqLJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+CoquCov+Com+CosuCph10gZGRkZCwgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDgqLXgqL/gqbHgqJonLFxuICAgICAgICAgICAgcGFzdDogJyVzIOCoquCov+Com+CosuCphycsXG4gICAgICAgICAgICBzOiAn4KiV4KmB4KidIOCouOColeCov+CpsOConycsXG4gICAgICAgICAgICBzczogJyVkIOCouOColeCov+CpsOConycsXG4gICAgICAgICAgICBtOiAn4KiH4KiVIOCoruCov+CpsOConycsXG4gICAgICAgICAgICBtbTogJyVkIOCoruCov+CpsOConycsXG4gICAgICAgICAgICBoOiAn4KiH4Kmx4KiVIOComOCpsOCon+CovicsXG4gICAgICAgICAgICBoaDogJyVkIOComOCpsOCon+CphycsXG4gICAgICAgICAgICBkOiAn4KiH4Kmx4KiVIOCopuCov+CoqCcsXG4gICAgICAgICAgICBkZDogJyVkIOCopuCov+CoqCcsXG4gICAgICAgICAgICBNOiAn4KiH4Kmx4KiVIOCoruCoueCpgOCoqOCovicsXG4gICAgICAgICAgICBNTTogJyVkIOCoruCoueCpgOCoqOCphycsXG4gICAgICAgICAgICB5OiAn4KiH4Kmx4KiVIOCouOCovuCosicsXG4gICAgICAgICAgICB5eTogJyVkIOCouOCovuCosicsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgqafgqajgqangqargqavgqazgqa3gqa7gqa/gqaZdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIFB1bmphYmkgbm90YXRpb24gZm9yIG1lcmlkaWVtcyBhcmUgcXVpdGUgZnV6enkgaW4gcHJhY3RpY2UuIFdoaWxlIHRoZXJlIGV4aXN0c1xuICAgICAgICAvLyBhIHJpZ2lkIG5vdGlvbiBvZiBhICdQYWhhcicgaXQgaXMgbm90IHVzZWQgYXMgcmlnaWRseSBpbiBtb2Rlcm4gUHVuamFiaS5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CosOCovuCopHzgqLjgqLXgqYfgqLB84Kim4KmB4Kiq4Ki54Ki/4KiwfOCouOCovOCovuCori8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+CosOCovuCopCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CouOCoteCph+CosCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgqKbgqYHgqKrgqLngqL/gqLAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTAgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CouOCovOCovuCoricpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqLDgqL7gqKQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CouOCoteCph+CosCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kim4KmB4Kiq4Ki54Ki/4KiwJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqLjgqLzgqL7gqK4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CosOCovuCopCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBwYUluO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFBvbGlzaCBbcGxdXG4vLyEgYXV0aG9yIDogUmFmYWwgSGlyc3ogOiBodHRwczovL2dpdGh1Yi5jb20vZXZvTFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRoc05vbWluYXRpdmUgPSAnc3R5Y3plxYRfbHV0eV9tYXJ6ZWNfa3dpZWNpZcWEX21hal9jemVyd2llY19saXBpZWNfc2llcnBpZcWEX3dyemVzaWXFhF9wYcW6ZHppZXJuaWtfbGlzdG9wYWRfZ3J1ZHppZcWEJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTdWJqZWN0aXZlID0gJ3N0eWN6bmlhX2x1dGVnb19tYXJjYV9rd2lldG5pYV9tYWphX2N6ZXJ3Y2FfbGlwY2Ffc2llcnBuaWFfd3J6ZcWbbmlhX3Bhxbpkemllcm5pa2FfbGlzdG9wYWRhX2dydWRuaWEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL15zdHkvaSxcbiAgICAgICAgICAgIC9ebHV0L2ksXG4gICAgICAgICAgICAvXm1hci9pLFxuICAgICAgICAgICAgL15rd2kvaSxcbiAgICAgICAgICAgIC9ebWFqL2ksXG4gICAgICAgICAgICAvXmN6ZS9pLFxuICAgICAgICAgICAgL15saXAvaSxcbiAgICAgICAgICAgIC9ec2llL2ksXG4gICAgICAgICAgICAvXndyei9pLFxuICAgICAgICAgICAgL15wYcW6L2ksXG4gICAgICAgICAgICAvXmxpcy9pLFxuICAgICAgICAgICAgL15ncnUvaSxcbiAgICAgICAgXTtcbiAgICBmdW5jdGlvbiBwbHVyYWwobikge1xuICAgICAgICByZXR1cm4gbiAlIDEwIDwgNSAmJiBuICUgMTAgPiAxICYmIH5+KG4gLyAxMCkgJSAxMCAhPT0gMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdzZWt1bmR5JyA6ICdzZWt1bmQnKTtcbiAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ21pbnV0YScgOiAnbWludXTEmSc7XG4gICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdtaW51dHknIDogJ21pbnV0Jyk7XG4gICAgICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdnb2R6aW5hJyA6ICdnb2R6aW7EmSc7XG4gICAgICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdnb2R6aW55JyA6ICdnb2R6aW4nKTtcbiAgICAgICAgICAgIGNhc2UgJ3d3JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ3R5Z29kbmllJyA6ICd0eWdvZG5pJyk7XG4gICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdtaWVzacSFY2UnIDogJ21pZXNpxJljeScpO1xuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnbGF0YScgOiAnbGF0Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcGwgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdwbCcsIHtcbiAgICAgICAgbW9udGhzOiBmdW5jdGlvbiAobW9tZW50VG9Gb3JtYXQsIGZvcm1hdCkge1xuICAgICAgICAgICAgaWYgKCFtb21lbnRUb0Zvcm1hdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNOb21pbmF0aXZlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgvRCBNTU1NLy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU3ViamVjdGl2ZVttb21lbnRUb0Zvcm1hdC5tb250aCgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc05vbWluYXRpdmVbbW9tZW50VG9Gb3JtYXQubW9udGgoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnc3R5X2x1dF9tYXJfa3dpX21hal9jemVfbGlwX3NpZV93cnpfcGHFul9saXNfZ3J1Jy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICB3ZWVrZGF5czogJ25pZWR6aWVsYV9wb25pZWR6aWHFgmVrX3d0b3Jla1/Fm3JvZGFfY3p3YXJ0ZWtfcGnEhXRla19zb2JvdGEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICduZHpfcG9uX3d0X8Wbcl9jendfcHRfc29iJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ05kX1BuX1d0X8Wacl9Del9QdF9Tbycuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tEemnFmyBvXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0p1dHJvIG9dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgbmllZHppZWzEmSBvXSBMVCc7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbV2Ugd3RvcmVrIG9dIExUJztcblxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tXIMWbcm9kxJkgb10gTFQnO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgc29ib3TEmSBvXSBMVCc7XG5cbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1ddIGRkZGQgW29dIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogJ1tXY3pvcmFqIG9dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgemVzesWCxIUgbmllZHppZWzEmSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgemVzesWCxIUgxZtyb2TEmSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgemVzesWCxIUgc29ib3TEmSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tXIHplc3rFgnldIGRkZGQgW29dIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICd6YSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgdGVtdScsXG4gICAgICAgICAgICBzOiAna2lsa2Egc2VrdW5kJyxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQ6ICcxIGR6aWXFhCcsXG4gICAgICAgICAgICBkZDogJyVkIGRuaScsXG4gICAgICAgICAgICB3OiAndHlkemllxYQnLFxuICAgICAgICAgICAgd3c6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06ICdtaWVzacSFYycsXG4gICAgICAgICAgICBNTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogJ3JvaycsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHBsO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFBvcnR1Z3Vlc2UgKEJyYXppbCkgW3B0LWJyXVxuLy8hIGF1dGhvciA6IENhaW8gUmliZWlybyBQZXJlaXJhIDogaHR0cHM6Ly9naXRodWIuY29tL2NhaW8tcmliZWlyby1wZXJlaXJhXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgcHRCciA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3B0LWJyJywge1xuICAgICAgICBtb250aHM6ICdqYW5laXJvX2ZldmVyZWlyb19tYXLDp29fYWJyaWxfbWFpb19qdW5ob19qdWxob19hZ29zdG9fc2V0ZW1icm9fb3V0dWJyb19ub3ZlbWJyb19kZXplbWJybycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdqYW5fZmV2X21hcl9hYnJfbWFpX2p1bl9qdWxfYWdvX3NldF9vdXRfbm92X2Rleicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdkb21pbmdvX3NlZ3VuZGEtZmVpcmFfdGVyw6dhLWZlaXJhX3F1YXJ0YS1mZWlyYV9xdWludGEtZmVpcmFfc2V4dGEtZmVpcmFfc8OhYmFkbycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2RvbV9zZWdfdGVyX3F1YV9xdWlfc2V4X3PDoWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZG9fMsKqXzPCql80wqpfNcKqXzbCql9zw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZIFvDoHNdIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgW8Ogc10gSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tIb2plIMOgc10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tBbWFuaMOjIMOgc10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvDoHNdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbT250ZW0gw6BzXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSgpID09PSAwIHx8IHRoaXMuZGF5KCkgPT09IDZcbiAgICAgICAgICAgICAgICAgICAgPyAnW8OabHRpbW9dIGRkZGQgW8Ogc10gTFQnIC8vIFNhdHVyZGF5ICsgU3VuZGF5XG4gICAgICAgICAgICAgICAgICAgIDogJ1vDmmx0aW1hXSBkZGRkIFvDoHNdIExUJzsgLy8gTW9uZGF5IC0gRnJpZGF5XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdlbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnaMOhICVzJyxcbiAgICAgICAgICAgIHM6ICdwb3Vjb3Mgc2VndW5kb3MnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWd1bmRvcycsXG4gICAgICAgICAgICBtOiAndW0gbWludXRvJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRvcycsXG4gICAgICAgICAgICBoOiAndW1hIGhvcmEnLFxuICAgICAgICAgICAgaGg6ICclZCBob3JhcycsXG4gICAgICAgICAgICBkOiAndW0gZGlhJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGlhcycsXG4gICAgICAgICAgICBNOiAndW0gbcOqcycsXG4gICAgICAgICAgICBNTTogJyVkIG1lc2VzJyxcbiAgICAgICAgICAgIHk6ICd1bSBhbm8nLFxuICAgICAgICAgICAgeXk6ICclZCBhbm9zJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgICAgIGludmFsaWREYXRlOiAnRGF0YSBpbnbDoWxpZGEnLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHB0QnI7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogUG9ydHVndWVzZSBbcHRdXG4vLyEgYXV0aG9yIDogSmVmZmVyc29uIDogaHR0cHM6Ly9naXRodWIuY29tL2phbGV4NzlcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBwdCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3B0Jywge1xuICAgICAgICBtb250aHM6ICdqYW5laXJvX2ZldmVyZWlyb19tYXLDp29fYWJyaWxfbWFpb19qdW5ob19qdWxob19hZ29zdG9fc2V0ZW1icm9fb3V0dWJyb19ub3ZlbWJyb19kZXplbWJybycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdqYW5fZmV2X21hcl9hYnJfbWFpX2p1bl9qdWxfYWdvX3NldF9vdXRfbm92X2Rleicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdEb21pbmdvX1NlZ3VuZGEtZmVpcmFfVGVyw6dhLWZlaXJhX1F1YXJ0YS1mZWlyYV9RdWludGEtZmVpcmFfU2V4dGEtZmVpcmFfU8OhYmFkbycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0RvbV9TZWdfVGVyX1F1YV9RdWlfU2V4X1PDoWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnRG9fMsKqXzPCql80wqpfNcKqXzbCql9Tw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tIb2plIMOgc10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tBbWFuaMOjIMOgc10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvDoHNdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbT250ZW0gw6BzXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSgpID09PSAwIHx8IHRoaXMuZGF5KCkgPT09IDZcbiAgICAgICAgICAgICAgICAgICAgPyAnW8OabHRpbW9dIGRkZGQgW8Ogc10gTFQnIC8vIFNhdHVyZGF5ICsgU3VuZGF5XG4gICAgICAgICAgICAgICAgICAgIDogJ1vDmmx0aW1hXSBkZGRkIFvDoHNdIExUJzsgLy8gTW9uZGF5IC0gRnJpZGF5XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdlbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnaMOhICVzJyxcbiAgICAgICAgICAgIHM6ICdzZWd1bmRvcycsXG4gICAgICAgICAgICBzczogJyVkIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIG06ICd1bSBtaW51dG8nLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dG9zJyxcbiAgICAgICAgICAgIGg6ICd1bWEgaG9yYScsXG4gICAgICAgICAgICBoaDogJyVkIGhvcmFzJyxcbiAgICAgICAgICAgIGQ6ICd1bSBkaWEnLFxuICAgICAgICAgICAgZGQ6ICclZCBkaWFzJyxcbiAgICAgICAgICAgIHc6ICd1bWEgc2VtYW5hJyxcbiAgICAgICAgICAgIHd3OiAnJWQgc2VtYW5hcycsXG4gICAgICAgICAgICBNOiAndW0gbcOqcycsXG4gICAgICAgICAgICBNTTogJyVkIG1lc2VzJyxcbiAgICAgICAgICAgIHk6ICd1bSBhbm8nLFxuICAgICAgICAgICAgeXk6ICclZCBhbm9zJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBwdDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBSb21hbmlhbiBbcm9dXG4vLyEgYXV0aG9yIDogVmxhZCBHdXJkaWdhIDogaHR0cHM6Ly9naXRodWIuY29tL2d1cmRpZ2Fcbi8vISBhdXRob3IgOiBWYWxlbnRpbiBBZ2FjaGkgOiBodHRwczovL2dpdGh1Yi5jb20vYXZhbHlcbi8vISBhdXRob3IgOiBFbWFudWVsIENlcG9pIDogaHR0cHM6Ly9naXRodWIuY29tL2NlcGVtXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICAgICAgc3M6ICdzZWN1bmRlJyxcbiAgICAgICAgICAgICAgICBtbTogJ21pbnV0ZScsXG4gICAgICAgICAgICAgICAgaGg6ICdvcmUnLFxuICAgICAgICAgICAgICAgIGRkOiAnemlsZScsXG4gICAgICAgICAgICAgICAgd3c6ICdzxINwdMSDbcOibmknLFxuICAgICAgICAgICAgICAgIE1NOiAnbHVuaScsXG4gICAgICAgICAgICAgICAgeXk6ICdhbmknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlcGFyYXRvciA9ICcgJztcbiAgICAgICAgaWYgKG51bWJlciAlIDEwMCA+PSAyMCB8fCAobnVtYmVyID49IDEwMCAmJiBudW1iZXIgJSAxMDAgPT09IDApKSB7XG4gICAgICAgICAgICBzZXBhcmF0b3IgPSAnIGRlICc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bWJlciArIHNlcGFyYXRvciArIGZvcm1hdFtrZXldO1xuICAgIH1cblxuICAgIHZhciBybyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3JvJywge1xuICAgICAgICBtb250aHM6ICdpYW51YXJpZV9mZWJydWFyaWVfbWFydGllX2FwcmlsaWVfbWFpX2l1bmllX2l1bGllX2F1Z3VzdF9zZXB0ZW1icmllX29jdG9tYnJpZV9ub2llbWJyaWVfZGVjZW1icmllJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2lhbi5fZmViLl9tYXJ0Ll9hcHIuX21haV9pdW4uX2l1bC5fYXVnLl9zZXB0Ll9vY3QuX25vdi5fZGVjLicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdkdW1pbmljxINfbHVuaV9tYXLIm2lfbWllcmN1cmlfam9pX3ZpbmVyaV9zw6JtYsSDdMSDJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnRHVtX0x1bl9NYXJfTWllX0pvaV9WaW5fU8OibScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdEdV9MdV9NYV9NaV9Kb19WaV9Tw6InLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1themkgbGFdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbbcOiaW5lIGxhXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2xhXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2llcmkgbGFdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2Zvc3RhXSBkZGRkIFtsYV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdwZXN0ZSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgw65uIHVybcSDJyxcbiAgICAgICAgICAgIHM6ICdjw6J0ZXZhIHNlY3VuZGUnLFxuICAgICAgICAgICAgc3M6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBtOiAndW4gbWludXQnLFxuICAgICAgICAgICAgbW06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBoOiAnbyBvcsSDJyxcbiAgICAgICAgICAgIGhoOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgZDogJ28gemknLFxuICAgICAgICAgICAgZGQ6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICB3OiAnbyBzxINwdMSDbcOibsSDJyxcbiAgICAgICAgICAgIHd3OiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgTTogJ28gbHVuxIMnLFxuICAgICAgICAgICAgTU06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICB5OiAndW4gYW4nLFxuICAgICAgICAgICAgeXk6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBybztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBSdXNzaWFuIFtydV1cbi8vISBhdXRob3IgOiBWaWt0b3JtaW5hdG9yIDogaHR0cHM6Ly9naXRodWIuY29tL1Zpa3Rvcm1pbmF0b3Jcbi8vISBhdXRob3IgOiBNZW5lbGlvbiBFbGVuc8O6bGUgOiBodHRwczovL2dpdGh1Yi5jb20vT2lyZVxuLy8hIGF1dGhvciA6INCa0L7RgNC10L3QsdC10YDQsyDQnNCw0YDQuiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zb2NrZXRwYWlyXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiBwbHVyYWwod29yZCwgbnVtKSB7XG4gICAgICAgIHZhciBmb3JtcyA9IHdvcmQuc3BsaXQoJ18nKTtcbiAgICAgICAgcmV0dXJuIG51bSAlIDEwID09PSAxICYmIG51bSAlIDEwMCAhPT0gMTFcbiAgICAgICAgICAgID8gZm9ybXNbMF1cbiAgICAgICAgICAgIDogbnVtICUgMTAgPj0gMiAmJiBudW0gJSAxMCA8PSA0ICYmIChudW0gJSAxMDAgPCAxMCB8fCBudW0gJSAxMDAgPj0gMjApXG4gICAgICAgICAgICA/IGZvcm1zWzFdXG4gICAgICAgICAgICA6IGZvcm1zWzJdO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBzczogd2l0aG91dFN1ZmZpeCA/ICfRgdC10LrRg9C90LTQsF/RgdC10LrRg9C90LTRi1/RgdC10LrRg9C90LQnIDogJ9GB0LXQutGD0L3QtNGDX9GB0LXQutGD0L3QtNGLX9GB0LXQutGD0L3QtCcsXG4gICAgICAgICAgICBtbTogd2l0aG91dFN1ZmZpeCA/ICfQvNC40L3Rg9GC0LBf0LzQuNC90YPRgtGLX9C80LjQvdGD0YInIDogJ9C80LjQvdGD0YLRg1/QvNC40L3Rg9GC0Ytf0LzQuNC90YPRgicsXG4gICAgICAgICAgICBoaDogJ9GH0LDRgV/Rh9Cw0YHQsF/Rh9Cw0YHQvtCyJyxcbiAgICAgICAgICAgIGRkOiAn0LTQtdC90Yxf0LTQvdGPX9C00L3QtdC5JyxcbiAgICAgICAgICAgIHd3OiAn0L3QtdC00LXQu9GPX9C90LXQtNC10LvQuF/QvdC10LTQtdC70YwnLFxuICAgICAgICAgICAgTU06ICfQvNC10YHRj9GGX9C80LXRgdGP0YbQsF/QvNC10YHRj9GG0LXQsicsXG4gICAgICAgICAgICB5eTogJ9Cz0L7QtF/Qs9C+0LTQsF/Qu9C10YInLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoa2V5ID09PSAnbScpIHtcbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ9C80LjQvdGD0YLQsCcgOiAn0LzQuNC90YPRgtGDJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyBwbHVyYWwoZm9ybWF0W2tleV0sICtudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgL17Rj9C90LIvaSxcbiAgICAgICAgL17RhNC10LIvaSxcbiAgICAgICAgL17QvNCw0YAvaSxcbiAgICAgICAgL17QsNC/0YAvaSxcbiAgICAgICAgL17QvNCwW9C50Y9dL2ksXG4gICAgICAgIC9e0LjRjtC9L2ksXG4gICAgICAgIC9e0LjRjtC7L2ksXG4gICAgICAgIC9e0LDQstCzL2ksXG4gICAgICAgIC9e0YHQtdC9L2ksXG4gICAgICAgIC9e0L7QutGCL2ksXG4gICAgICAgIC9e0L3QvtGPL2ksXG4gICAgICAgIC9e0LTQtdC6L2ksXG4gICAgXTtcblxuICAgIC8vIGh0dHA6Ly9uZXcuZ3JhbW90YS5ydS9zcHJhdmthL3J1bGVzLzEzOS1wcm9wIDogwqcgMTAzXG4gICAgLy8g0KHQvtC60YDQsNGJ0LXQvdC40Y8g0LzQtdGB0Y/RhtC10LI6IGh0dHA6Ly9uZXcuZ3JhbW90YS5ydS9zcHJhdmthL2J1cm8vc2VhcmNoLWFuc3dlcj9zPTI0MjYzN1xuICAgIC8vIENMRFIgZGF0YTogICAgICAgICAgaHR0cDovL3d3dy51bmljb2RlLm9yZy9jbGRyL2NoYXJ0cy8yOC9zdW1tYXJ5L3J1Lmh0bWwjMTc1M1xuICAgIHZhciBydSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3J1Jywge1xuICAgICAgICBtb250aHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogJ9GP0L3QstCw0YDRj1/RhNC10LLRgNCw0LvRj1/QvNCw0YDRgtCwX9Cw0L/RgNC10LvRj1/QvNCw0Y9f0LjRjtC90Y9f0LjRjtC70Y9f0LDQstCz0YPRgdGC0LBf0YHQtdC90YLRj9Cx0YDRj1/QvtC60YLRj9Cx0YDRj1/QvdC+0Y/QsdGA0Y9f0LTQtdC60LDQsdGA0Y8nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6ICfRj9C90LLQsNGA0Yxf0YTQtdCy0YDQsNC70Yxf0LzQsNGA0YJf0LDQv9GA0LXQu9GMX9C80LDQuV/QuNGO0L3RjF/QuNGO0LvRjF/QsNCy0LPRg9GB0YJf0YHQtdC90YLRj9Cx0YDRjF/QvtC60YLRj9Cx0YDRjF/QvdC+0Y/QsdGA0Yxf0LTQtdC60LDQsdGA0YwnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQ6IHtcbiAgICAgICAgICAgIC8vINC/0L4gQ0xEUiDQuNC80LXQvdC90L4gXCLQuNGO0LsuXCIg0LggXCLQuNGO0L0uXCIsINC90L4g0LrQsNC60L7QuSDRgdC80YvRgdC7INC80LXQvdGP0YLRjCDQsdGD0LrQstGDINC90LAg0YLQvtGH0LrRgz9cbiAgICAgICAgICAgIGZvcm1hdDogJ9GP0L3Qsi5f0YTQtdCy0YAuX9C80LDRgC5f0LDQv9GALl/QvNCw0Y9f0LjRjtC90Y9f0LjRjtC70Y9f0LDQstCzLl/RgdC10L3Rgi5f0L7QutGCLl/QvdC+0Y/QsS5f0LTQtdC6Licuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTogJ9GP0L3Qsi5f0YTQtdCy0YAuX9C80LDRgNGCX9Cw0L/RgC5f0LzQsNC5X9C40Y7QvdGMX9C40Y7Qu9GMX9Cw0LLQsy5f0YHQtdC90YIuX9C+0LrRgi5f0L3QvtGP0LEuX9C00LXQui4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vla2RheXM6IHtcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6ICfQstC+0YHQutGA0LXRgdC10L3RjNC1X9C/0L7QvdC10LTQtdC70YzQvdC40Lpf0LLRgtC+0YDQvdC40Lpf0YHRgNC10LTQsF/Rh9C10YLQstC10YDQs1/Qv9GP0YLQvdC40YbQsF/RgdGD0LHQsdC+0YLQsCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgZm9ybWF0OiAn0LLQvtGB0LrRgNC10YHQtdC90YzQtV/Qv9C+0L3QtdC00LXQu9GM0L3QuNC6X9Cy0YLQvtGA0L3QuNC6X9GB0YDQtdC00YNf0YfQtdGC0LLQtdGA0LNf0L/Rj9GC0L3QuNGG0YNf0YHRg9Cx0LHQvtGC0YMnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiAvXFxbID9b0JLQsl0gPyg/OtC/0YDQvtGI0LvRg9GOfNGB0LvQtdC00YPRjtGJ0YPRjnzRjdGC0YMpPyA/XSA/ZGRkZC8sXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfQstGBX9C/0L1f0LLRgl/RgdGAX9GH0YJf0L/Rgl/RgdCxJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9Cy0YFf0L/QvV/QstGCX9GB0YBf0YfRgl/Qv9GCX9GB0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgbG9uZ01vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgc2hvcnRNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG5cbiAgICAgICAgLy8g0L/QvtC70L3Ri9C1INC90LDQt9Cy0LDQvdC40Y8g0YEg0L/QsNC00LXQttCw0LzQuCwg0L/QviDRgtGA0Lgg0LHRg9C60LLRiywg0LTQu9GPINC90LXQutC+0YLQvtGA0YvRhSwg0L/QviA0INCx0YPQutCy0YssINGB0L7QutGA0LDRidC10L3QuNGPINGBINGC0L7Rh9C60L7QuSDQuCDQsdC10Lcg0YLQvtGH0LrQuFxuICAgICAgICBtb250aHNSZWdleDogL14o0Y/QvdCy0LDRgFvRjNGPXXzRj9C90LJcXC4/fNGE0LXQstGA0LDQu1vRjNGPXXzRhNC10LLRgD9cXC4/fNC80LDRgNGC0LA/fNC80LDRgFxcLj980LDQv9GA0LXQu1vRjNGPXXzQsNC/0YBcXC4/fNC80LBb0LnRj1180LjRjtC9W9GM0Y9dfNC40Y7QvVxcLj980LjRjtC7W9GM0Y9dfNC40Y7Qu1xcLj980LDQstCz0YPRgdGC0LA/fNCw0LLQs1xcLj980YHQtdC90YLRj9Cx0YBb0YzRj1180YHQtdC90YI/XFwuP3zQvtC60YLRj9Cx0YBb0YzRj1180L7QutGCXFwuP3zQvdC+0Y/QsdGAW9GM0Y9dfNC90L7Rj9CxP1xcLj980LTQtdC60LDQsdGAW9GM0Y9dfNC00LXQulxcLj8pL2ksXG5cbiAgICAgICAgLy8g0LrQvtC/0LjRjyDQv9GA0LXQtNGL0LTRg9GJ0LXQs9C+XG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6IC9eKNGP0L3QstCw0YBb0YzRj1180Y/QvdCyXFwuP3zRhNC10LLRgNCw0Ltb0YzRj1180YTQtdCy0YA/XFwuP3zQvNCw0YDRgtCwP3zQvNCw0YBcXC4/fNCw0L/RgNC10Ltb0YzRj1180LDQv9GAXFwuP3zQvNCwW9C50Y9dfNC40Y7QvVvRjNGPXXzQuNGO0L1cXC4/fNC40Y7Qu1vRjNGPXXzQuNGO0LtcXC4/fNCw0LLQs9GD0YHRgtCwP3zQsNCy0LNcXC4/fNGB0LXQvdGC0Y/QsdGAW9GM0Y9dfNGB0LXQvdGCP1xcLj980L7QutGC0Y/QsdGAW9GM0Y9dfNC+0LrRglxcLj980L3QvtGP0LHRgFvRjNGPXXzQvdC+0Y/QsT9cXC4/fNC00LXQutCw0LHRgFvRjNGPXXzQtNC10LpcXC4/KS9pLFxuXG4gICAgICAgIC8vINC/0L7Qu9C90YvQtSDQvdCw0LfQstCw0L3QuNGPINGBINC/0LDQtNC10LbQsNC80LhcbiAgICAgICAgbW9udGhzU3RyaWN0UmVnZXg6IC9eKNGP0L3QstCw0YBb0Y/RjF180YTQtdCy0YDQsNC7W9GP0YxdfNC80LDRgNGC0LA/fNCw0L/RgNC10Ltb0Y/RjF180LzQsFvRj9C5XXzQuNGO0L1b0Y/RjF180LjRjtC7W9GP0YxdfNCw0LLQs9GD0YHRgtCwP3zRgdC10L3RgtGP0LHRgFvRj9GMXXzQvtC60YLRj9Cx0YBb0Y/RjF180L3QvtGP0LHRgFvRj9GMXXzQtNC10LrQsNCx0YBb0Y/RjF0pL2ksXG5cbiAgICAgICAgLy8g0JLRi9GA0LDQttC10L3QuNC1LCDQutC+0YLQvtGA0L7QtSDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0LXRgiDRgtC+0LvRjNC60L4g0YHQvtC60YDQsNGJ0ZHQvdC90YvQvCDRhNC+0YDQvNCw0LxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDogL14o0Y/QvdCyXFwufNGE0LXQstGAP1xcLnzQvNCw0YBb0YIuXXzQsNC/0YBcXC580LzQsFvRj9C5XXzQuNGO0L1b0YzRjy5dfNC40Y7Qu1vRjNGPLl180LDQstCzXFwufNGB0LXQvdGCP1xcLnzQvtC60YJcXC580L3QvtGP0LE/XFwufNC00LXQulxcLikvaSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVkg0LMuJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZINCzLiwgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkg0LMuLCBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb0KHQtdCz0L7QtNC90Y8sINCyXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9CX0LDQstGC0YDQsCwg0LJdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb0JLRh9C10YDQsCwg0LJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAobm93KSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vdy53ZWVrKCkgIT09IHRoaXMud2VlaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSINGB0LvQtdC00YPRjtGJ0LXQtV0gZGRkZCwgW9CyXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JIg0YHQu9C10LTRg9GO0YnQuNC5XSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQkiDRgdC70LXQtNGD0Y7RidGD0Y5dIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF5KCkgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CS0L5dIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JJdIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAobm93KSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vdy53ZWVrKCkgIT09IHRoaXMud2VlaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSINC/0YDQvtGI0LvQvtC1XSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQkiDQv9GA0L7RiNC70YvQuV0gZGRkZCwgW9CyXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JIg0L/RgNC+0YjQu9GD0Y5dIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF5KCkgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CS0L5dIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JJdIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn0YfQtdGA0LXQtyAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMg0L3QsNC30LDQtCcsXG4gICAgICAgICAgICBzOiAn0L3QtdGB0LrQvtC70YzQutC+INGB0LXQutGD0L3QtCcsXG4gICAgICAgICAgICBzczogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIG06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBtbTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIGg6ICfRh9Cw0YEnLFxuICAgICAgICAgICAgaGg6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBkOiAn0LTQtdC90YwnLFxuICAgICAgICAgICAgZGQ6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICB3OiAn0L3QtdC00LXQu9GPJyxcbiAgICAgICAgICAgIHd3OiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgTTogJ9C80LXRgdGP0YYnLFxuICAgICAgICAgICAgTU06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICB5OiAn0LPQvtC0JyxcbiAgICAgICAgICAgIHl5OiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv0L3QvtGH0Lh80YPRgtGA0LB80LTQvdGPfNCy0LXRh9C10YDQsC9pLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAvXijQtNC90Y980LLQtdGH0LXRgNCwKSQvLnRlc3QoaW5wdXQpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQvdC+0YfQuCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0YPRgtGA0LAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9C00L3Rjyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0LLQtdGH0LXRgNCwJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LSjQuXzQs9C+fNGPKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QuSc7XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdCz0L4nO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3Rjyc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJ1O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFNpbmRoaSBbc2RdXG4vLyEgYXV0aG9yIDogTmFyYWluIFNhZ2FyIDogaHR0cHM6Ly9naXRodWIuY29tL25hcmFpbnNhZ2FyXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzID0gW1xuICAgICAgICAgICAgJ9is2YbZiNix2YonLFxuICAgICAgICAgICAgJ9mB2YrYqNix2YjYsdmKJyxcbiAgICAgICAgICAgICfZhdin2LHahicsXG4gICAgICAgICAgICAn2KfZvtix2YrZhCcsXG4gICAgICAgICAgICAn2YXYptmKJyxcbiAgICAgICAgICAgICfYrNmI2YYnLFxuICAgICAgICAgICAgJ9is2YjZhNin2KHZkCcsXG4gICAgICAgICAgICAn2KLar9iz2b0nLFxuICAgICAgICAgICAgJ9iz2YrZvtm92YXYqNixJyxcbiAgICAgICAgICAgICfYotqq2b3ZiNio2LEnLFxuICAgICAgICAgICAgJ9mG2YjZhdio2LEnLFxuICAgICAgICAgICAgJ9qK2LPZhdio2LEnLFxuICAgICAgICBdLFxuICAgICAgICBkYXlzID0gWyfYotqG2LEnLCAn2LPZiNmF2LEnLCAn2Kfasdin2LHZiCcsICfYp9ix2KjYuScsICfYrtmF2YrYsycsICfYrNmF2LknLCAn2ofZhtqH2LEnXTtcblxuICAgIHZhciBzZCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3NkJywge1xuICAgICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IG1vbnRocyxcbiAgICAgICAgd2Vla2RheXM6IGRheXMsXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6IGRheXMsXG4gICAgICAgIHdlZWtkYXlzTWluOiBkYXlzLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRk2IwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv2LXYqNitfNi02KfZhS8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuICfYtNin2YUnID09PSBpbnB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9i12KjYrSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gJ9i02KfZhSc7XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2oRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2LPagNin2rvZil0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYp9qz2YrZhiDZh9mB2KrZiiDYqtmKXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9qq2KfZhNmH2YddIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW9qv2LLYsdmK2YQg2YfZgdiq2YpdIGRkZGQgW9iq2YpdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg2b7ZiNihJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDYp9qzJyxcbiAgICAgICAgICAgIHM6ICfahtmG2K8g2LPZitqq2YbaiicsXG4gICAgICAgICAgICBzczogJyVkINiz2YraqtmG2oonLFxuICAgICAgICAgICAgbTogJ9mH2qog2YXZhtm9JyxcbiAgICAgICAgICAgIG1tOiAnJWQg2YXZhtm9JyxcbiAgICAgICAgICAgIGg6ICfZh9qqINqq2YTYp9qqJyxcbiAgICAgICAgICAgIGhoOiAnJWQg2qrZhNin2qonLFxuICAgICAgICAgICAgZDogJ9mH2qog2o/ZitmG2YfZhicsXG4gICAgICAgICAgICBkZDogJyVkINqP2YrZhtmH2YYnLFxuICAgICAgICAgICAgTTogJ9mH2qog2YXZh9mK2YbZiCcsXG4gICAgICAgICAgICBNTTogJyVkINmF2YfZitmG2KcnLFxuICAgICAgICAgICAgeTogJ9mH2qog2LPYp9mEJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2LPYp9mEJyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2Q7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTm9ydGhlcm4gU2FtaSBbc2VdXG4vLyEgYXV0aG9ycyA6IELDpXJkIFJvbHN0YWQgSGVucmlrc2VuIDogaHR0cHM6Ly9naXRodWIuY29tL2thcmFtZWxsXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc2UgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzZScsIHtcbiAgICAgICAgbW9udGhzOiAnb8SRxJFhamFnZW3DoW5udV9ndW92dmFtw6FubnVfbmp1a8SNYW3DoW5udV9jdW/Fi29tw6FubnVfbWllc3NlbcOhbm51X2dlYXNzZW3DoW5udV9zdW9pZG5lbcOhbm51X2JvcmdlbcOhbm51X8SNYWvEjWFtw6FubnVfZ29sZ2dvdG3DoW5udV9za8OhYm1hbcOhbm51X2p1b3ZsYW3DoW5udScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdvxJHEkWpfZ3Vvdl9uanVrX2N1b19taWVzX2dlYXNfc3VvaV9ib3JnX8SNYWvEjV9nb2xnX3Nrw6FiX2p1b3YnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAnc290bmFiZWFpdmlfdnVvc3PDoXJnYV9tYcWLxYtlYsOhcmdhX2dhc2thdmFoa2t1X2R1b3Jhc3RhdF9iZWFyamFkYXRfbMOhdnZhcmRhdCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3NvdG5fdnVvc19tYcWLX2dhc2tfZHVvcl9iZWFyX2zDoXYnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnc192X21fZ19kX2JfTCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdNTU1NIEQuIFtiLl0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdNTU1NIEQuIFtiLl0gWVlZWSBbdGkuXSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgTU1NTSBELiBbYi5dIFlZWVkgW3RpLl0gSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tvdG5lIHRpXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2lodHRpbiB0aV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFt0aV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tpa3RlIHRpXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tvdmRkaXRdIGRkZGQgW3RpXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIGdlYcW+ZXMnLFxuICAgICAgICAgICAgcGFzdDogJ21hxYtpdCAlcycsXG4gICAgICAgICAgICBzOiAnbW9hZGRlIHNla3VuZGRhdCcsXG4gICAgICAgICAgICBzczogJyVkIHNla3VuZGRhdCcsXG4gICAgICAgICAgICBtOiAnb2t0YSBtaW51aHRhJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludWh0YXQnLFxuICAgICAgICAgICAgaDogJ29rdGEgZGlpbW11JyxcbiAgICAgICAgICAgIGhoOiAnJWQgZGlpbW11dCcsXG4gICAgICAgICAgICBkOiAnb2t0YSBiZWFpdmknLFxuICAgICAgICAgICAgZGQ6ICclZCBiZWFpdnZpdCcsXG4gICAgICAgICAgICBNOiAnb2t0YSBtw6FubnUnLFxuICAgICAgICAgICAgTU06ICclZCBtw6FudXQnLFxuICAgICAgICAgICAgeTogJ29rdGEgamFoa2knLFxuICAgICAgICAgICAgeXk6ICclZCBqYWdpdCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2U7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU2luaGFsZXNlIFtzaV1cbi8vISBhdXRob3IgOiBTYW1wYXRoIFNpdGluYW1hbHV3YSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zYW1wYXRoc3Jpc1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgLypqc2hpbnQgLVcxMDAqL1xuICAgIHZhciBzaSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3NpJywge1xuICAgICAgICBtb250aHM6ICfgtqLgtrHgt4Dgt4/gtrvgt5Jf4La04LeZ4La24La74LeA4LeP4La74LeSX+C2uOC3j+C2u+C3iuC2reC3lF/gtoXgtrTgt4rigI3gtrvgt5rgtr3gt4pf4La44LeQ4La64LeSX+C2ouC3luC2seC3kl/gtqLgt5bgtr3gt5Jf4LaF4Lac4Led4LeD4LeK4Lat4LeUX+C3g+C3kOC2tOC3iuC2reC3kOC2uOC3iuC2tuC2u+C3il/gtpTgtprgt4rgtq3gt53gtrbgtrvgt4pf4Lax4Lec4LeA4LeQ4La44LeK4La24La74LeKX+C2r+C3meC3g+C3kOC2uOC3iuC2tuC2u+C3iicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfgtqLgtrFf4La04LeZ4La2X+C2uOC3j+C2u+C3il/gtoXgtrTgt4pf4La44LeQ4La64LeSX+C2ouC3luC2seC3kl/gtqLgt5bgtr3gt5Jf4LaF4Lac4LedX+C3g+C3kOC2tOC3il/gtpTgtprgt4pf4Lax4Lec4LeA4LeQX+C2r+C3meC3g+C3kCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfgtongtrvgt5Lgtq/gt49f4LeD4Laz4LeU4Lav4LePX+C2heC2n+C3hOC2u+C3lOC3gOC3j+C2r+C3j1/gtrbgtq/gt4/gtq/gt49f4La24LeK4oCN4La74LeE4LeD4LeK4La04Lat4LeS4Lax4LeK4Lav4LePX+C3g+C3kuC2muC3lOC2u+C3j+C2r+C3j1/gt4Pgt5ngtrHgt4Pgt5Tgtrvgt4/gtq/gt48nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgtongtrvgt5Jf4LeD4Laz4LeUX+C2heC2n1/gtrbgtq/gt49f4La24LeK4oCN4La74LeEX+C3g+C3kuC2muC3lF/gt4Pgt5ngtrEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4LaJX+C3g1/gtoVf4La2X+C2tuC3iuKAjeC2u1/gt4Pgt5Jf4LeD4LeZJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ2EgaDptbScsXG4gICAgICAgICAgICBMVFM6ICdhIGg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVkvTU0vREQnLFxuICAgICAgICAgICAgTEw6ICdZWVlZIE1NTU0gRCcsXG4gICAgICAgICAgICBMTEw6ICdZWVlZIE1NTU0gRCwgYSBoOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdZWVlZIE1NTU0gRCBb4LeA4LeQ4Lax4LeSXSBkZGRkLCBhIGg6bW06c3MnLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgtoXgtq9dIExUW+C2p10nLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgt4Tgt5ngtqddIExUW+C2p10nLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIExUW+C2p10nLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgtorgtrrgt5pdIExUW+C2p10nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4La04LeD4LeU4Lac4LeS4La6XSBkZGRkIExUW+C2p10nLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclc+C2muC3kuC2seC3iicsXG4gICAgICAgICAgICBwYXN0OiAnJXPgtprgtqcg4La04LeZ4La7JyxcbiAgICAgICAgICAgIHM6ICfgtq3gtq3gt4rgtrTgtrsg4Laa4LeS4LeE4LeS4La04La6JyxcbiAgICAgICAgICAgIHNzOiAn4Lat4Lat4LeK4La04La7ICVkJyxcbiAgICAgICAgICAgIG06ICfgtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5Tgt4AnLFxuICAgICAgICAgICAgbW06ICfgtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5QgJWQnLFxuICAgICAgICAgICAgaDogJ+C2tOC3kOC2uicsXG4gICAgICAgICAgICBoaDogJ+C2tOC3kOC2uiAlZCcsXG4gICAgICAgICAgICBkOiAn4Lav4LeS4Lax4La6JyxcbiAgICAgICAgICAgIGRkOiAn4Lav4LeS4LaxICVkJyxcbiAgICAgICAgICAgIE06ICfgtrjgt4/gt4PgtronLFxuICAgICAgICAgICAgTU06ICfgtrjgt4/gt4MgJWQnLFxuICAgICAgICAgICAgeTogJ+C3gOC3g+C2uycsXG4gICAgICAgICAgICB5eTogJ+C3gOC3g+C2uyAlZCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSDgt4Dgt5DgtrHgt5IvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyDgt4Dgt5DgtrHgt5InO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4La04LeZ4La7IOC3gOC2u+C3lHzgtrTgt4Pgt4og4LeA4La74LeUfOC2tOC3mS7gt4B84La0LuC3gC4vLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCA9PT0gJ+C2tC7gt4AuJyB8fCBpbnB1dCA9PT0gJ+C2tOC3g+C3iiDgt4Dgtrvgt5QnO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91cnMgPiAxMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ+C2tC7gt4AuJyA6ICfgtrTgt4Pgt4og4LeA4La74LeUJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAn4La04LeZLuC3gC4nIDogJ+C2tOC3meC2uyDgt4Dgtrvgt5QnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNpO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFNsb3ZhayBbc2tdXG4vLyEgYXV0aG9yIDogTWFydGluIE1pbmthIDogaHR0cHM6Ly9naXRodWIuY29tL2syc1xuLy8hIGJhc2VkIG9uIHdvcmsgb2YgcGV0cmJlbGEgOiBodHRwczovL2dpdGh1Yi5jb20vcGV0cmJlbGFcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHMgPSAnamFudcOhcl9mZWJydcOhcl9tYXJlY19hcHLDrWxfbcOhal9qw7puX2rDumxfYXVndXN0X3NlcHRlbWJlcl9va3TDs2Jlcl9ub3ZlbWJlcl9kZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQgPSAnamFuX2ZlYl9tYXJfYXByX23DoWpfasO6bl9qw7psX2F1Z19zZXBfb2t0X25vdl9kZWMnLnNwbGl0KCdfJyk7XG4gICAgZnVuY3Rpb24gcGx1cmFsKG4pIHtcbiAgICAgICAgcmV0dXJuIG4gPiAxICYmIG4gPCA1O1xuICAgIH1cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzJzogLy8gYSBmZXcgc2Vjb25kcyAvIGluIGEgZmV3IHNlY29uZHMgLyBhIGZldyBzZWNvbmRzIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ3DDoXIgc2Vrw7puZCcgOiAncMOhciBzZWt1bmRhbWknO1xuICAgICAgICAgICAgY2FzZSAnc3MnOiAvLyA5IHNlY29uZHMgLyBpbiA5IHNlY29uZHMgLyA5IHNlY29uZHMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdzZWt1bmR5JyA6ICdzZWvDum5kJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdzZWt1bmRhbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ20nOiAvLyBhIG1pbnV0ZSAvIGluIGEgbWludXRlIC8gYSBtaW51dGUgYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnbWluw7p0YScgOiBpc0Z1dHVyZSA/ICdtaW7DunR1JyA6ICdtaW7DunRvdSc7XG4gICAgICAgICAgICBjYXNlICdtbSc6IC8vIDkgbWludXRlcyAvIGluIDkgbWludXRlcyAvIDkgbWludXRlcyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ21pbsO6dHknIDogJ21pbsO6dCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnbWluw7p0YW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdoJzogLy8gYW4gaG91ciAvIGluIGFuIGhvdXIgLyBhbiBob3VyIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2hvZGluYScgOiBpc0Z1dHVyZSA/ICdob2RpbnUnIDogJ2hvZGlub3UnO1xuICAgICAgICAgICAgY2FzZSAnaGgnOiAvLyA5IGhvdXJzIC8gaW4gOSBob3VycyAvIDkgaG91cnMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdob2RpbnknIDogJ2hvZMOtbicpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnaG9kaW5hbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2QnOiAvLyBhIGRheSAvIGluIGEgZGF5IC8gYSBkYXkgYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZGXFiCcgOiAnZMWIb20nO1xuICAgICAgICAgICAgY2FzZSAnZGQnOiAvLyA5IGRheXMgLyBpbiA5IGRheXMgLyA5IGRheXMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdkbmknIDogJ2Ruw60nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ2TFiGFtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnTSc6IC8vIGEgbW9udGggLyBpbiBhIG1vbnRoIC8gYSBtb250aCBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdtZXNpYWMnIDogJ21lc2lhY29tJztcbiAgICAgICAgICAgIGNhc2UgJ01NJzogLy8gOSBtb250aHMgLyBpbiA5IG1vbnRocyAvIDkgbW9udGhzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnbWVzaWFjZScgOiAnbWVzaWFjb3YnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ21lc2lhY21pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICd5JzogLy8gYSB5ZWFyIC8gaW4gYSB5ZWFyIC8gYSB5ZWFyIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ3JvaycgOiAncm9rb20nO1xuICAgICAgICAgICAgY2FzZSAneXknOiAvLyA5IHllYXJzIC8gaW4gOSB5ZWFycyAvIDkgeWVhcnMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdyb2t5JyA6ICdyb2tvdicpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAncm9rbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzayA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3NrJywge1xuICAgICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IG1vbnRoc1Nob3J0LFxuICAgICAgICB3ZWVrZGF5czogJ25lZGXEvmFfcG9uZGVsb2tfdXRvcm9rX3N0cmVkYV/FoXR2cnRva19waWF0b2tfc29ib3RhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnbmVfcG9fdXRfc3RfxaF0X3BpX3NvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ25lX3BvX3V0X3N0X8WhdF9waV9zbycuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbZG5lcyBvXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW3phanRyYSBvXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2IG5lZGXEvnUgb10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZdIGRkZGQgW29dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdiBzdHJlZHUgb10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2byDFoXR2cnRvayBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3YgcGlhdG9rIG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdiBzb2JvdHUgb10gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW3bEjWVyYSBvXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bMO6IG5lZGXEvnUgb10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsw71dIGRkZGQgW29dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWzDuiBzdHJlZHUgb10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsw71dIGRkZGQgW29dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWzDuiBzb2JvdHUgb10gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3phICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdwcmVkICVzJyxcbiAgICAgICAgICAgIHM6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeXk6IHRyYW5zbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzaztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTbG92ZW5pYW4gW3NsXVxuLy8hIGF1dGhvciA6IFJvYmVydCBTZWRvdsWhZWsgOiBodHRwczovL2dpdGh1Yi5jb20vc2Vkb3ZzZWtcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZVxuICAgICAgICAgICAgICAgICAgICA/ICduZWthaiBzZWt1bmQnXG4gICAgICAgICAgICAgICAgICAgIDogJ25la2FqIHNla3VuZGFtaSc7XG4gICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCA/ICdzZWt1bmRvJyA6ICdzZWt1bmRpJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdzZWt1bmRpJyA6ICdzZWt1bmRhaCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCA1KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ3Nla3VuZGUnIDogJ3Nla3VuZGFoJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3Nla3VuZCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdlbmEgbWludXRhJyA6ICdlbm8gbWludXRvJztcbiAgICAgICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4ID8gJ21pbnV0YScgOiAnbWludXRvJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdtaW51dGknIDogJ21pbnV0YW1hJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA8IDUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWludXRlJyA6ICdtaW51dGFtaSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWludXQnIDogJ21pbnV0YW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2VuYSB1cmEnIDogJ2VubyB1cm8nO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggPyAndXJhJyA6ICd1cm8nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ3VyaScgOiAndXJhbWEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyIDwgNSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICd1cmUnIDogJ3VyYW1pJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICd1cicgOiAndXJhbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZW4gZGFuJyA6ICdlbmltIGRuZW0nO1xuICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZGFuJyA6ICdkbmVtJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdkbmknIDogJ2RuZXZvbWEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2RuaScgOiAnZG5ldmknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZW4gbWVzZWMnIDogJ2VuaW0gbWVzZWNlbSc7XG4gICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdtZXNlYycgOiAnbWVzZWNlbSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWVzZWNhJyA6ICdtZXNlY2VtYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCA1KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ21lc2VjZScgOiAnbWVzZWNpJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdtZXNlY2V2JyA6ICdtZXNlY2knO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZW5vIGxldG8nIDogJ2VuaW0gbGV0b20nO1xuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbGV0bycgOiAnbGV0b20nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2xldGknIDogJ2xldG9tYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCA1KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2xldGEnIDogJ2xldGknO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2xldCcgOiAnbGV0aSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2wgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzbCcsIHtcbiAgICAgICAgbW9udGhzOiAnamFudWFyX2ZlYnJ1YXJfbWFyZWNfYXByaWxfbWFqX2p1bmlqX2p1bGlqX2F2Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdqYW4uX2ZlYi5fbWFyLl9hcHIuX21hai5fanVuLl9qdWwuX2F2Zy5fc2VwLl9va3QuX25vdi5fZGVjLicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICduZWRlbGphX3BvbmVkZWxqZWtfdG9yZWtfc3JlZGFfxI1ldHJ0ZWtfcGV0ZWtfc29ib3RhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnbmVkLl9wb24uX3Rvci5fc3JlLl/EjWV0Ll9wZXQuX3NvYi4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnbmVfcG9fdG9fc3JfxI1lX3BlX3NvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuIE1NLiBZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2RhbmVzIG9iXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2p1dHJpIG9iXSBMVCcsXG5cbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZdIFtuZWRlbGpvXSBbb2JdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdl0gW3NyZWRvXSBbb2JdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdl0gW3NvYm90b10gW29iXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZdIGRkZGQgW29iXSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbdsSNZXJhaiBvYl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJlasWhbmpvXSBbbmVkZWxqb10gW29iXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ByZWrFoW5qb10gW3NyZWRvXSBbb2JdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJlasWhbmpvXSBbc29ib3RvXSBbb2JdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJlasWhbmppXSBkZGRkIFtvYl0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ8SNZXogJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3ByZWQgJXMnLFxuICAgICAgICAgICAgczogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHNzOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG1tOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGRkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHl5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNsO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEFsYmFuaWFuIFtzcV1cbi8vISBhdXRob3IgOiBGbGFrw6tyaW0gSXNtYW5pIDogaHR0cHM6Ly9naXRodWIuY29tL2ZsYWtlcmltaVxuLy8hIGF1dGhvciA6IE1lbmVsaW9uIEVsZW5zw7psZSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9PaXJlXG4vLyEgYXV0aG9yIDogT2VyZCBDdWthbGxhIDogaHR0cHM6Ly9naXRodWIuY29tL29lcmRcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzcSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3NxJywge1xuICAgICAgICBtb250aHM6ICdKYW5hcl9TaGt1cnRfTWFyc19QcmlsbF9NYWpfUWVyc2hvcl9Lb3JyaWtfR3VzaHRfU2h0YXRvcl9UZXRvcl9Ow6tudG9yX0RoamV0b3InLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX1Noa19NYXJfUHJpX01hal9RZXJfS29yX0d1c19TaHRfVGV0X07Dq25fRGhqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ0UgRGllbF9FIEjDq27Dq19FIE1hcnTDq19FIE3Dq3JrdXLDq19FIEVuanRlX0UgUHJlbXRlX0UgU2h0dW7Dqycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0RpZV9Iw6tuX01hcl9Nw6tyX0Vual9QcmVfU2h0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ0RfSF9NYV9Nw6tfRV9QX1NoJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9QRHxNRC8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0LmNoYXJBdCgwKSA9PT0gJ00nO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91cnMgPCAxMiA/ICdQRCcgOiAnTUQnO1xuICAgICAgICB9LFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW1NvdCBuw6tdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbTmVzw6tyIG7Dq10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtuw6tdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbRGplIG7Dq10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtlIGthbHVhciBuw6tdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnbsOrICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBtw6sgcGFyw6snLFxuICAgICAgICAgICAgczogJ2Rpc2Egc2Vrb25kYScsXG4gICAgICAgICAgICBzczogJyVkIHNla29uZGEnLFxuICAgICAgICAgICAgbTogJ25qw6sgbWludXTDqycsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0YScsXG4gICAgICAgICAgICBoOiAnbmrDqyBvcsOrJyxcbiAgICAgICAgICAgIGhoOiAnJWQgb3LDqycsXG4gICAgICAgICAgICBkOiAnbmrDqyBkaXTDqycsXG4gICAgICAgICAgICBkZDogJyVkIGRpdMOrJyxcbiAgICAgICAgICAgIE06ICduasOrIG11YWonLFxuICAgICAgICAgICAgTU06ICclZCBtdWFqJyxcbiAgICAgICAgICAgIHk6ICduasOrIHZpdCcsXG4gICAgICAgICAgICB5eTogJyVkIHZpdGUnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNxO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFNlcmJpYW4gQ3lyaWxsaWMgW3NyLWN5cmxdXG4vLyEgYXV0aG9yIDogTWlsYW4gSmFuYcSNa292acSHPG1pbGFuamFuYWNrb3ZpY0BnbWFpbC5jb20+IDogaHR0cHM6Ly9naXRodWIuY29tL21pbGFuLWpcbi8vISBhdXRob3IgOiBTdGVmYW4gQ3JuamFrb3ZpxIcgPHN0ZWZhbkBob3RtYWlsLnJzPiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jcm5qYWtvdmljXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdHJhbnNsYXRvciA9IHtcbiAgICAgICAgd29yZHM6IHtcbiAgICAgICAgICAgIC8vRGlmZmVyZW50IGdyYW1tYXRpY2FsIGNhc2VzXG4gICAgICAgICAgICBzczogWyfRgdC10LrRg9C90LTQsCcsICfRgdC10LrRg9C90LTQtScsICfRgdC10LrRg9C90LTQuCddLFxuICAgICAgICAgICAgbTogWyfRmNC10LTQsNC9INC80LjQvdGD0YInLCAn0ZjQtdC00L3QtSDQvNC40L3Rg9GC0LUnXSxcbiAgICAgICAgICAgIG1tOiBbJ9C80LjQvdGD0YInLCAn0LzQuNC90YPRgtC1JywgJ9C80LjQvdGD0YLQsCddLFxuICAgICAgICAgICAgaDogWyfRmNC10LTQsNC9INGB0LDRgicsICfRmNC10LTQvdC+0LMg0YHQsNGC0LAnXSxcbiAgICAgICAgICAgIGhoOiBbJ9GB0LDRgicsICfRgdCw0YLQsCcsICfRgdCw0YLQuCddLFxuICAgICAgICAgICAgZGQ6IFsn0LTQsNC9JywgJ9C00LDQvdCwJywgJ9C00LDQvdCwJ10sXG4gICAgICAgICAgICBNTTogWyfQvNC10YHQtdGGJywgJ9C80LXRgdC10YbQsCcsICfQvNC10YHQtdGG0LgnXSxcbiAgICAgICAgICAgIHl5OiBbJ9Cz0L7QtNC40L3QsCcsICfQs9C+0LTQuNC90LUnLCAn0LPQvtC00LjQvdCwJ10sXG4gICAgICAgIH0sXG4gICAgICAgIGNvcnJlY3RHcmFtbWF0aWNhbENhc2U6IGZ1bmN0aW9uIChudW1iZXIsIHdvcmRLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgPT09IDFcbiAgICAgICAgICAgICAgICA/IHdvcmRLZXlbMF1cbiAgICAgICAgICAgICAgICA6IG51bWJlciA+PSAyICYmIG51bWJlciA8PSA0XG4gICAgICAgICAgICAgICAgPyB3b3JkS2V5WzFdXG4gICAgICAgICAgICAgICAgOiB3b3JkS2V5WzJdO1xuICAgICAgICB9LFxuICAgICAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uIChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICAgICAgdmFyIHdvcmRLZXkgPSB0cmFuc2xhdG9yLndvcmRzW2tleV07XG4gICAgICAgICAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gd29yZEtleVswXSA6IHdvcmRLZXlbMV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIG51bWJlciArXG4gICAgICAgICAgICAgICAgICAgICcgJyArXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0b3IuY29ycmVjdEdyYW1tYXRpY2FsQ2FzZShudW1iZXIsIHdvcmRLZXkpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgdmFyIHNyQ3lybCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3NyLWN5cmwnLCB7XG4gICAgICAgIG1vbnRoczogJ9GY0LDQvdGD0LDRgF/RhNC10LHRgNGD0LDRgF/QvNCw0YDRgl/QsNC/0YDQuNC7X9C80LDRmF/RmNGD0L1f0ZjRg9C7X9Cw0LLQs9GD0YHRgl/RgdC10L/RgtC10LzQsdCw0YBf0L7QutGC0L7QsdCw0YBf0L3QvtCy0LXQvNCx0LDRgF/QtNC10YbQtdC80LHQsNGAJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ9GY0LDQvS5f0YTQtdCxLl/QvNCw0YAuX9Cw0L/RgC5f0LzQsNGYX9GY0YPQvV/RmNGD0Ltf0LDQstCzLl/RgdC10L8uX9C+0LrRgi5f0L3QvtCyLl/QtNC10YYuJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ9C90LXQtNC10ZnQsF/Qv9C+0L3QtdC00LXRmdCw0Lpf0YPRgtC+0YDQsNC6X9GB0YDQtdC00LBf0YfQtdGC0LLRgNGC0LDQul/Qv9C10YLQsNC6X9GB0YPQsdC+0YLQsCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9C90LXQtC5f0L/QvtC9Ll/Rg9GC0L4uX9GB0YDQtS5f0YfQtdGCLl/Qv9C10YIuX9GB0YPQsS4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn0L3QtV/Qv9C+X9GD0YJf0YHRgF/Rh9C1X9C/0LVf0YHRgycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0QuIE0uIFlZWVkuJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZLicsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkuIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWS4gSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9C00LDQvdCw0YEg0YNdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb0YHRg9GC0YDQsCDRg10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0YNdIFvQvdC10LTQtdGZ0YNdIFvRg10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vRg10gW9GB0YDQtdC00YNdIFvRg10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vRg10gW9GB0YPQsdC+0YLRg10gW9GDXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9GDXSBkZGRkIFvRg10gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9GY0YPRh9C1INGDXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBsYXN0V2Vla0RheXMgPSBbXG4gICAgICAgICAgICAgICAgICAgICdb0L/RgNC+0YjQu9C1XSBb0L3QtdC00LXRmdC1XSBb0YNdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1vQv9GA0L7RiNC70L7Qs10gW9C/0L7QvdC10LTQtdGZ0LrQsF0gW9GDXSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdb0L/RgNC+0YjQu9C+0LNdIFvRg9GC0L7RgNC60LBdIFvRg10gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW9C/0YDQvtGI0LvQtV0gW9GB0YDQtdC00LVdIFvRg10gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW9C/0YDQvtGI0LvQvtCzXSBb0YfQtdGC0LLRgNGC0LrQsF0gW9GDXSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdb0L/RgNC+0YjQu9C+0LNdIFvQv9C10YLQutCwXSBb0YNdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1vQv9GA0L7RiNC70LVdIFvRgdGD0LHQvtGC0LVdIFvRg10gTFQnLFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RXZWVrRGF5c1t0aGlzLmRheSgpXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9C30LAgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ9C/0YDQtSAlcycsXG4gICAgICAgICAgICBzOiAn0L3QtdC60L7Qu9C40LrQviDRgdC10LrRg9C90LTQuCcsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogJ9C00LDQvScsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiAn0LzQtdGB0LXRhicsXG4gICAgICAgICAgICBNTTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiAn0LPQvtC00LjQvdGDJyxcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzckN5cmw7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU2VyYmlhbiBbc3JdXG4vLyEgYXV0aG9yIDogTWlsYW4gSmFuYcSNa292acSHPG1pbGFuamFuYWNrb3ZpY0BnbWFpbC5jb20+IDogaHR0cHM6Ly9naXRodWIuY29tL21pbGFuLWpcbi8vISBhdXRob3IgOiBTdGVmYW4gQ3JuamFrb3ZpxIcgPHN0ZWZhbkBob3RtYWlsLnJzPiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jcm5qYWtvdmljXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdHJhbnNsYXRvciA9IHtcbiAgICAgICAgd29yZHM6IHtcbiAgICAgICAgICAgIC8vRGlmZmVyZW50IGdyYW1tYXRpY2FsIGNhc2VzXG4gICAgICAgICAgICBzczogWydzZWt1bmRhJywgJ3Nla3VuZGUnLCAnc2VrdW5kaSddLFxuICAgICAgICAgICAgbTogWydqZWRhbiBtaW51dCcsICdqZWRuZSBtaW51dGUnXSxcbiAgICAgICAgICAgIG1tOiBbJ21pbnV0JywgJ21pbnV0ZScsICdtaW51dGEnXSxcbiAgICAgICAgICAgIGg6IFsnamVkYW4gc2F0JywgJ2plZG5vZyBzYXRhJ10sXG4gICAgICAgICAgICBoaDogWydzYXQnLCAnc2F0YScsICdzYXRpJ10sXG4gICAgICAgICAgICBkZDogWydkYW4nLCAnZGFuYScsICdkYW5hJ10sXG4gICAgICAgICAgICBNTTogWydtZXNlYycsICdtZXNlY2EnLCAnbWVzZWNpJ10sXG4gICAgICAgICAgICB5eTogWydnb2RpbmEnLCAnZ29kaW5lJywgJ2dvZGluYSddLFxuICAgICAgICB9LFxuICAgICAgICBjb3JyZWN0R3JhbW1hdGljYWxDYXNlOiBmdW5jdGlvbiAobnVtYmVyLCB3b3JkS2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyID09PSAxXG4gICAgICAgICAgICAgICAgPyB3b3JkS2V5WzBdXG4gICAgICAgICAgICAgICAgOiBudW1iZXIgPj0gMiAmJiBudW1iZXIgPD0gNFxuICAgICAgICAgICAgICAgID8gd29yZEtleVsxXVxuICAgICAgICAgICAgICAgIDogd29yZEtleVsyXTtcbiAgICAgICAgfSxcbiAgICAgICAgdHJhbnNsYXRlOiBmdW5jdGlvbiAobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgICAgIHZhciB3b3JkS2V5ID0gdHJhbnNsYXRvci53b3Jkc1trZXldO1xuICAgICAgICAgICAgaWYgKGtleS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/IHdvcmRLZXlbMF0gOiB3b3JkS2V5WzFdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICBudW1iZXIgK1xuICAgICAgICAgICAgICAgICAgICAnICcgK1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdG9yLmNvcnJlY3RHcmFtbWF0aWNhbENhc2UobnVtYmVyLCB3b3JkS2V5KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIHZhciBzciA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3NyJywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5fanVsX2F2Z3VzdF9zZXB0ZW1iYXJfb2t0b2Jhcl9ub3ZlbWJhcl9kZWNlbWJhcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdqYW4uX2ZlYi5fbWFyLl9hcHIuX21hal9qdW5fanVsX2F2Zy5fc2VwLl9va3QuX25vdi5fZGVjLicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICduZWRlbGphX3BvbmVkZWxqYWtfdXRvcmFrX3NyZWRhX8SNZXR2cnRha19wZXRha19zdWJvdGEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICduZWQuX3Bvbi5fdXRvLl9zcmUuX8SNZXQuX3BldC5fc3ViLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICduZV9wb191dF9zcl/EjWVfcGVfc3UnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdELiBNLiBZWVlZLicsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWS4nLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZLiBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkuIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tkYW5hcyB1XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW3N1dHJhIHVdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtuZWRlbGp1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3JlZHVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtzdWJvdHVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIGRkZGQgW3VdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogJ1tqdcSNZSB1XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBsYXN0V2Vla0RheXMgPSBbXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsZV0gW25lZGVsamVdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsb2ddIFtwb25lZGVsamthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbG9nXSBbdXRvcmthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbGVdIFtzcmVkZV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW8SNZXR2cnRrYV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW3BldGthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbGVdIFtzdWJvdGVdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGFzdFdlZWtEYXlzW3RoaXMuZGF5KCldO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnemEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3ByZSAlcycsXG4gICAgICAgICAgICBzOiAnbmVrb2xpa28gc2VrdW5kaScsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogJ2RhbicsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiAnbWVzZWMnLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogJ2dvZGludScsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3I7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogc2lTd2F0aSBbc3NdXG4vLyEgYXV0aG9yIDogTmljb2xhaSBEYXZpZXM8bWFpbEBuaWNvbGFpLmlvPiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9uaWNvbGFpZGF2aWVzXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3MgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzcycsIHtcbiAgICAgICAgbW9udGhzOiBcIkJoaW1iaWR2d2FuZV9JbmRsb3ZhbmFfSW5kbG92J2xlbmtodWx1X01hYmFzYV9Jbmtod2VraHdldGlfSW5obGFiYV9LaG9sd2FuZV9JbmdjaV9JbnlvbmlfSW1waGFsYV9Md2V0aV9JbmdvbmdvbmlcIi5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0JoaV9JbmFfSW51X01hYl9JbmtfSW5oX0tob19JZ2NfSW55X0ltcF9Md2VfSWdvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ0xpc29udGZvX1Vtc29tYnVsdWtvX0xlc2liaWxpX0xlc2l0c2F0ZnVfTGVzaW5lX0xlc2lobGFudV9VbWdjaWJlbG8nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdMaXNfVW1iX0xzYl9MZXNfTHNpX0xzaF9VbWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnTGlfVXNfTGJfTHRfTHNfTGhfVWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbTmFtdWhsYSBuZ2FdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbS3VzYXNhIG5nYV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtuZ2FdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSXRvbG8gbmdhXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2xlbGlwaGVsaWxlXSBbbmdhXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ25nYSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnd2VudGVrYSBuZ2EgJXMnLFxuICAgICAgICAgICAgczogJ2VtaXp1endhbmEgbG9tY2FuZScsXG4gICAgICAgICAgICBzczogJyVkIG16dXp3YW5hJyxcbiAgICAgICAgICAgIG06ICd1bXp1enUnLFxuICAgICAgICAgICAgbW06ICclZCBlbWl6dXp1JyxcbiAgICAgICAgICAgIGg6ICdsaWhvcmEnLFxuICAgICAgICAgICAgaGg6ICclZCBlbWFob3JhJyxcbiAgICAgICAgICAgIGQ6ICdsaWxhbmdhJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZW1hbGFuZ2EnLFxuICAgICAgICAgICAgTTogJ2lueWFuZ2EnLFxuICAgICAgICAgICAgTU06ICclZCB0aW55YW5nYScsXG4gICAgICAgICAgICB5OiAndW1ueWFrYScsXG4gICAgICAgICAgICB5eTogJyVkIGltaW55YWthJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL2VrdXNlbml8ZW1pbml8ZW50c2FtYmFtYXxlYnVzdWt1LyxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VrdXNlbmknO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdlbWluaSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VudHNhbWJhbWEnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VidXN1a3UnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICdla3VzZW5pJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ2VtaW5pJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdlbnRzYW1iYW1hJyB8fCBtZXJpZGllbSA9PT0gJ2VidXN1a3UnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS8sXG4gICAgICAgIG9yZGluYWw6ICclZCcsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzcztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTd2VkaXNoIFtzdl1cbi8vISBhdXRob3IgOiBKZW5zIEFsbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS91bG11c1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN2ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc3YnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcmlfZmVicnVhcmlfbWFyc19hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdGlfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFuX2ZlYl9tYXJfYXByX21hal9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnc8O2bmRhZ19tw6VuZGFnX3Rpc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbMO2cmRhZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3PDtm5fbcOlbl90aXNfb25zX3Rvcl9mcmVfbMO2cicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdzw7ZfbcOlX3RpX29uX3RvX2ZyX2zDticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgICAgICAgICBsbGw6ICdEIE1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQgRCBNTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0lkYWddIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbSW1vcmdvbl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tJZ8Olcl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdbUMOlXSBkZGRkIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0ldIGRkZGRbc10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdvbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnZsO2ciAlcyBzZWRhbicsXG4gICAgICAgICAgICBzOiAnbsOlZ3JhIHNla3VuZGVyJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VrdW5kZXInLFxuICAgICAgICAgICAgbTogJ2VuIG1pbnV0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlcicsXG4gICAgICAgICAgICBoOiAnZW4gdGltbWUnLFxuICAgICAgICAgICAgaGg6ICclZCB0aW1tYXInLFxuICAgICAgICAgICAgZDogJ2VuIGRhZycsXG4gICAgICAgICAgICBkZDogJyVkIGRhZ2FyJyxcbiAgICAgICAgICAgIE06ICdlbiBtw6VuYWQnLFxuICAgICAgICAgICAgTU06ICclZCBtw6VuYWRlcicsXG4gICAgICAgICAgICB5OiAnZXR0IMOlcicsXG4gICAgICAgICAgICB5eTogJyVkIMOlcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShcXDplfFxcOmEpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB+figobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnOmUnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJzphJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICc6YSdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAnOmUnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICc6ZSc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3Y7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU3dhaGlsaSBbc3ddXG4vLyEgYXV0aG9yIDogRmFoYWQgS2Fzc2ltIDogaHR0cHM6Ly9naXRodWIuY29tL2ZhZHNlbFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN3ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc3cnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcmlfRmVicnVhcmlfTWFjaGlfQXByaWxpX01laV9KdW5pX0p1bGFpX0Fnb3N0aV9TZXB0ZW1iYV9Pa3RvYmFfTm92ZW1iYV9EZXNlbWJhJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFjX0Fwcl9NZWlfSnVuX0p1bF9BZ29fU2VwX09rdF9Ob3ZfRGVzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ0p1bWFwaWxpX0p1bWF0YXR1X0p1bWFubmVfSnVtYXRhbm9fQWxoYW1pc2lfSWp1bWFhX0p1bWFtb3NpJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnSnBsX0p0YXRfSm5uZV9KdGFuX0FsaF9Jam1fSm1vcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdKMl9KM19KNF9KNV9BbF9Jal9KMScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdoaDptbSBBJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbbGVvIHNhYV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1trZXNobyBzYWFdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW3dpa2kgaWpheW9dIGRkZGQgW3NhYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbamFuYV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbd2lraSBpbGl5b3BpdGFdIGRkZGQgW3NhYXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMgYmFhZGF5ZScsXG4gICAgICAgICAgICBwYXN0OiAndG9rZWEgJXMnLFxuICAgICAgICAgICAgczogJ2hpdmkgcHVuZGUnLFxuICAgICAgICAgICAgc3M6ICdzZWt1bmRlICVkJyxcbiAgICAgICAgICAgIG06ICdkYWtpa2EgbW9qYScsXG4gICAgICAgICAgICBtbTogJ2Rha2lrYSAlZCcsXG4gICAgICAgICAgICBoOiAnc2FhIGxpbW9qYScsXG4gICAgICAgICAgICBoaDogJ21hc2FhICVkJyxcbiAgICAgICAgICAgIGQ6ICdzaWt1IG1vamEnLFxuICAgICAgICAgICAgZGQ6ICdzaWt1ICVkJyxcbiAgICAgICAgICAgIE06ICdtd2V6aSBtbW9qYScsXG4gICAgICAgICAgICBNTTogJ21pZXppICVkJyxcbiAgICAgICAgICAgIHk6ICdtd2FrYSBtbW9qYScsXG4gICAgICAgICAgICB5eTogJ21pYWthICVkJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN3O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRhbWlsIFt0YV1cbi8vISBhdXRob3IgOiBBcmp1bmt1bWFyIEtyaXNobmFtb29ydGh5IDogaHR0cHM6Ly9naXRodWIuY29tL3RrMTIwNDA0XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ+CvpycsXG4gICAgICAgICAgICAyOiAn4K+oJyxcbiAgICAgICAgICAgIDM6ICfgr6knLFxuICAgICAgICAgICAgNDogJ+CvqicsXG4gICAgICAgICAgICA1OiAn4K+rJyxcbiAgICAgICAgICAgIDY6ICfgr6wnLFxuICAgICAgICAgICAgNzogJ+CvrScsXG4gICAgICAgICAgICA4OiAn4K+uJyxcbiAgICAgICAgICAgIDk6ICfgr68nLFxuICAgICAgICAgICAgMDogJ+CvpicsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfgr6cnOiAnMScsXG4gICAgICAgICAgICAn4K+oJzogJzInLFxuICAgICAgICAgICAgJ+CvqSc6ICczJyxcbiAgICAgICAgICAgICfgr6onOiAnNCcsXG4gICAgICAgICAgICAn4K+rJzogJzUnLFxuICAgICAgICAgICAgJ+CvrCc6ICc2JyxcbiAgICAgICAgICAgICfgr60nOiAnNycsXG4gICAgICAgICAgICAn4K+uJzogJzgnLFxuICAgICAgICAgICAgJ+Cvryc6ICc5JyxcbiAgICAgICAgICAgICfgr6YnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICB2YXIgdGEgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0YScsIHtcbiAgICAgICAgbW9udGhzOiAn4K6c4K6p4K614K6w4K6/X+CuquCuv+CuquCvjeCusOCuteCusOCuv1/grq7grr7grrDgr43grprgr41f4K6P4K6q4K+N4K6w4K6y4K+NX+CuruCvh1/grpzgr4Lgrqngr41f4K6c4K+C4K6y4K+IX+CuhuCuleCuuOCvjeCun+CvjV/grprgr4bgrqrgr43grp/gr4bgrq7gr43grqrgrrDgr41f4K6F4K6V4K+N4K6f4K+H4K6+4K6q4K6w4K+NX+CuqOCuteCuruCvjeCuquCusOCvjV/grp/grr/grprgrq7gr43grqrgrrDgr40nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn4K6c4K6p4K614K6w4K6/X+CuquCuv+CuquCvjeCusOCuteCusOCuv1/grq7grr7grrDgr43grprgr41f4K6P4K6q4K+N4K6w4K6y4K+NX+CuruCvh1/grpzgr4Lgrqngr41f4K6c4K+C4K6y4K+IX+CuhuCuleCuuOCvjeCun+CvjV/grprgr4bgrqrgr43grp/gr4bgrq7gr43grqrgrrDgr41f4K6F4K6V4K+N4K6f4K+H4K6+4K6q4K6w4K+NX+CuqOCuteCuruCvjeCuquCusOCvjV/grp/grr/grprgrq7gr43grqrgrrDgr40nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn4K6e4K6+4K6v4K6/4K6x4K+N4K6x4K+B4K6V4K+N4K6V4K6/4K604K6u4K+IX+CupOCuv+CumeCvjeCuleCun+CvjeCuleCuv+CutOCuruCviF/grprgr4bgrrXgr43grrXgrr7grq/gr43grpXgrr/grrTgrq7gr4hf4K6q4K+B4K6k4K6p4K+N4K6V4K6/4K604K6u4K+IX+CuteCuv+Cur+CuvuCutOCuleCvjeCuleCuv+CutOCuruCviF/grrXgr4bgrrPgr43grrPgrr/grpXgr43grpXgrr/grrTgrq7gr4hf4K6a4K6p4K6/4K6V4K+N4K6V4K6/4K604K6u4K+IJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4K6e4K6+4K6v4K6/4K6x4K+BX+CupOCuv+CumeCvjeCuleCus+CvjV/grprgr4bgrrXgr43grrXgrr7grq/gr41f4K6q4K+B4K6k4K6p4K+NX+CuteCuv+Cur+CuvuCutOCuqeCvjV/grrXgr4bgrrPgr43grrPgrr9f4K6a4K6p4K6/Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+CunuCuvl/grqTgrr9f4K6a4K+GX+CuquCvgV/grrXgrr9f4K614K+GX+Cumicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+Cuh+CuqeCvjeCuseCvgV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgrqjgrr7grrPgr4hdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgrqjgr4fgrrHgr43grrHgr4FdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+CuleCun+CuqOCvjeCupCDgrrXgrr7grrDgrq7gr41dIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg4K6H4K6y4K+NJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgrq7gr4Hgrqngr40nLFxuICAgICAgICAgICAgczogJ+CukuCusOCvgSDgrprgrr/grrIg4K614K6/4K6o4K6+4K6f4K6/4K6V4K6z4K+NJyxcbiAgICAgICAgICAgIHNzOiAnJWQg4K614K6/4K6o4K6+4K6f4K6/4K6V4K6z4K+NJyxcbiAgICAgICAgICAgIG06ICfgrpLgrrDgr4Eg4K6o4K6/4K6u4K6/4K6f4K6u4K+NJyxcbiAgICAgICAgICAgIG1tOiAnJWQg4K6o4K6/4K6u4K6/4K6f4K6Z4K+N4K6V4K6z4K+NJyxcbiAgICAgICAgICAgIGg6ICfgrpLgrrDgr4Eg4K6u4K6j4K6/IOCuqOCvh+CusOCuruCvjScsXG4gICAgICAgICAgICBoaDogJyVkIOCuruCuo+CuvyDgrqjgr4fgrrDgrq7gr40nLFxuICAgICAgICAgICAgZDogJ+CukuCusOCvgSDgrqjgrr7grrPgr40nLFxuICAgICAgICAgICAgZGQ6ICclZCDgrqjgrr7grp/gr43grpXgrrPgr40nLFxuICAgICAgICAgICAgTTogJ+CukuCusOCvgSDgrq7grr7grqTgrq7gr40nLFxuICAgICAgICAgICAgTU06ICclZCDgrq7grr7grqTgrpngr43grpXgrrPgr40nLFxuICAgICAgICAgICAgeTogJ+CukuCusOCvgSDgrrXgrrDgr4Hgrp/grq7gr40nLFxuICAgICAgICAgICAgeXk6ICclZCDgrobgrqPgr43grp/gr4HgrpXgrrPgr40nLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3grrXgrqTgr4EvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+CuteCupOCvgSc7XG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgr6fgr6jgr6ngr6rgr6vgr6zgr63gr67gr6/gr6ZdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHJlZmVyIGh0dHA6Ly90YS53aWtpcGVkaWEub3JnL3MvMWVyMVxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4K6v4K6+4K6u4K6u4K+NfOCuteCviOCuleCuseCviHzgrpXgrr7grrLgr4h84K6o4K6j4K+N4K6q4K6V4K6y4K+NfOCujuCuseCvjeCuquCuvuCun+CvgXzgrq7grr7grrLgr4gvLFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcg4K6v4K6+4K6u4K6u4K+NJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyDgrrXgr4jgrpXgrrHgr4gnOyAvLyDgrrXgr4jgrpXgrrHgr4hcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcg4K6V4K6+4K6y4K+IJzsgLy8g4K6V4K6+4K6y4K+IXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnIOCuqOCuo+CvjeCuquCuleCusuCvjSc7IC8vIOCuqOCuo+CvjeCuquCuleCusuCvjVxuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyDgro7grrHgr43grqrgrr7grp/gr4EnOyAvLyDgro7grrHgr43grqrgrr7grp/gr4FcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcg4K6u4K6+4K6y4K+IJzsgLy8g4K6u4K6+4K6y4K+IXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnIOCur+CuvuCuruCuruCvjSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+Cur+CuvuCuruCuruCvjScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDIgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CuteCviOCuleCuseCviCcgfHwgbWVyaWRpZW0gPT09ICfgrpXgrr7grrLgr4gnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4K6o4K6j4K+N4K6q4K6V4K6y4K+NJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDEwID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRhO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRlbHVndSBbdGVdXG4vLyEgYXV0aG9yIDogS3Jpc2huYSBDaGFpdGFueWEgVGhvdGEgOiBodHRwczovL2dpdGh1Yi5jb20va2N0aG90YVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHRlID0gbW9tZW50LmRlZmluZUxvY2FsZSgndGUnLCB7XG4gICAgICAgIG1vbnRoczogJ+CwnOCwqOCwteCwsOCwv1/gsKvgsL/gsKzgsY3gsLDgsLXgsLDgsL9f4LCu4LC+4LCw4LGN4LCa4LC/X+Cwj+CwquCxjeCwsOCwv+CwsuCxjV/gsK7gsYdf4LCc4LGC4LCo4LGNX+CwnOCxgeCwsuCxiF/gsIbgsJfgsLjgsY3gsJ/gsYFf4LC44LGG4LCq4LGN4LCf4LGG4LCC4LCs4LCw4LGNX+CwheCwleCxjeCwn+Cxi+CwrOCwsOCxjV/gsKjgsLXgsILgsKzgsLDgsY1f4LCh4LC/4LC44LGG4LCC4LCs4LCw4LGNJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ+CwnOCwqC5f4LCr4LC/4LCs4LGN4LCwLl/gsK7gsL7gsLDgsY3gsJrgsL9f4LCP4LCq4LGN4LCw4LC/Ll/gsK7gsYdf4LCc4LGC4LCo4LGNX+CwnOCxgeCwsuCxiF/gsIbgsJcuX+CwuOCxhuCwquCxjS5f4LCF4LCV4LGN4LCf4LGLLl/gsKjgsLUuX+CwoeCwv+CwuOCxhi4nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAn4LCG4LCm4LC/4LC14LC+4LCw4LCCX+CwuOCxi+CwruCwteCwvuCwsOCwgl/gsK7gsILgsJfgsLPgsLXgsL7gsLDgsIJf4LCs4LGB4LCn4LC14LC+4LCw4LCCX+Cwl+CxgeCwsOCxgeCwteCwvuCwsOCwgl/gsLbgsYHgsJXgsY3gsLDgsLXgsL7gsLDgsIJf4LC24LCo4LC/4LC14LC+4LCw4LCCJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4LCG4LCm4LC/X+CwuOCxi+Cwrl/gsK7gsILgsJfgsLNf4LCs4LGB4LCnX+Cwl+CxgeCwsOCxgV/gsLbgsYHgsJXgsY3gsLBf4LC24LCo4LC/Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+Cwhl/gsLjgsYtf4LCu4LCCX+CwrOCxgV/gsJfgsYFf4LC24LGBX+Cwticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgsKjgsYfgsKHgsYFdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4LCw4LGH4LCq4LGBXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4LCo4LC/4LCo4LGN4LCoXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgsJfgsKRdIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg4LCy4LGLJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgsJXgsY3gsLDgsL/gsKTgsIInLFxuICAgICAgICAgICAgczogJ+CwleCxiuCwqOCxjeCwqOCwvyDgsJXgsY3gsLfgsKPgsL7gsLLgsYEnLFxuICAgICAgICAgICAgc3M6ICclZCDgsLjgsYbgsJXgsKjgsY3gsLLgsYEnLFxuICAgICAgICAgICAgbTogJ+CwkuCwlSDgsKjgsL/gsK7gsL/gsLfgsIInLFxuICAgICAgICAgICAgbW06ICclZCDgsKjgsL/gsK7gsL/gsLfgsL7gsLLgsYEnLFxuICAgICAgICAgICAgaDogJ+CwkuCwlSDgsJfgsILgsJ8nLFxuICAgICAgICAgICAgaGg6ICclZCDgsJfgsILgsJ/gsLLgsYEnLFxuICAgICAgICAgICAgZDogJ+CwkuCwlSDgsLDgsYvgsJzgsYEnLFxuICAgICAgICAgICAgZGQ6ICclZCDgsLDgsYvgsJzgsYHgsLLgsYEnLFxuICAgICAgICAgICAgTTogJ+CwkuCwlSDgsKjgsYbgsLInLFxuICAgICAgICAgICAgTU06ICclZCDgsKjgsYbgsLLgsLLgsYEnLFxuICAgICAgICAgICAgeTogJ+CwkuCwlSDgsLjgsILgsLXgsKTgsY3gsLjgsLDgsIInLFxuICAgICAgICAgICAgeXk6ICclZCDgsLjgsILgsLXgsKTgsY3gsLjgsLDgsL7gsLLgsYEnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3gsLUvLFxuICAgICAgICBvcmRpbmFsOiAnJWTgsLUnLFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4LCw4LC+4LCk4LGN4LCw4LC/fOCwieCwpuCwr+CwgnzgsK7gsKfgsY3gsK/gsL7gsLngsY3gsKjgsIJ84LC44LC+4LCv4LCC4LCk4LGN4LCw4LCCLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4LCw4LC+4LCk4LGN4LCw4LC/Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4LCJ4LCm4LCv4LCCJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CwruCwp+CxjeCwr+CwvuCwueCxjeCwqOCwgicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4LC44LC+4LCv4LCC4LCk4LGN4LCw4LCCJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CwsOCwvuCwpOCxjeCwsOCwvyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LCJ4LCm4LCv4LCCJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgsK7gsKfgsY3gsK/gsL7gsLngsY3gsKjgsIInO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CwuOCwvuCwr+CwguCwpOCxjeCwsOCwgic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LCw4LC+4LCk4LGN4LCw4LC/JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRlO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRldHVuIERpbGkgKEVhc3QgVGltb3IpIFt0ZXRdXG4vLyEgYXV0aG9yIDogSm9zaHVhIEJyb29rcyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NoYnJvb2tzXG4vLyEgYXV0aG9yIDogT25vcmlvIERlIEouIEFmb25zbyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJvYm9cbi8vISBhdXRob3IgOiBTb25pYSBTaW1vZXMgOiBodHRwczovL2dpdGh1Yi5jb20vc29uaWFzaW1vZXNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB0ZXQgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0ZXQnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbmVpcnVfRmV2ZXJlaXJ1X01hcnN1X0FicmlsX01haXVfSnXDsXVfSnVsbHVfQWd1c3R1X1NldGVtYnJ1X091dHVicnVfTm92ZW1icnVfRGV6ZW1icnUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0Zldl9NYXJfQWJyX01haV9KdW5fSnVsX0Fnb19TZXRfT3V0X05vdl9EZXonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnRG9taW5ndV9TZWd1bmRhX1RlcnNhX0t1YXJ0YV9LaW50YV9TZXN0YV9TYWJhZHUnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdEb21fU2VnX1RlcnNfS3VhX0tpbnRfU2VzdF9TYWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnRG9fU2VnX1RlX0t1X0tpX1Nlc19TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tPaGluIGloYV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tBYmFuIGloYV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtpaGFdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSG9yaXNlaWsgaWhhXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW3NlbWFuYSBrb3R1a10gW2loYV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpaGEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGxpdWJhJyxcbiAgICAgICAgICAgIHM6ICdzZWd1bmR1IGJhbHVuJyxcbiAgICAgICAgICAgIHNzOiAnc2VndW5kdSAlZCcsXG4gICAgICAgICAgICBtOiAnbWludXR1IGlkYScsXG4gICAgICAgICAgICBtbTogJ21pbnV0dSAlZCcsXG4gICAgICAgICAgICBoOiAnb3JhcyBpZGEnLFxuICAgICAgICAgICAgaGg6ICdvcmFzICVkJyxcbiAgICAgICAgICAgIGQ6ICdsb3JvbiBpZGEnLFxuICAgICAgICAgICAgZGQ6ICdsb3JvbiAlZCcsXG4gICAgICAgICAgICBNOiAnZnVsYW4gaWRhJyxcbiAgICAgICAgICAgIE1NOiAnZnVsYW4gJWQnLFxuICAgICAgICAgICAgeTogJ3RpbmFuIGlkYScsXG4gICAgICAgICAgICB5eTogJ3RpbmFuICVkJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0fG5kfHJkfHRoKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICAgICAgfn4oKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3RoJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3JkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAndGgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRldDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBUYWppayBbdGddXG4vLyEgYXV0aG9yIDogT3JpZiBOLiBKci4gOiBodHRwczovL2dpdGh1Yi5jb20vb3JpZi1qclxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN1ZmZpeGVzID0ge1xuICAgICAgICAwOiAnLdGD0LwnLFxuICAgICAgICAxOiAnLdGD0LwnLFxuICAgICAgICAyOiAnLdGO0LwnLFxuICAgICAgICAzOiAnLdGO0LwnLFxuICAgICAgICA0OiAnLdGD0LwnLFxuICAgICAgICA1OiAnLdGD0LwnLFxuICAgICAgICA2OiAnLdGD0LwnLFxuICAgICAgICA3OiAnLdGD0LwnLFxuICAgICAgICA4OiAnLdGD0LwnLFxuICAgICAgICA5OiAnLdGD0LwnLFxuICAgICAgICAxMDogJy3Rg9C8JyxcbiAgICAgICAgMTI6ICct0YPQvCcsXG4gICAgICAgIDEzOiAnLdGD0LwnLFxuICAgICAgICAyMDogJy3Rg9C8JyxcbiAgICAgICAgMzA6ICct0Y7QvCcsXG4gICAgICAgIDQwOiAnLdGD0LwnLFxuICAgICAgICA1MDogJy3Rg9C8JyxcbiAgICAgICAgNjA6ICct0YPQvCcsXG4gICAgICAgIDcwOiAnLdGD0LwnLFxuICAgICAgICA4MDogJy3Rg9C8JyxcbiAgICAgICAgOTA6ICct0YPQvCcsXG4gICAgICAgIDEwMDogJy3Rg9C8JyxcbiAgICB9O1xuXG4gICAgdmFyIHRnID0gbW9tZW50LmRlZmluZUxvY2FsZSgndGcnLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgZm9ybWF0OiAn0Y/QvdCy0LDRgNC4X9GE0LXQstGA0LDQu9C4X9C80LDRgNGC0Lhf0LDQv9GA0LXQu9C4X9C80LDQudC4X9C40Y7QvdC4X9C40Y7Qu9C4X9Cw0LLQs9GD0YHRgtC4X9GB0LXQvdGC0Y/QsdGA0Lhf0L7QutGC0Y/QsdGA0Lhf0L3QvtGP0LHRgNC4X9C00LXQutCw0LHRgNC4Jy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGFuZGFsb25lOiAn0Y/QvdCy0LDRgF/RhNC10LLRgNCw0Ltf0LzQsNGA0YJf0LDQv9GA0LXQu1/QvNCw0Llf0LjRjtC9X9C40Y7Qu1/QsNCy0LPRg9GB0YJf0YHQtdC90YLRj9Cx0YBf0L7QutGC0Y/QsdGAX9C90L7Rj9Cx0YBf0LTQtdC60LDQsdGAJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn0Y/QvdCyX9GE0LXQsl/QvNCw0YBf0LDQv9GAX9C80LDQuV/QuNGO0L1f0LjRjtC7X9Cw0LLQs1/RgdC10L1f0L7QutGCX9C90L7Rj1/QtNC10LonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAn0Y/QutGI0LDQvdCx0LVf0LTRg9GI0LDQvdCx0LVf0YHQtdGI0LDQvdCx0LVf0YfQvtGA0YjQsNC90LHQtV/Qv9Cw0L3St9GI0LDQvdCx0LVf0rfRg9C80YrQsF/RiNCw0L3QsdC1Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn0Y/RiNCxX9C00YjQsV/RgdGI0LFf0YfRiNCxX9C/0YjQsV/St9GD0Lxf0YjQvdCxJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9GP0Yhf0LTRiF/RgdGIX9GH0Yhf0L/RiF/St9C8X9GI0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb0JjQvNGA06/QtyDRgdC+0LDRgtC4XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9Ck0LDRgNC00L4g0YHQvtCw0YLQuF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vQlNC40YDTr9C3INGB0L7QsNGC0LhdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZFvQuF0gW9Kz0LDRhNGC0LDQuCDQvtGP0L3QtNCwINGB0L7QsNGC0LhdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZFvQuF0gW9Kz0LDRhNGC0LDQuCDQs9GD0LfQsNGI0YLQsCDRgdC+0LDRgtC4XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9Cx0LDRitC00LggJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzINC/0LXRiCcsXG4gICAgICAgICAgICBzOiAn0Y/QutGH0LDQvdC0INGB0L7QvdC40Y8nLFxuICAgICAgICAgICAgbTogJ9GP0Log0LTQsNKb0LjSm9CwJyxcbiAgICAgICAgICAgIG1tOiAnJWQg0LTQsNKb0LjSm9CwJyxcbiAgICAgICAgICAgIGg6ICfRj9C6INGB0L7QsNGCJyxcbiAgICAgICAgICAgIGhoOiAnJWQg0YHQvtCw0YInLFxuICAgICAgICAgICAgZDogJ9GP0Log0YDTr9C3JyxcbiAgICAgICAgICAgIGRkOiAnJWQg0YDTr9C3JyxcbiAgICAgICAgICAgIE06ICfRj9C6INC80L7SsycsXG4gICAgICAgICAgICBNTTogJyVkINC80L7SsycsXG4gICAgICAgICAgICB5OiAn0Y/QuiDRgdC+0LsnLFxuICAgICAgICAgICAgeXk6ICclZCDRgdC+0LsnLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv0YjQsNCxfNGB0YPQsdKzfNGA06/Qt3zQsdC10LPQvtKzLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn0YjQsNCxJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn0YHRg9Cx0rMnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn0YDTr9C3Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfQsdC10LPQvtKzJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9GI0LDQsSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0YHRg9Cx0rMnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9GA06/Qtyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxOSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0LHQtdCz0L7Ssyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0YjQsNCxJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LSjRg9C8fNGO0LwpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGEgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBiID0gbnVtYmVyID49IDEwMCA/IDEwMCA6IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHN1ZmZpeGVzW251bWJlcl0gfHwgc3VmZml4ZXNbYV0gfHwgc3VmZml4ZXNbYl0pO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxdGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGc7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVGhhaSBbdGhdXG4vLyEgYXV0aG9yIDogS3JpZHNhZGEgVGhhbmFidWxwb25nIDogaHR0cHM6Ly9naXRodWIuY29tL3Npcm5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB0aCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3RoJywge1xuICAgICAgICBtb250aHM6ICfguKHguIHguKPguLLguITguKFf4LiB4Li44Lih4Lig4Liy4Lie4Lix4LiZ4LiY4LmMX+C4oeC4teC4meC4suC4hOC4oV/guYDguKHguKnguLLguKLguJlf4Lie4Lik4Lip4Lig4Liy4LiE4LihX+C4oeC4tOC4luC4uOC4meC4suC4ouC4mV/guIHguKPguIHguI7guLLguITguKFf4Liq4Li04LiH4Lir4Liy4LiE4LihX+C4geC4seC4meC4ouC4suC4ouC4mV/guJXguLjguKXguLLguITguKFf4Lie4Lik4Lio4LiI4Li04LiB4Liy4Lii4LiZX+C4mOC4seC4meC4p+C4suC4hOC4oScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfguKEu4LiELl/guIEu4LieLl/guKHguLUu4LiELl/guYDguKEu4LiiLl/guJ4u4LiELl/guKHguLQu4LiiLl/guIEu4LiELl/guKou4LiELl/guIEu4LiiLl/guJUu4LiELl/guJ4u4LiiLl/guJgu4LiELicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICfguK3guLLguJfguLTguJXguKLguYxf4LiI4Lix4LiZ4LiX4Lij4LmMX+C4reC4seC4h+C4hOC4suC4o1/guJ7guLjguJhf4Lie4Lik4Lir4Lix4Liq4Lia4LiU4Li1X+C4qOC4uOC4geC4o+C5jF/guYDguKrguLLguKPguYwnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfguK3guLLguJfguLTguJXguKLguYxf4LiI4Lix4LiZ4LiX4Lij4LmMX+C4reC4seC4h+C4hOC4suC4o1/guJ7guLjguJhf4Lie4Lik4Lir4Lix4LiqX+C4qOC4uOC4geC4o+C5jF/guYDguKrguLLguKPguYwnLnNwbGl0KCdfJyksIC8vIHllcywgdGhyZWUgY2hhcmFjdGVycyBkaWZmZXJlbmNlXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4Lit4LiyLl/guIguX+C4rS5f4LieLl/guJ7guKQuX+C4qC5f4LiqLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSDguYDguKfguKXguLIgSDptbScsXG4gICAgICAgICAgICBMTExMOiAn4Lin4Lix4LiZZGRkZOC4l+C4teC5iCBEIE1NTU0gWVlZWSDguYDguKfguKXguLIgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/guIHguYjguK3guJnguYDguJfguLXguYjguKLguId84Lir4Lil4Lix4LiH4LmA4LiX4Li14LmI4Lii4LiHLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgPT09ICfguKvguKXguLHguIfguYDguJfguLXguYjguKLguIcnO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LiB4LmI4Lit4LiZ4LmA4LiX4Li14LmI4Lii4LiHJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfguKvguKXguLHguIfguYDguJfguLXguYjguKLguIcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vguKfguLHguJnguJnguLXguYkg4LmA4Lin4Lil4LiyXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+C4nuC4o+C4uOC5iOC4h+C4meC4teC5iSDguYDguKfguKXguLJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZFvguKvguJnguYnguLIg4LmA4Lin4Lil4LiyXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+C5gOC4oeC4t+C5iOC4reC4p+C4suC4meC4meC4teC5iSDguYDguKfguKXguLJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+C4p+C4seC4mV1kZGRkW+C4l+C4teC5iOC5geC4peC5ieC4pyDguYDguKfguKXguLJdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn4Lit4Li14LiBICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclc+C4l+C4teC5iOC5geC4peC5ieC4pycsXG4gICAgICAgICAgICBzOiAn4LmE4Lih4LmI4LiB4Li14LmI4Lin4Li04LiZ4Liy4LiX4Li1JyxcbiAgICAgICAgICAgIHNzOiAnJWQg4Lin4Li04LiZ4Liy4LiX4Li1JyxcbiAgICAgICAgICAgIG06ICcxIOC4meC4suC4l+C4tScsXG4gICAgICAgICAgICBtbTogJyVkIOC4meC4suC4l+C4tScsXG4gICAgICAgICAgICBoOiAnMSDguIrguLHguYjguKfguYLguKHguIcnLFxuICAgICAgICAgICAgaGg6ICclZCDguIrguLHguYjguKfguYLguKHguIcnLFxuICAgICAgICAgICAgZDogJzEg4Lin4Lix4LiZJyxcbiAgICAgICAgICAgIGRkOiAnJWQg4Lin4Lix4LiZJyxcbiAgICAgICAgICAgIHc6ICcxIOC4quC4seC4m+C4lOC4suC4q+C5jCcsXG4gICAgICAgICAgICB3dzogJyVkIOC4quC4seC4m+C4lOC4suC4q+C5jCcsXG4gICAgICAgICAgICBNOiAnMSDguYDguJTguLfguK3guJknLFxuICAgICAgICAgICAgTU06ICclZCDguYDguJTguLfguK3guJknLFxuICAgICAgICAgICAgeTogJzEg4Lib4Li1JyxcbiAgICAgICAgICAgIHl5OiAnJWQg4Lib4Li1JyxcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBUdXJrbWVuIFt0a11cbi8vISBhdXRob3IgOiBBdGFteXJhdCBBYmR5cmFobWFub3YgOiBodHRwczovL2dpdGh1Yi5jb20vYXRhbXlyYXRhYmR5XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3VmZml4ZXMgPSB7XG4gICAgICAgIDE6IFwiJ2luamlcIixcbiAgICAgICAgNTogXCInaW5qaVwiLFxuICAgICAgICA4OiBcIidpbmppXCIsXG4gICAgICAgIDcwOiBcIidpbmppXCIsXG4gICAgICAgIDgwOiBcIidpbmppXCIsXG4gICAgICAgIDI6IFwiJ25qaVwiLFxuICAgICAgICA3OiBcIiduamlcIixcbiAgICAgICAgMjA6IFwiJ25qaVwiLFxuICAgICAgICA1MDogXCInbmppXCIsXG4gICAgICAgIDM6IFwiJ8O8bmppXCIsXG4gICAgICAgIDQ6IFwiJ8O8bmppXCIsXG4gICAgICAgIDEwMDogXCInw7xuamlcIixcbiAgICAgICAgNjogXCInbmp5XCIsXG4gICAgICAgIDk6IFwiJ3VuanlcIixcbiAgICAgICAgMTA6IFwiJ3VuanlcIixcbiAgICAgICAgMzA6IFwiJ3VuanlcIixcbiAgICAgICAgNjA6IFwiJ3luanlcIixcbiAgICAgICAgOTA6IFwiJ3luanlcIixcbiAgICB9O1xuXG4gICAgdmFyIHRrID0gbW9tZW50LmRlZmluZUxvY2FsZSgndGsnLCB7XG4gICAgICAgIG1vbnRoczogJ8OdYW53YXJfRmV3cmFsX01hcnRfQXByZWxfTWHDvV9Jw711bl9Jw711bF9Bd2d1c3RfU2VudMO9YWJyX09rdMO9YWJyX05vw71hYnJfRGVrYWJyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ8OdYW5fRmV3X01hcl9BcHJfTWHDvV9Jw71uX0nDvWxfQXdnX1Nlbl9Pa3RfTm/DvV9EZWsnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnw51la8WfZW5iZV9EdcWfZW5iZV9TacWfZW5iZV/Dh2FyxZ9lbmJlX1BlbsWfZW5iZV9Bbm5hX8WeZW5iZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ8OdZWtfRHXFn19TacWfX8OHYXJfUGVuX0Fubl/FnmVuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ8Oda19ExZ9fU8WfX8OHcl9Qbl9Bbl/Fnm4nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbYnVnw7xuIHNhZ2F0XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2VydGlyIHNhZ2F0XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1tpbmRpa2ldIGRkZGQgW3NhZ2F0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2TDvMO9bl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbZ2XDp2VuXSBkZGRkIFtzYWdhdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyBzb8WIJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDDtsWIJyxcbiAgICAgICAgICAgIHM6ICdiaXJuw6TDp2Ugc2VrdW50JyxcbiAgICAgICAgICAgIG06ICdiaXIgbWludXQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dCcsXG4gICAgICAgICAgICBoOiAnYmlyIHNhZ2F0JyxcbiAgICAgICAgICAgIGhoOiAnJWQgc2FnYXQnLFxuICAgICAgICAgICAgZDogJ2JpciBnw7xuJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZ8O8bicsXG4gICAgICAgICAgICBNOiAnYmlyIGHDvScsXG4gICAgICAgICAgICBNTTogJyVkIGHDvScsXG4gICAgICAgICAgICB5OiAnYmlyIMO9eWwnLFxuICAgICAgICAgICAgeXk6ICclZCDDvXlsJyxcbiAgICAgICAgfSxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RvJzpcbiAgICAgICAgICAgICAgICBjYXNlICdERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlIGZvciB6ZXJvXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgXCIndW5qeVwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICBiID0gKG51bWJlciAlIDEwMCkgLSBhLFxuICAgICAgICAgICAgICAgICAgICAgICAgYyA9IG51bWJlciA+PSAxMDAgPyAxMDAgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHN1ZmZpeGVzW2FdIHx8IHN1ZmZpeGVzW2JdIHx8IHN1ZmZpeGVzW2NdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRrO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRhZ2Fsb2cgKFBoaWxpcHBpbmVzKSBbdGwtcGhdXG4vLyEgYXV0aG9yIDogRGFuIEhhZ21hbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9oYWdtYW5kYW5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB0bFBoID0gbW9tZW50LmRlZmluZUxvY2FsZSgndGwtcGgnLCB7XG4gICAgICAgIG1vbnRoczogJ0VuZXJvX1BlYnJlcm9fTWFyc29fQWJyaWxfTWF5b19IdW55b19IdWx5b19BZ29zdG9fU2V0eWVtYnJlX09rdHVicmVfTm9ieWVtYnJlX0Rpc3llbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdFbmVfUGViX01hcl9BYnJfTWF5X0h1bl9IdWxfQWdvX1NldF9Pa3RfTm9iX0Rpcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdMaW5nZ29fTHVuZXNfTWFydGVzX01peWVya3VsZXNfSHV3ZWJlc19CaXllcm5lc19TYWJhZG8nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdMaW5fTHVuX01hcl9NaXlfSHV3X0JpeV9TYWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnTGlfTHVfTWFfTWlfSHVfQmlfU2FiJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnTU0vRC9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ01NTU0gRCwgWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgTU1NTSBERCwgWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnTFQgW25nYXlvbmcgYXJhd10nLFxuICAgICAgICAgICAgbmV4dERheTogJ1tCdWthcyBuZ10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdMVCBbc2Egc3VzdW5vZCBuYV0gZGRkZCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnTFQgW2thaGFwb25dJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnTFQgW25vb25nIG5ha2FyYWFuZ10gZGRkZCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3NhIGxvb2IgbmcgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGFuZyBuYWthbGlwYXMnLFxuICAgICAgICAgICAgczogJ2lsYW5nIHNlZ3VuZG8nLFxuICAgICAgICAgICAgc3M6ICclZCBzZWd1bmRvJyxcbiAgICAgICAgICAgIG06ICdpc2FuZyBtaW51dG8nLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dG8nLFxuICAgICAgICAgICAgaDogJ2lzYW5nIG9yYXMnLFxuICAgICAgICAgICAgaGg6ICclZCBvcmFzJyxcbiAgICAgICAgICAgIGQ6ICdpc2FuZyBhcmF3JyxcbiAgICAgICAgICAgIGRkOiAnJWQgYXJhdycsXG4gICAgICAgICAgICBNOiAnaXNhbmcgYnV3YW4nLFxuICAgICAgICAgICAgTU06ICclZCBidXdhbicsXG4gICAgICAgICAgICB5OiAnaXNhbmcgdGFvbicsXG4gICAgICAgICAgICB5eTogJyVkIHRhb24nLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0vLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGxQaDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBLbGluZ29uIFt0bGhdXG4vLyEgYXV0aG9yIDogRG9taW5pa2EgS3J1ayA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbWFyYW50aHJvc2VcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBudW1iZXJzTm91bnMgPSAncGFnaF93YeKAmV9jaGHigJlfd2VqX2xvU192YWdoX2phdl9Tb2NoX2Nob3JnaF9IdXQnLnNwbGl0KCdfJyk7XG5cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGVGdXR1cmUob3V0cHV0KSB7XG4gICAgICAgIHZhciB0aW1lID0gb3V0cHV0O1xuICAgICAgICB0aW1lID1cbiAgICAgICAgICAgIG91dHB1dC5pbmRleE9mKCdqYWonKSAhPT0gLTFcbiAgICAgICAgICAgICAgICA/IHRpbWUuc2xpY2UoMCwgLTMpICsgJ2xlUydcbiAgICAgICAgICAgICAgICA6IG91dHB1dC5pbmRleE9mKCdqYXInKSAhPT0gLTFcbiAgICAgICAgICAgICAgICA/IHRpbWUuc2xpY2UoMCwgLTMpICsgJ3dhUSdcbiAgICAgICAgICAgICAgICA6IG91dHB1dC5pbmRleE9mKCdESVMnKSAhPT0gLTFcbiAgICAgICAgICAgICAgICA/IHRpbWUuc2xpY2UoMCwgLTMpICsgJ25lbSdcbiAgICAgICAgICAgICAgICA6IHRpbWUgKyAnIHBJcSc7XG4gICAgICAgIHJldHVybiB0aW1lO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZVBhc3Qob3V0cHV0KSB7XG4gICAgICAgIHZhciB0aW1lID0gb3V0cHV0O1xuICAgICAgICB0aW1lID1cbiAgICAgICAgICAgIG91dHB1dC5pbmRleE9mKCdqYWonKSAhPT0gLTFcbiAgICAgICAgICAgICAgICA/IHRpbWUuc2xpY2UoMCwgLTMpICsgJ0h14oCZJ1xuICAgICAgICAgICAgICAgIDogb3V0cHV0LmluZGV4T2YoJ2phcicpICE9PSAtMVxuICAgICAgICAgICAgICAgID8gdGltZS5zbGljZSgwLCAtMykgKyAnd2VuJ1xuICAgICAgICAgICAgICAgIDogb3V0cHV0LmluZGV4T2YoJ0RJUycpICE9PSAtMVxuICAgICAgICAgICAgICAgID8gdGltZS5zbGljZSgwLCAtMykgKyAnYmVuJ1xuICAgICAgICAgICAgICAgIDogdGltZSArICcgcmV0JztcbiAgICAgICAgcmV0dXJuIHRpbWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgbnVtYmVyTm91biA9IG51bWJlckFzTm91bihudW1iZXIpO1xuICAgICAgICBzd2l0Y2ggKHN0cmluZykge1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJOb3VuICsgJyBsdXAnO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJOb3VuICsgJyB0dXAnO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJOb3VuICsgJyByZXAnO1xuICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJOb3VuICsgJyBqYWonO1xuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJOb3VuICsgJyBqYXInO1xuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJOb3VuICsgJyBESVMnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbnVtYmVyQXNOb3VuKG51bWJlcikge1xuICAgICAgICB2YXIgaHVuZHJlZCA9IE1hdGguZmxvb3IoKG51bWJlciAlIDEwMDApIC8gMTAwKSxcbiAgICAgICAgICAgIHRlbiA9IE1hdGguZmxvb3IoKG51bWJlciAlIDEwMCkgLyAxMCksXG4gICAgICAgICAgICBvbmUgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgIHdvcmQgPSAnJztcbiAgICAgICAgaWYgKGh1bmRyZWQgPiAwKSB7XG4gICAgICAgICAgICB3b3JkICs9IG51bWJlcnNOb3Vuc1todW5kcmVkXSArICd2YXRsaCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRlbiA+IDApIHtcbiAgICAgICAgICAgIHdvcmQgKz0gKHdvcmQgIT09ICcnID8gJyAnIDogJycpICsgbnVtYmVyc05vdW5zW3Rlbl0gKyAnbWFIJztcbiAgICAgICAgfVxuICAgICAgICBpZiAob25lID4gMCkge1xuICAgICAgICAgICAgd29yZCArPSAod29yZCAhPT0gJycgPyAnICcgOiAnJykgKyBudW1iZXJzTm91bnNbb25lXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd29yZCA9PT0gJycgPyAncGFnaCcgOiB3b3JkO1xuICAgIH1cblxuICAgIHZhciB0bGggPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0bGgnLCB7XG4gICAgICAgIG1vbnRoczogJ3RlcmHigJkgamFyIHdh4oCZX3RlcmHigJkgamFyIGNoYeKAmV90ZXJh4oCZIGphciB3ZWpfdGVyYeKAmSBqYXIgbG9TX3RlcmHigJkgamFyIHZhZ2hfdGVyYeKAmSBqYXIgamF2X3RlcmHigJkgamFyIFNvY2hfdGVyYeKAmSBqYXIgY2hvcmdoX3RlcmHigJkgamFyIEh1dF90ZXJh4oCZIGphciB3YeKAmW1hSF90ZXJh4oCZIGphciB3YeKAmW1hSCB3YeKAmV90ZXJh4oCZIGphciB3YeKAmW1hSCBjaGHigJknLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFyIHdh4oCZX2phciBjaGHigJlfamFyIHdlal9qYXIgbG9TX2phciB2YWdoX2phciBqYXZfamFyIFNvY2hfamFyIGNob3JnaF9qYXIgSHV0X2phciB3YeKAmW1hSF9qYXIgd2HigJltYUggd2HigJlfamFyIHdh4oCZbWFIIGNoYeKAmScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdsb2ptSXRqYWpfRGFTamFqX3Bvdmphal9naEl0bGhqYWpfbG9naGphal9idXFqYWpfZ2hJbmphaicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2xvam1JdGphal9EYVNqYWpfcG92amFqX2doSXRsaGphal9sb2doamFqX2J1cWphal9naEluamFqJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2xvam1JdGphal9EYVNqYWpfcG92amFqX2doSXRsaGphal9sb2doamFqX2J1cWphal9naEluamFqJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0RhSGphal0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1t3YeKAmWxlU10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdMTEwnLFxuICAgICAgICAgICAgbGFzdERheTogJ1t3YeKAmUh14oCZXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ0xMTCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogdHJhbnNsYXRlRnV0dXJlLFxuICAgICAgICAgICAgcGFzdDogdHJhbnNsYXRlUGFzdCxcbiAgICAgICAgICAgIHM6ICdwdVMgbHVwJyxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiAnd2HigJkgdHVwJyxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiAnd2HigJkgcmVwJyxcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiAnd2HigJkgamFqJyxcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiAnd2HigJkgamFyJyxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiAnd2HigJkgRElTJyxcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGxoO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFR1cmtpc2ggW3RyXVxuLy8hIGF1dGhvcnMgOiBFcmhhbiBHdW5kb2dhbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9lcmhhbmd1bmRvZ2FuLFxuLy8hICAgICAgICAgICBCdXJhayBZacSfaXQgS2F5YTogaHR0cHM6Ly9naXRodWIuY29tL0JZS1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN1ZmZpeGVzID0ge1xuICAgICAgICAxOiBcIidpbmNpXCIsXG4gICAgICAgIDU6IFwiJ2luY2lcIixcbiAgICAgICAgODogXCInaW5jaVwiLFxuICAgICAgICA3MDogXCInaW5jaVwiLFxuICAgICAgICA4MDogXCInaW5jaVwiLFxuICAgICAgICAyOiBcIiduY2lcIixcbiAgICAgICAgNzogXCInbmNpXCIsXG4gICAgICAgIDIwOiBcIiduY2lcIixcbiAgICAgICAgNTA6IFwiJ25jaVwiLFxuICAgICAgICAzOiBcIifDvG5jw7xcIixcbiAgICAgICAgNDogXCInw7xuY8O8XCIsXG4gICAgICAgIDEwMDogXCInw7xuY8O8XCIsXG4gICAgICAgIDY6IFwiJ25jxLFcIixcbiAgICAgICAgOTogXCIndW5jdVwiLFxuICAgICAgICAxMDogXCIndW5jdVwiLFxuICAgICAgICAzMDogXCIndW5jdVwiLFxuICAgICAgICA2MDogXCInxLFuY8SxXCIsXG4gICAgICAgIDkwOiBcIifEsW5jxLFcIixcbiAgICB9O1xuXG4gICAgdmFyIHRyID0gbW9tZW50LmRlZmluZUxvY2FsZSgndHInLCB7XG4gICAgICAgIG1vbnRoczogJ09jYWtfxZ51YmF0X01hcnRfTmlzYW5fTWF5xLFzX0hhemlyYW5fVGVtbXV6X0HEn3VzdG9zX0V5bMO8bF9Fa2ltX0thc8SxbV9BcmFsxLFrJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ09jYV/FnnViX01hcl9OaXNfTWF5X0hhel9UZW1fQcSfdV9FeWxfRWtpX0thc19BcmEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnUGF6YXJfUGF6YXJ0ZXNpX1NhbMSxX8OHYXLFn2FtYmFfUGVyxZ9lbWJlX0N1bWFfQ3VtYXJ0ZXNpJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnUGF6X1B0c19TYWxfw4dhcl9QZXJfQ3VtX0N0cycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdQel9QdF9TYV/Dh2FfUGVfQ3VfQ3QnLnNwbGl0KCdfJyksXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnw7bDticgOiAnw5bDlic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ8O2cycgOiAnw5ZTJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL8O2w7Z8w5bDlnzDtnN8w5ZTLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgPT09ICfDtnMnIHx8IGlucHV0ID09PSAnw5ZTJztcbiAgICAgICAgfSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tidWfDvG4gc2FhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1t5YXLEsW4gc2FhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdbZ2VsZWNla10gZGRkZCBbc2FhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tkw7xuXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tnZcOnZW5dIGRkZGQgW3NhYXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMgc29ucmEnLFxuICAgICAgICAgICAgcGFzdDogJyVzIMO2bmNlJyxcbiAgICAgICAgICAgIHM6ICdiaXJrYcOnIHNhbml5ZScsXG4gICAgICAgICAgICBzczogJyVkIHNhbml5ZScsXG4gICAgICAgICAgICBtOiAnYmlyIGRha2lrYScsXG4gICAgICAgICAgICBtbTogJyVkIGRha2lrYScsXG4gICAgICAgICAgICBoOiAnYmlyIHNhYXQnLFxuICAgICAgICAgICAgaGg6ICclZCBzYWF0JyxcbiAgICAgICAgICAgIGQ6ICdiaXIgZ8O8bicsXG4gICAgICAgICAgICBkZDogJyVkIGfDvG4nLFxuICAgICAgICAgICAgdzogJ2JpciBoYWZ0YScsXG4gICAgICAgICAgICB3dzogJyVkIGhhZnRhJyxcbiAgICAgICAgICAgIE06ICdiaXIgYXknLFxuICAgICAgICAgICAgTU06ICclZCBheScsXG4gICAgICAgICAgICB5OiAnYmlyIHnEsWwnLFxuICAgICAgICAgICAgeXk6ICclZCB5xLFsJyxcbiAgICAgICAgfSxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RvJzpcbiAgICAgICAgICAgICAgICBjYXNlICdERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlIGZvciB6ZXJvXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgXCInxLFuY8SxXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGIgPSAobnVtYmVyICUgMTAwKSAtIGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjID0gbnVtYmVyID49IDEwMCA/IDEwMCA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAoc3VmZml4ZXNbYV0gfHwgc3VmZml4ZXNbYl0gfHwgc3VmZml4ZXNbY10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHI7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVGFsb3NzYW4gW3R6bF1cbi8vISBhdXRob3IgOiBSb2JpbiB2YW4gZGVyIFZsaWV0IDogaHR0cHM6Ly9naXRodWIuY29tL3JvYmluMHZhbjBkZXIwdlxuLy8hIGF1dGhvciA6IEl1c3TDrCBDYW51blxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgLy8gQWZ0ZXIgdGhlIHllYXIgdGhlcmUgc2hvdWxkIGJlIGEgc2xhc2ggYW5kIHRoZSBhbW91bnQgb2YgeWVhcnMgc2luY2UgRGVjZW1iZXIgMjYsIDE5NzkgaW4gUm9tYW4gbnVtZXJhbHMuXG4gICAgLy8gVGhpcyBpcyBjdXJyZW50bHkgdG9vIGRpZmZpY3VsdCAobWF5YmUgZXZlbiBpbXBvc3NpYmxlKSB0byBhZGQuXG4gICAgdmFyIHR6bCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3R6bCcsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyX0ZldnJhZ2xoX01hcsOnX0F2csOvdV9NYWlfR8O8bl9KdWxpYV9HdXNjaHRfU2V0ZW12YXJfTGlzdG9ww6R0c19Ob2VtdmFyX1plY2VtdmFyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZXZfTWFyX0F2cl9NYWlfR8O8bl9KdWxfR3VzX1NldF9MaXNfTm9lX1plYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdTw7psYWRpX0zDum5lw6dpX01haXR6aV9Nw6FyY3VyaV9YaMO6YWRpX1Zpw6luZXLDp2lfU8OhdHVyaScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1PDumxfTMO6bl9NYWlfTcOhcl9YaMO6X1Zpw6lfU8OhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTw7pfTMO6X01hX03DoV9YaF9WaV9Tw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hILm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hILm1tLnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBbZGFsbGFzXSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gW2RhbGxhc10gWVlZWSBISC5tbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgW2xpXSBELiBNTU1NIFtkYWxsYXNdIFlZWVkgSEgubW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvZFxcJ298ZFxcJ2EvaSxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gXCJkJ29cIiA9PT0gaW5wdXQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzID4gMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/IFwiZCdvXCIgOiBcIkQnT1wiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/IFwiZCdhXCIgOiBcIkQnQVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tveGhpIMOgXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2RlbcOgIMOgXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW8OgXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2llaXJpIMOgXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tzw7xyIGVsXSBkZGRkIFtsYXN0ZXUgw6BdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnb3NwcmVpICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdqYSVzJyxcbiAgICAgICAgICAgIHM6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBzczogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5eTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBzOiBbJ3ZpZW5zYXMgc2VjdW5kcycsIFwiJ2llbnNhcyBzZWN1bmRzXCJdLFxuICAgICAgICAgICAgc3M6IFtudW1iZXIgKyAnIHNlY3VuZHMnLCAnJyArIG51bWJlciArICcgc2VjdW5kcyddLFxuICAgICAgICAgICAgbTogW1wiJ24gbcOtdXRcIiwgXCInaWVucyBtw611dFwiXSxcbiAgICAgICAgICAgIG1tOiBbbnVtYmVyICsgJyBtw611dHMnLCAnJyArIG51bWJlciArICcgbcOtdXRzJ10sXG4gICAgICAgICAgICBoOiBbXCInbiDDvm9yYVwiLCBcIidpZW5zYSDDvm9yYVwiXSxcbiAgICAgICAgICAgIGhoOiBbbnVtYmVyICsgJyDDvm9yYXMnLCAnJyArIG51bWJlciArICcgw75vcmFzJ10sXG4gICAgICAgICAgICBkOiBbXCInbiB6aXVhXCIsIFwiJ2llbnNhIHppdWFcIl0sXG4gICAgICAgICAgICBkZDogW251bWJlciArICcgeml1YXMnLCAnJyArIG51bWJlciArICcgeml1YXMnXSxcbiAgICAgICAgICAgIE06IFtcIiduIG1lc1wiLCBcIidpZW5zIG1lc1wiXSxcbiAgICAgICAgICAgIE1NOiBbbnVtYmVyICsgJyBtZXNlbicsICcnICsgbnVtYmVyICsgJyBtZXNlbiddLFxuICAgICAgICAgICAgeTogW1wiJ24gYXJcIiwgXCInaWVucyBhclwiXSxcbiAgICAgICAgICAgIHl5OiBbbnVtYmVyICsgJyBhcnMnLCAnJyArIG51bWJlciArICcgYXJzJ10sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBpc0Z1dHVyZVxuICAgICAgICAgICAgPyBmb3JtYXRba2V5XVswXVxuICAgICAgICAgICAgOiB3aXRob3V0U3VmZml4XG4gICAgICAgICAgICA/IGZvcm1hdFtrZXldWzBdXG4gICAgICAgICAgICA6IGZvcm1hdFtrZXldWzFdO1xuICAgIH1cblxuICAgIHJldHVybiB0emw7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQ2VudHJhbCBBdGxhcyBUYW1hemlnaHQgTGF0aW4gW3R6bS1sYXRuXVxuLy8hIGF1dGhvciA6IEFiZGVsIFNhaWQgOiBodHRwczovL2dpdGh1Yi5jb20vYWJkZWxzYWlkXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdHptTGF0biA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3R6bS1sYXRuJywge1xuICAgICAgICBtb250aHM6ICdpbm5heXJfYnLLpGF5csukX21hcsukc8ukX2licmlyX21heXl3X3l3bnl3X3l3bHl3el/Jo3fFoXRfxaF3dGFuYmlyX2t0y6R3YnLLpF9ud3dhbmJpcl9kd2puYmlyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2lubmF5cl9icsukYXlyy6RfbWFyy6Rzy6RfaWJyaXJfbWF5eXdfeXdueXdfeXdseXd6X8mjd8WhdF/FoXd0YW5iaXJfa3TLpHdicsukX253d2FuYmlyX2R3am5iaXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAnYXNhbWFzX2F5bmFzX2FzaW5hc19ha3Jhc19ha3dhc19hc2ltd2FzX2FzaeG4jXlhcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2FzYW1hc19heW5hc19hc2luYXNfYWtyYXNfYWt3YXNfYXNpbXdhc19hc2nhuI15YXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnYXNhbWFzX2F5bmFzX2FzaW5hc19ha3Jhc19ha3dhc19hc2ltd2FzX2FzaeG4jXlhcycuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2FzZGtoIGddIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbYXNrYSBnXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2ddIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbYXNzYW50IGddIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbZ10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdkYWRraCBzIHlhbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAneWFuICVzJyxcbiAgICAgICAgICAgIHM6ICdpbWlrJyxcbiAgICAgICAgICAgIHNzOiAnJWQgaW1paycsXG4gICAgICAgICAgICBtOiAnbWludeG4jScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnXhuI0nLFxuICAgICAgICAgICAgaDogJ3NhyZthJyxcbiAgICAgICAgICAgIGhoOiAnJWQgdGFzc2HJm2luJyxcbiAgICAgICAgICAgIGQ6ICdhc3MnLFxuICAgICAgICAgICAgZGQ6ICclZCBvc3NhbicsXG4gICAgICAgICAgICBNOiAnYXlvd3InLFxuICAgICAgICAgICAgTU06ICclZCBpeXlpcm4nLFxuICAgICAgICAgICAgeTogJ2FzZ2FzJyxcbiAgICAgICAgICAgIHl5OiAnJWQgaXNnYXNuJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiA2LCAvLyBTYXR1cmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiAxMiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMTJ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0em1MYXRuO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IENlbnRyYWwgQXRsYXMgVGFtYXppZ2h0IFt0em1dXG4vLyEgYXV0aG9yIDogQWJkZWwgU2FpZCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hYmRlbHNhaWRcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB0em0gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0em0nLCB7XG4gICAgICAgIG1vbnRoczogJ+K1ieK1j+K1j+K0sOK1ouK1lF/itLHitZXitLDitaLitZVf4rWO4rSw4rWV4rWaX+K1ieK0seK1lOK1ieK1lF/itY7itLDitaLitaLitZNf4rWi4rWT4rWP4rWi4rWTX+K1ouK1k+K1jeK1ouK1k+K1o1/itZbitZPitZvitZxf4rWb4rWT4rWc4rSw4rWP4rSx4rWJ4rWUX+K0veK1n+K1k+K0seK1lV/itY/itZPitaHitLDitY/itLHitYnitZRf4rS34rWT4rWK4rWP4rSx4rWJ4rWUJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ+K1ieK1j+K1j+K0sOK1ouK1lF/itLHitZXitLDitaLitZVf4rWO4rSw4rWV4rWaX+K1ieK0seK1lOK1ieK1lF/itY7itLDitaLitaLitZNf4rWi4rWT4rWP4rWi4rWTX+K1ouK1k+K1jeK1ouK1k+K1o1/itZbitZPitZvitZxf4rWb4rWT4rWc4rSw4rWP4rSx4rWJ4rWUX+K0veK1n+K1k+K0seK1lV/itY/itZPitaHitLDitY/itLHitYnitZRf4rS34rWT4rWK4rWP4rSx4rWJ4rWUJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+K0sOK1meK0sOK1juK0sOK1mV/itLDitaLitY/itLDitZlf4rSw4rWZ4rWJ4rWP4rSw4rWZX+K0sOK0veK1lOK0sOK1mV/itLDitL3itaHitLDitZlf4rSw4rWZ4rWJ4rWO4rWh4rSw4rWZX+K0sOK1meK1ieK0ueK1ouK0sOK1mScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+K0sOK1meK0sOK1juK0sOK1mV/itLDitaLitY/itLDitZlf4rSw4rWZ4rWJ4rWP4rSw4rWZX+K0sOK0veK1lOK0sOK1mV/itLDitL3itaHitLDitZlf4rSw4rWZ4rWJ4rWO4rWh4rSw4rWZX+K0sOK1meK1ieK0ueK1ouK0sOK1mScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfitLDitZnitLDitY7itLDitZlf4rSw4rWi4rWP4rSw4rWZX+K0sOK1meK1ieK1j+K0sOK1mV/itLDitL3itZTitLDitZlf4rSw4rS94rWh4rSw4rWZX+K0sOK1meK1ieK1juK1oeK0sOK1mV/itLDitZnitYnitLnitaLitLDitZknLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vitLDitZnitLfitYUg4rS0XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+K0sOK1meK0veK0sCDitLRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb4rS0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+K0sOK1muK0sOK1j+K1nCDitLRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb4rS0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ+K0t+K0sOK0t+K1hSDitZkg4rWi4rSw4rWPICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICfitaLitLDitY8gJXMnLFxuICAgICAgICAgICAgczogJ+K1ieK1juK1ieK0vScsXG4gICAgICAgICAgICBzczogJyVkIOK1ieK1juK1ieK0vScsXG4gICAgICAgICAgICBtOiAn4rWO4rWJ4rWP4rWT4rS6JyxcbiAgICAgICAgICAgIG1tOiAnJWQg4rWO4rWJ4rWP4rWT4rS6JyxcbiAgICAgICAgICAgIGg6ICfitZnitLDitYTitLAnLFxuICAgICAgICAgICAgaGg6ICclZCDitZzitLDitZnitZnitLDitYTitYnitY8nLFxuICAgICAgICAgICAgZDogJ+K0sOK1meK1mScsXG4gICAgICAgICAgICBkZDogJyVkIG/itZnitZnitLDitY8nLFxuICAgICAgICAgICAgTTogJ+K0sOK1om/itZPitZQnLFxuICAgICAgICAgICAgTU06ICclZCDitYnitaLitaLitYnitZTitY8nLFxuICAgICAgICAgICAgeTogJ+K0sOK1meK0s+K0sOK1mScsXG4gICAgICAgICAgICB5eTogJyVkIOK1ieK1meK0s+K0sOK1meK1jycsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogNiwgLy8gU2F0dXJkYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogMTIsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDEydGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHptO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFV5Z2h1ciAoQ2hpbmEpIFt1Zy1jbl1cbi8vISBhdXRob3I6IGJveWFxIDogaHR0cHM6Ly9naXRodWIuY29tL2JveWFxXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdWdDbiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3VnLWNuJywge1xuICAgICAgICBtb250aHM6ICfZitin2Ybbi9in2LFf2YHbkNuL2LHYp9mEX9mF2KfYsdiqX9im2KfZvtix25DZhF/Zhdin2Ypf2KbZidmK24fZhl/YptmJ2Yrbh9mEX9im2Kfbi9i624fYs9iqX9iz25DZhtiq25XYqNmJ2LFf2KbbhtmD2Krbldio2YnYsV/ZhtmI2YrYp9io2YnYsV/Yr9uQ2YPYp9io2YnYsScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfZitin2Ybbi9in2LFf2YHbkNuL2LHYp9mEX9mF2KfYsdiqX9im2KfZvtix25DZhF/Zhdin2Ypf2KbZidmK24fZhl/YptmJ2Yrbh9mEX9im2Kfbi9i624fYs9iqX9iz25DZhtiq25XYqNmJ2LFf2KbbhtmD2Krbldio2YnYsV/ZhtmI2YrYp9io2YnYsV/Yr9uQ2YPYp9io2YnYsScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfZituV2YPYtNuV2YbYqNuVX9iv24jYtNuV2YbYqNuVX9iz25XZiti025XZhtio25Vf2obYp9ix2LTbldmG2KjblV/ZvtuV2YrYtNuV2YbYqNuVX9is24jZhduVX9i025XZhtio25UnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfZituVX9iv24hf2LPblV/ahtinX9m+25Vf2KzbiF/YtNuVJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9mK25Vf2K/biF/Ys9uVX9qG2Kdf2b7blV/YrNuIX9i025UnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMOiAnWVlZWS3ZitmJ2YTZiU0t2KbYp9mK2YbZidqtRC3Zg9uI2YbZiScsXG4gICAgICAgICAgICBMTEw6ICdZWVlZLdmK2YnZhNmJTS3Yptin2YrZhtmJ2q1ELdmD24jZhtmJ2IwgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGTYjCBZWVlZLdmK2YnZhNmJTS3Yptin2YrZhtmJ2q1ELdmD24jZhtmJ2IwgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv2YrbkNix2YnZhSDZg9uQ2obblXzYs9uV2r7bldixfNqG24jYtNiq2YnZhiDYqNuH2LHbh9mGfNqG24jYtHzahtuI2LTYqtmJ2YYg2YPbkNmK2YnZhnzZg9uV2oYvLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPT09ICfZituQ2LHZidmFINmD25DahtuVJyB8fFxuICAgICAgICAgICAgICAgIG1lcmlkaWVtID09PSAn2LPbldq+25XYsScgfHxcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ9qG24jYtNiq2YnZhiDYqNuH2LHbh9mGJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn2obbiNi02KrZidmGINmD25DZitmJ2YYnIHx8IG1lcmlkaWVtID09PSAn2YPbldqGJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIHZhciBobSA9IGhvdXIgKiAxMDAgKyBtaW51dGU7XG4gICAgICAgICAgICBpZiAoaG0gPCA2MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9mK25DYsdmJ2YUg2YPbkNqG25UnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDkwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2LPbldq+25XYsSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTEzMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2obbiNi02KrZidmGINio24fYsduH2YYnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDEyMzApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9qG24jYtCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTgwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2obbiNi02KrZidmGINmD25DZitmJ2YYnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9mD25Xahic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9io24jar9uI2YYg2LPYp9im25XYql0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vYptuV2KrblSDYs9in2KbbldiqXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vZg9uQ2YTbldix2YPZiV0gZGRkZCBb2LPYp9im25XYql0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vYqtuG2YbbiNqv24jZhl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb2KbYp9mE2K/ZidmG2YLZiV0gZGRkZCBb2LPYp9im25XYql0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDZg9uQ2YrZidmGJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDYqNuH2LHbh9mGJyxcbiAgICAgICAgICAgIHM6ICfZhtuV2obahtuVINiz25DZg9mI2YbYqicsXG4gICAgICAgICAgICBzczogJyVkINiz25DZg9mI2YbYqicsXG4gICAgICAgICAgICBtOiAn2KjZidixINmF2YnZhtuH2KonLFxuICAgICAgICAgICAgbW06ICclZCDZhdmJ2Ybbh9iqJyxcbiAgICAgICAgICAgIGg6ICfYqNmJ2LEg2LPYp9im25XYqicsXG4gICAgICAgICAgICBoaDogJyVkINiz2KfYptuV2KonLFxuICAgICAgICAgICAgZDogJ9io2YnYsSDZg9uI2YYnLFxuICAgICAgICAgICAgZGQ6ICclZCDZg9uI2YYnLFxuICAgICAgICAgICAgTTogJ9io2YnYsSDYptin2YonLFxuICAgICAgICAgICAgTU06ICclZCDYptin2YonLFxuICAgICAgICAgICAgeTogJ9io2YnYsSDZitmJ2YQnLFxuICAgICAgICAgICAgeXk6ICclZCDZitmJ2YQnLFxuICAgICAgICB9LFxuXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSgt2YPbiNmG2Yl8Ldim2KfZinwt2r7bldm+2KrblSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct2YPbiNmG2YknO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3avtuV2b7YqtuVJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC/YjC9nLCAnLCcpO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLywvZywgJ9iMJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIC8vIEdCL1QgNzQwOC0xOTk044CK5pWw5o2u5YWD5ZKM5Lqk5o2i5qC85byPwrfkv6Hmga/kuqTmjaLCt+aXpeacn+WSjOaXtumXtOihqOekuuazleOAi+S4jklTTyA4NjAxOjE5ODjnrYnmlYhcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB1Z0NuO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFVrcmFpbmlhbiBbdWtdXG4vLyEgYXV0aG9yIDogemVtbGFuaW4gOiBodHRwczovL2dpdGh1Yi5jb20vemVtbGFuaW5cbi8vISBBdXRob3IgOiBNZW5lbGlvbiBFbGVuc8O6bGUgOiBodHRwczovL2dpdGh1Yi5jb20vT2lyZVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcGx1cmFsKHdvcmQsIG51bSkge1xuICAgICAgICB2YXIgZm9ybXMgPSB3b3JkLnNwbGl0KCdfJyk7XG4gICAgICAgIHJldHVybiBudW0gJSAxMCA9PT0gMSAmJiBudW0gJSAxMDAgIT09IDExXG4gICAgICAgICAgICA/IGZvcm1zWzBdXG4gICAgICAgICAgICA6IG51bSAlIDEwID49IDIgJiYgbnVtICUgMTAgPD0gNCAmJiAobnVtICUgMTAwIDwgMTAgfHwgbnVtICUgMTAwID49IDIwKVxuICAgICAgICAgICAgPyBmb3Jtc1sxXVxuICAgICAgICAgICAgOiBmb3Jtc1syXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lV2l0aFBsdXJhbChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgc3M6IHdpdGhvdXRTdWZmaXggPyAn0YHQtdC60YPQvdC00LBf0YHQtdC60YPQvdC00Lhf0YHQtdC60YPQvdC0JyA6ICfRgdC10LrRg9C90LTRg1/RgdC10LrRg9C90LTQuF/RgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgbW06IHdpdGhvdXRTdWZmaXggPyAn0YXQstC40LvQuNC90LBf0YXQstC40LvQuNC90Lhf0YXQstC40LvQuNC9JyA6ICfRhdCy0LjQu9C40L3Rg1/RhdCy0LjQu9C40L3QuF/RhdCy0LjQu9C40L0nLFxuICAgICAgICAgICAgaGg6IHdpdGhvdXRTdWZmaXggPyAn0LPQvtC00LjQvdCwX9Cz0L7QtNC40L3QuF/Qs9C+0LTQuNC9JyA6ICfQs9C+0LTQuNC90YNf0LPQvtC00LjQvdC4X9Cz0L7QtNC40L0nLFxuICAgICAgICAgICAgZGQ6ICfQtNC10L3RjF/QtNC90ZZf0LTQvdGW0LInLFxuICAgICAgICAgICAgTU06ICfQvNGW0YHRj9GG0Yxf0LzRltGB0Y/RhtGWX9C80ZbRgdGP0YbRltCyJyxcbiAgICAgICAgICAgIHl5OiAn0YDRltC6X9GA0L7QutC4X9GA0L7QutGW0LInLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoa2V5ID09PSAnbScpIHtcbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ9GF0LLQuNC70LjQvdCwJyA6ICfRhdCy0LjQu9C40L3Rgyc7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnaCcpIHtcbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ9Cz0L7QtNC40L3QsCcgOiAn0LPQvtC00LjQvdGDJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyBwbHVyYWwoZm9ybWF0W2tleV0sICtudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzQ2FzZVJlcGxhY2UobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciB3ZWVrZGF5cyA9IHtcbiAgICAgICAgICAgICAgICBub21pbmF0aXZlOiAn0L3QtdC00ZbQu9GPX9C/0L7QvdC10LTRltC70L7Qul/QstGW0LLRgtC+0YDQvtC6X9GB0LXRgNC10LTQsF/Rh9C10YLQstC10YBf0L/igJnRj9GC0L3QuNGG0Y9f0YHRg9Cx0L7RgtCwJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBhY2N1c2F0aXZlOiAn0L3QtdC00ZbQu9GOX9C/0L7QvdC10LTRltC70L7Qul/QstGW0LLRgtC+0YDQvtC6X9GB0LXRgNC10LTRg1/Rh9C10YLQstC10YBf0L/igJnRj9GC0L3QuNGG0Y5f0YHRg9Cx0L7RgtGDJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBnZW5pdGl2ZTogJ9C90LXQtNGW0LvRll/Qv9C+0L3QtdC00ZbQu9C60LBf0LLRltCy0YLQvtGA0LrQsF/RgdC10YDQtdC00Lhf0YfQtdGC0LLQtdGA0LPQsF/Qv+KAmdGP0YLQvdC40YbRll/RgdGD0LHQvtGC0LgnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5vdW5DYXNlO1xuXG4gICAgICAgIGlmIChtID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla2RheXNbJ25vbWluYXRpdmUnXVxuICAgICAgICAgICAgICAgIC5zbGljZSgxLCA3KVxuICAgICAgICAgICAgICAgIC5jb25jYXQod2Vla2RheXNbJ25vbWluYXRpdmUnXS5zbGljZSgwLCAxKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla2RheXNbJ25vbWluYXRpdmUnXTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vdW5DYXNlID0gLyhcXFtb0JLQstCj0YNdXFxdKSA/ZGRkZC8udGVzdChmb3JtYXQpXG4gICAgICAgICAgICA/ICdhY2N1c2F0aXZlJ1xuICAgICAgICAgICAgOiAvXFxbPyg/OtC80LjQvdGD0LvQvtGXfNC90LDRgdGC0YPQv9C90L7Rlyk/ID9cXF0gP2RkZGQvLnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgPyAnZ2VuaXRpdmUnXG4gICAgICAgICAgICA6ICdub21pbmF0aXZlJztcbiAgICAgICAgcmV0dXJuIHdlZWtkYXlzW25vdW5DYXNlXVttLmRheSgpXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJvY2Vzc0hvdXJzRnVuY3Rpb24oc3RyKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyICsgJ9C+JyArICh0aGlzLmhvdXJzKCkgPT09IDExID8gJ9CxJyA6ICcnKSArICddIExUJztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgdWsgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd1aycsIHtcbiAgICAgICAgbW9udGhzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6ICfRgdGW0YfQvdGPX9C70Y7RgtC+0LPQvl/QsdC10YDQtdC30L3Rj1/QutCy0ZbRgtC90Y9f0YLRgNCw0LLQvdGPX9GH0LXRgNCy0L3Rj1/Qu9C40L/QvdGPX9GB0LXRgNC/0L3Rj1/QstC10YDQtdGB0L3Rj1/QttC+0LLRgtC90Y9f0LvQuNGB0YLQvtC/0LDQtNCwX9Cz0YDRg9C00L3Rjycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTogJ9GB0ZbRh9C10L3RjF/Qu9GO0YLQuNC5X9Cx0LXRgNC10LfQtdC90Yxf0LrQstGW0YLQtdC90Yxf0YLRgNCw0LLQtdC90Yxf0YfQtdGA0LLQtdC90Yxf0LvQuNC/0LXQvdGMX9GB0LXRgNC/0LXQvdGMX9Cy0LXRgNC10YHQtdC90Yxf0LbQvtCy0YLQtdC90Yxf0LvQuNGB0YLQvtC/0LDQtF/Qs9GA0YPQtNC10L3RjCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDogJ9GB0ZbRh1/Qu9GO0YJf0LHQtdGAX9C60LLRltGCX9GC0YDQsNCyX9GH0LXRgNCyX9C70LjQv1/RgdC10YDQv1/QstC10YBf0LbQvtCy0YJf0LvQuNGB0YJf0LPRgNGD0LQnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiB3ZWVrZGF5c0Nhc2VSZXBsYWNlLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn0L3QtF/Qv9C9X9Cy0YJf0YHRgF/Rh9GCX9C/0YJf0YHQsScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfQvdC0X9C/0L1f0LLRgl/RgdGAX9GH0YJf0L/Rgl/RgdCxJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZINGALicsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSDRgC4sIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSDRgC4sIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6IHByb2Nlc3NIb3Vyc0Z1bmN0aW9uKCdb0KHRjNC+0LPQvtC00L3RliAnKSxcbiAgICAgICAgICAgIG5leHREYXk6IHByb2Nlc3NIb3Vyc0Z1bmN0aW9uKCdb0JfQsNCy0YLRgNCwICcpLFxuICAgICAgICAgICAgbGFzdERheTogcHJvY2Vzc0hvdXJzRnVuY3Rpb24oJ1vQktGH0L7RgNCwICcpLFxuICAgICAgICAgICAgbmV4dFdlZWs6IHByb2Nlc3NIb3Vyc0Z1bmN0aW9uKCdb0KNdIGRkZGQgWycpLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NIb3Vyc0Z1bmN0aW9uKCdb0JzQuNC90YPQu9C+0ZddIGRkZGQgWycpLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzc0hvdXJzRnVuY3Rpb24oJ1vQnNC40L3Rg9C70L7Qs9C+XSBkZGRkIFsnKS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9C30LAgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzINGC0L7QvNGDJyxcbiAgICAgICAgICAgIHM6ICfQtNC10LrRltC70YzQutCwINGB0LXQutGD0L3QtCcsXG4gICAgICAgICAgICBzczogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIG06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBtbTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIGg6ICfQs9C+0LTQuNC90YMnLFxuICAgICAgICAgICAgaGg6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBkOiAn0LTQtdC90YwnLFxuICAgICAgICAgICAgZGQ6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBNOiAn0LzRltGB0Y/RhtGMJyxcbiAgICAgICAgICAgIE1NOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgeTogJ9GA0ZbQuicsXG4gICAgICAgICAgICB5eTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gTS4gRS46IHRob3NlIHR3byBhcmUgdmlydHVhbGx5IHVudXNlZCBidXQgYSB1c2VyIG1pZ2h0IHdhbnQgdG8gaW1wbGVtZW50IHRoZW0gZm9yIGhpcy9oZXIgd2Vic2l0ZSBmb3Igc29tZSByZWFzb25cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9C90L7Rh9GWfNGA0LDQvdC60YN80LTQvdGPfNCy0LXRh9C+0YDQsC8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIC9eKNC00L3Rj3zQstC10YfQvtGA0LApJC8udGVzdChpbnB1dCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9C90L7Rh9GWJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfRgNCw0L3QutGDJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQtNC90Y8nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9Cy0LXRh9C+0YDQsCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0Ll80LPQvikvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LknO1xuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3Qs9C+JztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdWs7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVXJkdSBbdXJdXG4vLyEgYXV0aG9yIDogU2F3b29kIEFsYW0gOiBodHRwczovL2dpdGh1Yi5jb20vaWJuZXNheWVlZFxuLy8hIGF1dGhvciA6IFphY2sgOiBodHRwczovL2dpdGh1Yi5jb20vWmFja1Zpc2lvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRocyA9IFtcbiAgICAgICAgICAgICfYrNmG2YjYsduMJyxcbiAgICAgICAgICAgICfZgdix2YjYsduMJyxcbiAgICAgICAgICAgICfZhdin2LHahicsXG4gICAgICAgICAgICAn2KfZvtix24zZhCcsXG4gICAgICAgICAgICAn2YXYptuMJyxcbiAgICAgICAgICAgICfYrNmI2YYnLFxuICAgICAgICAgICAgJ9is2YjZhNin2KbbjCcsXG4gICAgICAgICAgICAn2Kfar9iz2KonLFxuICAgICAgICAgICAgJ9iz2KrZhdio2LEnLFxuICAgICAgICAgICAgJ9in2qnYqtmI2KjYsScsXG4gICAgICAgICAgICAn2YbZiNmF2KjYsScsXG4gICAgICAgICAgICAn2K/Ys9mF2KjYsScsXG4gICAgICAgIF0sXG4gICAgICAgIGRheXMgPSBbJ9in2KrZiNin2LEnLCAn2b7bjNixJywgJ9mF2Ybar9mEJywgJ9io2K/avicsICfYrNmF2LnYsdin2KonLCAn2KzZhdi524EnLCAn24HZgdiq24EnXTtcblxuICAgIHZhciB1ciA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3VyJywge1xuICAgICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IG1vbnRocyxcbiAgICAgICAgd2Vla2RheXM6IGRheXMsXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6IGRheXMsXG4gICAgICAgIHdlZWtkYXlzTWluOiBkYXlzLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRk2IwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv2LXYqNitfNi02KfZhS8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuICfYtNin2YUnID09PSBpbnB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9i12KjYrSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gJ9i02KfZhSc7XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9ii2Kwg2KjZiNmC2KpdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2qnZhCDYqNmI2YLYql0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYqNmI2YLYql0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1var9iw2LTYqtuBINix2YjYsiDYqNmI2YLYql0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb2q/YsNi02KrbgV0gZGRkZCBb2KjZiNmC2KpdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg2KjYudivJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDZgtio2YQnLFxuICAgICAgICAgICAgczogJ9qG2YbYryDYs9uM2qnZhtqIJyxcbiAgICAgICAgICAgIHNzOiAnJWQg2LPbjNqp2YbaiCcsXG4gICAgICAgICAgICBtOiAn2KfbjNqpINmF2YbZuScsXG4gICAgICAgICAgICBtbTogJyVkINmF2YbZuScsXG4gICAgICAgICAgICBoOiAn2KfbjNqpINqv2r7Zhtm524EnLFxuICAgICAgICAgICAgaGg6ICclZCDar9q+2YbZuduSJyxcbiAgICAgICAgICAgIGQ6ICfYp9uM2qkg2K/ZhicsXG4gICAgICAgICAgICBkZDogJyVkINiv2YYnLFxuICAgICAgICAgICAgTTogJ9in24zaqSDZhdin24EnLFxuICAgICAgICAgICAgTU06ICclZCDZhdin24EnLFxuICAgICAgICAgICAgeTogJ9in24zaqSDYs9in2YQnLFxuICAgICAgICAgICAgeXk6ICclZCDYs9in2YQnLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC/YjC9nLCAnLCcpO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLywvZywgJ9iMJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB1cjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBVemJlayBMYXRpbiBbdXotbGF0bl1cbi8vISBhdXRob3IgOiBSYXN1bGJlayBNaXJ6YXlldiA6IGdpdGh1Yi5jb20vUmFzdWxiZWVla1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHV6TGF0biA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3V6LWxhdG4nLCB7XG4gICAgICAgIG1vbnRoczogJ1lhbnZhcl9GZXZyYWxfTWFydF9BcHJlbF9NYXlfSXl1bl9JeXVsX0F2Z3VzdF9TZW50YWJyX09rdGFicl9Ob3lhYnJfRGVrYWJyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ1lhbl9GZXZfTWFyX0Fwcl9NYXlfSXl1bl9JeXVsX0F2Z19TZW5fT2t0X05veV9EZWsnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnWWFrc2hhbmJhX0R1c2hhbmJhX1Nlc2hhbmJhX0Nob3JzaGFuYmFfUGF5c2hhbmJhX0p1bWFfU2hhbmJhJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnWWFrX0R1c2hfU2VzaF9DaG9yX1BheV9KdW1fU2hhbicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdZYV9EdV9TZV9DaG9fUGFfSnVfU2hhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdEIE1NTU0gWVlZWSwgZGRkZCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0J1Z3VuIHNvYXRdIExUIFtkYV0nLFxuICAgICAgICAgICAgbmV4dERheTogJ1tFcnRhZ2FdIExUIFtkYV0nLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtrdW5pIHNvYXRdIExUIFtkYV0nLFxuICAgICAgICAgICAgbGFzdERheTogJ1tLZWNoYSBzb2F0XSBMVCBbZGFdJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBcIltPJ3RnYW5dIGRkZGQgW2t1bmkgc29hdF0gTFQgW2RhXVwiLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdZYXFpbiAlcyBpY2hpZGEnLFxuICAgICAgICAgICAgcGFzdDogJ0JpciBuZWNoYSAlcyBvbGRpbicsXG4gICAgICAgICAgICBzOiAnc29uaXlhJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc29uaXlhJyxcbiAgICAgICAgICAgIG06ICdiaXIgZGFxaXFhJyxcbiAgICAgICAgICAgIG1tOiAnJWQgZGFxaXFhJyxcbiAgICAgICAgICAgIGg6ICdiaXIgc29hdCcsXG4gICAgICAgICAgICBoaDogJyVkIHNvYXQnLFxuICAgICAgICAgICAgZDogJ2JpciBrdW4nLFxuICAgICAgICAgICAgZGQ6ICclZCBrdW4nLFxuICAgICAgICAgICAgTTogJ2JpciBveScsXG4gICAgICAgICAgICBNTTogJyVkIG95JyxcbiAgICAgICAgICAgIHk6ICdiaXIgeWlsJyxcbiAgICAgICAgICAgIHl5OiAnJWQgeWlsJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHV6TGF0bjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBVemJlayBbdXpdXG4vLyEgYXV0aG9yIDogU2FyZG9yIE11bWlub3YgOiBodHRwczovL2dpdGh1Yi5jb20vbXVtaW5vZmZcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB1eiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3V6Jywge1xuICAgICAgICBtb250aHM6ICfRj9C90LLQsNGAX9GE0LXQstGA0LDQu1/QvNCw0YDRgl/QsNC/0YDQtdC7X9C80LDQuV/QuNGO0L1f0LjRjtC7X9Cw0LLQs9GD0YHRgl/RgdC10L3RgtGP0LHRgF/QvtC60YLRj9Cx0YBf0L3QvtGP0LHRgF/QtNC10LrQsNCx0YAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn0Y/QvdCyX9GE0LXQsl/QvNCw0YBf0LDQv9GAX9C80LDQuV/QuNGO0L1f0LjRjtC7X9Cw0LLQs1/RgdC10L1f0L7QutGCX9C90L7Rj1/QtNC10LonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAn0K/QutGI0LDQvdCx0LBf0JTRg9GI0LDQvdCx0LBf0KHQtdGI0LDQvdCx0LBf0KfQvtGA0YjQsNC90LHQsF/Qn9Cw0LnRiNCw0L3QsdCwX9CW0YPQvNCwX9Co0LDQvdCx0LAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfQr9C60Yhf0JTRg9GIX9Ch0LXRiF/Qp9C+0YBf0J/QsNC5X9CW0YPQvF/QqNCw0L0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn0K/Qul/QlNGDX9Ch0LVf0KfQvl/Qn9CwX9CW0YNf0KjQsCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnRCBNTU1NIFlZWVksIGRkZGQgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vQkdGD0LPRg9C9INGB0L7QsNGCXSBMVCBb0LTQsF0nLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQrdGA0YLQsNCz0LBdIExUIFvQtNCwXScsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9C60YPQvdC4INGB0L7QsNGCXSBMVCBb0LTQsF0nLFxuICAgICAgICAgICAgbGFzdERheTogJ1vQmtC10YfQsCDRgdC+0LDRgl0gTFQgW9C00LBdJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW9Cj0YLQs9Cw0L1dIGRkZGQgW9C60YPQvdC4INGB0L7QsNGCXSBMVCBb0LTQsF0nLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfQr9C60LjQvSAlcyDQuNGH0LjQtNCwJyxcbiAgICAgICAgICAgIHBhc3Q6ICfQkdC40YAg0L3QtdGH0LAgJXMg0L7Qu9C00LjQvScsXG4gICAgICAgICAgICBzOiAn0YTRg9GA0YHQsNGCJyxcbiAgICAgICAgICAgIHNzOiAnJWQg0YTRg9GA0YHQsNGCJyxcbiAgICAgICAgICAgIG06ICfQsdC40YAg0LTQsNC60LjQutCwJyxcbiAgICAgICAgICAgIG1tOiAnJWQg0LTQsNC60LjQutCwJyxcbiAgICAgICAgICAgIGg6ICfQsdC40YAg0YHQvtCw0YInLFxuICAgICAgICAgICAgaGg6ICclZCDRgdC+0LDRgicsXG4gICAgICAgICAgICBkOiAn0LHQuNGAINC60YPQvScsXG4gICAgICAgICAgICBkZDogJyVkINC60YPQvScsXG4gICAgICAgICAgICBNOiAn0LHQuNGAINC+0LknLFxuICAgICAgICAgICAgTU06ICclZCDQvtC5JyxcbiAgICAgICAgICAgIHk6ICfQsdC40YAg0LnQuNC7JyxcbiAgICAgICAgICAgIHl5OiAnJWQg0LnQuNC7JyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHV6O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFZpZXRuYW1lc2UgW3ZpXVxuLy8hIGF1dGhvciA6IEJhbmcgTmd1eWVuIDogaHR0cHM6Ly9naXRodWIuY29tL2Jhbmdua1xuLy8hIGF1dGhvciA6IENoaWVuIEtpcmEgOiBodHRwczovL2dpdGh1Yi5jb20vY2hpZW5raXJhXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdmkgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd2aScsIHtcbiAgICAgICAgbW9udGhzOiAndGjDoW5nIDFfdGjDoW5nIDJfdGjDoW5nIDNfdGjDoW5nIDRfdGjDoW5nIDVfdGjDoW5nIDZfdGjDoW5nIDdfdGjDoW5nIDhfdGjDoW5nIDlfdGjDoW5nIDEwX3Row6FuZyAxMV90aMOhbmcgMTInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnVGhnIDAxX1RoZyAwMl9UaGcgMDNfVGhnIDA0X1RoZyAwNV9UaGcgMDZfVGhnIDA3X1RoZyAwOF9UaGcgMDlfVGhnIDEwX1RoZyAxMV9UaGcgMTInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnY2jhu6cgbmjhuq10X3Ro4bupIGhhaV90aOG7qSBiYV90aOG7qSB0xrBfdGjhu6kgbsSDbV90aOG7qSBzw6F1X3Ro4bupIGLhuqN5Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnQ05fVDJfVDNfVDRfVDVfVDZfVDcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnQ05fVDJfVDNfVDRfVDVfVDZfVDcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL3NhfGNoL2ksXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIC9eY2gkL2kudGVzdChpbnB1dCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnc2EnIDogJ1NBJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnY2gnIDogJ0NIJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gW27Eg21dIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFtuxINtXSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gW27Eg21dIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgbDogJ0REL00vWVlZWScsXG4gICAgICAgICAgICBsbDogJ0QgTU1NIFlZWVknLFxuICAgICAgICAgICAgbGxsOiAnRCBNTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBsbGxsOiAnZGRkLCBEIE1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSMO0bSBuYXkgbMO6Y10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tOZ8OgeSBtYWkgbMO6Y10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFt0deG6p24gdOG7m2kgbMO6Y10gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tIw7RtIHF1YSBsw7pjXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW3R14bqnbiB0csaw4bubYyBsw7pjXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIHThu5tpJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyB0csaw4bubYycsXG4gICAgICAgICAgICBzOiAndsOgaSBnacOieScsXG4gICAgICAgICAgICBzczogJyVkIGdpw6J5JyxcbiAgICAgICAgICAgIG06ICdt4buZdCBwaMO6dCcsXG4gICAgICAgICAgICBtbTogJyVkIHBow7p0JyxcbiAgICAgICAgICAgIGg6ICdt4buZdCBnaeG7nScsXG4gICAgICAgICAgICBoaDogJyVkIGdp4budJyxcbiAgICAgICAgICAgIGQ6ICdt4buZdCBuZ8OgeScsXG4gICAgICAgICAgICBkZDogJyVkIG5nw6B5JyxcbiAgICAgICAgICAgIHc6ICdt4buZdCB0deG6p24nLFxuICAgICAgICAgICAgd3c6ICclZCB0deG6p24nLFxuICAgICAgICAgICAgTTogJ23hu5l0IHRow6FuZycsXG4gICAgICAgICAgICBNTTogJyVkIHRow6FuZycsXG4gICAgICAgICAgICB5OiAnbeG7mXQgbsSDbScsXG4gICAgICAgICAgICB5eTogJyVkIG7Eg20nLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0vLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdmk7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogUHNldWRvIFt4LXBzZXVkb11cbi8vISBhdXRob3IgOiBBbmRyZXcgSG9vZCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmRyZXdob29kMTI1XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgeFBzZXVkbyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3gtcHNldWRvJywge1xuICAgICAgICBtb250aHM6ICdKfsOhw7HDusOhfnLDvV9GfsOpYnLDun7DoXLDvV9+TcOhcmN+aF/DgXB+csOtbF9+TcOhw71ffkrDusOxw6l+X0rDumx+w71fw4HDun5nw7pzdH5fU8OpcH50w6ltYn7DqXJfw5N+Y3TDs2J+w6lyX8ORfsOzdsOpbX5iw6lyX35Ew6ljw6l+bWLDqXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSn7DocOxX35Gw6liX35Nw6FyX37DgXByX35Nw6HDvV9+SsO6w7FffkrDumxffsOBw7pnX35Tw6lwX37Dk2N0X37DkcOzdl9+RMOpYycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdTfsO6w7Fkw6F+w71fTcOzfsOxZMOhw71+X1TDusOpfnNkw6HDvX5fV8OpZH7DscOpc2R+w6HDvV9UfmjDunJzfmTDocO9X35GcsOtZH7DocO9X1N+w6F0w7pyfmTDocO9Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU37DusOxX35Nw7PDsV9+VMO6w6lfflfDqWRfflRow7pffkZyw61fflPDoXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU37Dul9Nw7N+X1TDul9+V8OpX1R+aF9Gcn5fU8OhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbVH7Ds2TDoX7DvSDDoXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbVH7Ds23Ds35ycsOzfncgw6F0XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW8OhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vDnX7DqXN0fsOpcmTDoX7DvSDDoXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0x+w6FzdF0gZGRkZCBbw6F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ8OtfsOxICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDDoX5nw7MnLFxuICAgICAgICAgICAgczogJ8OhIH5mw6l3IH5zw6ljw7N+w7FkcycsXG4gICAgICAgICAgICBzczogJyVkIHN+w6ljw7PDsX5kcycsXG4gICAgICAgICAgICBtOiAnw6Egfm3DrcOxfsO6dMOpJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbX7DrcOxw7p+dMOpcycsXG4gICAgICAgICAgICBoOiAnw6F+w7EgaMOzfsO6cicsXG4gICAgICAgICAgICBoaDogJyVkIGh+w7PDunJzJyxcbiAgICAgICAgICAgIGQ6ICfDoSB+ZMOhw70nLFxuICAgICAgICAgICAgZGQ6ICclZCBkfsOhw71zJyxcbiAgICAgICAgICAgIE06ICfDoSB+bcOzw7F+dGgnLFxuICAgICAgICAgICAgTU06ICclZCBtfsOzw7F0fmhzJyxcbiAgICAgICAgICAgIHk6ICfDoSB+w73DqcOhcicsXG4gICAgICAgICAgICB5eTogJyVkIMO9fsOpw6FycycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSh0aHxzdHxuZHxyZCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB4UHNldWRvO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFlvcnViYSBOaWdlcmlhIFt5b11cbi8vISBhdXRob3IgOiBBdG9sYWdiZSBBYmlzb3llIDogaHR0cHM6Ly9naXRodWIuY29tL2FuZGVsYS1iYXRvbGFnYmVcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB5byA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3lvJywge1xuICAgICAgICBtb250aHM6ICdT4bq5zIFy4bq5zIFfRcyAcmXMgGxlzIBf4bq4cuG6ucyAbmHMgF9JzIBnYmXMgV9FzIBiaWJpX0/MgGt1zIBkdV9BZ+G6uW1vX0/MgGd1zIFuX093ZXdlX+G7jMyAd2HMgHJhzIBfQmXMgWx1zIFf4buMzIBw4bq5zIDMgCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdT4bq5zIFyX0XMgHJsX+G6uHJuX0nMgGdiX0XMgGJpX0/MgGt1zIBfQWfhurlfT8yAZ3XMgV9Pd2Vf4buMzIB3YcyAX0JlzIFsX+G7jMyAcOG6ucyAzIAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnQcyAacyAa3XMgV9BamXMgV9JzIBz4bq5zIFndW5f4buMauG7jcyBcnXMgV/hu4xq4buNzIFi4buNX+G6uHRpzIBfQcyAYmHMgW3hurnMgXRhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnQcyAacyAa19BamXMgV9JzIBz4bq5zIFf4buManJf4buMamJf4bq4dGnMgF9BzIBiYcyBJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ0HMgGnMgF9Bal9JzIBzX+G7jHJf4buMYl/hurh0X0HMgGInLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ2g6bW0gQScsXG4gICAgICAgICAgICBMVFM6ICdoOm1tOnNzIEEnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0/MgG5pzIAgbmldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4buMzIBsYSBuaV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IFwiZGRkZCBb4buMc+G6ucyAIHRvzIFuJ2Lhu41dIFtuaV0gTFRcIixcbiAgICAgICAgICAgIGxhc3REYXk6ICdbQcyAbmEgbmldIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb4buMc+G6ucyAIHRvzIFs4buNzIFdIFtuaV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICduacyBICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBr4buNamHMgScsXG4gICAgICAgICAgICBzOiAnacyAc+G6uWp1zIEgYWF5YcyBIGRpZScsXG4gICAgICAgICAgICBzczogJ2FheWHMgSAlZCcsXG4gICAgICAgICAgICBtOiAnacyAc+G6uWp1zIEga2FuJyxcbiAgICAgICAgICAgIG1tOiAnacyAc+G6uWp1zIEgJWQnLFxuICAgICAgICAgICAgaDogJ3dhzIFrYXRpIGthbicsXG4gICAgICAgICAgICBoaDogJ3dhzIFrYXRpICVkJyxcbiAgICAgICAgICAgIGQ6ICfhu41q4buNzIEga2FuJyxcbiAgICAgICAgICAgIGRkOiAn4buNauG7jcyBICVkJyxcbiAgICAgICAgICAgIE06ICdvc3XMgCBrYW4nLFxuICAgICAgICAgICAgTU06ICdvc3XMgCAlZCcsXG4gICAgICAgICAgICB5OiAn4buNZHXMgW4ga2FuJyxcbiAgICAgICAgICAgIHl5OiAn4buNZHXMgW4gJWQnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAv4buNauG7jcyBXFxzXFxkezEsMn0vLFxuICAgICAgICBvcmRpbmFsOiAn4buNauG7jcyBICVkJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHlvO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IENoaW5lc2UgKENoaW5hKSBbemgtY25dXG4vLyEgYXV0aG9yIDogc3V1cGljIDogaHR0cHM6Ly9naXRodWIuY29tL3N1dXBpY1xuLy8hIGF1dGhvciA6IFplbm8gWmVuZyA6IGh0dHBzOi8vZ2l0aHViLmNvbS96ZW5vemVuZ1xuLy8hIGF1dGhvciA6IHV1MTA5IDogaHR0cHM6Ly9naXRodWIuY29tL3V1MTA5XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgemhDbiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3poLWNuJywge1xuICAgICAgICBtb250aHM6ICfkuIDmnIhf5LqM5pyIX+S4ieaciF/lm5vmnIhf5LqU5pyIX+WFreaciF/kuIPmnIhf5YWr5pyIX+S5neaciF/ljYHmnIhf5Y2B5LiA5pyIX+WNgeS6jOaciCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICcx5pyIXzLmnIhfM+aciF805pyIXzXmnIhfNuaciF835pyIXzjmnIhfOeaciF8xMOaciF8xMeaciF8xMuaciCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfmmJ/mnJ/ml6Vf5pif5pyf5LiAX+aYn+acn+S6jF/mmJ/mnJ/kuIlf5pif5pyf5ZubX+aYn+acn+S6lF/mmJ/mnJ/lha0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICflkajml6Vf5ZGo5LiAX+WRqOS6jF/lkajkuIlf5ZGo5ZubX+WRqOS6lF/lkajlha0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn5pelX+S4gF/kuoxf5LiJX+Wbm1/kupRf5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS9NTS9ERCcsXG4gICAgICAgICAgICBMTDogJ1lZWVnlubRN5pyIROaXpScsXG4gICAgICAgICAgICBMTEw6ICdZWVlZ5bm0TeaciETml6VBaOeCuW1t5YiGJyxcbiAgICAgICAgICAgIExMTEw6ICdZWVlZ5bm0TeaciETml6VkZGRkQWjngrltbeWIhicsXG4gICAgICAgICAgICBsOiAnWVlZWS9NL0QnLFxuICAgICAgICAgICAgbGw6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICAgICAgbGxsOiAnWVlZWeW5tE3mnIhE5pelIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdZWVlZ5bm0TeaciETml6VkZGRkIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+WHjOaZqHzml6nkuIp85LiK5Y2IfOS4reWNiHzkuIvljYh85pma5LiKLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn5YeM5pmoJyB8fCBtZXJpZGllbSA9PT0gJ+aXqeS4iicgfHwgbWVyaWRpZW0gPT09ICfkuIrljYgnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn5LiL5Y2IJyB8fCBtZXJpZGllbSA9PT0gJ+aZmuS4iicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyAn5Lit5Y2IJ1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIHZhciBobSA9IGhvdXIgKiAxMDAgKyBtaW51dGU7XG4gICAgICAgICAgICBpZiAoaG0gPCA2MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+WHjOaZqCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgOTAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfml6nkuIonO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDExMzApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4iuWNiCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTIzMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5Lit5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxODAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuIvljYgnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+aZmuS4iic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+S7iuWkqV1MVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+aYjuWkqV1MVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKG5vdykge1xuICAgICAgICAgICAgICAgIGlmIChub3cud2VlaygpICE9PSB0aGlzLndlZWsoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vkuItdZGRkTFQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW+acrF1kZGRMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb5pio5aSpXUxUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAobm93KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMud2VlaygpICE9PSBub3cud2VlaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW+S4il1kZGRMVCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb5pysXWRkZExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KOaXpXzmnIh85ZGoKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+aXpSc7XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5pyIJztcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICflkagnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXPlkI4nLFxuICAgICAgICAgICAgcGFzdDogJyVz5YmNJyxcbiAgICAgICAgICAgIHM6ICflh6Dnp5InLFxuICAgICAgICAgICAgc3M6ICclZCDnp5InLFxuICAgICAgICAgICAgbTogJzEg5YiG6ZKfJyxcbiAgICAgICAgICAgIG1tOiAnJWQg5YiG6ZKfJyxcbiAgICAgICAgICAgIGg6ICcxIOWwj+aXticsXG4gICAgICAgICAgICBoaDogJyVkIOWwj+aXticsXG4gICAgICAgICAgICBkOiAnMSDlpKknLFxuICAgICAgICAgICAgZGQ6ICclZCDlpKknLFxuICAgICAgICAgICAgdzogJzEg5ZGoJyxcbiAgICAgICAgICAgIHd3OiAnJWQg5ZGoJyxcbiAgICAgICAgICAgIE06ICcxIOS4quaciCcsXG4gICAgICAgICAgICBNTTogJyVkIOS4quaciCcsXG4gICAgICAgICAgICB5OiAnMSDlubQnLFxuICAgICAgICAgICAgeXk6ICclZCDlubQnLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICAvLyBHQi9UIDc0MDgtMTk5NOOAiuaVsOaNruWFg+WSjOS6pOaNouagvOW8j8K35L+h5oGv5Lqk5o2iwrfml6XmnJ/lkozml7bpl7TooajnpLrms5XjgIvkuI5JU08gODYwMToxOTg4562J5pWIXG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gemhDbjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBDaGluZXNlIChIb25nIEtvbmcpIFt6aC1oa11cbi8vISBhdXRob3IgOiBCZW4gOiBodHRwczovL2dpdGh1Yi5jb20vYmVuLWxpblxuLy8hIGF1dGhvciA6IENocmlzIExhbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9oZWhhY2hyaXNcbi8vISBhdXRob3IgOiBLb25zdGFudGluIDogaHR0cHM6Ly9naXRodWIuY29tL3NrZmRcbi8vISBhdXRob3IgOiBBbnRob255IDogaHR0cHM6Ly9naXRodWIuY29tL2FudGhvbnlsYXVcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB6aEhrID0gbW9tZW50LmRlZmluZUxvY2FsZSgnemgtaGsnLCB7XG4gICAgICAgIG1vbnRoczogJ+S4gOaciF/kuozmnIhf5LiJ5pyIX+Wbm+aciF/kupTmnIhf5YWt5pyIX+S4g+aciF/lhavmnIhf5Lmd5pyIX+WNgeaciF/ljYHkuIDmnIhf5Y2B5LqM5pyIJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJzHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+aYn+acn+aXpV/mmJ/mnJ/kuIBf5pif5pyf5LqMX+aYn+acn+S4iV/mmJ/mnJ/lm5tf5pif5pyf5LqUX+aYn+acn+WFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+mAseaXpV/pgLHkuIBf6YCx5LqMX+mAseS4iV/pgLHlm5tf6YCx5LqUX+mAseWFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfml6Vf5LiAX+S6jF/kuIlf5ZubX+S6lF/lha0nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZL01NL0REJyxcbiAgICAgICAgICAgIExMOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIExMTDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbScsXG4gICAgICAgICAgICBsOiAnWVlZWS9NL0QnLFxuICAgICAgICAgICAgbGw6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICAgICAgbGxsOiAnWVlZWeW5tE3mnIhE5pelIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdZWVlZ5bm0TeaciETml6VkZGRkIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+WHjOaZqHzml6nkuIp85LiK5Y2IfOS4reWNiHzkuIvljYh85pma5LiKLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn5YeM5pmoJyB8fCBtZXJpZGllbSA9PT0gJ+aXqeS4iicgfHwgbWVyaWRpZW0gPT09ICfkuIrljYgnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn5Lit5Y2IJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfkuIvljYgnIHx8IG1lcmlkaWVtID09PSAn5pma5LiKJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICB2YXIgaG0gPSBob3VyICogMTAwICsgbWludXRlO1xuICAgICAgICAgICAgaWYgKGhtIDwgNjAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICflh4zmmagnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDkwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5pep5LiKJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMjAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuIrljYgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA9PT0gMTIwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5Lit5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxODAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuIvljYgnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+aZmuS4iic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+S7iuWkqV1MVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+aYjuWkqV1MVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vkuItdZGRkZExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb5pio5aSpXUxUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+S4il1kZGRkTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KOaXpXzmnIh86YCxKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+aXpSc7XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5pyIJztcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfpgLEnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXPlvownLFxuICAgICAgICAgICAgcGFzdDogJyVz5YmNJyxcbiAgICAgICAgICAgIHM6ICflub7np5InLFxuICAgICAgICAgICAgc3M6ICclZCDnp5InLFxuICAgICAgICAgICAgbTogJzEg5YiG6ZCYJyxcbiAgICAgICAgICAgIG1tOiAnJWQg5YiG6ZCYJyxcbiAgICAgICAgICAgIGg6ICcxIOWwj+aZgicsXG4gICAgICAgICAgICBoaDogJyVkIOWwj+aZgicsXG4gICAgICAgICAgICBkOiAnMSDlpKknLFxuICAgICAgICAgICAgZGQ6ICclZCDlpKknLFxuICAgICAgICAgICAgTTogJzEg5YCL5pyIJyxcbiAgICAgICAgICAgIE1NOiAnJWQg5YCL5pyIJyxcbiAgICAgICAgICAgIHk6ICcxIOW5tCcsXG4gICAgICAgICAgICB5eTogJyVkIOW5tCcsXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gemhIaztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBDaGluZXNlIChNYWNhdSkgW3poLW1vXVxuLy8hIGF1dGhvciA6IEJlbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZW4tbGluXG4vLyEgYXV0aG9yIDogQ2hyaXMgTGFtIDogaHR0cHM6Ly9naXRodWIuY29tL2hlaGFjaHJpc1xuLy8hIGF1dGhvciA6IFRhbiBZdWFuaG9uZyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9sZTB0YW5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB6aE1vID0gbW9tZW50LmRlZmluZUxvY2FsZSgnemgtbW8nLCB7XG4gICAgICAgIG1vbnRoczogJ+S4gOaciF/kuozmnIhf5LiJ5pyIX+Wbm+aciF/kupTmnIhf5YWt5pyIX+S4g+aciF/lhavmnIhf5Lmd5pyIX+WNgeaciF/ljYHkuIDmnIhf5Y2B5LqM5pyIJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJzHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+aYn+acn+aXpV/mmJ/mnJ/kuIBf5pif5pyf5LqMX+aYn+acn+S4iV/mmJ/mnJ/lm5tf5pif5pyf5LqUX+aYn+acn+WFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+mAseaXpV/pgLHkuIBf6YCx5LqMX+mAseS4iV/pgLHlm5tf6YCx5LqUX+mAseWFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfml6Vf5LiAX+S6jF/kuIlf5ZubX+S6lF/lha0nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIExMTDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbScsXG4gICAgICAgICAgICBsOiAnRC9NL1lZWVknLFxuICAgICAgICAgICAgbGw6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICAgICAgbGxsOiAnWVlZWeW5tE3mnIhE5pelIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdZWVlZ5bm0TeaciETml6VkZGRkIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+WHjOaZqHzml6nkuIp85LiK5Y2IfOS4reWNiHzkuIvljYh85pma5LiKLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn5YeM5pmoJyB8fCBtZXJpZGllbSA9PT0gJ+aXqeS4iicgfHwgbWVyaWRpZW0gPT09ICfkuIrljYgnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn5Lit5Y2IJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfkuIvljYgnIHx8IG1lcmlkaWVtID09PSAn5pma5LiKJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICB2YXIgaG0gPSBob3VyICogMTAwICsgbWludXRlO1xuICAgICAgICAgICAgaWYgKGhtIDwgNjAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICflh4zmmagnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDkwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5pep5LiKJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMTMwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuIrljYgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDEyMzApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4reWNiCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTgwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiL5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfmmZrkuIonO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vku4rlpKldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb5piO5aSpXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vkuItdZGRkZCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+aYqOWkqV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb5LiKXWRkZGQgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KOaXpXzmnIh86YCxKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+aXpSc7XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5pyIJztcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfpgLEnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXPlhacnLFxuICAgICAgICAgICAgcGFzdDogJyVz5YmNJyxcbiAgICAgICAgICAgIHM6ICflub7np5InLFxuICAgICAgICAgICAgc3M6ICclZCDnp5InLFxuICAgICAgICAgICAgbTogJzEg5YiG6ZCYJyxcbiAgICAgICAgICAgIG1tOiAnJWQg5YiG6ZCYJyxcbiAgICAgICAgICAgIGg6ICcxIOWwj+aZgicsXG4gICAgICAgICAgICBoaDogJyVkIOWwj+aZgicsXG4gICAgICAgICAgICBkOiAnMSDlpKknLFxuICAgICAgICAgICAgZGQ6ICclZCDlpKknLFxuICAgICAgICAgICAgTTogJzEg5YCL5pyIJyxcbiAgICAgICAgICAgIE1NOiAnJWQg5YCL5pyIJyxcbiAgICAgICAgICAgIHk6ICcxIOW5tCcsXG4gICAgICAgICAgICB5eTogJyVkIOW5tCcsXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gemhNbztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBDaGluZXNlIChUYWl3YW4pIFt6aC10d11cbi8vISBhdXRob3IgOiBCZW4gOiBodHRwczovL2dpdGh1Yi5jb20vYmVuLWxpblxuLy8hIGF1dGhvciA6IENocmlzIExhbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9oZWhhY2hyaXNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB6aFR3ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnemgtdHcnLCB7XG4gICAgICAgIG1vbnRoczogJ+S4gOaciF/kuozmnIhf5LiJ5pyIX+Wbm+aciF/kupTmnIhf5YWt5pyIX+S4g+aciF/lhavmnIhf5Lmd5pyIX+WNgeaciF/ljYHkuIDmnIhf5Y2B5LqM5pyIJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJzHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+aYn+acn+aXpV/mmJ/mnJ/kuIBf5pif5pyf5LqMX+aYn+acn+S4iV/mmJ/mnJ/lm5tf5pif5pyf5LqUX+aYn+acn+WFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+mAseaXpV/pgLHkuIBf6YCx5LqMX+mAseS4iV/pgLHlm5tf6YCx5LqUX+mAseWFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfml6Vf5LiAX+S6jF/kuIlf5ZubX+S6lF/lha0nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZL01NL0REJyxcbiAgICAgICAgICAgIExMOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIExMTDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbScsXG4gICAgICAgICAgICBsOiAnWVlZWS9NL0QnLFxuICAgICAgICAgICAgbGw6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICAgICAgbGxsOiAnWVlZWeW5tE3mnIhE5pelIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdZWVlZ5bm0TeaciETml6VkZGRkIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+WHjOaZqHzml6nkuIp85LiK5Y2IfOS4reWNiHzkuIvljYh85pma5LiKLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn5YeM5pmoJyB8fCBtZXJpZGllbSA9PT0gJ+aXqeS4iicgfHwgbWVyaWRpZW0gPT09ICfkuIrljYgnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn5Lit5Y2IJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfkuIvljYgnIHx8IG1lcmlkaWVtID09PSAn5pma5LiKJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICB2YXIgaG0gPSBob3VyICogMTAwICsgbWludXRlO1xuICAgICAgICAgICAgaWYgKGhtIDwgNjAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICflh4zmmagnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDkwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5pep5LiKJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMTMwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuIrljYgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDEyMzApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4reWNiCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTgwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiL5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfmmZrkuIonO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vku4rlpKldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb5piO5aSpXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vkuItdZGRkZCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+aYqOWkqV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb5LiKXWRkZGQgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KOaXpXzmnIh86YCxKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+aXpSc7XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5pyIJztcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfpgLEnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXPlvownLFxuICAgICAgICAgICAgcGFzdDogJyVz5YmNJyxcbiAgICAgICAgICAgIHM6ICflub7np5InLFxuICAgICAgICAgICAgc3M6ICclZCDnp5InLFxuICAgICAgICAgICAgbTogJzEg5YiG6ZCYJyxcbiAgICAgICAgICAgIG1tOiAnJWQg5YiG6ZCYJyxcbiAgICAgICAgICAgIGg6ICcxIOWwj+aZgicsXG4gICAgICAgICAgICBoaDogJyVkIOWwj+aZgicsXG4gICAgICAgICAgICBkOiAnMSDlpKknLFxuICAgICAgICAgICAgZGQ6ICclZCDlpKknLFxuICAgICAgICAgICAgTTogJzEg5YCL5pyIJyxcbiAgICAgICAgICAgIE1NOiAnJWQg5YCL5pyIJyxcbiAgICAgICAgICAgIHk6ICcxIOW5tCcsXG4gICAgICAgICAgICB5eTogJyVkIOW5tCcsXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gemhUdztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanNcbi8vISB2ZXJzaW9uIDogMi4yOS4xXG4vLyEgYXV0aG9ycyA6IFRpbSBXb29kLCBJc2tyZW4gQ2hlcm5ldiwgTW9tZW50LmpzIGNvbnRyaWJ1dG9yc1xuLy8hIGxpY2Vuc2UgOiBNSVRcbi8vISBtb21lbnRqcy5jb21cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgZ2xvYmFsLm1vbWVudCA9IGZhY3RvcnkoKVxufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgaG9va0NhbGxiYWNrO1xuXG4gICAgZnVuY3Rpb24gaG9va3MoKSB7XG4gICAgICAgIHJldHVybiBob29rQ2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGRvbmUgdG8gcmVnaXN0ZXIgdGhlIG1ldGhvZCBjYWxsZWQgd2l0aCBtb21lbnQoKVxuICAgIC8vIHdpdGhvdXQgY3JlYXRpbmcgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICAgIGZ1bmN0aW9uIHNldEhvb2tDYWxsYmFjayhjYWxsYmFjaykge1xuICAgICAgICBob29rQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FycmF5KGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIEFycmF5IHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBBcnJheV0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IHdpbGwgdHJlYXQgdW5kZWZpbmVkIGFuZCBudWxsIGFzIG9iamVjdCBpZiBpdCB3YXNuJ3QgZm9yXG4gICAgICAgIC8vIGlucHV0ICE9IG51bGxcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0ICE9IG51bGwgJiZcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IE9iamVjdF0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzT3duUHJvcChhLCBiKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwgYik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3RFbXB0eShvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5sZW5ndGggPT09IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaztcbiAgICAgICAgICAgIGZvciAoayBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGspKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PT0gdm9pZCAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBOdW1iZXJdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF0ZShpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBEYXRlXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXAoYXJyLCBmbikge1xuICAgICAgICB2YXIgcmVzID0gW10sXG4gICAgICAgICAgICBpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICByZXMucHVzaChmbihhcnJbaV0sIGkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVuZChhLCBiKSB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gYikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoYiwgaSkpIHtcbiAgICAgICAgICAgICAgICBhW2ldID0gYltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd0b1N0cmluZycpKSB7XG4gICAgICAgICAgICBhLnRvU3RyaW5nID0gYi50b1N0cmluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd2YWx1ZU9mJykpIHtcbiAgICAgICAgICAgIGEudmFsdWVPZiA9IGIudmFsdWVPZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgdHJ1ZSkudXRjKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmYXVsdFBhcnNpbmdGbGFncygpIHtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBkZWVwIGNsb25lIHRoaXMgb2JqZWN0LlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZW1wdHk6IGZhbHNlLFxuICAgICAgICAgICAgdW51c2VkVG9rZW5zOiBbXSxcbiAgICAgICAgICAgIHVudXNlZElucHV0OiBbXSxcbiAgICAgICAgICAgIG92ZXJmbG93OiAtMixcbiAgICAgICAgICAgIGNoYXJzTGVmdE92ZXI6IDAsXG4gICAgICAgICAgICBudWxsSW5wdXQ6IGZhbHNlLFxuICAgICAgICAgICAgaW52YWxpZEVyYTogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRNb250aDogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRGb3JtYXQ6IGZhbHNlLFxuICAgICAgICAgICAgdXNlckludmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzbzogZmFsc2UsXG4gICAgICAgICAgICBwYXJzZWREYXRlUGFydHM6IFtdLFxuICAgICAgICAgICAgZXJhOiBudWxsLFxuICAgICAgICAgICAgbWVyaWRpZW06IG51bGwsXG4gICAgICAgICAgICByZmMyODIyOiBmYWxzZSxcbiAgICAgICAgICAgIHdlZWtkYXlNaXNtYXRjaDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2luZ0ZsYWdzKG0pIHtcbiAgICAgICAgaWYgKG0uX3BmID09IG51bGwpIHtcbiAgICAgICAgICAgIG0uX3BmID0gZGVmYXVsdFBhcnNpbmdGbGFncygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtLl9wZjtcbiAgICB9XG5cbiAgICB2YXIgc29tZTtcbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLnNvbWUpIHtcbiAgICAgICAgc29tZSA9IEFycmF5LnByb3RvdHlwZS5zb21lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNvbWUgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgICAgICAgICB2YXIgdCA9IE9iamVjdCh0aGlzKSxcbiAgICAgICAgICAgICAgICBsZW4gPSB0Lmxlbmd0aCA+Pj4gMCxcbiAgICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaSBpbiB0ICYmIGZ1bi5jYWxsKHRoaXMsIHRbaV0sIGksIHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQobSkge1xuICAgICAgICBpZiAobS5faXNWYWxpZCA9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgZmxhZ3MgPSBnZXRQYXJzaW5nRmxhZ3MobSksXG4gICAgICAgICAgICAgICAgcGFyc2VkUGFydHMgPSBzb21lLmNhbGwoZmxhZ3MucGFyc2VkRGF0ZVBhcnRzLCBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSAhPSBudWxsO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgPVxuICAgICAgICAgICAgICAgICAgICAhaXNOYU4obS5fZC5nZXRUaW1lKCkpICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLm92ZXJmbG93IDwgMCAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3MuZW1wdHkgJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRFcmEgJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRNb250aCAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZFdlZWtkYXkgJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLndlZWtkYXlNaXNtYXRjaCAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3MubnVsbElucHV0ICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkRm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy51c2VySW52YWxpZGF0ZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgKCFmbGFncy5tZXJpZGllbSB8fCAoZmxhZ3MubWVyaWRpZW0gJiYgcGFyc2VkUGFydHMpKTtcblxuICAgICAgICAgICAgaWYgKG0uX3N0cmljdCkge1xuICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgPVxuICAgICAgICAgICAgICAgICAgICBpc05vd1ZhbGlkICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmNoYXJzTGVmdE92ZXIgPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MudW51c2VkVG9rZW5zLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy5iaWdIb3VyID09PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChPYmplY3QuaXNGcm96ZW4gPT0gbnVsbCB8fCAhT2JqZWN0LmlzRnJvemVuKG0pKSB7XG4gICAgICAgICAgICAgICAgbS5faXNWYWxpZCA9IGlzTm93VmFsaWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc05vd1ZhbGlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtLl9pc1ZhbGlkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUludmFsaWQoZmxhZ3MpIHtcbiAgICAgICAgdmFyIG0gPSBjcmVhdGVVVEMoTmFOKTtcbiAgICAgICAgaWYgKGZsYWdzICE9IG51bGwpIHtcbiAgICAgICAgICAgIGV4dGVuZChnZXRQYXJzaW5nRmxhZ3MobSksIGZsYWdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS51c2VySW52YWxpZGF0ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgLy8gUGx1Z2lucyB0aGF0IGFkZCBwcm9wZXJ0aWVzIHNob3VsZCBhbHNvIGFkZCB0aGUga2V5IGhlcmUgKG51bGwgdmFsdWUpLFxuICAgIC8vIHNvIHdlIGNhbiBwcm9wZXJseSBjbG9uZSBvdXJzZWx2ZXMuXG4gICAgdmFyIG1vbWVudFByb3BlcnRpZXMgPSAoaG9va3MubW9tZW50UHJvcGVydGllcyA9IFtdKSxcbiAgICAgICAgdXBkYXRlSW5Qcm9ncmVzcyA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gY29weUNvbmZpZyh0bywgZnJvbSkge1xuICAgICAgICB2YXIgaSwgcHJvcCwgdmFsO1xuXG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNBTW9tZW50T2JqZWN0KSkge1xuICAgICAgICAgICAgdG8uX2lzQU1vbWVudE9iamVjdCA9IGZyb20uX2lzQU1vbWVudE9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2kpKSB7XG4gICAgICAgICAgICB0by5faSA9IGZyb20uX2k7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9mKSkge1xuICAgICAgICAgICAgdG8uX2YgPSBmcm9tLl9mO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fbCkpIHtcbiAgICAgICAgICAgIHRvLl9sID0gZnJvbS5fbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3N0cmljdCkpIHtcbiAgICAgICAgICAgIHRvLl9zdHJpY3QgPSBmcm9tLl9zdHJpY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl90em0pKSB7XG4gICAgICAgICAgICB0by5fdHptID0gZnJvbS5fdHptO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNVVEMpKSB7XG4gICAgICAgICAgICB0by5faXNVVEMgPSBmcm9tLl9pc1VUQztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX29mZnNldCkpIHtcbiAgICAgICAgICAgIHRvLl9vZmZzZXQgPSBmcm9tLl9vZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9wZikpIHtcbiAgICAgICAgICAgIHRvLl9wZiA9IGdldFBhcnNpbmdGbGFncyhmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2xvY2FsZSkpIHtcbiAgICAgICAgICAgIHRvLl9sb2NhbGUgPSBmcm9tLl9sb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9tZW50UHJvcGVydGllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbW9tZW50UHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHByb3AgPSBtb21lbnRQcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgICAgIHZhbCA9IGZyb21bcHJvcF07XG4gICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh2YWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvW3Byb3BdID0gdmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0bztcbiAgICB9XG5cbiAgICAvLyBNb21lbnQgcHJvdG90eXBlIG9iamVjdFxuICAgIGZ1bmN0aW9uIE1vbWVudChjb25maWcpIHtcbiAgICAgICAgY29weUNvbmZpZyh0aGlzLCBjb25maWcpO1xuICAgICAgICB0aGlzLl9kID0gbmV3IERhdGUoY29uZmlnLl9kICE9IG51bGwgPyBjb25maWcuX2QuZ2V0VGltZSgpIDogTmFOKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGhpcy5fZCA9IG5ldyBEYXRlKE5hTik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUHJldmVudCBpbmZpbml0ZSBsb29wIGluIGNhc2UgdXBkYXRlT2Zmc2V0IGNyZWF0ZXMgbmV3IG1vbWVudFxuICAgICAgICAvLyBvYmplY3RzLlxuICAgICAgICBpZiAodXBkYXRlSW5Qcm9ncmVzcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMpO1xuICAgICAgICAgICAgdXBkYXRlSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNNb21lbnQob2JqKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBvYmogaW5zdGFuY2VvZiBNb21lbnQgfHwgKG9iaiAhPSBudWxsICYmIG9iai5faXNBTW9tZW50T2JqZWN0ICE9IG51bGwpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Fybihtc2cpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgaG9va3Muc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID09PSBmYWxzZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBjb25zb2xlLndhcm5cbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0RlcHJlY2F0aW9uIHdhcm5pbmc6ICcgKyBtc2cpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVwcmVjYXRlKG1zZywgZm4pIHtcbiAgICAgICAgdmFyIGZpcnN0VGltZSA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIGV4dGVuZChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBob29rcy5kZXByZWNhdGlvbkhhbmRsZXIobnVsbCwgbXNnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaXJzdFRpbWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICAgICAgICAgICAgICBhcmcsXG4gICAgICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgICAgIGtleTtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1tpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyArPSAnXFxuWycgKyBpICsgJ10gJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIGFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGFyZ3VtZW50c1swXSwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0ga2V5ICsgJzogJyArIGFyZ3VtZW50c1swXVtrZXldICsgJywgJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcuc2xpY2UoMCwgLTIpOyAvLyBSZW1vdmUgdHJhaWxpbmcgY29tbWEgYW5kIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGFyZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgICAgICAgIG1zZyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuQXJndW1lbnRzOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpLmpvaW4oJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcigpLnN0YWNrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBmbik7XG4gICAgfVxuXG4gICAgdmFyIGRlcHJlY2F0aW9ucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gZGVwcmVjYXRlU2ltcGxlKG5hbWUsIG1zZykge1xuICAgICAgICBpZiAoaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihuYW1lLCBtc2cpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGVwcmVjYXRpb25zW25hbWVdKSB7XG4gICAgICAgICAgICB3YXJuKG1zZyk7XG4gICAgICAgICAgICBkZXByZWNhdGlvbnNbbmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaG9va3Muc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID0gZmFsc2U7XG4gICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyID0gbnVsbDtcblxuICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0eXBlb2YgRnVuY3Rpb24gIT09ICd1bmRlZmluZWQnICYmIGlucHV0IGluc3RhbmNlb2YgRnVuY3Rpb24pIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0KGNvbmZpZykge1xuICAgICAgICB2YXIgcHJvcCwgaTtcbiAgICAgICAgZm9yIChpIGluIGNvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY29uZmlnLCBpKSkge1xuICAgICAgICAgICAgICAgIHByb3AgPSBjb25maWdbaV07XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1snXycgKyBpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgLy8gTGVuaWVudCBvcmRpbmFsIHBhcnNpbmcgYWNjZXB0cyBqdXN0IGEgbnVtYmVyIGluIGFkZGl0aW9uIHRvXG4gICAgICAgIC8vIG51bWJlciArIChwb3NzaWJseSkgc3R1ZmYgY29taW5nIGZyb20gX2RheU9mTW9udGhPcmRpbmFsUGFyc2UuXG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICAgICAgdGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQgPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgKHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2Uuc291cmNlIHx8IHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UpICtcbiAgICAgICAgICAgICAgICAnfCcgK1xuICAgICAgICAgICAgICAgIC9cXGR7MSwyfS8uc291cmNlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY2hpbGRDb25maWcpIHtcbiAgICAgICAgdmFyIHJlcyA9IGV4dGVuZCh7fSwgcGFyZW50Q29uZmlnKSxcbiAgICAgICAgICAgIHByb3A7XG4gICAgICAgIGZvciAocHJvcCBpbiBjaGlsZENvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHBhcmVudENvbmZpZ1twcm9wXSkgJiYgaXNPYmplY3QoY2hpbGRDb25maWdbcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBwYXJlbnRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBjaGlsZENvbmZpZ1twcm9wXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZENvbmZpZ1twcm9wXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGNoaWxkQ29uZmlnW3Byb3BdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXNbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAocHJvcCBpbiBwYXJlbnRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBoYXNPd25Qcm9wKHBhcmVudENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICAhaGFzT3duUHJvcChjaGlsZENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICBpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgY2hhbmdlcyB0byBwcm9wZXJ0aWVzIGRvbid0IG1vZGlmeSBwYXJlbnQgY29uZmlnXG4gICAgICAgICAgICAgICAgcmVzW3Byb3BdID0gZXh0ZW5kKHt9LCByZXNbcHJvcF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gTG9jYWxlKGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cztcblxuICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAga2V5cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHZhciBpLFxuICAgICAgICAgICAgICAgIHJlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChpIGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKG9iaiwgaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdENhbGVuZGFyID0ge1xuICAgICAgICBzYW1lRGF5OiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhcihrZXksIG1vbSwgbm93KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9jYWxlbmRhcltrZXldIHx8IHRoaXMuX2NhbGVuZGFyWydzYW1lRWxzZSddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihvdXRwdXQpID8gb3V0cHV0LmNhbGwobW9tLCBub3cpIDogb3V0cHV0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHplcm9GaWxsKG51bWJlciwgdGFyZ2V0TGVuZ3RoLCBmb3JjZVNpZ24pIHtcbiAgICAgICAgdmFyIGFic051bWJlciA9ICcnICsgTWF0aC5hYnMobnVtYmVyKSxcbiAgICAgICAgICAgIHplcm9zVG9GaWxsID0gdGFyZ2V0TGVuZ3RoIC0gYWJzTnVtYmVyLmxlbmd0aCxcbiAgICAgICAgICAgIHNpZ24gPSBudW1iZXIgPj0gMDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChzaWduID8gKGZvcmNlU2lnbiA/ICcrJyA6ICcnKSA6ICctJykgK1xuICAgICAgICAgICAgTWF0aC5wb3coMTAsIE1hdGgubWF4KDAsIHplcm9zVG9GaWxsKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkgK1xuICAgICAgICAgICAgYWJzTnVtYmVyXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdHRpbmdUb2tlbnMgPSAvKFxcW1teXFxbXSpcXF0pfChcXFxcKT8oW0hoXW1tKHNzKT98TW98TU0/TT9NP3xEb3xERERvfEREP0Q/RD98ZGRkP2Q/fGRvP3x3W298d10/fFdbb3xXXT98UW8/fE57MSw1fXxZWVlZWVl8WVlZWVl8WVlZWXxZWXx5ezIsNH18eW8/fGdnKGdnZz8pP3xHRyhHR0c/KT98ZXxFfGF8QXxoaD98SEg/fGtrP3xtbT98c3M/fFN7MSw5fXx4fFh8eno/fFpaP3wuKS9nLFxuICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMgPSAvKFxcW1teXFxbXSpcXF0pfChcXFxcKT8oTFRTfExUfExMP0w/TD98bHsxLDR9KS9nLFxuICAgICAgICBmb3JtYXRGdW5jdGlvbnMgPSB7fSxcbiAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnMgPSB7fTtcblxuICAgIC8vIHRva2VuOiAgICAnTSdcbiAgICAvLyBwYWRkZWQ6ICAgWydNTScsIDJdXG4gICAgLy8gb3JkaW5hbDogICdNbydcbiAgICAvLyBjYWxsYmFjazogZnVuY3Rpb24gKCkgeyB0aGlzLm1vbnRoKCkgKyAxIH1cbiAgICBmdW5jdGlvbiBhZGRGb3JtYXRUb2tlbih0b2tlbiwgcGFkZGVkLCBvcmRpbmFsLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZnVuYyA9IGNhbGxiYWNrO1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1tjYWxsYmFja10oKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl0gPSBmdW5jO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYWRkZWQpIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW3BhZGRlZFswXV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHplcm9GaWxsKGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgcGFkZGVkWzFdLCBwYWRkZWRbMl0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3JkaW5hbCkge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbb3JkaW5hbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm9yZGluYWwoXG4gICAgICAgICAgICAgICAgICAgIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoaW5wdXQpIHtcbiAgICAgICAgaWYgKGlucHV0Lm1hdGNoKC9cXFtbXFxzXFxTXS8pKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvXlxcW3xcXF0kL2csICcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvXFxcXC9nLCAnJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCkge1xuICAgICAgICB2YXIgYXJyYXkgPSBmb3JtYXQubWF0Y2goZm9ybWF0dGluZ1Rva2VucyksXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbGVuZ3RoO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dKSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBmb3JtYXRUb2tlbkZ1bmN0aW9uc1thcnJheVtpXV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gcmVtb3ZlRm9ybWF0dGluZ1Rva2VucyhhcnJheVtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG1vbSkge1xuICAgICAgICAgICAgdmFyIG91dHB1dCA9ICcnLFxuICAgICAgICAgICAgICAgIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gaXNGdW5jdGlvbihhcnJheVtpXSlcbiAgICAgICAgICAgICAgICAgICAgPyBhcnJheVtpXS5jYWxsKG1vbSwgZm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICA6IGFycmF5W2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBmb3JtYXQgZGF0ZSB1c2luZyBuYXRpdmUgZGF0ZSBvYmplY3RcbiAgICBmdW5jdGlvbiBmb3JtYXRNb21lbnQobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBtLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybWF0ID0gZXhwYW5kRm9ybWF0KGZvcm1hdCwgbS5sb2NhbGVEYXRhKCkpO1xuICAgICAgICBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XSA9XG4gICAgICAgICAgICBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XSB8fCBtYWtlRm9ybWF0RnVuY3Rpb24oZm9ybWF0KTtcblxuICAgICAgICByZXR1cm4gZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0obSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhwYW5kRm9ybWF0KGZvcm1hdCwgbG9jYWxlKSB7XG4gICAgICAgIHZhciBpID0gNTtcblxuICAgICAgICBmdW5jdGlvbiByZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnMoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUubG9uZ0RhdGVGb3JtYXQoaW5wdXQpIHx8IGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIHdoaWxlIChpID49IDAgJiYgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLnRlc3QoZm9ybWF0KSkge1xuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLFxuICAgICAgICAgICAgICAgIHJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2Vuc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgaSAtPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvbmdEYXRlRm9ybWF0ID0ge1xuICAgICAgICBMVFM6ICdoOm1tOnNzIEEnLFxuICAgICAgICBMVDogJ2g6bW0gQScsXG4gICAgICAgIEw6ICdNTS9ERC9ZWVlZJyxcbiAgICAgICAgTEw6ICdNTU1NIEQsIFlZWVknLFxuICAgICAgICBMTEw6ICdNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICAgICAgTExMTDogJ2RkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEnLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBsb25nRGF0ZUZvcm1hdChrZXkpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV0sXG4gICAgICAgICAgICBmb3JtYXRVcHBlciA9IHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleS50b1VwcGVyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoZm9ybWF0IHx8ICFmb3JtYXRVcHBlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV0gPSBmb3JtYXRVcHBlclxuICAgICAgICAgICAgLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uICh0b2spIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ01NTU0nIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ01NJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdERCcgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnZGRkZCdcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvay5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvaztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbignJyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV07XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRJbnZhbGlkRGF0ZSA9ICdJbnZhbGlkIGRhdGUnO1xuXG4gICAgZnVuY3Rpb24gaW52YWxpZERhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZhbGlkRGF0ZTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdE9yZGluYWwgPSAnJWQnLFxuICAgICAgICBkZWZhdWx0RGF5T2ZNb250aE9yZGluYWxQYXJzZSA9IC9cXGR7MSwyfS87XG5cbiAgICBmdW5jdGlvbiBvcmRpbmFsKG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3JkaW5hbC5yZXBsYWNlKCclZCcsIG51bWJlcik7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRSZWxhdGl2ZVRpbWUgPSB7XG4gICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgcGFzdDogJyVzIGFnbycsXG4gICAgICAgIHM6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgbTogJ2EgbWludXRlJyxcbiAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICBoaDogJyVkIGhvdXJzJyxcbiAgICAgICAgZDogJ2EgZGF5JyxcbiAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgdzogJ2Egd2VlaycsXG4gICAgICAgIHd3OiAnJWQgd2Vla3MnLFxuICAgICAgICBNOiAnYSBtb250aCcsXG4gICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgeTogJ2EgeWVhcicsXG4gICAgICAgIHl5OiAnJWQgeWVhcnMnLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9yZWxhdGl2ZVRpbWVbc3RyaW5nXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24ob3V0cHV0KVxuICAgICAgICAgICAgPyBvdXRwdXQobnVtYmVyLCB3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKVxuICAgICAgICAgICAgOiBvdXRwdXQucmVwbGFjZSgvJWQvaSwgbnVtYmVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXN0RnV0dXJlKGRpZmYsIG91dHB1dCkge1xuICAgICAgICB2YXIgZm9ybWF0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW2RpZmYgPiAwID8gJ2Z1dHVyZScgOiAncGFzdCddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihmb3JtYXQpID8gZm9ybWF0KG91dHB1dCkgOiBmb3JtYXQucmVwbGFjZSgvJXMvaSwgb3V0cHV0KTtcbiAgICB9XG5cbiAgICB2YXIgYWxpYXNlcyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkVW5pdEFsaWFzKHVuaXQsIHNob3J0aGFuZCkge1xuICAgICAgICB2YXIgbG93ZXJDYXNlID0gdW5pdC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBhbGlhc2VzW2xvd2VyQ2FzZV0gPSBhbGlhc2VzW2xvd2VyQ2FzZSArICdzJ10gPSBhbGlhc2VzW3Nob3J0aGFuZF0gPSB1bml0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdW5pdHMgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IGFsaWFzZXNbdW5pdHNdIHx8IGFsaWFzZXNbdW5pdHMudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdFVuaXRzKGlucHV0T2JqZWN0KSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSB7fSxcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wLFxuICAgICAgICAgICAgcHJvcDtcblxuICAgICAgICBmb3IgKHByb3AgaW4gaW5wdXRPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGlucHV0T2JqZWN0LCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wID0gbm9ybWFsaXplVW5pdHMocHJvcCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRQcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRJbnB1dFtub3JtYWxpemVkUHJvcF0gPSBpbnB1dE9iamVjdFtwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9ybWFsaXplZElucHV0O1xuICAgIH1cblxuICAgIHZhciBwcmlvcml0aWVzID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRVbml0UHJpb3JpdHkodW5pdCwgcHJpb3JpdHkpIHtcbiAgICAgICAgcHJpb3JpdGllc1t1bml0XSA9IHByaW9yaXR5O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFByaW9yaXRpemVkVW5pdHModW5pdHNPYmopIHtcbiAgICAgICAgdmFyIHVuaXRzID0gW10sXG4gICAgICAgICAgICB1O1xuICAgICAgICBmb3IgKHUgaW4gdW5pdHNPYmopIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKHVuaXRzT2JqLCB1KSkge1xuICAgICAgICAgICAgICAgIHVuaXRzLnB1c2goeyB1bml0OiB1LCBwcmlvcml0eTogcHJpb3JpdGllc1t1XSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB1bml0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdW5pdHM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMZWFwWWVhcih5ZWFyKSB7XG4gICAgICAgIHJldHVybiAoeWVhciAlIDQgPT09IDAgJiYgeWVhciAlIDEwMCAhPT0gMCkgfHwgeWVhciAlIDQwMCA9PT0gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNGbG9vcihudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIC8vIC0wIC0+IDBcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwobnVtYmVyKSB8fCAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSW50KGFyZ3VtZW50Rm9yQ29lcmNpb24pIHtcbiAgICAgICAgdmFyIGNvZXJjZWROdW1iZXIgPSArYXJndW1lbnRGb3JDb2VyY2lvbixcbiAgICAgICAgICAgIHZhbHVlID0gMDtcblxuICAgICAgICBpZiAoY29lcmNlZE51bWJlciAhPT0gMCAmJiBpc0Zpbml0ZShjb2VyY2VkTnVtYmVyKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBhYnNGbG9vcihjb2VyY2VkTnVtYmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlR2V0U2V0KHVuaXQsIGtlZXBUaW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgc2V0JDEodGhpcywgdW5pdCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCBrZWVwVGltZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywgdW5pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0KG1vbSwgdW5pdCkge1xuICAgICAgICByZXR1cm4gbW9tLmlzVmFsaWQoKVxuICAgICAgICAgICAgPyBtb20uX2RbJ2dldCcgKyAobW9tLl9pc1VUQyA/ICdVVEMnIDogJycpICsgdW5pdF0oKVxuICAgICAgICAgICAgOiBOYU47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0JDEobW9tLCB1bml0LCB2YWx1ZSkge1xuICAgICAgICBpZiAobW9tLmlzVmFsaWQoKSAmJiAhaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdW5pdCA9PT0gJ0Z1bGxZZWFyJyAmJlxuICAgICAgICAgICAgICAgIGlzTGVhcFllYXIobW9tLnllYXIoKSkgJiZcbiAgICAgICAgICAgICAgICBtb20ubW9udGgoKSA9PT0gMSAmJlxuICAgICAgICAgICAgICAgIG1vbS5kYXRlKCkgPT09IDI5XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvSW50KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBtb20uX2RbJ3NldCcgKyAobW9tLl9pc1VUQyA/ICdVVEMnIDogJycpICsgdW5pdF0oXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBtb20ubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgZGF5c0luTW9udGgodmFsdWUsIG1vbS5tb250aCgpKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1vbS5fZFsnc2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyB1bml0XSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBzdHJpbmdHZXQodW5pdHMpIHtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXNbdW5pdHNdKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbdW5pdHNdKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RyaW5nU2V0KHVuaXRzLCB2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHVuaXRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdW5pdHMgPSBub3JtYWxpemVPYmplY3RVbml0cyh1bml0cyk7XG4gICAgICAgICAgICB2YXIgcHJpb3JpdGl6ZWQgPSBnZXRQcmlvcml0aXplZFVuaXRzKHVuaXRzKSxcbiAgICAgICAgICAgICAgICBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHByaW9yaXRpemVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpc1twcmlvcml0aXplZFtpXS51bml0XSh1bml0c1twcmlvcml0aXplZFtpXS51bml0XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXNbdW5pdHNdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIG1hdGNoMSA9IC9cXGQvLCAvLyAgICAgICAwIC0gOVxuICAgICAgICBtYXRjaDIgPSAvXFxkXFxkLywgLy8gICAgICAwMCAtIDk5XG4gICAgICAgIG1hdGNoMyA9IC9cXGR7M30vLCAvLyAgICAgMDAwIC0gOTk5XG4gICAgICAgIG1hdGNoNCA9IC9cXGR7NH0vLCAvLyAgICAwMDAwIC0gOTk5OVxuICAgICAgICBtYXRjaDYgPSAvWystXT9cXGR7Nn0vLCAvLyAtOTk5OTk5IC0gOTk5OTk5XG4gICAgICAgIG1hdGNoMXRvMiA9IC9cXGRcXGQ/LywgLy8gICAgICAgMCAtIDk5XG4gICAgICAgIG1hdGNoM3RvNCA9IC9cXGRcXGRcXGRcXGQ/LywgLy8gICAgIDk5OSAtIDk5OTlcbiAgICAgICAgbWF0Y2g1dG82ID0gL1xcZFxcZFxcZFxcZFxcZFxcZD8vLCAvLyAgIDk5OTk5IC0gOTk5OTk5XG4gICAgICAgIG1hdGNoMXRvMyA9IC9cXGR7MSwzfS8sIC8vICAgICAgIDAgLSA5OTlcbiAgICAgICAgbWF0Y2gxdG80ID0gL1xcZHsxLDR9LywgLy8gICAgICAgMCAtIDk5OTlcbiAgICAgICAgbWF0Y2gxdG82ID0gL1srLV0/XFxkezEsNn0vLCAvLyAtOTk5OTk5IC0gOTk5OTk5XG4gICAgICAgIG1hdGNoVW5zaWduZWQgPSAvXFxkKy8sIC8vICAgICAgIDAgLSBpbmZcbiAgICAgICAgbWF0Y2hTaWduZWQgPSAvWystXT9cXGQrLywgLy8gICAgLWluZiAtIGluZlxuICAgICAgICBtYXRjaE9mZnNldCA9IC9afFsrLV1cXGRcXGQ6P1xcZFxcZC9naSwgLy8gKzAwOjAwIC0wMDowMCArMDAwMCAtMDAwMCBvciBaXG4gICAgICAgIG1hdGNoU2hvcnRPZmZzZXQgPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy9naSwgLy8gKzAwIC0wMCArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcbiAgICAgICAgbWF0Y2hUaW1lc3RhbXAgPSAvWystXT9cXGQrKFxcLlxcZHsxLDN9KT8vLCAvLyAxMjM0NTY3ODkgMTIzNDU2Nzg5LjEyM1xuICAgICAgICAvLyBhbnkgd29yZCAob3IgdHdvKSBjaGFyYWN0ZXJzIG9yIG51bWJlcnMgaW5jbHVkaW5nIHR3by90aHJlZSB3b3JkIG1vbnRoIGluIGFyYWJpYy5cbiAgICAgICAgLy8gaW5jbHVkZXMgc2NvdHRpc2ggZ2FlbGljIHR3byB3b3JkIGFuZCBoeXBoZW5hdGVkIG1vbnRoc1xuICAgICAgICBtYXRjaFdvcmQgPSAvWzAtOV17MCwyNTZ9WydhLXpcXHUwMEEwLVxcdTA1RkZcXHUwNzAwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGMDdcXHVGRjEwLVxcdUZGRUZdezEsMjU2fXxbXFx1MDYwMC1cXHUwNkZGXFwvXXsxLDI1Nn0oXFxzKj9bXFx1MDYwMC1cXHUwNkZGXXsxLDI1Nn0pezEsMn0vaSxcbiAgICAgICAgcmVnZXhlcztcblxuICAgIHJlZ2V4ZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFJlZ2V4VG9rZW4odG9rZW4sIHJlZ2V4LCBzdHJpY3RSZWdleCkge1xuICAgICAgICByZWdleGVzW3Rva2VuXSA9IGlzRnVuY3Rpb24ocmVnZXgpXG4gICAgICAgICAgICA/IHJlZ2V4XG4gICAgICAgICAgICA6IGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlRGF0YSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzU3RyaWN0ICYmIHN0cmljdFJlZ2V4ID8gc3RyaWN0UmVnZXggOiByZWdleDtcbiAgICAgICAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykge1xuICAgICAgICBpZiAoIWhhc093blByb3AocmVnZXhlcywgdG9rZW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCh1bmVzY2FwZUZvcm1hdCh0b2tlbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlZ2V4ZXNbdG9rZW5dKGNvbmZpZy5fc3RyaWN0LCBjb25maWcuX2xvY2FsZSk7XG4gICAgfVxuXG4gICAgLy8gQ29kZSBmcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzU2MTQ5My9pcy10aGVyZS1hLXJlZ2V4cC1lc2NhcGUtZnVuY3Rpb24taW4tamF2YXNjcmlwdFxuICAgIGZ1bmN0aW9uIHVuZXNjYXBlRm9ybWF0KHMpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2V4RXNjYXBlKFxuICAgICAgICAgICAgc1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXFxcJywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFwoXFxbKXxcXFxcKFxcXSl8XFxbKFteXFxdXFxbXSopXFxdfFxcXFwoLikvZywgZnVuY3Rpb24gKFxuICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLFxuICAgICAgICAgICAgICAgICAgICBwMSxcbiAgICAgICAgICAgICAgICAgICAgcDIsXG4gICAgICAgICAgICAgICAgICAgIHAzLFxuICAgICAgICAgICAgICAgICAgICBwNFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcDEgfHwgcDIgfHwgcDMgfHwgcDQ7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWdleEVzY2FwZShzKSB7XG4gICAgICAgIHJldHVybiBzLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuICAgIH1cblxuICAgIHZhciB0b2tlbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFBhcnNlVG9rZW4odG9rZW4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgZnVuYyA9IGNhbGxiYWNrO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdG9rZW4gPSBbdG9rZW5dO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc051bWJlcihjYWxsYmFjaykpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbY2FsbGJhY2tdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG9rZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRva2Vuc1t0b2tlbltpXV0gPSBmdW5jO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkV2Vla1BhcnNlVG9rZW4odG9rZW4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGFkZFBhcnNlVG9rZW4odG9rZW4sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIGNvbmZpZy5fdyA9IGNvbmZpZy5fdyB8fCB7fTtcbiAgICAgICAgICAgIGNhbGxiYWNrKGlucHV0LCBjb25maWcuX3csIGNvbmZpZywgdG9rZW4pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRUaW1lVG9BcnJheUZyb21Ub2tlbih0b2tlbiwgaW5wdXQsIGNvbmZpZykge1xuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCAmJiBoYXNPd25Qcm9wKHRva2VucywgdG9rZW4pKSB7XG4gICAgICAgICAgICB0b2tlbnNbdG9rZW5dKGlucHV0LCBjb25maWcuX2EsIGNvbmZpZywgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIFlFQVIgPSAwLFxuICAgICAgICBNT05USCA9IDEsXG4gICAgICAgIERBVEUgPSAyLFxuICAgICAgICBIT1VSID0gMyxcbiAgICAgICAgTUlOVVRFID0gNCxcbiAgICAgICAgU0VDT05EID0gNSxcbiAgICAgICAgTUlMTElTRUNPTkQgPSA2LFxuICAgICAgICBXRUVLID0gNyxcbiAgICAgICAgV0VFS0RBWSA9IDg7XG5cbiAgICBmdW5jdGlvbiBtb2QobiwgeCkge1xuICAgICAgICByZXR1cm4gKChuICUgeCkgKyB4KSAlIHg7XG4gICAgfVxuXG4gICAgdmFyIGluZGV4T2Y7XG5cbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLmluZGV4T2YpIHtcbiAgICAgICAgaW5kZXhPZiA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGluZGV4T2YgPSBmdW5jdGlvbiAobykge1xuICAgICAgICAgICAgLy8gSSBrbm93XG4gICAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXNbaV0gPT09IG8pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICAgIGlmIChpc05hTih5ZWFyKSB8fCBpc05hTihtb250aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG1vZE1vbnRoID0gbW9kKG1vbnRoLCAxMik7XG4gICAgICAgIHllYXIgKz0gKG1vbnRoIC0gbW9kTW9udGgpIC8gMTI7XG4gICAgICAgIHJldHVybiBtb2RNb250aCA9PT0gMVxuICAgICAgICAgICAgPyBpc0xlYXBZZWFyKHllYXIpXG4gICAgICAgICAgICAgICAgPyAyOVxuICAgICAgICAgICAgICAgIDogMjhcbiAgICAgICAgICAgIDogMzEgLSAoKG1vZE1vbnRoICUgNykgJSAyKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignTScsIFsnTU0nLCAyXSwgJ01vJywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb250aCgpICsgMTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNTU0nLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHNTaG9ydCh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ01NTU0nLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHModGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnbW9udGgnLCAnTScpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnbW9udGgnLCA4KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ00nLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTScsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUubW9udGhzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignTU1NTScsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUubW9udGhzUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ00nLCAnTU0nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNT05USF0gPSB0b0ludChpbnB1dCkgLSAxO1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ01NTScsICdNTU1NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIG1vbnRoID0gY29uZmlnLl9sb2NhbGUubW9udGhzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBmaW5kIGEgbW9udGggbmFtZSwgbWFyayB0aGUgZGF0ZSBhcyBpbnZhbGlkLlxuICAgICAgICBpZiAobW9udGggIT0gbnVsbCkge1xuICAgICAgICAgICAgYXJyYXlbTU9OVEhdID0gbW9udGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkTW9udGggPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNb250aHMgPSAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0ID0gJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBNT05USFNfSU5fRk9STUFUID0gL0Rbb0RdPyhcXFtbXlxcW1xcXV0qXFxdfFxccykrTU1NTT8vLFxuICAgICAgICBkZWZhdWx0TW9udGhzU2hvcnRSZWdleCA9IG1hdGNoV29yZCxcbiAgICAgICAgZGVmYXVsdE1vbnRoc1JlZ2V4ID0gbWF0Y2hXb3JkO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzKG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRocylcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1xuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzWydzdGFuZGFsb25lJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzKVxuICAgICAgICAgICAgPyB0aGlzLl9tb250aHNbbS5tb250aCgpXVxuICAgICAgICAgICAgOiB0aGlzLl9tb250aHNbXG4gICAgICAgICAgICAgICAgICAodGhpcy5fbW9udGhzLmlzRm9ybWF0IHx8IE1PTlRIU19JTl9GT1JNQVQpLnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgID8gJ2Zvcm1hdCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdW20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzU2hvcnQobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzU2hvcnQpXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydClcbiAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRbbS5tb250aCgpXVxuICAgICAgICAgICAgOiB0aGlzLl9tb250aHNTaG9ydFtcbiAgICAgICAgICAgICAgICAgIE1PTlRIU19JTl9GT1JNQVQudGVzdChmb3JtYXQpID8gJ2Zvcm1hdCcgOiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICAgICAgXVttLm1vbnRoKCldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVN0cmljdFBhcnNlKG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBpaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIGxsYyA9IG1vbnRoTmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCB1c2VkXG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7ICsraSkge1xuICAgICAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0gPSB0aGlzLm1vbnRoc1Nob3J0KFxuICAgICAgICAgICAgICAgICAgICBtb20sXG4gICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzKG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnTU1NJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnTU1NJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRoc1BhcnNlKG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksIG1vbSwgcmVnZXg7XG5cbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZS5jYWxsKHRoaXMsIG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9tb250aHNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ETzogYWRkIHNvcnRpbmdcbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSBtb250aCAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlclxuICAgICAgICAvLyBzZWUgc29ydGluZyBpbiBjb21wdXRlTW9udGhzUGFyc2VcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmICF0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLm1vbnRocyhtb20sICcnKS5yZXBsYWNlKCcuJywgJycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0cmljdCAmJiAhdGhpcy5fbW9udGhzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICByZWdleCA9XG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpICsgJ3xeJyArIHRoaXMubW9udGhzU2hvcnQobW9tLCAnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKHJlZ2V4LnJlcGxhY2UoJy4nLCAnJyksICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0ZXN0IHRoZSByZWdleFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ01NTU0nICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ01NTScgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJpY3QgJiYgdGhpcy5fbW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBzZXRNb250aChtb20sIHZhbHVlKSB7XG4gICAgICAgIHZhciBkYXlPZk1vbnRoO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybiBtb207XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKC9eXFxkKyQvLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0b0ludCh2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbW9tLmxvY2FsZURhdGEoKS5tb250aHNQYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogQW5vdGhlciBzaWxlbnQgZmFpbHVyZT9cbiAgICAgICAgICAgICAgICBpZiAoIWlzTnVtYmVyKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRheU9mTW9udGggPSBNYXRoLm1pbihtb20uZGF0ZSgpLCBkYXlzSW5Nb250aChtb20ueWVhcigpLCB2YWx1ZSkpO1xuICAgICAgICBtb20uX2RbJ3NldCcgKyAobW9tLl9pc1VUQyA/ICdVVEMnIDogJycpICsgJ01vbnRoJ10odmFsdWUsIGRheU9mTW9udGgpO1xuICAgICAgICByZXR1cm4gbW9tO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldE1vbnRoKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBzZXRNb250aCh0aGlzLCB2YWx1ZSk7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywgJ01vbnRoJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXREYXlzSW5Nb250aCgpIHtcbiAgICAgICAgcmV0dXJuIGRheXNJbk1vbnRoKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoc1Nob3J0UmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlTW9udGhzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1Nob3J0UmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1Nob3J0UmVnZXggPSBkZWZhdWx0TW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhzUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlTW9udGhzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1JlZ2V4ID0gZGVmYXVsdE1vbnRoc1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlTW9udGhzUGFyc2UoKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNtcExlblJldihhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYi5sZW5ndGggLSBhLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaG9ydFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbG9uZ1BpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbWl4ZWRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBtb207XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgc2hvcnRQaWVjZXMucHVzaCh0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXMucHVzaCh0aGlzLm1vbnRocyhtb20sICcnKSk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHRoaXMubW9udGhzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2godGhpcy5tb250aHNTaG9ydChtb20sICcnKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSBtb250aCAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIHNob3J0UGllY2VzW2ldID0gcmVnZXhFc2NhcGUoc2hvcnRQaWVjZXNbaV0pO1xuICAgICAgICAgICAgbG9uZ1BpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKGxvbmdQaWVjZXNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNDsgaSsrKSB7XG4gICAgICAgICAgICBtaXhlZFBpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKG1peGVkUGllY2VzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21vbnRoc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignWScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHkgPSB0aGlzLnllYXIoKTtcbiAgICAgICAgcmV0dXJuIHkgPD0gOTk5OSA/IHplcm9GaWxsKHksIDQpIDogJysnICsgeTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVknLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy55ZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVknLCA0XSwgMCwgJ3llYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVlZJywgNV0sIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWVknLCA2LCB0cnVlXSwgMCwgJ3llYXInKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygneWVhcicsICd5Jyk7XG5cbiAgICAvLyBQUklPUklUSUVTXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3llYXInLCAxKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1knLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVknLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWScsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWScsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnWVlZWVknLCAnWVlZWVlZJ10sIFlFQVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1lZWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID1cbiAgICAgICAgICAgIGlucHV0Lmxlbmd0aCA9PT0gMiA/IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KSA6IHRvSW50KGlucHV0KTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdZWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBwYXJzZUludChpbnB1dCwgMTApO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgZnVuY3Rpb24gZGF5c0luWWVhcih5ZWFyKSB7XG4gICAgICAgIHJldHVybiBpc0xlYXBZZWFyKHllYXIpID8gMzY2IDogMzY1O1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICBob29rcy5wYXJzZVR3b0RpZ2l0WWVhciA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gdG9JbnQoaW5wdXQpICsgKHRvSW50KGlucHV0KSA+IDY4ID8gMTkwMCA6IDIwMDApO1xuICAgIH07XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0WWVhciA9IG1ha2VHZXRTZXQoJ0Z1bGxZZWFyJywgdHJ1ZSk7XG5cbiAgICBmdW5jdGlvbiBnZXRJc0xlYXBZZWFyKCkge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih0aGlzLnllYXIoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRGF0ZSh5LCBtLCBkLCBoLCBNLCBzLCBtcykge1xuICAgICAgICAvLyBjYW4ndCBqdXN0IGFwcGx5KCkgdG8gY3JlYXRlIGEgZGF0ZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xLzE4MTM0OFxuICAgICAgICB2YXIgZGF0ZTtcbiAgICAgICAgLy8gdGhlIGRhdGUgY29uc3RydWN0b3IgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh5ICsgNDAwLCBtLCBkLCBoLCBNLCBzLCBtcyk7XG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RnVsbFllYXIoeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoeSwgbSwgZCwgaCwgTSwgcywgbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlVVRDRGF0ZSh5KSB7XG4gICAgICAgIHZhciBkYXRlLCBhcmdzO1xuICAgICAgICAvLyB0aGUgRGF0ZS5VVEMgZnVuY3Rpb24gcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgYXJnc1swXSA9IHkgKyA0MDA7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJncykpO1xuICAgICAgICAgICAgaWYgKGlzRmluaXRlKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSkpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsIGFyZ3VtZW50cykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQtb2YtZmlyc3Qtd2VlayAtIHN0YXJ0LW9mLXllYXJcbiAgICBmdW5jdGlvbiBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIC8vIGZpcnN0LXdlZWsgZGF5IC0tIHdoaWNoIGphbnVhcnkgaXMgYWx3YXlzIGluIHRoZSBmaXJzdCB3ZWVrICg0IGZvciBpc28sIDEgZm9yIG90aGVyKVxuICAgICAgICAgICAgZndkID0gNyArIGRvdyAtIGRveSxcbiAgICAgICAgICAgIC8vIGZpcnN0LXdlZWsgZGF5IGxvY2FsIHdlZWtkYXkgLS0gd2hpY2ggbG9jYWwgd2Vla2RheSBpcyBmd2RcbiAgICAgICAgICAgIGZ3ZGx3ID0gKDcgKyBjcmVhdGVVVENEYXRlKHllYXIsIDAsIGZ3ZCkuZ2V0VVRDRGF5KCkgLSBkb3cpICUgNztcblxuICAgICAgICByZXR1cm4gLWZ3ZGx3ICsgZndkIC0gMTtcbiAgICB9XG5cbiAgICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlI0NhbGN1bGF0aW5nX2FfZGF0ZV9naXZlbl90aGVfeWVhci4yQ193ZWVrX251bWJlcl9hbmRfd2Vla2RheVxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrcyh5ZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgbG9jYWxXZWVrZGF5ID0gKDcgKyB3ZWVrZGF5IC0gZG93KSAlIDcsXG4gICAgICAgICAgICB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSxcbiAgICAgICAgICAgIGRheU9mWWVhciA9IDEgKyA3ICogKHdlZWsgLSAxKSArIGxvY2FsV2Vla2RheSArIHdlZWtPZmZzZXQsXG4gICAgICAgICAgICByZXNZZWFyLFxuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyO1xuXG4gICAgICAgIGlmIChkYXlPZlllYXIgPD0gMCkge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXIgLSAxO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5c0luWWVhcihyZXNZZWFyKSArIGRheU9mWWVhcjtcbiAgICAgICAgfSBlbHNlIGlmIChkYXlPZlllYXIgPiBkYXlzSW5ZZWFyKHllYXIpKSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhciArIDE7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlPZlllYXIgLSBkYXlzSW5ZZWFyKHllYXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXI7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlPZlllYXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeWVhcjogcmVzWWVhcixcbiAgICAgICAgICAgIGRheU9mWWVhcjogcmVzRGF5T2ZZZWFyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtPZlllYXIobW9tLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldChtb20ueWVhcigpLCBkb3csIGRveSksXG4gICAgICAgICAgICB3ZWVrID0gTWF0aC5mbG9vcigobW9tLmRheU9mWWVhcigpIC0gd2Vla09mZnNldCAtIDEpIC8gNykgKyAxLFxuICAgICAgICAgICAgcmVzV2VlayxcbiAgICAgICAgICAgIHJlc1llYXI7XG5cbiAgICAgICAgaWYgKHdlZWsgPCAxKSB7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKSAtIDE7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlayArIHdlZWtzSW5ZZWFyKHJlc1llYXIsIGRvdywgZG95KTtcbiAgICAgICAgfSBlbHNlIGlmICh3ZWVrID4gd2Vla3NJblllYXIobW9tLnllYXIoKSwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlayAtIHdlZWtzSW5ZZWFyKG1vbS55ZWFyKCksIGRvdywgZG95KTtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpO1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2VlazogcmVzV2VlayxcbiAgICAgICAgICAgIHllYXI6IHJlc1llYXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla3NJblllYXIoeWVhciwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpLFxuICAgICAgICAgICAgd2Vla09mZnNldE5leHQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciArIDEsIGRvdywgZG95KTtcbiAgICAgICAgcmV0dXJuIChkYXlzSW5ZZWFyKHllYXIpIC0gd2Vla09mZnNldCArIHdlZWtPZmZzZXROZXh0KSAvIDc7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3cnLCBbJ3d3JywgMl0sICd3bycsICd3ZWVrJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ1cnLCBbJ1dXJywgMl0sICdXbycsICdpc29XZWVrJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3dlZWsnLCAndycpO1xuICAgIGFkZFVuaXRBbGlhcygnaXNvV2VlaycsICdXJyk7XG5cbiAgICAvLyBQUklPUklUSUVTXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3dlZWsnLCA1KTtcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2lzb1dlZWsnLCA1KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3cnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3d3JywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1cnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1dXJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWyd3JywgJ3d3JywgJ1cnLCAnV1cnXSwgZnVuY3Rpb24gKFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgd2VlayxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICB0b2tlblxuICAgICkge1xuICAgICAgICB3ZWVrW3Rva2VuLnN1YnN0cigwLCAxKV0gPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrKG1vbSkge1xuICAgICAgICByZXR1cm4gd2Vla09mWWVhcihtb20sIHRoaXMuX3dlZWsuZG93LCB0aGlzLl93ZWVrLmRveSkud2VlaztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWsgPSB7XG4gICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVGaXJzdERheU9mV2VlaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWsuZG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZZZWFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3k7XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2VlayhpbnB1dCkge1xuICAgICAgICB2YXIgd2VlayA9IHRoaXMubG9jYWxlRGF0YSgpLndlZWsodGhpcyk7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRJU09XZWVrKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gd2Vla09mWWVhcih0aGlzLCAxLCA0KS53ZWVrO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWsgOiB0aGlzLmFkZCgoaW5wdXQgLSB3ZWVrKSAqIDcsICdkJyk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2QnLCAwLCAnZG8nLCAnZGF5Jyk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c01pbih0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXModGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdlJywgMCwgMCwgJ3dlZWtkYXknKTtcbiAgICBhZGRGb3JtYXRUb2tlbignRScsIDAsIDAsICdpc29XZWVrZGF5Jyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ2RheScsICdkJyk7XG4gICAgYWRkVW5pdEFsaWFzKCd3ZWVrZGF5JywgJ2UnKTtcbiAgICBhZGRVbml0QWxpYXMoJ2lzb1dlZWtkYXknLCAnRScpO1xuXG4gICAgLy8gUFJJT1JJVFlcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2RheScsIDExKTtcbiAgICBhZGRVbml0UHJpb3JpdHkoJ3dlZWtkYXknLCAxMSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCdpc29XZWVrZGF5JywgMTEpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignZCcsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignZScsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignRScsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzTWluUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNTaG9ydFJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdkZGRkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZGQnLCAnZGRkJywgJ2RkZGQnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciB3ZWVrZGF5ID0gY29uZmlnLl9sb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCwgdG9rZW4sIGNvbmZpZy5fc3RyaWN0KTtcbiAgICAgICAgLy8gaWYgd2UgZGlkbid0IGdldCBhIHdlZWtkYXkgbmFtZSwgbWFyayB0aGUgZGF0ZSBhcyBpbnZhbGlkXG4gICAgICAgIGlmICh3ZWVrZGF5ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHdlZWsuZCA9IHdlZWtkYXk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkV2Vla2RheSA9IGlucHV0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2QnLCAnZScsICdFJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB3ZWVrW3Rva2VuXSA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIGZ1bmN0aW9uIHBhcnNlV2Vla2RheShpbnB1dCwgbG9jYWxlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTmFOKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgICAgIH1cblxuICAgICAgICBpbnB1dCA9IGxvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlSXNvV2Vla2RheShpbnB1dCwgbG9jYWxlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQpICUgNyB8fCA3O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc05hTihpbnB1dCkgPyBudWxsIDogaW5wdXQ7XG4gICAgfVxuXG4gICAgLy8gTE9DQUxFU1xuICAgIGZ1bmN0aW9uIHNoaWZ0V2Vla2RheXMod3MsIG4pIHtcbiAgICAgICAgcmV0dXJuIHdzLnNsaWNlKG4sIDcpLmNvbmNhdCh3cy5zbGljZSgwLCBuKSk7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVXZWVrZGF5cyA9ICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQgPSAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4gPSAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c1JlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0V2Vla2RheXNTaG9ydFJlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0V2Vla2RheXNNaW5SZWdleCA9IG1hdGNoV29yZDtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzKG0sIGZvcm1hdCkge1xuICAgICAgICB2YXIgd2Vla2RheXMgPSBpc0FycmF5KHRoaXMuX3dlZWtkYXlzKVxuICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1xuICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1tcbiAgICAgICAgICAgICAgICAgIG0gJiYgbSAhPT0gdHJ1ZSAmJiB0aGlzLl93ZWVrZGF5cy5pc0Zvcm1hdC50ZXN0KGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgICA/ICdmb3JtYXQnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIG0gPT09IHRydWVcbiAgICAgICAgICAgID8gc2hpZnRXZWVrZGF5cyh3ZWVrZGF5cywgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgID8gd2Vla2RheXNbbS5kYXkoKV1cbiAgICAgICAgICAgIDogd2Vla2RheXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNTaG9ydChtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNTaG9ydCwgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTaG9ydFttLmRheSgpXVxuICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1Nob3J0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzTWluKG0pIHtcbiAgICAgICAgcmV0dXJuIG0gPT09IHRydWVcbiAgICAgICAgICAgID8gc2hpZnRXZWVrZGF5cyh0aGlzLl93ZWVrZGF5c01pbiwgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNNaW5bbS5kYXkoKV1cbiAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNNaW47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UkMSh3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBpaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIGxsYyA9IHdlZWtkYXlOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlID0gW107XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyArK2kpIHtcbiAgICAgICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXNNaW4oXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5c1Nob3J0KFxuICAgICAgICAgICAgICAgICAgICBtb20sXG4gICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzKG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGRkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2RkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2RkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2RkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c1BhcnNlKHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlU3RyaWN0UGFyc2UkMS5jYWxsKHRoaXMsIHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuXG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmICF0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5cyhtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICByZWdleCA9XG4gICAgICAgICAgICAgICAgICAgICdeJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Vla2RheXMobW9tLCAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnfF4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpICtcbiAgICAgICAgICAgICAgICAgICAgJ3xeJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAocmVnZXgucmVwbGFjZSgnLicsICcnKSwgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRlc3QgdGhlIHJlZ2V4XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGRkZCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkZCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCAmJiB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXREYXlPZldlZWsoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXkgPSB0aGlzLl9pc1VUQyA/IHRoaXMuX2QuZ2V0VVRDRGF5KCkgOiB0aGlzLl9kLmdldERheSgpO1xuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW5wdXQgPSBwYXJzZVdlZWtkYXkoaW5wdXQsIHRoaXMubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZChpbnB1dCAtIGRheSwgJ2QnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkYXk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRMb2NhbGVEYXlPZldlZWsoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciB3ZWVrZGF5ID0gKHRoaXMuZGF5KCkgKyA3IC0gdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93KSAlIDc7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2Vla2RheSA6IHRoaXMuYWRkKGlucHV0IC0gd2Vla2RheSwgJ2QnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRJU09EYXlPZldlZWsoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYmVoYXZlcyB0aGUgc2FtZSBhcyBtb21lbnQjZGF5IGV4Y2VwdFxuICAgICAgICAvLyBhcyBhIGdldHRlciwgcmV0dXJucyA3IGluc3RlYWQgb2YgMCAoMS03IHJhbmdlIGluc3RlYWQgb2YgMC02KVxuICAgICAgICAvLyBhcyBhIHNldHRlciwgc3VuZGF5IHNob3VsZCBiZWxvbmcgdG8gdGhlIHByZXZpb3VzIHdlZWsuXG5cbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZhciB3ZWVrZGF5ID0gcGFyc2VJc29XZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXkodGhpcy5kYXkoKSAlIDcgPyB3ZWVrZGF5IDogd2Vla2RheSAtIDcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KCkgfHwgNztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZVdlZWtkYXlzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUmVnZXggPSBkZWZhdWx0V2Vla2RheXNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNTaG9ydFJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNTaG9ydFJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSBkZWZhdWx0V2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c01pblJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c01pblJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNNaW5SZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVXZWVrZGF5c1BhcnNlKCkge1xuICAgICAgICBmdW5jdGlvbiBjbXBMZW5SZXYoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWluUGllY2VzID0gW10sXG4gICAgICAgICAgICBzaG9ydFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbG9uZ1BpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbWl4ZWRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBtb20sXG4gICAgICAgICAgICBtaW5wLFxuICAgICAgICAgICAgc2hvcnRwLFxuICAgICAgICAgICAgbG9uZ3A7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgbWlucCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXNNaW4obW9tLCAnJykpO1xuICAgICAgICAgICAgc2hvcnRwID0gcmVnZXhFc2NhcGUodGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpKTtcbiAgICAgICAgICAgIGxvbmdwID0gcmVnZXhFc2NhcGUodGhpcy53ZWVrZGF5cyhtb20sICcnKSk7XG4gICAgICAgICAgICBtaW5QaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIHNob3J0UGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXMucHVzaChsb25ncCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKG1pbnApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChzaG9ydHApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChsb25ncCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSB3ZWVrZGF5IChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgICAgIC8vIHdpbGwgbWF0Y2ggdGhlIGxvbmdlciBwaWVjZS5cbiAgICAgICAgbWluUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBsb25nUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuXG4gICAgICAgIHRoaXMuX3dlZWtkYXlzUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBtaXhlZFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCA9IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzTWluUmVnZXggPSB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuXG4gICAgICAgIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIGxvbmdQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgc2hvcnRQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIG1pblBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBmdW5jdGlvbiBoRm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ob3VycygpICUgMTIgfHwgMTI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24ga0Zvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG91cnMoKSB8fCAyNDtcbiAgICB9XG5cbiAgICBhZGRGb3JtYXRUb2tlbignSCcsIFsnSEgnLCAyXSwgMCwgJ2hvdXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignaCcsIFsnaGgnLCAyXSwgMCwgaEZvcm1hdCk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ2snLCBbJ2trJywgMl0sIDAsIGtGb3JtYXQpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2htbScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICcnICsgaEZvcm1hdC5hcHBseSh0aGlzKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdobW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgIGhGb3JtYXQuYXBwbHkodGhpcykgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMuc2Vjb25kcygpLCAyKVxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0htbScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICcnICsgdGhpcy5ob3VycygpICsgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0htbXNzJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgJycgK1xuICAgICAgICAgICAgdGhpcy5ob3VycygpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwgMilcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtKHRva2VuLCBsb3dlcmNhc2UpIHtcbiAgICAgICAgYWRkRm9ybWF0VG9rZW4odG9rZW4sIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tZXJpZGllbShcbiAgICAgICAgICAgICAgICB0aGlzLmhvdXJzKCksXG4gICAgICAgICAgICAgICAgdGhpcy5taW51dGVzKCksXG4gICAgICAgICAgICAgICAgbG93ZXJjYXNlXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBtZXJpZGllbSgnYScsIHRydWUpO1xuICAgIG1lcmlkaWVtKCdBJywgZmFsc2UpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdob3VyJywgJ2gnKTtcblxuICAgIC8vIFBSSU9SSVRZXG4gICAgYWRkVW5pdFByaW9yaXR5KCdob3VyJywgMTMpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgZnVuY3Rpb24gbWF0Y2hNZXJpZGllbShpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuX21lcmlkaWVtUGFyc2U7XG4gICAgfVxuXG4gICAgYWRkUmVnZXhUb2tlbignYScsIG1hdGNoTWVyaWRpZW0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0EnLCBtYXRjaE1lcmlkaWVtKTtcbiAgICBhZGRSZWdleFRva2VuKCdIJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdoJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdrJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdISCcsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdoaCcsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdraycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2htbScsIG1hdGNoM3RvNCk7XG4gICAgYWRkUmVnZXhUb2tlbignaG1tc3MnLCBtYXRjaDV0bzYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0htbScsIG1hdGNoM3RvNCk7XG4gICAgYWRkUmVnZXhUb2tlbignSG1tc3MnLCBtYXRjaDV0bzYpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ0gnLCAnSEgnXSwgSE9VUik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2snLCAna2snXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBrSW5wdXQgPSB0b0ludChpbnB1dCk7XG4gICAgICAgIGFycmF5W0hPVVJdID0ga0lucHV0ID09PSAyNCA/IDAgOiBrSW5wdXQ7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2EnLCAnQSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9pc1BtID0gY29uZmlnLl9sb2NhbGUuaXNQTShpbnB1dCk7XG4gICAgICAgIGNvbmZpZy5fbWVyaWRpZW0gPSBpbnB1dDtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnaCcsICdoaCddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dCk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ2htbScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zKSk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ2htbXNzJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MxID0gaW5wdXQubGVuZ3RoIC0gNCxcbiAgICAgICAgICAgIHBvczIgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MxKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMSwgMikpO1xuICAgICAgICBhcnJheVtTRUNPTkRdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczIpKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHRydWU7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignSG1tJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MpKTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdIbW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zMSA9IGlucHV0Lmxlbmd0aCAtIDQsXG4gICAgICAgICAgICBwb3MyID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczEsIDIpKTtcbiAgICAgICAgYXJyYXlbU0VDT05EXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MyKSk7XG4gICAgfSk7XG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICBmdW5jdGlvbiBsb2NhbGVJc1BNKGlucHV0KSB7XG4gICAgICAgIC8vIElFOCBRdWlya3MgTW9kZSAmIElFNyBTdGFuZGFyZHMgTW9kZSBkbyBub3QgYWxsb3cgYWNjZXNzaW5nIHN0cmluZ3MgbGlrZSBhcnJheXNcbiAgICAgICAgLy8gVXNpbmcgY2hhckF0IHNob3VsZCBiZSBtb3JlIGNvbXBhdGlibGUuXG4gICAgICAgIHJldHVybiAoaW5wdXQgKyAnJykudG9Mb3dlckNhc2UoKS5jaGFyQXQoMCkgPT09ICdwJztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2UgPSAvW2FwXVxcLj9tP1xcLj8vaSxcbiAgICAgICAgLy8gU2V0dGluZyB0aGUgaG91ciBzaG91bGQga2VlcCB0aGUgdGltZSwgYmVjYXVzZSB0aGUgdXNlciBleHBsaWNpdGx5XG4gICAgICAgIC8vIHNwZWNpZmllZCB3aGljaCBob3VyIHRoZXkgd2FudC4gU28gdHJ5aW5nIHRvIG1haW50YWluIHRoZSBzYW1lIGhvdXIgKGluXG4gICAgICAgIC8vIGEgbmV3IHRpbWV6b25lKSBtYWtlcyBzZW5zZS4gQWRkaW5nL3N1YnRyYWN0aW5nIGhvdXJzIGRvZXMgbm90IGZvbGxvd1xuICAgICAgICAvLyB0aGlzIHJ1bGUuXG4gICAgICAgIGdldFNldEhvdXIgPSBtYWtlR2V0U2V0KCdIb3VycycsIHRydWUpO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlTWVyaWRpZW0oaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgaWYgKGhvdXJzID4gMTEpIHtcbiAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ3BtJyA6ICdQTSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdhbScgOiAnQU0nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGJhc2VDb25maWcgPSB7XG4gICAgICAgIGNhbGVuZGFyOiBkZWZhdWx0Q2FsZW5kYXIsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiBkZWZhdWx0TG9uZ0RhdGVGb3JtYXQsXG4gICAgICAgIGludmFsaWREYXRlOiBkZWZhdWx0SW52YWxpZERhdGUsXG4gICAgICAgIG9yZGluYWw6IGRlZmF1bHRPcmRpbmFsLFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiBkZWZhdWx0RGF5T2ZNb250aE9yZGluYWxQYXJzZSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiBkZWZhdWx0UmVsYXRpdmVUaW1lLFxuXG4gICAgICAgIG1vbnRoczogZGVmYXVsdExvY2FsZU1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCxcblxuICAgICAgICB3ZWVrOiBkZWZhdWx0TG9jYWxlV2VlayxcblxuICAgICAgICB3ZWVrZGF5czogZGVmYXVsdExvY2FsZVdlZWtkYXlzLFxuICAgICAgICB3ZWVrZGF5c01pbjogZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCxcblxuICAgICAgICBtZXJpZGllbVBhcnNlOiBkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZSxcbiAgICB9O1xuXG4gICAgLy8gaW50ZXJuYWwgc3RvcmFnZSBmb3IgbG9jYWxlIGNvbmZpZyBmaWxlc1xuICAgIHZhciBsb2NhbGVzID0ge30sXG4gICAgICAgIGxvY2FsZUZhbWlsaWVzID0ge30sXG4gICAgICAgIGdsb2JhbExvY2FsZTtcblxuICAgIGZ1bmN0aW9uIGNvbW1vblByZWZpeChhcnIxLCBhcnIyKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbWlubCA9IE1hdGgubWluKGFycjEubGVuZ3RoLCBhcnIyLmxlbmd0aCk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBtaW5sOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGlmIChhcnIxW2ldICE9PSBhcnIyW2ldKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbmw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplTG9jYWxlKGtleSkge1xuICAgICAgICByZXR1cm4ga2V5ID8ga2V5LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnXycsICctJykgOiBrZXk7XG4gICAgfVxuXG4gICAgLy8gcGljayB0aGUgbG9jYWxlIGZyb20gdGhlIGFycmF5XG4gICAgLy8gdHJ5IFsnZW4tYXUnLCAnZW4tZ2InXSBhcyAnZW4tYXUnLCAnZW4tZ2InLCAnZW4nLCBhcyBpbiBtb3ZlIHRocm91Z2ggdGhlIGxpc3QgdHJ5aW5nIGVhY2hcbiAgICAvLyBzdWJzdHJpbmcgZnJvbSBtb3N0IHNwZWNpZmljIHRvIGxlYXN0LCBidXQgbW92ZSB0byB0aGUgbmV4dCBhcnJheSBpdGVtIGlmIGl0J3MgYSBtb3JlIHNwZWNpZmljIHZhcmlhbnQgdGhhbiB0aGUgY3VycmVudCByb290XG4gICAgZnVuY3Rpb24gY2hvb3NlTG9jYWxlKG5hbWVzKSB7XG4gICAgICAgIHZhciBpID0gMCxcbiAgICAgICAgICAgIGosXG4gICAgICAgICAgICBuZXh0LFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgc3BsaXQ7XG5cbiAgICAgICAgd2hpbGUgKGkgPCBuYW1lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNwbGl0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2ldKS5zcGxpdCgnLScpO1xuICAgICAgICAgICAgaiA9IHNwbGl0Lmxlbmd0aDtcbiAgICAgICAgICAgIG5leHQgPSBub3JtYWxpemVMb2NhbGUobmFtZXNbaSArIDFdKTtcbiAgICAgICAgICAgIG5leHQgPSBuZXh0ID8gbmV4dC5zcGxpdCgnLScpIDogbnVsbDtcbiAgICAgICAgICAgIHdoaWxlIChqID4gMCkge1xuICAgICAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoc3BsaXQuc2xpY2UoMCwgaikuam9pbignLScpKTtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgbmV4dCAmJlxuICAgICAgICAgICAgICAgICAgICBuZXh0Lmxlbmd0aCA+PSBqICYmXG4gICAgICAgICAgICAgICAgICAgIGNvbW1vblByZWZpeChzcGxpdCwgbmV4dCkgPj0gaiAtIDFcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgLy90aGUgbmV4dCBhcnJheSBpdGVtIGlzIGJldHRlciB0aGFuIGEgc2hhbGxvd2VyIHN1YnN0cmluZyBvZiB0aGlzIG9uZVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgai0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9hZExvY2FsZShuYW1lKSB7XG4gICAgICAgIHZhciBvbGRMb2NhbGUgPSBudWxsLFxuICAgICAgICAgICAgYWxpYXNlZFJlcXVpcmU7XG4gICAgICAgIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIHJlZ2lzdGVyIGFuZCBsb2FkIGFsbCB0aGUgbG9jYWxlcyBpbiBOb2RlXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIG1vZHVsZSAmJlxuICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHNcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG9sZExvY2FsZSA9IGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICAgICAgICAgICAgICBhbGlhc2VkUmVxdWlyZSA9IHJlcXVpcmU7XG4gICAgICAgICAgICAgICAgYWxpYXNlZFJlcXVpcmUoJy4vbG9jYWxlLycgKyBuYW1lKTtcbiAgICAgICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUob2xkTG9jYWxlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBtYXJrIGFzIG5vdCBmb3VuZCB0byBhdm9pZCByZXBlYXRpbmcgZXhwZW5zaXZlIGZpbGUgcmVxdWlyZSBjYWxsIGNhdXNpbmcgaGlnaCBDUFVcbiAgICAgICAgICAgICAgICAvLyB3aGVuIHRyeWluZyB0byBmaW5kIGVuLVVTLCBlbl9VUywgZW4tdXMgZm9yIGV2ZXJ5IGZvcm1hdCBjYWxsXG4gICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IG51bGw7IC8vIG51bGwgbWVhbnMgbm90IGZvdW5kXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGxvYWQgbG9jYWxlIGFuZCB0aGVuIHNldCB0aGUgZ2xvYmFsIGxvY2FsZS4gIElmXG4gICAgLy8gbm8gYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4sIGl0IHdpbGwgc2ltcGx5IHJldHVybiB0aGUgY3VycmVudCBnbG9iYWxcbiAgICAvLyBsb2NhbGUga2V5LlxuICAgIGZ1bmN0aW9uIGdldFNldEdsb2JhbExvY2FsZShrZXksIHZhbHVlcykge1xuICAgICAgICB2YXIgZGF0YTtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZ2V0TG9jYWxlKGtleSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkZWZpbmVMb2NhbGUoa2V5LCB2YWx1ZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIC8vIG1vbWVudC5kdXJhdGlvbi5fbG9jYWxlID0gbW9tZW50Ll9sb2NhbGUgPSBkYXRhO1xuICAgICAgICAgICAgICAgIGdsb2JhbExvY2FsZSA9IGRhdGE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZS53YXJuKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vd2FybiB1c2VyIGlmIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGJ1dCB0aGUgbG9jYWxlIGNvdWxkIG5vdCBiZSBzZXRcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0xvY2FsZSAnICsga2V5ICsgJyBub3QgZm91bmQuIERpZCB5b3UgZm9yZ2V0IHRvIGxvYWQgaXQ/J1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGUuX2FiYnI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmaW5lTG9jYWxlKG5hbWUsIGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLFxuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGJhc2VDb25maWc7XG4gICAgICAgICAgICBjb25maWcuYWJiciA9IG5hbWU7XG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZGVwcmVjYXRlU2ltcGxlKFxuICAgICAgICAgICAgICAgICAgICAnZGVmaW5lTG9jYWxlT3ZlcnJpZGUnLFxuICAgICAgICAgICAgICAgICAgICAndXNlIG1vbWVudC51cGRhdGVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSB0byBjaGFuZ2UgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnYW4gZXhpc3RpbmcgbG9jYWxlLiBtb21lbnQuZGVmaW5lTG9jYWxlKGxvY2FsZU5hbWUsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmZpZykgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgY3JlYXRpbmcgYSBuZXcgbG9jYWxlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1NlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RlZmluZS1sb2NhbGUvIGZvciBtb3JlIGluZm8uJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlc1tuYW1lXS5fY29uZmlnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWcucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlc1tjb25maWcucGFyZW50TG9jYWxlXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZXNbY29uZmlnLnBhcmVudExvY2FsZV0uX2NvbmZpZztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGNvbmZpZy5wYXJlbnRMb2NhbGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZS5fY29uZmlnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBuZXcgTG9jYWxlKG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZykpO1xuXG4gICAgICAgICAgICBpZiAobG9jYWxlRmFtaWxpZXNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tuYW1lXS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmluZUxvY2FsZSh4Lm5hbWUsIHguY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdCBmb3Igbm93OiBhbHNvIHNldCB0aGUgbG9jYWxlXG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2Ugc2V0IHRoZSBsb2NhbGUgQUZURVIgYWxsIGNoaWxkIGxvY2FsZXMgaGF2ZSBiZWVuXG4gICAgICAgICAgICAvLyBjcmVhdGVkLCBzbyB3ZSB3b24ndCBlbmQgdXAgd2l0aCB0aGUgY2hpbGQgbG9jYWxlIHNldC5cbiAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB1c2VmdWwgZm9yIHRlc3RpbmdcbiAgICAgICAgICAgIGRlbGV0ZSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVMb2NhbGUobmFtZSwgY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSxcbiAgICAgICAgICAgICAgICB0bXBMb2NhbGUsXG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gYmFzZUNvbmZpZztcblxuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCAmJiBsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIGNoaWxkIGxvY2FsZSBpbi1wbGFjZSB0byBhdm9pZCBtZW1vcnktbGVha3NcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdLnNldChtZXJnZUNvbmZpZ3MobG9jYWxlc1tuYW1lXS5fY29uZmlnLCBjb25maWcpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTUVSR0VcbiAgICAgICAgICAgICAgICB0bXBMb2NhbGUgPSBsb2FkTG9jYWxlKG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICh0bXBMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSB0bXBMb2NhbGUuX2NvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uZmlnID0gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKTtcbiAgICAgICAgICAgICAgICBpZiAodG1wTG9jYWxlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlTG9jYWxlIGlzIGNhbGxlZCBmb3IgY3JlYXRpbmcgYSBuZXcgbG9jYWxlXG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBhYmJyIHNvIGl0IHdpbGwgaGF2ZSBhIG5hbWUgKGdldHRlcnMgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIC8vIHVuZGVmaW5lZCBvdGhlcndpc2UpLlxuICAgICAgICAgICAgICAgICAgICBjb25maWcuYWJiciA9IG5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvY2FsZSA9IG5ldyBMb2NhbGUoY29uZmlnKTtcbiAgICAgICAgICAgICAgICBsb2NhbGUucGFyZW50TG9jYWxlID0gbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbG9jYWxlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiYWNrd2FyZHMgY29tcGF0IGZvciBub3c6IGFsc28gc2V0IHRoZSBsb2NhbGVcbiAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHBhc3MgbnVsbCBmb3IgY29uZmlnIHRvIHVudXBkYXRlLCB1c2VmdWwgZm9yIHRlc3RzXG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gZ2V0U2V0R2xvYmFsTG9jYWxlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICB9XG5cbiAgICAvLyByZXR1cm5zIGxvY2FsZSBkYXRhXG4gICAgZnVuY3Rpb24gZ2V0TG9jYWxlKGtleSkge1xuICAgICAgICB2YXIgbG9jYWxlO1xuXG4gICAgICAgIGlmIChrZXkgJiYga2V5Ll9sb2NhbGUgJiYga2V5Ll9sb2NhbGUuX2FiYnIpIHtcbiAgICAgICAgICAgIGtleSA9IGtleS5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzQXJyYXkoa2V5KSkge1xuICAgICAgICAgICAgLy9zaG9ydC1jaXJjdWl0IGV2ZXJ5dGhpbmcgZWxzZVxuICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrZXkgPSBba2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjaG9vc2VMb2NhbGUoa2V5KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TG9jYWxlcygpIHtcbiAgICAgICAgcmV0dXJuIGtleXMobG9jYWxlcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tPdmVyZmxvdyhtKSB7XG4gICAgICAgIHZhciBvdmVyZmxvdyxcbiAgICAgICAgICAgIGEgPSBtLl9hO1xuXG4gICAgICAgIGlmIChhICYmIGdldFBhcnNpbmdGbGFncyhtKS5vdmVyZmxvdyA9PT0gLTIpIHtcbiAgICAgICAgICAgIG92ZXJmbG93ID1cbiAgICAgICAgICAgICAgICBhW01PTlRIXSA8IDAgfHwgYVtNT05USF0gPiAxMVxuICAgICAgICAgICAgICAgICAgICA/IE1PTlRIXG4gICAgICAgICAgICAgICAgICAgIDogYVtEQVRFXSA8IDEgfHwgYVtEQVRFXSA+IGRheXNJbk1vbnRoKGFbWUVBUl0sIGFbTU9OVEhdKVxuICAgICAgICAgICAgICAgICAgICA/IERBVEVcbiAgICAgICAgICAgICAgICAgICAgOiBhW0hPVVJdIDwgMCB8fFxuICAgICAgICAgICAgICAgICAgICAgIGFbSE9VUl0gPiAyNCB8fFxuICAgICAgICAgICAgICAgICAgICAgIChhW0hPVVJdID09PSAyNCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoYVtNSU5VVEVdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW1NFQ09ORF0gIT09IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbTUlMTElTRUNPTkRdICE9PSAwKSlcbiAgICAgICAgICAgICAgICAgICAgPyBIT1VSXG4gICAgICAgICAgICAgICAgICAgIDogYVtNSU5VVEVdIDwgMCB8fCBhW01JTlVURV0gPiA1OVxuICAgICAgICAgICAgICAgICAgICA/IE1JTlVURVxuICAgICAgICAgICAgICAgICAgICA6IGFbU0VDT05EXSA8IDAgfHwgYVtTRUNPTkRdID4gNTlcbiAgICAgICAgICAgICAgICAgICAgPyBTRUNPTkRcbiAgICAgICAgICAgICAgICAgICAgOiBhW01JTExJU0VDT05EXSA8IDAgfHwgYVtNSUxMSVNFQ09ORF0gPiA5OTlcbiAgICAgICAgICAgICAgICAgICAgPyBNSUxMSVNFQ09ORFxuICAgICAgICAgICAgICAgICAgICA6IC0xO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd0RheU9mWWVhciAmJlxuICAgICAgICAgICAgICAgIChvdmVyZmxvdyA8IFlFQVIgfHwgb3ZlcmZsb3cgPiBEQVRFKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBEQVRFO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrcyAmJiBvdmVyZmxvdyA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IFdFRUs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd1dlZWtkYXkgJiYgb3ZlcmZsb3cgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBXRUVLREFZO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkub3ZlcmZsb3cgPSBvdmVyZmxvdztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIC8vIGlzbyA4NjAxIHJlZ2V4XG4gICAgLy8gMDAwMC0wMC0wMCAwMDAwLVcwMCBvciAwMDAwLVcwMC0wICsgVCArIDAwIG9yIDAwOjAwIG9yIDAwOjAwOjAwIG9yIDAwOjAwOjAwLjAwMCArICswMDowMCBvciArMDAwMCBvciArMDApXG4gICAgdmFyIGV4dGVuZGVkSXNvUmVnZXggPSAvXlxccyooKD86WystXVxcZHs2fXxcXGR7NH0pLSg/OlxcZFxcZC1cXGRcXGR8V1xcZFxcZC1cXGR8V1xcZFxcZHxcXGRcXGRcXGR8XFxkXFxkKSkoPzooVHwgKShcXGRcXGQoPzo6XFxkXFxkKD86OlxcZFxcZCg/OlsuLF1cXGQrKT8pPyk/KShbKy1dXFxkXFxkKD86Oj9cXGRcXGQpP3xcXHMqWik/KT8kLyxcbiAgICAgICAgYmFzaWNJc29SZWdleCA9IC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSkoPzpcXGRcXGRcXGRcXGR8V1xcZFxcZFxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGR8KSkoPzooVHwgKShcXGRcXGQoPzpcXGRcXGQoPzpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoWystXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC8sXG4gICAgICAgIHR6UmVnZXggPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy8sXG4gICAgICAgIGlzb0RhdGVzID0gW1xuICAgICAgICAgICAgWydZWVlZWVktTU0tREQnLCAvWystXVxcZHs2fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgICAgICBbJ1lZWVktTU0tREQnLCAvXFxkezR9LVxcZFxcZC1cXGRcXGQvXSxcbiAgICAgICAgICAgIFsnR0dHRy1bV11XVy1FJywgL1xcZHs0fS1XXFxkXFxkLVxcZC9dLFxuICAgICAgICAgICAgWydHR0dHLVtXXVdXJywgL1xcZHs0fS1XXFxkXFxkLywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZLURERCcsIC9cXGR7NH0tXFxkezN9L10sXG4gICAgICAgICAgICBbJ1lZWVktTU0nLCAvXFxkezR9LVxcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWVlZTU1ERCcsIC9bKy1dXFxkezEwfS9dLFxuICAgICAgICAgICAgWydZWVlZTU1ERCcsIC9cXGR7OH0vXSxcbiAgICAgICAgICAgIFsnR0dHR1tXXVdXRScsIC9cXGR7NH1XXFxkezN9L10sXG4gICAgICAgICAgICBbJ0dHR0dbV11XVycsIC9cXGR7NH1XXFxkezJ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZREREJywgL1xcZHs3fS9dLFxuICAgICAgICAgICAgWydZWVlZTU0nLCAvXFxkezZ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZJywgL1xcZHs0fS8sIGZhbHNlXSxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gaXNvIHRpbWUgZm9ybWF0cyBhbmQgcmVnZXhlc1xuICAgICAgICBpc29UaW1lcyA9IFtcbiAgICAgICAgICAgIFsnSEg6bW06c3MuU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgICAgIFsnSEg6bW06c3MsU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZCxcXGQrL10sXG4gICAgICAgICAgICBbJ0hIOm1tOnNzJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIOm1tJywgL1xcZFxcZDpcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzLlNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkXFwuXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MsU1NTUycsIC9cXGRcXGRcXGRcXGRcXGRcXGQsXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIbW0nLCAvXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIJywgL1xcZFxcZC9dLFxuICAgICAgICBdLFxuICAgICAgICBhc3BOZXRKc29uUmVnZXggPSAvXlxcLz9EYXRlXFwoKC0/XFxkKykvaSxcbiAgICAgICAgLy8gUkZDIDI4MjIgcmVnZXg6IEZvciBkZXRhaWxzIHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNzZWN0aW9uLTMuM1xuICAgICAgICByZmMyODIyID0gL14oPzooTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSw/XFxzKT8oXFxkezEsMn0pXFxzKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKVxccyhcXGR7Miw0fSlcXHMoXFxkXFxkKTooXFxkXFxkKSg/OjooXFxkXFxkKSk/XFxzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfChbKy1dXFxkezR9KSkkLyxcbiAgICAgICAgb2JzT2Zmc2V0cyA9IHtcbiAgICAgICAgICAgIFVUOiAwLFxuICAgICAgICAgICAgR01UOiAwLFxuICAgICAgICAgICAgRURUOiAtNCAqIDYwLFxuICAgICAgICAgICAgRVNUOiAtNSAqIDYwLFxuICAgICAgICAgICAgQ0RUOiAtNSAqIDYwLFxuICAgICAgICAgICAgQ1NUOiAtNiAqIDYwLFxuICAgICAgICAgICAgTURUOiAtNiAqIDYwLFxuICAgICAgICAgICAgTVNUOiAtNyAqIDYwLFxuICAgICAgICAgICAgUERUOiAtNyAqIDYwLFxuICAgICAgICAgICAgUFNUOiAtOCAqIDYwLFxuICAgICAgICB9O1xuXG4gICAgLy8gZGF0ZSBmcm9tIGlzbyBmb3JtYXRcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tSVNPKGNvbmZpZykge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBzdHJpbmcgPSBjb25maWcuX2ksXG4gICAgICAgICAgICBtYXRjaCA9IGV4dGVuZGVkSXNvUmVnZXguZXhlYyhzdHJpbmcpIHx8IGJhc2ljSXNvUmVnZXguZXhlYyhzdHJpbmcpLFxuICAgICAgICAgICAgYWxsb3dUaW1lLFxuICAgICAgICAgICAgZGF0ZUZvcm1hdCxcbiAgICAgICAgICAgIHRpbWVGb3JtYXQsXG4gICAgICAgICAgICB0ekZvcm1hdDtcblxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmlzbyA9IHRydWU7XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29EYXRlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNvRGF0ZXNbaV1bMV0uZXhlYyhtYXRjaFsxXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZUZvcm1hdCA9IGlzb0RhdGVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICBhbGxvd1RpbWUgPSBpc29EYXRlc1tpXVsyXSAhPT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRlRm9ybWF0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbM10pIHtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gaXNvVGltZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc29UaW1lc1tpXVsxXS5leGVjKG1hdGNoWzNdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2hbMl0gc2hvdWxkIGJlICdUJyBvciBzcGFjZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZUZvcm1hdCA9IChtYXRjaFsyXSB8fCAnICcpICsgaXNvVGltZXNbaV1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGltZUZvcm1hdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFhbGxvd1RpbWUgJiYgdGltZUZvcm1hdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzRdKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR6UmVnZXguZXhlYyhtYXRjaFs0XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHpGb3JtYXQgPSAnWic7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25maWcuX2YgPSBkYXRlRm9ybWF0ICsgKHRpbWVGb3JtYXQgfHwgJycpICsgKHR6Rm9ybWF0IHx8ICcnKTtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXh0cmFjdEZyb21SRkMyODIyU3RyaW5ncyhcbiAgICAgICAgeWVhclN0cixcbiAgICAgICAgbW9udGhTdHIsXG4gICAgICAgIGRheVN0cixcbiAgICAgICAgaG91clN0cixcbiAgICAgICAgbWludXRlU3RyLFxuICAgICAgICBzZWNvbmRTdHJcbiAgICApIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtcbiAgICAgICAgICAgIHVudHJ1bmNhdGVZZWFyKHllYXJTdHIpLFxuICAgICAgICAgICAgZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0LmluZGV4T2YobW9udGhTdHIpLFxuICAgICAgICAgICAgcGFyc2VJbnQoZGF5U3RyLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChob3VyU3RyLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChtaW51dGVTdHIsIDEwKSxcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAoc2Vjb25kU3RyKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChwYXJzZUludChzZWNvbmRTdHIsIDEwKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVudHJ1bmNhdGVZZWFyKHllYXJTdHIpIHtcbiAgICAgICAgdmFyIHllYXIgPSBwYXJzZUludCh5ZWFyU3RyLCAxMCk7XG4gICAgICAgIGlmICh5ZWFyIDw9IDQ5KSB7XG4gICAgICAgICAgICByZXR1cm4gMjAwMCArIHllYXI7XG4gICAgICAgIH0gZWxzZSBpZiAoeWVhciA8PSA5OTkpIHtcbiAgICAgICAgICAgIHJldHVybiAxOTAwICsgeWVhcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geWVhcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVwcm9jZXNzUkZDMjgyMihzKSB7XG4gICAgICAgIC8vIFJlbW92ZSBjb21tZW50cyBhbmQgZm9sZGluZyB3aGl0ZXNwYWNlIGFuZCByZXBsYWNlIG11bHRpcGxlLXNwYWNlcyB3aXRoIGEgc2luZ2xlIHNwYWNlXG4gICAgICAgIHJldHVybiBzXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwoW14pXSpcXCl8W1xcblxcdF0vZywgJyAnKVxuICAgICAgICAgICAgLnJlcGxhY2UoLyhcXHNcXHMrKS9nLCAnICcpXG4gICAgICAgICAgICAucmVwbGFjZSgvXlxcc1xccyovLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXHNcXHMqJC8sICcnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja1dlZWtkYXkod2Vla2RheVN0ciwgcGFyc2VkSW5wdXQsIGNvbmZpZykge1xuICAgICAgICBpZiAod2Vla2RheVN0cikge1xuICAgICAgICAgICAgLy8gVE9ETzogUmVwbGFjZSB0aGUgdmFuaWxsYSBKUyBEYXRlIG9iamVjdCB3aXRoIGFuIGluZGVwZW5kZW50IGRheS1vZi13ZWVrIGNoZWNrLlxuICAgICAgICAgICAgdmFyIHdlZWtkYXlQcm92aWRlZCA9IGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0LmluZGV4T2Yod2Vla2RheVN0ciksXG4gICAgICAgICAgICAgICAgd2Vla2RheUFjdHVhbCA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFswXSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMV0sXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzJdXG4gICAgICAgICAgICAgICAgKS5nZXREYXkoKTtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5UHJvdmlkZWQgIT09IHdlZWtkYXlBY3R1YWwpIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS53ZWVrZGF5TWlzbWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYWxjdWxhdGVPZmZzZXQob2JzT2Zmc2V0LCBtaWxpdGFyeU9mZnNldCwgbnVtT2Zmc2V0KSB7XG4gICAgICAgIGlmIChvYnNPZmZzZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnNPZmZzZXRzW29ic09mZnNldF07XG4gICAgICAgIH0gZWxzZSBpZiAobWlsaXRhcnlPZmZzZXQpIHtcbiAgICAgICAgICAgIC8vIHRoZSBvbmx5IGFsbG93ZWQgbWlsaXRhcnkgdHogaXMgWlxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaG0gPSBwYXJzZUludChudW1PZmZzZXQsIDEwKSxcbiAgICAgICAgICAgICAgICBtID0gaG0gJSAxMDAsXG4gICAgICAgICAgICAgICAgaCA9IChobSAtIG0pIC8gMTAwO1xuICAgICAgICAgICAgcmV0dXJuIGggKiA2MCArIG07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGFuZCB0aW1lIGZyb20gcmVmIDI4MjIgZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKSB7XG4gICAgICAgIHZhciBtYXRjaCA9IHJmYzI4MjIuZXhlYyhwcmVwcm9jZXNzUkZDMjgyMihjb25maWcuX2kpKSxcbiAgICAgICAgICAgIHBhcnNlZEFycmF5O1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIHBhcnNlZEFycmF5ID0gZXh0cmFjdEZyb21SRkMyODIyU3RyaW5ncyhcbiAgICAgICAgICAgICAgICBtYXRjaFs0XSxcbiAgICAgICAgICAgICAgICBtYXRjaFszXSxcbiAgICAgICAgICAgICAgICBtYXRjaFsyXSxcbiAgICAgICAgICAgICAgICBtYXRjaFs1XSxcbiAgICAgICAgICAgICAgICBtYXRjaFs2XSxcbiAgICAgICAgICAgICAgICBtYXRjaFs3XVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICghY2hlY2tXZWVrZGF5KG1hdGNoWzFdLCBwYXJzZWRBcnJheSwgY29uZmlnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uZmlnLl9hID0gcGFyc2VkQXJyYXk7XG4gICAgICAgICAgICBjb25maWcuX3R6bSA9IGNhbGN1bGF0ZU9mZnNldChtYXRjaFs4XSwgbWF0Y2hbOV0sIG1hdGNoWzEwXSk7XG5cbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IGNyZWF0ZVVUQ0RhdGUuYXBwbHkobnVsbCwgY29uZmlnLl9hKTtcbiAgICAgICAgICAgIGNvbmZpZy5fZC5zZXRVVENNaW51dGVzKGNvbmZpZy5fZC5nZXRVVENNaW51dGVzKCkgLSBjb25maWcuX3R6bSk7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnJmYzI4MjIgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGZyb20gMSkgQVNQLk5FVCwgMikgSVNPLCAzKSBSRkMgMjgyMiBmb3JtYXRzLCBvciA0KSBvcHRpb25hbCBmYWxsYmFjayBpZiBwYXJzaW5nIGlzbid0IHN0cmljdFxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKSB7XG4gICAgICAgIHZhciBtYXRjaGVkID0gYXNwTmV0SnNvblJlZ2V4LmV4ZWMoY29uZmlnLl9pKTtcbiAgICAgICAgaWYgKG1hdGNoZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKCttYXRjaGVkWzFdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21JU08oY29uZmlnKTtcbiAgICAgICAgaWYgKGNvbmZpZy5faXNWYWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBjb25maWcuX2lzVmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tUkZDMjgyMihjb25maWcpO1xuICAgICAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5faXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuX3N0cmljdCkge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBGaW5hbCBhdHRlbXB0LCB1c2UgSW5wdXQgRmFsbGJhY2tcbiAgICAgICAgICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3ZhbHVlIHByb3ZpZGVkIGlzIG5vdCBpbiBhIHJlY29nbml6ZWQgUkZDMjgyMiBvciBJU08gZm9ybWF0LiBtb21lbnQgY29uc3RydWN0aW9uIGZhbGxzIGJhY2sgdG8ganMgRGF0ZSgpLCAnICtcbiAgICAgICAgICAgICd3aGljaCBpcyBub3QgcmVsaWFibGUgYWNyb3NzIGFsbCBicm93c2VycyBhbmQgdmVyc2lvbnMuIE5vbiBSRkMyODIyL0lTTyBkYXRlIGZvcm1hdHMgYXJlICcgK1xuICAgICAgICAgICAgJ2Rpc2NvdXJhZ2VkLiBQbGVhc2UgcmVmZXIgdG8gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9qcy1kYXRlLyBmb3IgbW9yZSBpbmZvLicsXG4gICAgICAgIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5faSArIChjb25maWcuX3VzZVVUQyA/ICcgVVRDJyA6ICcnKSk7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gUGljayB0aGUgZmlyc3QgZGVmaW5lZCBvZiB0d28gb3IgdGhyZWUgYXJndW1lbnRzLlxuICAgIGZ1bmN0aW9uIGRlZmF1bHRzKGEsIGIsIGMpIHtcbiAgICAgICAgaWYgKGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGIgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3VycmVudERhdGVBcnJheShjb25maWcpIHtcbiAgICAgICAgLy8gaG9va3MgaXMgYWN0dWFsbHkgdGhlIGV4cG9ydGVkIG1vbWVudCBvYmplY3RcbiAgICAgICAgdmFyIG5vd1ZhbHVlID0gbmV3IERhdGUoaG9va3Mubm93KCkpO1xuICAgICAgICBpZiAoY29uZmlnLl91c2VVVEMpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDRnVsbFllYXIoKSxcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENNb250aCgpLFxuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ0RhdGUoKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtub3dWYWx1ZS5nZXRGdWxsWWVhcigpLCBub3dWYWx1ZS5nZXRNb250aCgpLCBub3dWYWx1ZS5nZXREYXRlKCldO1xuICAgIH1cblxuICAgIC8vIGNvbnZlcnQgYW4gYXJyYXkgdG8gYSBkYXRlLlxuICAgIC8vIHRoZSBhcnJheSBzaG91bGQgbWlycm9yIHRoZSBwYXJhbWV0ZXJzIGJlbG93XG4gICAgLy8gbm90ZTogYWxsIHZhbHVlcyBwYXN0IHRoZSB5ZWFyIGFyZSBvcHRpb25hbCBhbmQgd2lsbCBkZWZhdWx0IHRvIHRoZSBsb3dlc3QgcG9zc2libGUgdmFsdWUuXG4gICAgLy8gW3llYXIsIG1vbnRoLCBkYXkgLCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmRdXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUFycmF5KGNvbmZpZykge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBpbnB1dCA9IFtdLFxuICAgICAgICAgICAgY3VycmVudERhdGUsXG4gICAgICAgICAgICBleHBlY3RlZFdlZWtkYXksXG4gICAgICAgICAgICB5ZWFyVG9Vc2U7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudERhdGUgPSBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZyk7XG5cbiAgICAgICAgLy9jb21wdXRlIGRheSBvZiB0aGUgeWVhciBmcm9tIHdlZWtzIGFuZCB3ZWVrZGF5c1xuICAgICAgICBpZiAoY29uZmlnLl93ICYmIGNvbmZpZy5fYVtEQVRFXSA9PSBudWxsICYmIGNvbmZpZy5fYVtNT05USF0gPT0gbnVsbCkge1xuICAgICAgICAgICAgZGF5T2ZZZWFyRnJvbVdlZWtJbmZvKGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICAvL2lmIHRoZSBkYXkgb2YgdGhlIHllYXIgaXMgc2V0LCBmaWd1cmUgb3V0IHdoYXQgaXQgaXNcbiAgICAgICAgaWYgKGNvbmZpZy5fZGF5T2ZZZWFyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHllYXJUb1VzZSA9IGRlZmF1bHRzKGNvbmZpZy5fYVtZRUFSXSwgY3VycmVudERhdGVbWUVBUl0pO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPiBkYXlzSW5ZZWFyKHllYXJUb1VzZSkgfHxcbiAgICAgICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA9PT0gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93RGF5T2ZZZWFyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoeWVhclRvVXNlLCAwLCBjb25maWcuX2RheU9mWWVhcik7XG4gICAgICAgICAgICBjb25maWcuX2FbTU9OVEhdID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgICAgICAgICAgY29uZmlnLl9hW0RBVEVdID0gZGF0ZS5nZXRVVENEYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWZhdWx0IHRvIGN1cnJlbnQgZGF0ZS5cbiAgICAgICAgLy8gKiBpZiBubyB5ZWFyLCBtb250aCwgZGF5IG9mIG1vbnRoIGFyZSBnaXZlbiwgZGVmYXVsdCB0byB0b2RheVxuICAgICAgICAvLyAqIGlmIGRheSBvZiBtb250aCBpcyBnaXZlbiwgZGVmYXVsdCBtb250aCBhbmQgeWVhclxuICAgICAgICAvLyAqIGlmIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG9ubHkgeWVhclxuICAgICAgICAvLyAqIGlmIHllYXIgaXMgZ2l2ZW4sIGRvbid0IGRlZmF1bHQgYW55dGhpbmdcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDMgJiYgY29uZmlnLl9hW2ldID09IG51bGw7ICsraSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW2ldID0gaW5wdXRbaV0gPSBjdXJyZW50RGF0ZVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFplcm8gb3V0IHdoYXRldmVyIHdhcyBub3QgZGVmYXVsdGVkLCBpbmNsdWRpbmcgdGltZVxuICAgICAgICBmb3IgKDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgY29uZmlnLl9hW2ldID0gaW5wdXRbaV0gPVxuICAgICAgICAgICAgICAgIGNvbmZpZy5fYVtpXSA9PSBudWxsID8gKGkgPT09IDIgPyAxIDogMCkgOiBjb25maWcuX2FbaV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBmb3IgMjQ6MDA6MDAuMDAwXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9PT0gMjQgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNSU5VVEVdID09PSAwICYmXG4gICAgICAgICAgICBjb25maWcuX2FbU0VDT05EXSA9PT0gMCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW01JTExJU0VDT05EXSA9PT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbmZpZy5fbmV4dERheSA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnLl9kID0gKGNvbmZpZy5fdXNlVVRDID8gY3JlYXRlVVRDRGF0ZSA6IGNyZWF0ZURhdGUpLmFwcGx5KFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGlucHV0XG4gICAgICAgICk7XG4gICAgICAgIGV4cGVjdGVkV2Vla2RheSA9IGNvbmZpZy5fdXNlVVRDXG4gICAgICAgICAgICA/IGNvbmZpZy5fZC5nZXRVVENEYXkoKVxuICAgICAgICAgICAgOiBjb25maWcuX2QuZ2V0RGF5KCk7XG5cbiAgICAgICAgLy8gQXBwbHkgdGltZXpvbmUgb2Zmc2V0IGZyb20gaW5wdXQuIFRoZSBhY3R1YWwgdXRjT2Zmc2V0IGNhbiBiZSBjaGFuZ2VkXG4gICAgICAgIC8vIHdpdGggcGFyc2Vab25lLlxuICAgICAgICBpZiAoY29uZmlnLl90em0gIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuX25leHREYXkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDI0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIG1pc21hdGNoaW5nIGRheSBvZiB3ZWVrXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy5fdyAmJlxuICAgICAgICAgICAgdHlwZW9mIGNvbmZpZy5fdy5kICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgY29uZmlnLl93LmQgIT09IGV4cGVjdGVkV2Vla2RheVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLndlZWtkYXlNaXNtYXRjaCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlPZlllYXJGcm9tV2Vla0luZm8oY29uZmlnKSB7XG4gICAgICAgIHZhciB3LCB3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3ksIHRlbXAsIHdlZWtkYXlPdmVyZmxvdywgY3VyV2VlaztcblxuICAgICAgICB3ID0gY29uZmlnLl93O1xuICAgICAgICBpZiAody5HRyAhPSBudWxsIHx8IHcuVyAhPSBudWxsIHx8IHcuRSAhPSBudWxsKSB7XG4gICAgICAgICAgICBkb3cgPSAxO1xuICAgICAgICAgICAgZG95ID0gNDtcblxuICAgICAgICAgICAgLy8gVE9ETzogV2UgbmVlZCB0byB0YWtlIHRoZSBjdXJyZW50IGlzb1dlZWtZZWFyLCBidXQgdGhhdCBkZXBlbmRzIG9uXG4gICAgICAgICAgICAvLyBob3cgd2UgaW50ZXJwcmV0IG5vdyAobG9jYWwsIHV0YywgZml4ZWQgb2Zmc2V0KS4gU28gY3JlYXRlXG4gICAgICAgICAgICAvLyBhIG5vdyB2ZXJzaW9uIG9mIGN1cnJlbnQgY29uZmlnICh0YWtlIGxvY2FsL3V0Yy9vZmZzZXQgZmxhZ3MsIGFuZFxuICAgICAgICAgICAgLy8gY3JlYXRlIG5vdykuXG4gICAgICAgICAgICB3ZWVrWWVhciA9IGRlZmF1bHRzKFxuICAgICAgICAgICAgICAgIHcuR0csXG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdLFxuICAgICAgICAgICAgICAgIHdlZWtPZlllYXIoY3JlYXRlTG9jYWwoKSwgMSwgNCkueWVhclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHdlZWsgPSBkZWZhdWx0cyh3LlcsIDEpO1xuICAgICAgICAgICAgd2Vla2RheSA9IGRlZmF1bHRzKHcuRSwgMSk7XG4gICAgICAgICAgICBpZiAod2Vla2RheSA8IDEgfHwgd2Vla2RheSA+IDcpIHtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZG93ID0gY29uZmlnLl9sb2NhbGUuX3dlZWsuZG93O1xuICAgICAgICAgICAgZG95ID0gY29uZmlnLl9sb2NhbGUuX3dlZWsuZG95O1xuXG4gICAgICAgICAgICBjdXJXZWVrID0gd2Vla09mWWVhcihjcmVhdGVMb2NhbCgpLCBkb3csIGRveSk7XG5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMody5nZywgY29uZmlnLl9hW1lFQVJdLCBjdXJXZWVrLnllYXIpO1xuXG4gICAgICAgICAgICAvLyBEZWZhdWx0IHRvIGN1cnJlbnQgd2Vlay5cbiAgICAgICAgICAgIHdlZWsgPSBkZWZhdWx0cyh3LncsIGN1cldlZWsud2Vlayk7XG5cbiAgICAgICAgICAgIGlmICh3LmQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIHdlZWtkYXkgLS0gbG93IGRheSBudW1iZXJzIGFyZSBjb25zaWRlcmVkIG5leHQgd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmQ7XG4gICAgICAgICAgICAgICAgaWYgKHdlZWtkYXkgPCAwIHx8IHdlZWtkYXkgPiA2KSB7XG4gICAgICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh3LmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIGxvY2FsIHdlZWtkYXkgLS0gY291bnRpbmcgc3RhcnRzIGZyb20gYmVnaW5uaW5nIG9mIHdlZWtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gdy5lICsgZG93O1xuICAgICAgICAgICAgICAgIGlmICh3LmUgPCAwIHx8IHcuZSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgdG8gYmVnaW5uaW5nIG9mIHdlZWtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gZG93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh3ZWVrIDwgMSB8fCB3ZWVrID4gd2Vla3NJblllYXIod2Vla1llYXIsIGRvdywgZG95KSkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93V2Vla3MgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHdlZWtkYXlPdmVyZmxvdyAhPSBudWxsKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dXZWVrZGF5ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRlbXAgPSBkYXlPZlllYXJGcm9tV2Vla3Mod2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSA9IHRlbXAueWVhcjtcbiAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID0gdGVtcC5kYXlPZlllYXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb25zdGFudCB0aGF0IHJlZmVycyB0byB0aGUgSVNPIHN0YW5kYXJkXG4gICAgaG9va3MuSVNPXzg2MDEgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIGNvbnN0YW50IHRoYXQgcmVmZXJzIHRvIHRoZSBSRkMgMjgyMiBmb3JtXG4gICAgaG9va3MuUkZDXzI4MjIgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIGRhdGUgZnJvbSBzdHJpbmcgYW5kIGZvcm1hdCBzdHJpbmdcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZykge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgdG8gYW5vdGhlciBwYXJ0IG9mIHRoZSBjcmVhdGlvbiBmbG93IHRvIHByZXZlbnQgY2lyY3VsYXIgZGVwc1xuICAgICAgICBpZiAoY29uZmlnLl9mID09PSBob29rcy5JU09fODYwMSkge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlTTyhjb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcuX2YgPT09IGhvb2tzLlJGQ18yODIyKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tUkZDMjgyMihjb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbmZpZy5fYSA9IFtdO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lbXB0eSA9IHRydWU7XG5cbiAgICAgICAgLy8gVGhpcyBhcnJheSBpcyB1c2VkIHRvIG1ha2UgYSBEYXRlLCBlaXRoZXIgd2l0aCBgbmV3IERhdGVgIG9yIGBEYXRlLlVUQ2BcbiAgICAgICAgdmFyIHN0cmluZyA9ICcnICsgY29uZmlnLl9pLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHBhcnNlZElucHV0LFxuICAgICAgICAgICAgdG9rZW5zLFxuICAgICAgICAgICAgdG9rZW4sXG4gICAgICAgICAgICBza2lwcGVkLFxuICAgICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICAgIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGggPSAwLFxuICAgICAgICAgICAgZXJhO1xuXG4gICAgICAgIHRva2VucyA9XG4gICAgICAgICAgICBleHBhbmRGb3JtYXQoY29uZmlnLl9mLCBjb25maWcuX2xvY2FsZSkubWF0Y2goZm9ybWF0dGluZ1Rva2VucykgfHwgW107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnNbaV07XG4gICAgICAgICAgICBwYXJzZWRJbnB1dCA9IChzdHJpbmcubWF0Y2goZ2V0UGFyc2VSZWdleEZvclRva2VuKHRva2VuLCBjb25maWcpKSB8fFxuICAgICAgICAgICAgICAgIFtdKVswXTtcbiAgICAgICAgICAgIGlmIChwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgIHNraXBwZWQgPSBzdHJpbmcuc3Vic3RyKDAsIHN0cmluZy5pbmRleE9mKHBhcnNlZElucHV0KSk7XG4gICAgICAgICAgICAgICAgaWYgKHNraXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRJbnB1dC5wdXNoKHNraXBwZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc2xpY2UoXG4gICAgICAgICAgICAgICAgICAgIHN0cmluZy5pbmRleE9mKHBhcnNlZElucHV0KSArIHBhcnNlZElucHV0Lmxlbmd0aFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCArPSBwYXJzZWRJbnB1dC5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkb24ndCBwYXJzZSBpZiBpdCdzIG5vdCBhIGtub3duIHRva2VuXG4gICAgICAgICAgICBpZiAoZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhZGRUaW1lVG9BcnJheUZyb21Ub2tlbih0b2tlbiwgcGFyc2VkSW5wdXQsIGNvbmZpZyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5fc3RyaWN0ICYmICFwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZCByZW1haW5pbmcgdW5wYXJzZWQgaW5wdXQgbGVuZ3RoIHRvIHRoZSBzdHJpbmdcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuY2hhcnNMZWZ0T3ZlciA9XG4gICAgICAgICAgICBzdHJpbmdMZW5ndGggLSB0b3RhbFBhcnNlZElucHV0TGVuZ3RoO1xuICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFyIF8xMmggZmxhZyBpZiBob3VyIGlzIDw9IDEyXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA8PSAxMiAmJlxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9PT0gdHJ1ZSAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5wYXJzZWREYXRlUGFydHMgPSBjb25maWcuX2Euc2xpY2UoMCk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLm1lcmlkaWVtID0gY29uZmlnLl9tZXJpZGllbTtcbiAgICAgICAgLy8gaGFuZGxlIG1lcmlkaWVtXG4gICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IG1lcmlkaWVtRml4V3JhcChcbiAgICAgICAgICAgIGNvbmZpZy5fbG9jYWxlLFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdLFxuICAgICAgICAgICAgY29uZmlnLl9tZXJpZGllbVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIGhhbmRsZSBlcmFcbiAgICAgICAgZXJhID0gZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZXJhO1xuICAgICAgICBpZiAoZXJhICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbWUVBUl0gPSBjb25maWcuX2xvY2FsZS5lcmFzQ29udmVydFllYXIoZXJhLCBjb25maWcuX2FbWUVBUl0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgICAgIGNoZWNrT3ZlcmZsb3coY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbUZpeFdyYXAobG9jYWxlLCBob3VyLCBtZXJpZGllbSkge1xuICAgICAgICB2YXIgaXNQbTtcblxuICAgICAgICBpZiAobWVyaWRpZW0gPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gbm90aGluZyB0byBkb1xuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsZS5tZXJpZGllbUhvdXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5tZXJpZGllbUhvdXIoaG91ciwgbWVyaWRpZW0pO1xuICAgICAgICB9IGVsc2UgaWYgKGxvY2FsZS5pc1BNICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIEZhbGxiYWNrXG4gICAgICAgICAgICBpc1BtID0gbG9jYWxlLmlzUE0obWVyaWRpZW0pO1xuICAgICAgICAgICAgaWYgKGlzUG0gJiYgaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNQbSAmJiBob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCBzdXBwb3NlZCB0byBoYXBwZW5cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgYXJyYXkgb2YgZm9ybWF0IHN0cmluZ3NcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nQW5kQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIHZhciB0ZW1wQ29uZmlnLFxuICAgICAgICAgICAgYmVzdE1vbWVudCxcbiAgICAgICAgICAgIHNjb3JlVG9CZWF0LFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSxcbiAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQsXG4gICAgICAgICAgICBiZXN0Rm9ybWF0SXNWYWxpZCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChjb25maWcuX2YubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkRm9ybWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKE5hTik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29uZmlnLl9mLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjdXJyZW50U2NvcmUgPSAwO1xuICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGVtcENvbmZpZyA9IGNvcHlDb25maWcoe30sIGNvbmZpZyk7XG4gICAgICAgICAgICBpZiAoY29uZmlnLl91c2VVVEMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRlbXBDb25maWcuX3VzZVVUQyA9IGNvbmZpZy5fdXNlVVRDO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVtcENvbmZpZy5fZiA9IGNvbmZpZy5fZltpXTtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQodGVtcENvbmZpZyk7XG5cbiAgICAgICAgICAgIGlmIChpc1ZhbGlkKHRlbXBDb25maWcpKSB7XG4gICAgICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIGFueSBpbnB1dCB0aGF0IHdhcyBub3QgcGFyc2VkIGFkZCBhIHBlbmFsdHkgZm9yIHRoYXQgZm9ybWF0XG4gICAgICAgICAgICBjdXJyZW50U2NvcmUgKz0gZ2V0UGFyc2luZ0ZsYWdzKHRlbXBDb25maWcpLmNoYXJzTGVmdE92ZXI7XG5cbiAgICAgICAgICAgIC8vb3IgdG9rZW5zXG4gICAgICAgICAgICBjdXJyZW50U2NvcmUgKz0gZ2V0UGFyc2luZ0ZsYWdzKHRlbXBDb25maWcpLnVudXNlZFRva2Vucy5sZW5ndGggKiAxMDtcblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKHRlbXBDb25maWcpLnNjb3JlID0gY3VycmVudFNjb3JlO1xuXG4gICAgICAgICAgICBpZiAoIWJlc3RGb3JtYXRJc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBzY29yZVRvQmVhdCA9PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29yZSA8IHNjb3JlVG9CZWF0IHx8XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmRcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPSBjdXJyZW50U2NvcmU7XG4gICAgICAgICAgICAgICAgICAgIGJlc3RNb21lbnQgPSB0ZW1wQ29uZmlnO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRGb3JtYXRGb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVzdEZvcm1hdElzVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFNjb3JlIDwgc2NvcmVUb0JlYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPSBjdXJyZW50U2NvcmU7XG4gICAgICAgICAgICAgICAgICAgIGJlc3RNb21lbnQgPSB0ZW1wQ29uZmlnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGV4dGVuZChjb25maWcsIGJlc3RNb21lbnQgfHwgdGVtcENvbmZpZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbU9iamVjdChjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZy5fZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGkgPSBub3JtYWxpemVPYmplY3RVbml0cyhjb25maWcuX2kpLFxuICAgICAgICAgICAgZGF5T3JEYXRlID0gaS5kYXkgPT09IHVuZGVmaW5lZCA/IGkuZGF0ZSA6IGkuZGF5O1xuICAgICAgICBjb25maWcuX2EgPSBtYXAoXG4gICAgICAgICAgICBbaS55ZWFyLCBpLm1vbnRoLCBkYXlPckRhdGUsIGkuaG91ciwgaS5taW51dGUsIGkuc2Vjb25kLCBpLm1pbGxpc2Vjb25kXSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqICYmIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZyb21Db25maWcoY29uZmlnKSB7XG4gICAgICAgIHZhciByZXMgPSBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3cocHJlcGFyZUNvbmZpZyhjb25maWcpKSk7XG4gICAgICAgIGlmIChyZXMuX25leHREYXkpIHtcbiAgICAgICAgICAgIC8vIEFkZGluZyBpcyBzbWFydCBlbm91Z2ggYXJvdW5kIERTVFxuICAgICAgICAgICAgcmVzLmFkZCgxLCAnZCcpO1xuICAgICAgICAgICAgcmVzLl9uZXh0RGF5ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVwYXJlQ29uZmlnKGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2ksXG4gICAgICAgICAgICBmb3JtYXQgPSBjb25maWcuX2Y7XG5cbiAgICAgICAgY29uZmlnLl9sb2NhbGUgPSBjb25maWcuX2xvY2FsZSB8fCBnZXRMb2NhbGUoY29uZmlnLl9sKTtcblxuICAgICAgICBpZiAoaW5wdXQgPT09IG51bGwgfHwgKGZvcm1hdCA9PT0gdW5kZWZpbmVkICYmIGlucHV0ID09PSAnJykpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKHsgbnVsbElucHV0OiB0cnVlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZy5faSA9IGlucHV0ID0gY29uZmlnLl9sb2NhbGUucHJlcGFyc2UoaW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTW9tZW50KGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb21lbnQoY2hlY2tPdmVyZmxvdyhpbnB1dCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGF0ZShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IGlucHV0O1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZm9ybWF0KSkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEFycmF5KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0KSB7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWdGcm9tSW5wdXQoY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNWYWxpZChjb25maWcpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tSW5wdXQoY29uZmlnKSB7XG4gICAgICAgIHZhciBpbnB1dCA9IGNvbmZpZy5faTtcbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoaG9va3Mubm93KCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGF0ZShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGlucHV0LnZhbHVlT2YoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZyhjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2EgPSBtYXAoaW5wdXQuc2xpY2UoMCksIGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQob2JqLCAxMCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnRnJvbU9iamVjdChjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyKGlucHV0KSkge1xuICAgICAgICAgICAgLy8gZnJvbSBtaWxsaXNlY29uZHNcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGlucHV0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBpc1VUQykge1xuICAgICAgICB2YXIgYyA9IHt9O1xuXG4gICAgICAgIGlmIChmb3JtYXQgPT09IHRydWUgfHwgZm9ybWF0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgc3RyaWN0ID0gZm9ybWF0O1xuICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxvY2FsZSA9PT0gdHJ1ZSB8fCBsb2NhbGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBzdHJpY3QgPSBsb2NhbGU7XG4gICAgICAgICAgICBsb2NhbGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAoaXNPYmplY3QoaW5wdXQpICYmIGlzT2JqZWN0RW1wdHkoaW5wdXQpKSB8fFxuICAgICAgICAgICAgKGlzQXJyYXkoaW5wdXQpICYmIGlucHV0Lmxlbmd0aCA9PT0gMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpbnB1dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBvYmplY3QgY29uc3RydWN0aW9uIG11c3QgYmUgZG9uZSB0aGlzIHdheS5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzE0MjNcbiAgICAgICAgYy5faXNBTW9tZW50T2JqZWN0ID0gdHJ1ZTtcbiAgICAgICAgYy5fdXNlVVRDID0gYy5faXNVVEMgPSBpc1VUQztcbiAgICAgICAgYy5fbCA9IGxvY2FsZTtcbiAgICAgICAgYy5faSA9IGlucHV0O1xuICAgICAgICBjLl9mID0gZm9ybWF0O1xuICAgICAgICBjLl9zdHJpY3QgPSBzdHJpY3Q7XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb21Db25maWcoYyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlTG9jYWwoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIGZhbHNlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJvdG90eXBlTWluID0gZGVwcmVjYXRlKFxuICAgICAgICAgICAgJ21vbWVudCgpLm1pbiBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1heCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvJyxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgb3RoZXIgPSBjcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyIDwgdGhpcyA/IHRoaXMgOiBvdGhlcjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgcHJvdG90eXBlTWF4ID0gZGVwcmVjYXRlKFxuICAgICAgICAgICAgJ21vbWVudCgpLm1heCBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1pbiBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvJyxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgb3RoZXIgPSBjcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyID4gdGhpcyA/IHRoaXMgOiBvdGhlcjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgIC8vIFBpY2sgYSBtb21lbnQgbSBmcm9tIG1vbWVudHMgc28gdGhhdCBtW2ZuXShvdGhlcikgaXMgdHJ1ZSBmb3IgYWxsXG4gICAgLy8gb3RoZXIuIFRoaXMgcmVsaWVzIG9uIHRoZSBmdW5jdGlvbiBmbiB0byBiZSB0cmFuc2l0aXZlLlxuICAgIC8vXG4gICAgLy8gbW9tZW50cyBzaG91bGQgZWl0aGVyIGJlIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzIG9yIGFuIGFycmF5LCB3aG9zZVxuICAgIC8vIGZpcnN0IGVsZW1lbnQgaXMgYW4gYXJyYXkgb2YgbW9tZW50IG9iamVjdHMuXG4gICAgZnVuY3Rpb24gcGlja0J5KGZuLCBtb21lbnRzKSB7XG4gICAgICAgIHZhciByZXMsIGk7XG4gICAgICAgIGlmIChtb21lbnRzLmxlbmd0aCA9PT0gMSAmJiBpc0FycmF5KG1vbWVudHNbMF0pKSB7XG4gICAgICAgICAgICBtb21lbnRzID0gbW9tZW50c1swXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1vbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwoKTtcbiAgICAgICAgfVxuICAgICAgICByZXMgPSBtb21lbnRzWzBdO1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgbW9tZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKCFtb21lbnRzW2ldLmlzVmFsaWQoKSB8fCBtb21lbnRzW2ldW2ZuXShyZXMpKSB7XG4gICAgICAgICAgICAgICAgcmVzID0gbW9tZW50c1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IFVzZSBbXS5zb3J0IGluc3RlYWQ/XG4gICAgZnVuY3Rpb24gbWluKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcblxuICAgICAgICByZXR1cm4gcGlja0J5KCdpc0JlZm9yZScsIGFyZ3MpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1heCgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNBZnRlcicsIGFyZ3MpO1xuICAgIH1cblxuICAgIHZhciBub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBEYXRlLm5vdyA/IERhdGUubm93KCkgOiArbmV3IERhdGUoKTtcbiAgICB9O1xuXG4gICAgdmFyIG9yZGVyaW5nID0gW1xuICAgICAgICAneWVhcicsXG4gICAgICAgICdxdWFydGVyJyxcbiAgICAgICAgJ21vbnRoJyxcbiAgICAgICAgJ3dlZWsnLFxuICAgICAgICAnZGF5JyxcbiAgICAgICAgJ2hvdXInLFxuICAgICAgICAnbWludXRlJyxcbiAgICAgICAgJ3NlY29uZCcsXG4gICAgICAgICdtaWxsaXNlY29uZCcsXG4gICAgXTtcblxuICAgIGZ1bmN0aW9uIGlzRHVyYXRpb25WYWxpZChtKSB7XG4gICAgICAgIHZhciBrZXksXG4gICAgICAgICAgICB1bml0SGFzRGVjaW1hbCA9IGZhbHNlLFxuICAgICAgICAgICAgaTtcbiAgICAgICAgZm9yIChrZXkgaW4gbSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGhhc093blByb3AobSwga2V5KSAmJlxuICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgIGluZGV4T2YuY2FsbChvcmRlcmluZywga2V5KSAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgKG1ba2V5XSA9PSBudWxsIHx8ICFpc05hTihtW2tleV0pKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBvcmRlcmluZy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKG1bb3JkZXJpbmdbaV1dKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVuaXRIYXNEZWNpbWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gb25seSBhbGxvdyBub24taW50ZWdlcnMgZm9yIHNtYWxsZXN0IHVuaXRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlRmxvYXQobVtvcmRlcmluZ1tpXV0pICE9PSB0b0ludChtW29yZGVyaW5nW2ldXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdW5pdEhhc0RlY2ltYWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQkMSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVmFsaWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW52YWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oTmFOKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBEdXJhdGlvbihkdXJhdGlvbikge1xuICAgICAgICB2YXIgbm9ybWFsaXplZElucHV0ID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoZHVyYXRpb24pLFxuICAgICAgICAgICAgeWVhcnMgPSBub3JtYWxpemVkSW5wdXQueWVhciB8fCAwLFxuICAgICAgICAgICAgcXVhcnRlcnMgPSBub3JtYWxpemVkSW5wdXQucXVhcnRlciB8fCAwLFxuICAgICAgICAgICAgbW9udGhzID0gbm9ybWFsaXplZElucHV0Lm1vbnRoIHx8IDAsXG4gICAgICAgICAgICB3ZWVrcyA9IG5vcm1hbGl6ZWRJbnB1dC53ZWVrIHx8IG5vcm1hbGl6ZWRJbnB1dC5pc29XZWVrIHx8IDAsXG4gICAgICAgICAgICBkYXlzID0gbm9ybWFsaXplZElucHV0LmRheSB8fCAwLFxuICAgICAgICAgICAgaG91cnMgPSBub3JtYWxpemVkSW5wdXQuaG91ciB8fCAwLFxuICAgICAgICAgICAgbWludXRlcyA9IG5vcm1hbGl6ZWRJbnB1dC5taW51dGUgfHwgMCxcbiAgICAgICAgICAgIHNlY29uZHMgPSBub3JtYWxpemVkSW5wdXQuc2Vjb25kIHx8IDAsXG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgPSBub3JtYWxpemVkSW5wdXQubWlsbGlzZWNvbmQgfHwgMDtcblxuICAgICAgICB0aGlzLl9pc1ZhbGlkID0gaXNEdXJhdGlvblZhbGlkKG5vcm1hbGl6ZWRJbnB1dCk7XG5cbiAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gZm9yIGRhdGVBZGRSZW1vdmVcbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID1cbiAgICAgICAgICAgICttaWxsaXNlY29uZHMgK1xuICAgICAgICAgICAgc2Vjb25kcyAqIDFlMyArIC8vIDEwMDBcbiAgICAgICAgICAgIG1pbnV0ZXMgKiA2ZTQgKyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGhvdXJzICogMTAwMCAqIDYwICogNjA7IC8vdXNpbmcgMTAwMCAqIDYwICogNjAgaW5zdGVhZCBvZiAzNmU1IHRvIGF2b2lkIGZsb2F0aW5nIHBvaW50IHJvdW5kaW5nIGVycm9ycyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjk3OFxuICAgICAgICAvLyBCZWNhdXNlIG9mIGRhdGVBZGRSZW1vdmUgdHJlYXRzIDI0IGhvdXJzIGFzIGRpZmZlcmVudCBmcm9tIGFcbiAgICAgICAgLy8gZGF5IHdoZW4gd29ya2luZyBhcm91bmQgRFNULCB3ZSBuZWVkIHRvIHN0b3JlIHRoZW0gc2VwYXJhdGVseVxuICAgICAgICB0aGlzLl9kYXlzID0gK2RheXMgKyB3ZWVrcyAqIDc7XG4gICAgICAgIC8vIEl0IGlzIGltcG9zc2libGUgdG8gdHJhbnNsYXRlIG1vbnRocyBpbnRvIGRheXMgd2l0aG91dCBrbm93aW5nXG4gICAgICAgIC8vIHdoaWNoIG1vbnRocyB5b3UgYXJlIGFyZSB0YWxraW5nIGFib3V0LCBzbyB3ZSBoYXZlIHRvIHN0b3JlXG4gICAgICAgIC8vIGl0IHNlcGFyYXRlbHkuXG4gICAgICAgIHRoaXMuX21vbnRocyA9ICttb250aHMgKyBxdWFydGVycyAqIDMgKyB5ZWFycyAqIDEyO1xuXG4gICAgICAgIHRoaXMuX2RhdGEgPSB7fTtcblxuICAgICAgICB0aGlzLl9sb2NhbGUgPSBnZXRMb2NhbGUoKTtcblxuICAgICAgICB0aGlzLl9idWJibGUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRHVyYXRpb247XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzUm91bmQobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCgtMSAqIG51bWJlcikgKiAtMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb21wYXJlIHR3byBhcnJheXMsIHJldHVybiB0aGUgbnVtYmVyIG9mIGRpZmZlcmVuY2VzXG4gICAgZnVuY3Rpb24gY29tcGFyZUFycmF5cyhhcnJheTEsIGFycmF5MiwgZG9udENvbnZlcnQpIHtcbiAgICAgICAgdmFyIGxlbiA9IE1hdGgubWluKGFycmF5MS5sZW5ndGgsIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgbGVuZ3RoRGlmZiA9IE1hdGguYWJzKGFycmF5MS5sZW5ndGggLSBhcnJheTIubGVuZ3RoKSxcbiAgICAgICAgICAgIGRpZmZzID0gMCxcbiAgICAgICAgICAgIGk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChkb250Q29udmVydCAmJiBhcnJheTFbaV0gIT09IGFycmF5MltpXSkgfHxcbiAgICAgICAgICAgICAgICAoIWRvbnRDb252ZXJ0ICYmIHRvSW50KGFycmF5MVtpXSkgIT09IHRvSW50KGFycmF5MltpXSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBkaWZmcysrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkaWZmcyArIGxlbmd0aERpZmY7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gb2Zmc2V0KHRva2VuLCBzZXBhcmF0b3IpIHtcbiAgICAgICAgYWRkRm9ybWF0VG9rZW4odG9rZW4sIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLnV0Y09mZnNldCgpLFxuICAgICAgICAgICAgICAgIHNpZ24gPSAnKyc7XG4gICAgICAgICAgICBpZiAob2Zmc2V0IDwgMCkge1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IC1vZmZzZXQ7XG4gICAgICAgICAgICAgICAgc2lnbiA9ICctJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgc2lnbiArXG4gICAgICAgICAgICAgICAgemVyb0ZpbGwofn4ob2Zmc2V0IC8gNjApLCAyKSArXG4gICAgICAgICAgICAgICAgc2VwYXJhdG9yICtcbiAgICAgICAgICAgICAgICB6ZXJvRmlsbCh+fm9mZnNldCAlIDYwLCAyKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb2Zmc2V0KCdaJywgJzonKTtcbiAgICBvZmZzZXQoJ1paJywgJycpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignWicsIG1hdGNoU2hvcnRPZmZzZXQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1paJywgbWF0Y2hTaG9ydE9mZnNldCk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ1onLCAnWlonXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fdXNlVVRDID0gdHJ1ZTtcbiAgICAgICAgY29uZmlnLl90em0gPSBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoU2hvcnRPZmZzZXQsIGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIHRpbWV6b25lIGNodW5rZXJcbiAgICAvLyAnKzEwOjAwJyA+IFsnMTAnLCAgJzAwJ11cbiAgICAvLyAnLTE1MzAnICA+IFsnLTE1JywgJzMwJ11cbiAgICB2YXIgY2h1bmtPZmZzZXQgPSAvKFtcXCtcXC1dfFxcZFxcZCkvZ2k7XG5cbiAgICBmdW5jdGlvbiBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoZXIsIHN0cmluZykge1xuICAgICAgICB2YXIgbWF0Y2hlcyA9IChzdHJpbmcgfHwgJycpLm1hdGNoKG1hdGNoZXIpLFxuICAgICAgICAgICAgY2h1bmssXG4gICAgICAgICAgICBwYXJ0cyxcbiAgICAgICAgICAgIG1pbnV0ZXM7XG5cbiAgICAgICAgaWYgKG1hdGNoZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY2h1bmsgPSBtYXRjaGVzW21hdGNoZXMubGVuZ3RoIC0gMV0gfHwgW107XG4gICAgICAgIHBhcnRzID0gKGNodW5rICsgJycpLm1hdGNoKGNodW5rT2Zmc2V0KSB8fCBbJy0nLCAwLCAwXTtcbiAgICAgICAgbWludXRlcyA9ICsocGFydHNbMV0gKiA2MCkgKyB0b0ludChwYXJ0c1syXSk7XG5cbiAgICAgICAgcmV0dXJuIG1pbnV0ZXMgPT09IDAgPyAwIDogcGFydHNbMF0gPT09ICcrJyA/IG1pbnV0ZXMgOiAtbWludXRlcztcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYSBtb21lbnQgZnJvbSBpbnB1dCwgdGhhdCBpcyBsb2NhbC91dGMvem9uZSBlcXVpdmFsZW50IHRvIG1vZGVsLlxuICAgIGZ1bmN0aW9uIGNsb25lV2l0aE9mZnNldChpbnB1dCwgbW9kZWwpIHtcbiAgICAgICAgdmFyIHJlcywgZGlmZjtcbiAgICAgICAgaWYgKG1vZGVsLl9pc1VUQykge1xuICAgICAgICAgICAgcmVzID0gbW9kZWwuY2xvbmUoKTtcbiAgICAgICAgICAgIGRpZmYgPVxuICAgICAgICAgICAgICAgIChpc01vbWVudChpbnB1dCkgfHwgaXNEYXRlKGlucHV0KVxuICAgICAgICAgICAgICAgICAgICA/IGlucHV0LnZhbHVlT2YoKVxuICAgICAgICAgICAgICAgICAgICA6IGNyZWF0ZUxvY2FsKGlucHV0KS52YWx1ZU9mKCkpIC0gcmVzLnZhbHVlT2YoKTtcbiAgICAgICAgICAgIC8vIFVzZSBsb3ctbGV2ZWwgYXBpLCBiZWNhdXNlIHRoaXMgZm4gaXMgbG93LWxldmVsIGFwaS5cbiAgICAgICAgICAgIHJlcy5fZC5zZXRUaW1lKHJlcy5fZC52YWx1ZU9mKCkgKyBkaWZmKTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldChyZXMsIGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwoaW5wdXQpLmxvY2FsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXREYXRlT2Zmc2V0KG0pIHtcbiAgICAgICAgLy8gT24gRmlyZWZveC4yNCBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgYSBmbG9hdGluZyBwb2ludC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvcHVsbC8xODcxXG4gICAgICAgIHJldHVybiAtTWF0aC5yb3VuZChtLl9kLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIGEgbW9tZW50IGlzIG11dGF0ZWQuXG4gICAgLy8gSXQgaXMgaW50ZW5kZWQgdG8ga2VlcCB0aGUgb2Zmc2V0IGluIHN5bmMgd2l0aCB0aGUgdGltZXpvbmUuXG4gICAgaG9va3MudXBkYXRlT2Zmc2V0ID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICAvLyBrZWVwTG9jYWxUaW1lID0gdHJ1ZSBtZWFucyBvbmx5IGNoYW5nZSB0aGUgdGltZXpvbmUsIHdpdGhvdXRcbiAgICAvLyBhZmZlY3RpbmcgdGhlIGxvY2FsIGhvdXIuIFNvIDU6MzE6MjYgKzAzMDAgLS1bdXRjT2Zmc2V0KDIsIHRydWUpXS0tPlxuICAgIC8vIDU6MzE6MjYgKzAyMDAgSXQgaXMgcG9zc2libGUgdGhhdCA1OjMxOjI2IGRvZXNuJ3QgZXhpc3Qgd2l0aCBvZmZzZXRcbiAgICAvLyArMDIwMCwgc28gd2UgYWRqdXN0IHRoZSB0aW1lIGFzIG5lZWRlZCwgdG8gYmUgdmFsaWQuXG4gICAgLy9cbiAgICAvLyBLZWVwaW5nIHRoZSB0aW1lIGFjdHVhbGx5IGFkZHMvc3VidHJhY3RzIChvbmUgaG91cilcbiAgICAvLyBmcm9tIHRoZSBhY3R1YWwgcmVwcmVzZW50ZWQgdGltZS4gVGhhdCBpcyB3aHkgd2UgY2FsbCB1cGRhdGVPZmZzZXRcbiAgICAvLyBhIHNlY29uZCB0aW1lLiBJbiBjYXNlIGl0IHdhbnRzIHVzIHRvIGNoYW5nZSB0aGUgb2Zmc2V0IGFnYWluXG4gICAgLy8gX2NoYW5nZUluUHJvZ3Jlc3MgPT0gdHJ1ZSBjYXNlLCB0aGVuIHdlIGhhdmUgdG8gYWRqdXN0LCBiZWNhdXNlXG4gICAgLy8gdGhlcmUgaXMgbm8gc3VjaCB0aW1lIGluIHRoZSBnaXZlbiB0aW1lem9uZS5cbiAgICBmdW5jdGlvbiBnZXRTZXRPZmZzZXQoaW5wdXQsIGtlZXBMb2NhbFRpbWUsIGtlZXBNaW51dGVzKSB7XG4gICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLl9vZmZzZXQgfHwgMCxcbiAgICAgICAgICAgIGxvY2FsQWRqdXN0O1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoU2hvcnRPZmZzZXQsIGlucHV0KTtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChNYXRoLmFicyhpbnB1dCkgPCAxNiAmJiAha2VlcE1pbnV0ZXMpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0ICogNjA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzVVRDICYmIGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgICAgICAgICBsb2NhbEFkanVzdCA9IGdldERhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9vZmZzZXQgPSBpbnB1dDtcbiAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChsb2NhbEFkanVzdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGQobG9jYWxBZGp1c3QsICdtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob2Zmc2V0ICE9PSBpbnB1dCkge1xuICAgICAgICAgICAgICAgIGlmICgha2VlcExvY2FsVGltZSB8fCB0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFN1YnRyYWN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUR1cmF0aW9uKGlucHV0IC0gb2Zmc2V0LCAnbScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VJblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/IG9mZnNldCA6IGdldERhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRab25lKGlucHV0LCBrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gLWlucHV0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldChpbnB1dCwga2VlcExvY2FsVGltZSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIC10aGlzLnV0Y09mZnNldCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9VVEMoa2VlcExvY2FsVGltZSkge1xuICAgICAgICByZXR1cm4gdGhpcy51dGNPZmZzZXQoMCwga2VlcExvY2FsVGltZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9Mb2NhbChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc1VUQykge1xuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoMCwga2VlcExvY2FsVGltZSk7XG4gICAgICAgICAgICB0aGlzLl9pc1VUQyA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoa2VlcExvY2FsVGltZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3VidHJhY3QoZ2V0RGF0ZU9mZnNldCh0aGlzKSwgJ20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1BhcnNlZE9mZnNldCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3R6bSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCh0aGlzLl90em0sIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5faSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhciB0Wm9uZSA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hPZmZzZXQsIHRoaXMuX2kpO1xuICAgICAgICAgICAgaWYgKHRab25lICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnV0Y09mZnNldCh0Wm9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KDAsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhc0FsaWduZWRIb3VyT2Zmc2V0KGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpbnB1dCA9IGlucHV0ID8gY3JlYXRlTG9jYWwoaW5wdXQpLnV0Y09mZnNldCgpIDogMDtcblxuICAgICAgICByZXR1cm4gKHRoaXMudXRjT2Zmc2V0KCkgLSBpbnB1dCkgJSA2MCA9PT0gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RheWxpZ2h0U2F2aW5nVGltZSgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KCkgPiB0aGlzLmNsb25lKCkubW9udGgoMCkudXRjT2Zmc2V0KCkgfHxcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KCkgPiB0aGlzLmNsb25lKCkubW9udGgoNSkudXRjT2Zmc2V0KClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RheWxpZ2h0U2F2aW5nVGltZVNoaWZ0ZWQoKSB7XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQodGhpcy5faXNEU1RTaGlmdGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjID0ge30sXG4gICAgICAgICAgICBvdGhlcjtcblxuICAgICAgICBjb3B5Q29uZmlnKGMsIHRoaXMpO1xuICAgICAgICBjID0gcHJlcGFyZUNvbmZpZyhjKTtcblxuICAgICAgICBpZiAoYy5fYSkge1xuICAgICAgICAgICAgb3RoZXIgPSBjLl9pc1VUQyA/IGNyZWF0ZVVUQyhjLl9hKSA6IGNyZWF0ZUxvY2FsKGMuX2EpO1xuICAgICAgICAgICAgdGhpcy5faXNEU1RTaGlmdGVkID1cbiAgICAgICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJiBjb21wYXJlQXJyYXlzKGMuX2EsIG90aGVyLnRvQXJyYXkoKSkgPiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faXNEU1RTaGlmdGVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTG9jYWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/ICF0aGlzLl9pc1VUQyA6IGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVXRjT2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLl9pc1VUQyA6IGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVXRjKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLl9pc1VUQyAmJiB0aGlzLl9vZmZzZXQgPT09IDAgOiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBBU1AuTkVUIGpzb24gZGF0ZSBmb3JtYXQgcmVnZXhcbiAgICB2YXIgYXNwTmV0UmVnZXggPSAvXigtfFxcKyk/KD86KFxcZCopWy4gXSk/KFxcZCspOihcXGQrKSg/OjooXFxkKykoXFwuXFxkKik/KT8kLyxcbiAgICAgICAgLy8gZnJvbSBodHRwOi8vZG9jcy5jbG9zdXJlLWxpYnJhcnkuZ29vZ2xlY29kZS5jb20vZ2l0L2Nsb3N1cmVfZ29vZ19kYXRlX2RhdGUuanMuc291cmNlLmh0bWxcbiAgICAgICAgLy8gc29tZXdoYXQgbW9yZSBpbiBsaW5lIHdpdGggNC40LjMuMiAyMDA0IHNwZWMsIGJ1dCBhbGxvd3MgZGVjaW1hbCBhbnl3aGVyZVxuICAgICAgICAvLyBhbmQgZnVydGhlciBtb2RpZmllZCB0byBhbGxvdyBmb3Igc3RyaW5ncyBjb250YWluaW5nIGJvdGggd2VlayBhbmQgZGF5XG4gICAgICAgIGlzb1JlZ2V4ID0gL14oLXxcXCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUR1cmF0aW9uKGlucHV0LCBrZXkpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gaW5wdXQsXG4gICAgICAgICAgICAvLyBtYXRjaGluZyBhZ2FpbnN0IHJlZ2V4cCBpcyBleHBlbnNpdmUsIGRvIGl0IG9uIGRlbWFuZFxuICAgICAgICAgICAgbWF0Y2ggPSBudWxsLFxuICAgICAgICAgICAgc2lnbixcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgIGRpZmZSZXM7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBtczogaW5wdXQuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgICAgICBkOiBpbnB1dC5fZGF5cyxcbiAgICAgICAgICAgICAgICBNOiBpbnB1dC5fbW9udGhzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkgfHwgIWlzTmFOKCtpbnB1dCkpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb25ba2V5XSA9ICtpbnB1dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ubWlsbGlzZWNvbmRzID0gK2lucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKChtYXRjaCA9IGFzcE5ldFJlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IG1hdGNoWzFdID09PSAnLScgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICAgIGQ6IHRvSW50KG1hdGNoW0RBVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgaDogdG9JbnQobWF0Y2hbSE9VUl0pICogc2lnbixcbiAgICAgICAgICAgICAgICBtOiB0b0ludChtYXRjaFtNSU5VVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgczogdG9JbnQobWF0Y2hbU0VDT05EXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIG1zOiB0b0ludChhYnNSb3VuZChtYXRjaFtNSUxMSVNFQ09ORF0gKiAxMDAwKSkgKiBzaWduLCAvLyB0aGUgbWlsbGlzZWNvbmQgZGVjaW1hbCBwb2ludCBpcyBpbmNsdWRlZCBpbiB0aGUgbWF0Y2hcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoKG1hdGNoID0gaXNvUmVnZXguZXhlYyhpbnB1dCkpKSB7XG4gICAgICAgICAgICBzaWduID0gbWF0Y2hbMV0gPT09ICctJyA/IC0xIDogMTtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIHk6IHBhcnNlSXNvKG1hdGNoWzJdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBNOiBwYXJzZUlzbyhtYXRjaFszXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgdzogcGFyc2VJc28obWF0Y2hbNF0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIGQ6IHBhcnNlSXNvKG1hdGNoWzVdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBoOiBwYXJzZUlzbyhtYXRjaFs2XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgbTogcGFyc2VJc28obWF0Y2hbN10sIHNpZ24pLFxuICAgICAgICAgICAgICAgIHM6IHBhcnNlSXNvKG1hdGNoWzhdLCBzaWduKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoZHVyYXRpb24gPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBkdXJhdGlvbiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICgnZnJvbScgaW4gZHVyYXRpb24gfHwgJ3RvJyBpbiBkdXJhdGlvbilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBkaWZmUmVzID0gbW9tZW50c0RpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24uZnJvbSksXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24udG8pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgZHVyYXRpb24ubXMgPSBkaWZmUmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIGR1cmF0aW9uLk0gPSBkaWZmUmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldCA9IG5ldyBEdXJhdGlvbihkdXJhdGlvbik7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpICYmIGhhc093blByb3AoaW5wdXQsICdfbG9jYWxlJykpIHtcbiAgICAgICAgICAgIHJldC5fbG9jYWxlID0gaW5wdXQuX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSAmJiBoYXNPd25Qcm9wKGlucHV0LCAnX2lzVmFsaWQnKSkge1xuICAgICAgICAgICAgcmV0Ll9pc1ZhbGlkID0gaW5wdXQuX2lzVmFsaWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIGNyZWF0ZUR1cmF0aW9uLmZuID0gRHVyYXRpb24ucHJvdG90eXBlO1xuICAgIGNyZWF0ZUR1cmF0aW9uLmludmFsaWQgPSBjcmVhdGVJbnZhbGlkJDE7XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzbyhpbnAsIHNpZ24pIHtcbiAgICAgICAgLy8gV2UnZCBub3JtYWxseSB1c2Ugfn5pbnAgZm9yIHRoaXMsIGJ1dCB1bmZvcnR1bmF0ZWx5IGl0IGFsc29cbiAgICAgICAgLy8gY29udmVydHMgZmxvYXRzIHRvIGludHMuXG4gICAgICAgIC8vIGlucCBtYXkgYmUgdW5kZWZpbmVkLCBzbyBjYXJlZnVsIGNhbGxpbmcgcmVwbGFjZSBvbiBpdC5cbiAgICAgICAgdmFyIHJlcyA9IGlucCAmJiBwYXJzZUZsb2F0KGlucC5yZXBsYWNlKCcsJywgJy4nKSk7XG4gICAgICAgIC8vIGFwcGx5IHNpZ24gd2hpbGUgd2UncmUgYXQgaXRcbiAgICAgICAgcmV0dXJuIChpc05hTihyZXMpID8gMCA6IHJlcykgKiBzaWduO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcyA9IHt9O1xuXG4gICAgICAgIHJlcy5tb250aHMgPVxuICAgICAgICAgICAgb3RoZXIubW9udGgoKSAtIGJhc2UubW9udGgoKSArIChvdGhlci55ZWFyKCkgLSBiYXNlLnllYXIoKSkgKiAxMjtcbiAgICAgICAgaWYgKGJhc2UuY2xvbmUoKS5hZGQocmVzLm1vbnRocywgJ00nKS5pc0FmdGVyKG90aGVyKSkge1xuICAgICAgICAgICAgLS1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9ICtvdGhlciAtICtiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJyk7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcikge1xuICAgICAgICB2YXIgcmVzO1xuICAgICAgICBpZiAoIShiYXNlLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBtaWxsaXNlY29uZHM6IDAsIG1vbnRoczogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgb3RoZXIgPSBjbG9uZVdpdGhPZmZzZXQob3RoZXIsIGJhc2UpO1xuICAgICAgICBpZiAoYmFzZS5pc0JlZm9yZShvdGhlcikpIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShvdGhlciwgYmFzZSk7XG4gICAgICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gLXJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICByZXMubW9udGhzID0gLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHJlbW92ZSAnbmFtZScgYXJnIGFmdGVyIGRlcHJlY2F0aW9uIGlzIHJlbW92ZWRcbiAgICBmdW5jdGlvbiBjcmVhdGVBZGRlcihkaXJlY3Rpb24sIG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwsIHBlcmlvZCkge1xuICAgICAgICAgICAgdmFyIGR1ciwgdG1wO1xuICAgICAgICAgICAgLy9pbnZlcnQgdGhlIGFyZ3VtZW50cywgYnV0IGNvbXBsYWluIGFib3V0IGl0XG4gICAgICAgICAgICBpZiAocGVyaW9kICE9PSBudWxsICYmICFpc05hTigrcGVyaW9kKSkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZShcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgJ21vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKHBlcmlvZCwgbnVtYmVyKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIG1vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKG51bWJlciwgcGVyaW9kKS4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvYWRkLWludmVydGVkLXBhcmFtLyBmb3IgbW9yZSBpbmZvLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRtcCA9IHZhbDtcbiAgICAgICAgICAgICAgICB2YWwgPSBwZXJpb2Q7XG4gICAgICAgICAgICAgICAgcGVyaW9kID0gdG1wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkdXIgPSBjcmVhdGVEdXJhdGlvbih2YWwsIHBlcmlvZCk7XG4gICAgICAgICAgICBhZGRTdWJ0cmFjdCh0aGlzLCBkdXIsIGRpcmVjdGlvbik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRTdWJ0cmFjdChtb20sIGR1cmF0aW9uLCBpc0FkZGluZywgdXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgZGF5cyA9IGFic1JvdW5kKGR1cmF0aW9uLl9kYXlzKSxcbiAgICAgICAgICAgIG1vbnRocyA9IGFic1JvdW5kKGR1cmF0aW9uLl9tb250aHMpO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZU9mZnNldCA9IHVwZGF0ZU9mZnNldCA9PSBudWxsID8gdHJ1ZSA6IHVwZGF0ZU9mZnNldDtcblxuICAgICAgICBpZiAobW9udGhzKSB7XG4gICAgICAgICAgICBzZXRNb250aChtb20sIGdldChtb20sICdNb250aCcpICsgbW9udGhzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXlzKSB7XG4gICAgICAgICAgICBzZXQkMShtb20sICdEYXRlJywgZ2V0KG1vbSwgJ0RhdGUnKSArIGRheXMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICAgICAgbW9tLl9kLnNldFRpbWUobW9tLl9kLnZhbHVlT2YoKSArIG1pbGxpc2Vjb25kcyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQobW9tLCBkYXlzIHx8IG1vbnRocyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYWRkID0gY3JlYXRlQWRkZXIoMSwgJ2FkZCcpLFxuICAgICAgICBzdWJ0cmFjdCA9IGNyZWF0ZUFkZGVyKC0xLCAnc3VidHJhY3QnKTtcblxuICAgIGZ1bmN0aW9uIGlzU3RyaW5nKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8IGlucHV0IGluc3RhbmNlb2YgU3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHR5cGUgTW9tZW50SW5wdXQgPSBNb21lbnQgfCBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyIHwgKG51bWJlciB8IHN0cmluZylbXSB8IE1vbWVudElucHV0T2JqZWN0IHwgdm9pZDsgLy8gbnVsbCB8IHVuZGVmaW5lZFxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzTW9tZW50KGlucHV0KSB8fFxuICAgICAgICAgICAgaXNEYXRlKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNTdHJpbmcoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc051bWJlcihpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHx8XG4gICAgICAgICAgICBpbnB1dCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgaW5wdXQgPT09IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgdmFyIG9iamVjdFRlc3QgPSBpc09iamVjdChpbnB1dCkgJiYgIWlzT2JqZWN0RW1wdHkoaW5wdXQpLFxuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgICAgICAgICd5ZWFycycsXG4gICAgICAgICAgICAgICAgJ3llYXInLFxuICAgICAgICAgICAgICAgICd5JyxcbiAgICAgICAgICAgICAgICAnbW9udGhzJyxcbiAgICAgICAgICAgICAgICAnbW9udGgnLFxuICAgICAgICAgICAgICAgICdNJyxcbiAgICAgICAgICAgICAgICAnZGF5cycsXG4gICAgICAgICAgICAgICAgJ2RheScsXG4gICAgICAgICAgICAgICAgJ2QnLFxuICAgICAgICAgICAgICAgICdkYXRlcycsXG4gICAgICAgICAgICAgICAgJ2RhdGUnLFxuICAgICAgICAgICAgICAgICdEJyxcbiAgICAgICAgICAgICAgICAnaG91cnMnLFxuICAgICAgICAgICAgICAgICdob3VyJyxcbiAgICAgICAgICAgICAgICAnaCcsXG4gICAgICAgICAgICAgICAgJ21pbnV0ZXMnLFxuICAgICAgICAgICAgICAgICdtaW51dGUnLFxuICAgICAgICAgICAgICAgICdtJyxcbiAgICAgICAgICAgICAgICAnc2Vjb25kcycsXG4gICAgICAgICAgICAgICAgJ3NlY29uZCcsXG4gICAgICAgICAgICAgICAgJ3MnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZHMnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZCcsXG4gICAgICAgICAgICAgICAgJ21zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IHByb3BlcnR5VGVzdCB8fCBoYXNPd25Qcm9wKGlucHV0LCBwcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2JqZWN0VGVzdCAmJiBwcm9wZXJ0eVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNOdW1iZXJPclN0cmluZ0FycmF5KGlucHV0KSB7XG4gICAgICAgIHZhciBhcnJheVRlc3QgPSBpc0FycmF5KGlucHV0KSxcbiAgICAgICAgICAgIGRhdGFUeXBlVGVzdCA9IGZhbHNlO1xuICAgICAgICBpZiAoYXJyYXlUZXN0KSB7XG4gICAgICAgICAgICBkYXRhVHlwZVRlc3QgPVxuICAgICAgICAgICAgICAgIGlucHV0LmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWlzTnVtYmVyKGl0ZW0pICYmIGlzU3RyaW5nKGlucHV0KTtcbiAgICAgICAgICAgICAgICB9KS5sZW5ndGggPT09IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycmF5VGVzdCAmJiBkYXRhVHlwZVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNDYWxlbmRhclNwZWMoaW5wdXQpIHtcbiAgICAgICAgdmFyIG9iamVjdFRlc3QgPSBpc09iamVjdChpbnB1dCkgJiYgIWlzT2JqZWN0RW1wdHkoaW5wdXQpLFxuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgICAgICAgICdzYW1lRGF5JyxcbiAgICAgICAgICAgICAgICAnbmV4dERheScsXG4gICAgICAgICAgICAgICAgJ2xhc3REYXknLFxuICAgICAgICAgICAgICAgICduZXh0V2VlaycsXG4gICAgICAgICAgICAgICAgJ2xhc3RXZWVrJyxcbiAgICAgICAgICAgICAgICAnc2FtZUVsc2UnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBwcm9wZXJ0eTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gcHJvcGVydHlUZXN0IHx8IGhhc093blByb3AoaW5wdXQsIHByb3BlcnR5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvYmplY3RUZXN0ICYmIHByb3BlcnR5VGVzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRDYWxlbmRhckZvcm1hdChteU1vbWVudCwgbm93KSB7XG4gICAgICAgIHZhciBkaWZmID0gbXlNb21lbnQuZGlmZihub3csICdkYXlzJywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBkaWZmIDwgLTZcbiAgICAgICAgICAgID8gJ3NhbWVFbHNlJ1xuICAgICAgICAgICAgOiBkaWZmIDwgLTFcbiAgICAgICAgICAgID8gJ2xhc3RXZWVrJ1xuICAgICAgICAgICAgOiBkaWZmIDwgMFxuICAgICAgICAgICAgPyAnbGFzdERheSdcbiAgICAgICAgICAgIDogZGlmZiA8IDFcbiAgICAgICAgICAgID8gJ3NhbWVEYXknXG4gICAgICAgICAgICA6IGRpZmYgPCAyXG4gICAgICAgICAgICA/ICduZXh0RGF5J1xuICAgICAgICAgICAgOiBkaWZmIDwgN1xuICAgICAgICAgICAgPyAnbmV4dFdlZWsnXG4gICAgICAgICAgICA6ICdzYW1lRWxzZSc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FsZW5kYXIkMSh0aW1lLCBmb3JtYXRzKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgZm9yIHNpbmdsZSBwYXJhbWV0ZXIsIGZvcm1hdHMgb25seSBvdmVybG9hZCB0byB0aGUgY2FsZW5kYXIgZnVuY3Rpb25cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGlmICghYXJndW1lbnRzWzBdKSB7XG4gICAgICAgICAgICAgICAgdGltZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc01vbWVudElucHV0KGFyZ3VtZW50c1swXSkpIHtcbiAgICAgICAgICAgICAgICB0aW1lID0gYXJndW1lbnRzWzBdO1xuICAgICAgICAgICAgICAgIGZvcm1hdHMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzQ2FsZW5kYXJTcGVjKGFyZ3VtZW50c1swXSkpIHtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gYXJndW1lbnRzWzBdO1xuICAgICAgICAgICAgICAgIHRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2Ugd2FudCB0byBjb21wYXJlIHRoZSBzdGFydCBvZiB0b2RheSwgdnMgdGhpcy5cbiAgICAgICAgLy8gR2V0dGluZyBzdGFydC1vZi10b2RheSBkZXBlbmRzIG9uIHdoZXRoZXIgd2UncmUgbG9jYWwvdXRjL29mZnNldCBvciBub3QuXG4gICAgICAgIHZhciBub3cgPSB0aW1lIHx8IGNyZWF0ZUxvY2FsKCksXG4gICAgICAgICAgICBzb2QgPSBjbG9uZVdpdGhPZmZzZXQobm93LCB0aGlzKS5zdGFydE9mKCdkYXknKSxcbiAgICAgICAgICAgIGZvcm1hdCA9IGhvb2tzLmNhbGVuZGFyRm9ybWF0KHRoaXMsIHNvZCkgfHwgJ3NhbWVFbHNlJyxcbiAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgZm9ybWF0cyAmJlxuICAgICAgICAgICAgICAgIChpc0Z1bmN0aW9uKGZvcm1hdHNbZm9ybWF0XSlcbiAgICAgICAgICAgICAgICAgICAgPyBmb3JtYXRzW2Zvcm1hdF0uY2FsbCh0aGlzLCBub3cpXG4gICAgICAgICAgICAgICAgICAgIDogZm9ybWF0c1tmb3JtYXRdKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXQoXG4gICAgICAgICAgICBvdXRwdXQgfHwgdGhpcy5sb2NhbGVEYXRhKCkuY2FsZW5kYXIoZm9ybWF0LCB0aGlzLCBjcmVhdGVMb2NhbChub3cpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsb25lKCkge1xuICAgICAgICByZXR1cm4gbmV3IE1vbWVudCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FmdGVyKGlucHV0LCB1bml0cykge1xuICAgICAgICB2YXIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA+IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsSW5wdXQudmFsdWVPZigpIDwgdGhpcy5jbG9uZSgpLnN0YXJ0T2YodW5pdHMpLnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQmVmb3JlKGlucHV0LCB1bml0cykge1xuICAgICAgICB2YXIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5lbmRPZih1bml0cykudmFsdWVPZigpIDwgbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0JldHdlZW4oZnJvbSwgdG8sIHVuaXRzLCBpbmNsdXNpdml0eSkge1xuICAgICAgICB2YXIgbG9jYWxGcm9tID0gaXNNb21lbnQoZnJvbSkgPyBmcm9tIDogY3JlYXRlTG9jYWwoZnJvbSksXG4gICAgICAgICAgICBsb2NhbFRvID0gaXNNb21lbnQodG8pID8gdG8gOiBjcmVhdGVMb2NhbCh0byk7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsRnJvbS5pc1ZhbGlkKCkgJiYgbG9jYWxUby5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaW5jbHVzaXZpdHkgPSBpbmNsdXNpdml0eSB8fCAnKCknO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGluY2x1c2l2aXR5WzBdID09PSAnKCdcbiAgICAgICAgICAgICAgICA/IHRoaXMuaXNBZnRlcihsb2NhbEZyb20sIHVuaXRzKVxuICAgICAgICAgICAgICAgIDogIXRoaXMuaXNCZWZvcmUobG9jYWxGcm9tLCB1bml0cykpICYmXG4gICAgICAgICAgICAoaW5jbHVzaXZpdHlbMV0gPT09ICcpJ1xuICAgICAgICAgICAgICAgID8gdGhpcy5pc0JlZm9yZShsb2NhbFRvLCB1bml0cylcbiAgICAgICAgICAgICAgICA6ICF0aGlzLmlzQWZ0ZXIobG9jYWxUbywgdW5pdHMpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU2FtZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KSxcbiAgICAgICAgICAgIGlucHV0TXM7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpID09PSBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlucHV0TXMgPSBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9uZSgpLnN0YXJ0T2YodW5pdHMpLnZhbHVlT2YoKSA8PSBpbnB1dE1zICYmXG4gICAgICAgICAgICAgICAgaW5wdXRNcyA8PSB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU2FtZU9yQWZ0ZXIoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2FtZShpbnB1dCwgdW5pdHMpIHx8IHRoaXMuaXNBZnRlcihpbnB1dCwgdW5pdHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU2FtZU9yQmVmb3JlKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQmVmb3JlKGlucHV0LCB1bml0cyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGlmZihpbnB1dCwgdW5pdHMsIGFzRmxvYXQpIHtcbiAgICAgICAgdmFyIHRoYXQsIHpvbmVEZWx0YSwgb3V0cHV0O1xuXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB0aGF0ID0gY2xvbmVXaXRoT2Zmc2V0KGlucHV0LCB0aGlzKTtcblxuICAgICAgICBpZiAoIXRoYXQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgem9uZURlbHRhID0gKHRoYXQudXRjT2Zmc2V0KCkgLSB0aGlzLnV0Y09mZnNldCgpKSAqIDZlNDtcblxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCkgLyAxMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCkgLyAzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gMWUzO1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwXG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyA2ZTQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDM2ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwXG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA4NjRlNTtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMCAqIDYwICogNjAgKiAyNCwgbmVnYXRlIGRzdFxuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0IC0gem9uZURlbHRhKSAvIDYwNDhlNTtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMCAqIDYwICogNjAgKiAyNCAqIDcsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gdGhpcyAtIHRoYXQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXNGbG9hdCA/IG91dHB1dCA6IGFic0Zsb29yKG91dHB1dCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhEaWZmKGEsIGIpIHtcbiAgICAgICAgaWYgKGEuZGF0ZSgpIDwgYi5kYXRlKCkpIHtcbiAgICAgICAgICAgIC8vIGVuZC1vZi1tb250aCBjYWxjdWxhdGlvbnMgd29yayBjb3JyZWN0IHdoZW4gdGhlIHN0YXJ0IG1vbnRoIGhhcyBtb3JlXG4gICAgICAgICAgICAvLyBkYXlzIHRoYW4gdGhlIGVuZCBtb250aC5cbiAgICAgICAgICAgIHJldHVybiAtbW9udGhEaWZmKGIsIGEpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRpZmZlcmVuY2UgaW4gbW9udGhzXG4gICAgICAgIHZhciB3aG9sZU1vbnRoRGlmZiA9IChiLnllYXIoKSAtIGEueWVhcigpKSAqIDEyICsgKGIubW9udGgoKSAtIGEubW9udGgoKSksXG4gICAgICAgICAgICAvLyBiIGlzIGluIChhbmNob3IgLSAxIG1vbnRoLCBhbmNob3IgKyAxIG1vbnRoKVxuICAgICAgICAgICAgYW5jaG9yID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiwgJ21vbnRocycpLFxuICAgICAgICAgICAgYW5jaG9yMixcbiAgICAgICAgICAgIGFkanVzdDtcblxuICAgICAgICBpZiAoYiAtIGFuY2hvciA8IDApIHtcbiAgICAgICAgICAgIGFuY2hvcjIgPSBhLmNsb25lKCkuYWRkKHdob2xlTW9udGhEaWZmIC0gMSwgJ21vbnRocycpO1xuICAgICAgICAgICAgLy8gbGluZWFyIGFjcm9zcyB0aGUgbW9udGhcbiAgICAgICAgICAgIGFkanVzdCA9IChiIC0gYW5jaG9yKSAvIChhbmNob3IgLSBhbmNob3IyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFuY2hvcjIgPSBhLmNsb25lKCkuYWRkKHdob2xlTW9udGhEaWZmICsgMSwgJ21vbnRocycpO1xuICAgICAgICAgICAgLy8gbGluZWFyIGFjcm9zcyB0aGUgbW9udGhcbiAgICAgICAgICAgIGFkanVzdCA9IChiIC0gYW5jaG9yKSAvIChhbmNob3IyIC0gYW5jaG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vY2hlY2sgZm9yIG5lZ2F0aXZlIHplcm8sIHJldHVybiB6ZXJvIGlmIG5lZ2F0aXZlIHplcm9cbiAgICAgICAgcmV0dXJuIC0od2hvbGVNb250aERpZmYgKyBhZGp1c3QpIHx8IDA7XG4gICAgfVxuXG4gICAgaG9va3MuZGVmYXVsdEZvcm1hdCA9ICdZWVlZLU1NLUREVEhIOm1tOnNzWic7XG4gICAgaG9va3MuZGVmYXVsdEZvcm1hdFV0YyA9ICdZWVlZLU1NLUREVEhIOm1tOnNzW1pdJztcblxuICAgIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmxvY2FsZSgnZW4nKS5mb3JtYXQoJ2RkZCBNTU0gREQgWVlZWSBISDptbTpzcyBbR01UXVpaJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9JU09TdHJpbmcoa2VlcE9mZnNldCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdXRjID0ga2VlcE9mZnNldCAhPT0gdHJ1ZSxcbiAgICAgICAgICAgIG0gPSB1dGMgPyB0aGlzLmNsb25lKCkudXRjKCkgOiB0aGlzO1xuICAgICAgICBpZiAobS55ZWFyKCkgPCAwIHx8IG0ueWVhcigpID4gOTk5OSkge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChcbiAgICAgICAgICAgICAgICBtLFxuICAgICAgICAgICAgICAgIHV0Y1xuICAgICAgICAgICAgICAgICAgICA/ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0nXG4gICAgICAgICAgICAgICAgICAgIDogJ1lZWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1onXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKSkge1xuICAgICAgICAgICAgLy8gbmF0aXZlIGltcGxlbWVudGF0aW9uIGlzIH41MHggZmFzdGVyLCB1c2UgaXQgd2hlbiB3ZSBjYW5cbiAgICAgICAgICAgIGlmICh1dGMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b0RhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkgKyB0aGlzLnV0Y09mZnNldCgpICogNjAgKiAxMDAwKVxuICAgICAgICAgICAgICAgICAgICAudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnWicsIGZvcm1hdE1vbWVudChtLCAnWicpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybWF0TW9tZW50KFxuICAgICAgICAgICAgbSxcbiAgICAgICAgICAgIHV0YyA/ICdZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJyA6ICdZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWidcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBodW1hbiByZWFkYWJsZSByZXByZXNlbnRhdGlvbiBvZiBhIG1vbWVudCB0aGF0IGNhblxuICAgICAqIGFsc28gYmUgZXZhbHVhdGVkIHRvIGdldCBhIG5ldyBtb21lbnQgd2hpY2ggaXMgdGhlIHNhbWVcbiAgICAgKlxuICAgICAqIEBsaW5rIGh0dHBzOi8vbm9kZWpzLm9yZy9kaXN0L2xhdGVzdC9kb2NzL2FwaS91dGlsLmh0bWwjdXRpbF9jdXN0b21faW5zcGVjdF9mdW5jdGlvbl9vbl9vYmplY3RzXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5zcGVjdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuICdtb21lbnQuaW52YWxpZCgvKiAnICsgdGhpcy5faSArICcgKi8pJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgZnVuYyA9ICdtb21lbnQnLFxuICAgICAgICAgICAgem9uZSA9ICcnLFxuICAgICAgICAgICAgcHJlZml4LFxuICAgICAgICAgICAgeWVhcixcbiAgICAgICAgICAgIGRhdGV0aW1lLFxuICAgICAgICAgICAgc3VmZml4O1xuICAgICAgICBpZiAoIXRoaXMuaXNMb2NhbCgpKSB7XG4gICAgICAgICAgICBmdW5jID0gdGhpcy51dGNPZmZzZXQoKSA9PT0gMCA/ICdtb21lbnQudXRjJyA6ICdtb21lbnQucGFyc2Vab25lJztcbiAgICAgICAgICAgIHpvbmUgPSAnWic7XG4gICAgICAgIH1cbiAgICAgICAgcHJlZml4ID0gJ1snICsgZnVuYyArICcoXCJdJztcbiAgICAgICAgeWVhciA9IDAgPD0gdGhpcy55ZWFyKCkgJiYgdGhpcy55ZWFyKCkgPD0gOTk5OSA/ICdZWVlZJyA6ICdZWVlZWVknO1xuICAgICAgICBkYXRldGltZSA9ICctTU0tRERbVF1ISDptbTpzcy5TU1MnO1xuICAgICAgICBzdWZmaXggPSB6b25lICsgJ1tcIildJztcblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXQocHJlZml4ICsgeWVhciArIGRhdGV0aW1lICsgc3VmZml4KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3JtYXQoaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgaWYgKCFpbnB1dFN0cmluZykge1xuICAgICAgICAgICAgaW5wdXRTdHJpbmcgPSB0aGlzLmlzVXRjKClcbiAgICAgICAgICAgICAgICA/IGhvb2tzLmRlZmF1bHRGb3JtYXRVdGNcbiAgICAgICAgICAgICAgICA6IGhvb2tzLmRlZmF1bHRGb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG91dHB1dCA9IGZvcm1hdE1vbWVudCh0aGlzLCBpbnB1dFN0cmluZyk7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5wb3N0Zm9ybWF0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZnJvbSh0aW1lLCB3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZCgpICYmXG4gICAgICAgICAgICAoKGlzTW9tZW50KHRpbWUpICYmIHRpbWUuaXNWYWxpZCgpKSB8fCBjcmVhdGVMb2NhbCh0aW1lKS5pc1ZhbGlkKCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHsgdG86IHRoaXMsIGZyb206IHRpbWUgfSlcbiAgICAgICAgICAgICAgICAubG9jYWxlKHRoaXMubG9jYWxlKCkpXG4gICAgICAgICAgICAgICAgLmh1bWFuaXplKCF3aXRob3V0U3VmZml4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZnJvbU5vdyh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZyb20oY3JlYXRlTG9jYWwoKSwgd2l0aG91dFN1ZmZpeCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG8odGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgKChpc01vbWVudCh0aW1lKSAmJiB0aW1lLmlzVmFsaWQoKSkgfHwgY3JlYXRlTG9jYWwodGltZSkuaXNWYWxpZCgpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7IGZyb206IHRoaXMsIHRvOiB0aW1lIH0pXG4gICAgICAgICAgICAgICAgLmxvY2FsZSh0aGlzLmxvY2FsZSgpKVxuICAgICAgICAgICAgICAgIC5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvTm93KHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG8oY3JlYXRlTG9jYWwoKSwgd2l0aG91dFN1ZmZpeCk7XG4gICAgfVxuXG4gICAgLy8gSWYgcGFzc2VkIGEgbG9jYWxlIGtleSwgaXQgd2lsbCBzZXQgdGhlIGxvY2FsZSBmb3IgdGhpc1xuICAgIC8vIGluc3RhbmNlLiAgT3RoZXJ3aXNlLCBpdCB3aWxsIHJldHVybiB0aGUgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbiAgICAvLyB2YXJpYWJsZXMgZm9yIHRoaXMgaW5zdGFuY2UuXG4gICAgZnVuY3Rpb24gbG9jYWxlKGtleSkge1xuICAgICAgICB2YXIgbmV3TG9jYWxlRGF0YTtcblxuICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdMb2NhbGVEYXRhID0gZ2V0TG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobmV3TG9jYWxlRGF0YSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9jYWxlID0gbmV3TG9jYWxlRGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGxhbmcgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQoKS5sYW5nKCkgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwgdXNlIG1vbWVudCgpLmxvY2FsZURhdGEoKSB0byBnZXQgdGhlIGxhbmd1YWdlIGNvbmZpZ3VyYXRpb24uIFVzZSBtb21lbnQoKS5sb2NhbGUoKSB0byBjaGFuZ2UgbGFuZ3VhZ2VzLicsXG4gICAgICAgIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZTtcbiAgICB9XG5cbiAgICB2YXIgTVNfUEVSX1NFQ09ORCA9IDEwMDAsXG4gICAgICAgIE1TX1BFUl9NSU5VVEUgPSA2MCAqIE1TX1BFUl9TRUNPTkQsXG4gICAgICAgIE1TX1BFUl9IT1VSID0gNjAgKiBNU19QRVJfTUlOVVRFLFxuICAgICAgICBNU19QRVJfNDAwX1lFQVJTID0gKDM2NSAqIDQwMCArIDk3KSAqIDI0ICogTVNfUEVSX0hPVVI7XG5cbiAgICAvLyBhY3R1YWwgbW9kdWxvIC0gaGFuZGxlcyBuZWdhdGl2ZSBudW1iZXJzIChmb3IgZGF0ZXMgYmVmb3JlIDE5NzApOlxuICAgIGZ1bmN0aW9uIG1vZCQxKGRpdmlkZW5kLCBkaXZpc29yKSB7XG4gICAgICAgIHJldHVybiAoKGRpdmlkZW5kICUgZGl2aXNvcikgKyBkaXZpc29yKSAlIGRpdmlzb3I7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxTdGFydE9mRGF0ZSh5LCBtLCBkKSB7XG4gICAgICAgIC8vIHRoZSBkYXRlIGNvbnN0cnVjdG9yIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoeSArIDQwMCwgbSwgZCkgLSBNU19QRVJfNDAwX1lFQVJTO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHksIG0sIGQpLnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHV0Y1N0YXJ0T2ZEYXRlKHksIG0sIGQpIHtcbiAgICAgICAgLy8gRGF0ZS5VVEMgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIHJldHVybiBEYXRlLlVUQyh5ICsgNDAwLCBtLCBkKSAtIE1TX1BFUl80MDBfWUVBUlM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gRGF0ZS5VVEMoeSwgbSwgZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdGFydE9mKHVuaXRzKSB7XG4gICAgICAgIHZhciB0aW1lLCBzdGFydE9mRGF0ZTtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIGlmICh1bml0cyA9PT0gdW5kZWZpbmVkIHx8IHVuaXRzID09PSAnbWlsbGlzZWNvbmQnIHx8ICF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBzdGFydE9mRGF0ZSA9IHRoaXMuX2lzVVRDID8gdXRjU3RhcnRPZkRhdGUgOiBsb2NhbFN0YXJ0T2ZEYXRlO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgMCwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCkgLSAodGhpcy5tb250aCgpICUgMyksXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSB0aGlzLndlZWtkYXkoKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdpc29XZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gKHRoaXMuaXNvV2Vla2RheSgpIC0gMSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMShcbiAgICAgICAgICAgICAgICAgICAgdGltZSArICh0aGlzLl9pc1VUQyA/IDAgOiB0aGlzLnV0Y09mZnNldCgpICogTVNfUEVSX01JTlVURSksXG4gICAgICAgICAgICAgICAgICAgIE1TX1BFUl9IT1VSXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEodGltZSwgTVNfUEVSX01JTlVURSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKHRpbWUsIE1TX1BFUl9TRUNPTkQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZC5zZXRUaW1lKHRpbWUpO1xuICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVuZE9mKHVuaXRzKSB7XG4gICAgICAgIHZhciB0aW1lLCBzdGFydE9mRGF0ZTtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIGlmICh1bml0cyA9PT0gdW5kZWZpbmVkIHx8IHVuaXRzID09PSAnbWlsbGlzZWNvbmQnIHx8ICF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBzdGFydE9mRGF0ZSA9IHRoaXMuX2lzVVRDID8gdXRjU3RhcnRPZkRhdGUgOiBsb2NhbFN0YXJ0T2ZEYXRlO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSArIDEsIDAsIDEpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpIC0gKHRoaXMubW9udGgoKSAlIDMpICsgMyxcbiAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCkgKyAxLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gdGhpcy53ZWVrZGF5KCkgKyA3XG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpICsgN1xuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkgKyAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSArPVxuICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUiAtXG4gICAgICAgICAgICAgICAgICAgIG1vZCQxKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZSArICh0aGlzLl9pc1VUQyA/IDAgOiB0aGlzLnV0Y09mZnNldCgpICogTVNfUEVSX01JTlVURSksXG4gICAgICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUlxuICAgICAgICAgICAgICAgICAgICApIC1cbiAgICAgICAgICAgICAgICAgICAgMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz0gTVNfUEVSX01JTlVURSAtIG1vZCQxKHRpbWUsIE1TX1BFUl9NSU5VVEUpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz0gTVNfUEVSX1NFQ09ORCAtIG1vZCQxKHRpbWUsIE1TX1BFUl9TRUNPTkQpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Quc2V0VGltZSh0aW1lKTtcbiAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWx1ZU9mKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZC52YWx1ZU9mKCkgLSAodGhpcy5fb2Zmc2V0IHx8IDApICogNjAwMDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW5peCgpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkgLyAxMDAwKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0RhdGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9BcnJheSgpIHtcbiAgICAgICAgdmFyIG0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbS55ZWFyKCksXG4gICAgICAgICAgICBtLm1vbnRoKCksXG4gICAgICAgICAgICBtLmRhdGUoKSxcbiAgICAgICAgICAgIG0uaG91cigpLFxuICAgICAgICAgICAgbS5taW51dGUoKSxcbiAgICAgICAgICAgIG0uc2Vjb25kKCksXG4gICAgICAgICAgICBtLm1pbGxpc2Vjb25kKCksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9PYmplY3QoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHllYXJzOiBtLnllYXIoKSxcbiAgICAgICAgICAgIG1vbnRoczogbS5tb250aCgpLFxuICAgICAgICAgICAgZGF0ZTogbS5kYXRlKCksXG4gICAgICAgICAgICBob3VyczogbS5ob3VycygpLFxuICAgICAgICAgICAgbWludXRlczogbS5taW51dGVzKCksXG4gICAgICAgICAgICBzZWNvbmRzOiBtLnNlY29uZHMoKSxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kczogbS5taWxsaXNlY29uZHMoKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgIC8vIG5ldyBEYXRlKE5hTikudG9KU09OKCkgPT09IG51bGxcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy50b0lTT1N0cmluZygpIDogbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkJDIoKSB7XG4gICAgICAgIHJldHVybiBpc1ZhbGlkKHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNpbmdGbGFncygpIHtcbiAgICAgICAgcmV0dXJuIGV4dGVuZCh7fSwgZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnZhbGlkQXQoKSB7XG4gICAgICAgIHJldHVybiBnZXRQYXJzaW5nRmxhZ3ModGhpcykub3ZlcmZsb3c7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRpb25EYXRhKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5wdXQ6IHRoaXMuX2ksXG4gICAgICAgICAgICBmb3JtYXQ6IHRoaXMuX2YsXG4gICAgICAgICAgICBsb2NhbGU6IHRoaXMuX2xvY2FsZSxcbiAgICAgICAgICAgIGlzVVRDOiB0aGlzLl9pc1VUQyxcbiAgICAgICAgICAgIHN0cmljdDogdGhpcy5fc3RyaWN0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFkZEZvcm1hdFRva2VuKCdOJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk4nLCAwLCAwLCAnZXJhQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdOTk4nLCAwLCAwLCAnZXJhQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdOTk5OJywgMCwgMCwgJ2VyYU5hbWUnKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OTk4nLCAwLCAwLCAnZXJhTmFycm93Jyk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneScsIDFdLCAneW8nLCAnZXJhWWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd5JywgWyd5eScsIDJdLCAwLCAnZXJhWWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd5JywgWyd5eXknLCAzXSwgMCwgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXl5eScsIDRdLCAwLCAnZXJhWWVhcicpO1xuXG4gICAgYWRkUmVnZXhUb2tlbignTicsIG1hdGNoRXJhQWJicik7XG4gICAgYWRkUmVnZXhUb2tlbignTk4nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTicsIG1hdGNoRXJhQWJicik7XG4gICAgYWRkUmVnZXhUb2tlbignTk5OTicsIG1hdGNoRXJhTmFtZSk7XG4gICAgYWRkUmVnZXhUb2tlbignTk5OTk4nLCBtYXRjaEVyYU5hcnJvdyk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnTicsICdOTicsICdOTk4nLCAnTk5OTicsICdOTk5OTiddLCBmdW5jdGlvbiAoXG4gICAgICAgIGlucHV0LFxuICAgICAgICBhcnJheSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICB0b2tlblxuICAgICkge1xuICAgICAgICB2YXIgZXJhID0gY29uZmlnLl9sb2NhbGUuZXJhc1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICBpZiAoZXJhKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lcmEgPSBlcmE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkRXJhID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3knLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5eXknLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5bycsIG1hdGNoRXJhWWVhck9yZGluYWwpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ3knLCAneXknLCAneXl5JywgJ3l5eXknXSwgWUVBUik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ3lvJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIG1hdGNoO1xuICAgICAgICBpZiAoY29uZmlnLl9sb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXgpIHtcbiAgICAgICAgICAgIG1hdGNoID0gaW5wdXQubWF0Y2goY29uZmlnLl9sb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fbG9jYWxlLmVyYVllYXJPcmRpbmFsUGFyc2UpIHtcbiAgICAgICAgICAgIGFycmF5W1lFQVJdID0gY29uZmlnLl9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZShpbnB1dCwgbWF0Y2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXJyYXlbWUVBUl0gPSBwYXJzZUludChpbnB1dCwgMTApO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzKG0sIGZvcm1hdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuX2VyYXMgfHwgZ2V0TG9jYWxlKCdlbicpLl9lcmFzO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBob29rcyhlcmFzW2ldLnNpbmNlKS5zdGFydE9mKCdkYXknKTtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS5zaW5jZSA9IGRhdGUudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0udW50aWwgPSArSW5maW5pdHk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGhvb2tzKGVyYXNbaV0udW50aWwpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS51bnRpbCA9IGRhdGUudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXJhcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzUGFyc2UoZXJhTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuZXJhcygpLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGFiYnIsXG4gICAgICAgICAgICBuYXJyb3c7XG4gICAgICAgIGVyYU5hbWUgPSBlcmFOYW1lLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBuYW1lID0gZXJhc1tpXS5uYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICBhYmJyID0gZXJhc1tpXS5hYmJyLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICBuYXJyb3cgPSBlcmFzW2ldLm5hcnJvdy50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTic6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhYmJyID09PSBlcmFOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSBlcmFOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk5OTic6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFycm93ID09PSBlcmFOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFtuYW1lLCBhYmJyLCBuYXJyb3ddLmluZGV4T2YoZXJhTmFtZSkgPj0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRXJhc0NvbnZlcnRZZWFyKGVyYSwgeWVhcikge1xuICAgICAgICB2YXIgZGlyID0gZXJhLnNpbmNlIDw9IGVyYS51bnRpbCA/ICsxIDogLTE7XG4gICAgICAgIGlmICh5ZWFyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBob29rcyhlcmEuc2luY2UpLnllYXIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBob29rcyhlcmEuc2luY2UpLnllYXIoKSArICh5ZWFyIC0gZXJhLm9mZnNldCkgKiBkaXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFOYW1lKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYU5hcnJvdygpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYXJyb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYXJyb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhQWJicigpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5hYmJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0uYWJicjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFZZWFyKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBkaXIsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIGRpciA9IGVyYXNbaV0uc2luY2UgPD0gZXJhc1tpXS51bnRpbCA/ICsxIDogLTE7XG5cbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHx8XG4gICAgICAgICAgICAgICAgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMueWVhcigpIC0gaG9va3MoZXJhc1tpXS5zaW5jZSkueWVhcigpKSAqIGRpciArXG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0ub2Zmc2V0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnllYXIoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzTmFtZVJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNOYW1lUmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNOYW1lUmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc0FiYnJSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19lcmFzQWJiclJlZ2V4JykpIHtcbiAgICAgICAgICAgIGNvbXB1dGVFcmFzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNTdHJpY3QgPyB0aGlzLl9lcmFzQWJiclJlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNOYXJyb3dSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19lcmFzTmFycm93UmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNOYXJyb3dSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYUFiYnIoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmVyYXNBYmJyUmVnZXgoaXNTdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhTmFtZShpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc05hbWVSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFOYXJyb3coaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmVyYXNOYXJyb3dSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFZZWFyT3JkaW5hbChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXggfHwgbWF0Y2hVbnNpZ25lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlRXJhc1BhcnNlKCkge1xuICAgICAgICB2YXIgYWJiclBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbmFtZVBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbmFycm93UGllY2VzID0gW10sXG4gICAgICAgICAgICBtaXhlZFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5lcmFzKCk7XG5cbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBuYW1lUGllY2VzLnB1c2gocmVnZXhFc2NhcGUoZXJhc1tpXS5uYW1lKSk7XG4gICAgICAgICAgICBhYmJyUGllY2VzLnB1c2gocmVnZXhFc2NhcGUoZXJhc1tpXS5hYmJyKSk7XG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMucHVzaChyZWdleEVzY2FwZShlcmFzW2ldLm5hcnJvdykpO1xuXG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFtZSkpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChyZWdleEVzY2FwZShlcmFzW2ldLmFiYnIpKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gocmVnZXhFc2NhcGUoZXJhc1tpXS5uYXJyb3cpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2VyYXNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc05hbWVSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG5hbWVQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzQWJiclJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgYWJiclBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNOYXJyb3dSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbmFycm93UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnZ2cnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy53ZWVrWWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydHRycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzb1dlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBhZGRXZWVrWWVhckZvcm1hdFRva2VuKHRva2VuLCBnZXR0ZXIpIHtcbiAgICAgICAgYWRkRm9ybWF0VG9rZW4oMCwgW3Rva2VuLCB0b2tlbi5sZW5ndGhdLCAwLCBnZXR0ZXIpO1xuICAgIH1cblxuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2cnLCAnd2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdnZ2dnZycsICd3ZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ0dHR0cnLCAnaXNvV2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdHR0dHRycsICdpc29XZWVrWWVhcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCd3ZWVrWWVhcicsICdnZycpO1xuICAgIGFkZFVuaXRBbGlhcygnaXNvV2Vla1llYXInLCAnR0cnKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3dlZWtZZWFyJywgMSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCdpc29XZWVrWWVhcicsIDEpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignRycsIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdnJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHR0cnLCBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignZ2dnZycsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdHR0dHRycsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnZycsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZ2dnZycsICdnZ2dnZycsICdHR0dHJywgJ0dHR0dHJ10sIGZ1bmN0aW9uIChcbiAgICAgICAgaW5wdXQsXG4gICAgICAgIHdlZWssXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgdG9rZW5cbiAgICApIHtcbiAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMildID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydnZycsICdHRyddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbl0gPSBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrWWVhcihpbnB1dCkge1xuICAgICAgICByZXR1cm4gZ2V0U2V0V2Vla1llYXJIZWxwZXIuY2FsbChcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIHRoaXMud2VlaygpLFxuICAgICAgICAgICAgdGhpcy53ZWVrZGF5KCksXG4gICAgICAgICAgICB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3csXG4gICAgICAgICAgICB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3lcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRJU09XZWVrWWVhcihpbnB1dCkge1xuICAgICAgICByZXR1cm4gZ2V0U2V0V2Vla1llYXJIZWxwZXIuY2FsbChcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIHRoaXMuaXNvV2VlaygpLFxuICAgICAgICAgICAgdGhpcy5pc29XZWVrZGF5KCksXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgNFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldElTT1dlZWtzSW5ZZWFyKCkge1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy55ZWFyKCksIDEsIDQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldElTT1dlZWtzSW5JU09XZWVrWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMuaXNvV2Vla1llYXIoKSwgMSwgNCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2Vla3NJblllYXIoKSB7XG4gICAgICAgIHZhciB3ZWVrSW5mbyA9IHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy55ZWFyKCksIHdlZWtJbmZvLmRvdywgd2Vla0luZm8uZG95KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRXZWVrc0luV2Vla1llYXIoKSB7XG4gICAgICAgIHZhciB3ZWVrSW5mbyA9IHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy53ZWVrWWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXJIZWxwZXIoaW5wdXQsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrc1RhcmdldDtcbiAgICAgICAgaWYgKGlucHV0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB3ZWVrT2ZZZWFyKHRoaXMsIGRvdywgZG95KS55ZWFyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2Vla3NUYXJnZXQgPSB3ZWVrc0luWWVhcihpbnB1dCwgZG93LCBkb3kpO1xuICAgICAgICAgICAgaWYgKHdlZWsgPiB3ZWVrc1RhcmdldCkge1xuICAgICAgICAgICAgICAgIHdlZWsgPSB3ZWVrc1RhcmdldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZXRXZWVrQWxsLmNhbGwodGhpcywgaW5wdXQsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldFdlZWtBbGwod2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciBkYXlPZlllYXJEYXRhID0gZGF5T2ZZZWFyRnJvbVdlZWtzKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSksXG4gICAgICAgICAgICBkYXRlID0gY3JlYXRlVVRDRGF0ZShkYXlPZlllYXJEYXRhLnllYXIsIDAsIGRheU9mWWVhckRhdGEuZGF5T2ZZZWFyKTtcblxuICAgICAgICB0aGlzLnllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpKTtcbiAgICAgICAgdGhpcy5tb250aChkYXRlLmdldFVUQ01vbnRoKCkpO1xuICAgICAgICB0aGlzLmRhdGUoZGF0ZS5nZXRVVENEYXRlKCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignUScsIDAsICdRbycsICdxdWFydGVyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3F1YXJ0ZXInLCAnUScpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgncXVhcnRlcicsIDcpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignUScsIG1hdGNoMSk7XG4gICAgYWRkUGFyc2VUb2tlbignUScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gKHRvSW50KGlucHV0KSAtIDEpICogMztcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFF1YXJ0ZXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGxcbiAgICAgICAgICAgID8gTWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkgKyAxKSAvIDMpXG4gICAgICAgICAgICA6IHRoaXMubW9udGgoKGlucHV0IC0gMSkgKiAzICsgKHRoaXMubW9udGgoKSAlIDMpKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignRCcsIFsnREQnLCAyXSwgJ0RvJywgJ2RhdGUnKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnZGF0ZScsICdEJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnZGF0ZScsIDkpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignRCcsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignREQnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignRG8nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgXCJvcmRpbmFsUGFyc2VcIiBmYWxsYmFjayBpbiBuZXh0IG1ham9yIHJlbGVhc2UuXG4gICAgICAgIHJldHVybiBpc1N0cmljdFxuICAgICAgICAgICAgPyBsb2NhbGUuX2RheU9mTW9udGhPcmRpbmFsUGFyc2UgfHwgbG9jYWxlLl9vcmRpbmFsUGFyc2VcbiAgICAgICAgICAgIDogbG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudDtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydEJywgJ0REJ10sIERBVEUpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtEQVRFXSA9IHRvSW50KGlucHV0Lm1hdGNoKG1hdGNoMXRvMilbMF0pO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldERheU9mTW9udGggPSBtYWtlR2V0U2V0KCdEYXRlJywgdHJ1ZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignREREJywgWydEREREJywgM10sICdERERvJywgJ2RheU9mWWVhcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdkYXlPZlllYXInLCAnREREJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnZGF5T2ZZZWFyJywgNCk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdEREQnLCBtYXRjaDF0bzMpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REREQnLCBtYXRjaDMpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydEREQnLCAnRERERCddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXREYXlPZlllYXIoaW5wdXQpIHtcbiAgICAgICAgdmFyIGRheU9mWWVhciA9XG4gICAgICAgICAgICBNYXRoLnJvdW5kKFxuICAgICAgICAgICAgICAgICh0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykgLSB0aGlzLmNsb25lKCkuc3RhcnRPZigneWVhcicpKSAvIDg2NGU1XG4gICAgICAgICAgICApICsgMTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyBkYXlPZlllYXIgOiB0aGlzLmFkZChpbnB1dCAtIGRheU9mWWVhciwgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignbScsIFsnbW0nLCAyXSwgMCwgJ21pbnV0ZScpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdtaW51dGUnLCAnbScpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnbWludXRlJywgMTQpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignbScsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignbW0nLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ20nLCAnbW0nXSwgTUlOVVRFKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRNaW51dGUgPSBtYWtlR2V0U2V0KCdNaW51dGVzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3MnLCBbJ3NzJywgMl0sIDAsICdzZWNvbmQnKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnc2Vjb25kJywgJ3MnKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3NlY29uZCcsIDE1KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3MnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3NzJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydzJywgJ3NzJ10sIFNFQ09ORCk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0U2Vjb25kID0gbWFrZUdldFNldCgnU2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdTJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gfn4odGhpcy5taWxsaXNlY29uZCgpIC8gMTAwKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1MnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gfn4odGhpcy5taWxsaXNlY29uZCgpIC8gMTApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1MnLCAzXSwgMCwgJ21pbGxpc2Vjb25kJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTJywgNF0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1MnLCA1XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTJywgNl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTJywgN10sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTU1MnLCA4XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTU1NTJywgOV0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwMDA7XG4gICAgfSk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ21pbGxpc2Vjb25kJywgJ21zJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCdtaWxsaXNlY29uZCcsIDE2KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1MnLCBtYXRjaDF0bzMsIG1hdGNoMSk7XG4gICAgYWRkUmVnZXhUb2tlbignU1MnLCBtYXRjaDF0bzMsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignU1NTJywgbWF0Y2gxdG8zLCBtYXRjaDMpO1xuXG4gICAgdmFyIHRva2VuLCBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBmb3IgKHRva2VuID0gJ1NTU1MnOyB0b2tlbi5sZW5ndGggPD0gOTsgdG9rZW4gKz0gJ1MnKSB7XG4gICAgICAgIGFkZFJlZ2V4VG9rZW4odG9rZW4sIG1hdGNoVW5zaWduZWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTXMoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01JTExJU0VDT05EXSA9IHRvSW50KCgnMC4nICsgaW5wdXQpICogMTAwMCk7XG4gICAgfVxuXG4gICAgZm9yICh0b2tlbiA9ICdTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBwYXJzZU1zKTtcbiAgICB9XG5cbiAgICBnZXRTZXRNaWxsaXNlY29uZCA9IG1ha2VHZXRTZXQoJ01pbGxpc2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd6JywgMCwgMCwgJ3pvbmVBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3p6JywgMCwgMCwgJ3pvbmVOYW1lJyk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRab25lQWJicigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ1VUQycgOiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRab25lTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ0Nvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lJyA6ICcnO1xuICAgIH1cblxuICAgIHZhciBwcm90byA9IE1vbWVudC5wcm90b3R5cGU7XG5cbiAgICBwcm90by5hZGQgPSBhZGQ7XG4gICAgcHJvdG8uY2FsZW5kYXIgPSBjYWxlbmRhciQxO1xuICAgIHByb3RvLmNsb25lID0gY2xvbmU7XG4gICAgcHJvdG8uZGlmZiA9IGRpZmY7XG4gICAgcHJvdG8uZW5kT2YgPSBlbmRPZjtcbiAgICBwcm90by5mb3JtYXQgPSBmb3JtYXQ7XG4gICAgcHJvdG8uZnJvbSA9IGZyb207XG4gICAgcHJvdG8uZnJvbU5vdyA9IGZyb21Ob3c7XG4gICAgcHJvdG8udG8gPSB0bztcbiAgICBwcm90by50b05vdyA9IHRvTm93O1xuICAgIHByb3RvLmdldCA9IHN0cmluZ0dldDtcbiAgICBwcm90by5pbnZhbGlkQXQgPSBpbnZhbGlkQXQ7XG4gICAgcHJvdG8uaXNBZnRlciA9IGlzQWZ0ZXI7XG4gICAgcHJvdG8uaXNCZWZvcmUgPSBpc0JlZm9yZTtcbiAgICBwcm90by5pc0JldHdlZW4gPSBpc0JldHdlZW47XG4gICAgcHJvdG8uaXNTYW1lID0gaXNTYW1lO1xuICAgIHByb3RvLmlzU2FtZU9yQWZ0ZXIgPSBpc1NhbWVPckFmdGVyO1xuICAgIHByb3RvLmlzU2FtZU9yQmVmb3JlID0gaXNTYW1lT3JCZWZvcmU7XG4gICAgcHJvdG8uaXNWYWxpZCA9IGlzVmFsaWQkMjtcbiAgICBwcm90by5sYW5nID0gbGFuZztcbiAgICBwcm90by5sb2NhbGUgPSBsb2NhbGU7XG4gICAgcHJvdG8ubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG4gICAgcHJvdG8ubWF4ID0gcHJvdG90eXBlTWF4O1xuICAgIHByb3RvLm1pbiA9IHByb3RvdHlwZU1pbjtcbiAgICBwcm90by5wYXJzaW5nRmxhZ3MgPSBwYXJzaW5nRmxhZ3M7XG4gICAgcHJvdG8uc2V0ID0gc3RyaW5nU2V0O1xuICAgIHByb3RvLnN0YXJ0T2YgPSBzdGFydE9mO1xuICAgIHByb3RvLnN1YnRyYWN0ID0gc3VidHJhY3Q7XG4gICAgcHJvdG8udG9BcnJheSA9IHRvQXJyYXk7XG4gICAgcHJvdG8udG9PYmplY3QgPSB0b09iamVjdDtcbiAgICBwcm90by50b0RhdGUgPSB0b0RhdGU7XG4gICAgcHJvdG8udG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZztcbiAgICBwcm90by5pbnNwZWN0ID0gaW5zcGVjdDtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLmZvciAhPSBudWxsKSB7XG4gICAgICAgIHByb3RvW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICdNb21lbnQ8JyArIHRoaXMuZm9ybWF0KCkgKyAnPic7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHByb3RvLnRvSlNPTiA9IHRvSlNPTjtcbiAgICBwcm90by50b1N0cmluZyA9IHRvU3RyaW5nO1xuICAgIHByb3RvLnVuaXggPSB1bml4O1xuICAgIHByb3RvLnZhbHVlT2YgPSB2YWx1ZU9mO1xuICAgIHByb3RvLmNyZWF0aW9uRGF0YSA9IGNyZWF0aW9uRGF0YTtcbiAgICBwcm90by5lcmFOYW1lID0gZ2V0RXJhTmFtZTtcbiAgICBwcm90by5lcmFOYXJyb3cgPSBnZXRFcmFOYXJyb3c7XG4gICAgcHJvdG8uZXJhQWJiciA9IGdldEVyYUFiYnI7XG4gICAgcHJvdG8uZXJhWWVhciA9IGdldEVyYVllYXI7XG4gICAgcHJvdG8ueWVhciA9IGdldFNldFllYXI7XG4gICAgcHJvdG8uaXNMZWFwWWVhciA9IGdldElzTGVhcFllYXI7XG4gICAgcHJvdG8ud2Vla1llYXIgPSBnZXRTZXRXZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrWWVhciA9IGdldFNldElTT1dlZWtZZWFyO1xuICAgIHByb3RvLnF1YXJ0ZXIgPSBwcm90by5xdWFydGVycyA9IGdldFNldFF1YXJ0ZXI7XG4gICAgcHJvdG8ubW9udGggPSBnZXRTZXRNb250aDtcbiAgICBwcm90by5kYXlzSW5Nb250aCA9IGdldERheXNJbk1vbnRoO1xuICAgIHByb3RvLndlZWsgPSBwcm90by53ZWVrcyA9IGdldFNldFdlZWs7XG4gICAgcHJvdG8uaXNvV2VlayA9IHByb3RvLmlzb1dlZWtzID0gZ2V0U2V0SVNPV2VlaztcbiAgICBwcm90by53ZWVrc0luWWVhciA9IGdldFdlZWtzSW5ZZWFyO1xuICAgIHByb3RvLndlZWtzSW5XZWVrWWVhciA9IGdldFdlZWtzSW5XZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrc0luWWVhciA9IGdldElTT1dlZWtzSW5ZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtzSW5JU09XZWVrWWVhciA9IGdldElTT1dlZWtzSW5JU09XZWVrWWVhcjtcbiAgICBwcm90by5kYXRlID0gZ2V0U2V0RGF5T2ZNb250aDtcbiAgICBwcm90by5kYXkgPSBwcm90by5kYXlzID0gZ2V0U2V0RGF5T2ZXZWVrO1xuICAgIHByb3RvLndlZWtkYXkgPSBnZXRTZXRMb2NhbGVEYXlPZldlZWs7XG4gICAgcHJvdG8uaXNvV2Vla2RheSA9IGdldFNldElTT0RheU9mV2VlaztcbiAgICBwcm90by5kYXlPZlllYXIgPSBnZXRTZXREYXlPZlllYXI7XG4gICAgcHJvdG8uaG91ciA9IHByb3RvLmhvdXJzID0gZ2V0U2V0SG91cjtcbiAgICBwcm90by5taW51dGUgPSBwcm90by5taW51dGVzID0gZ2V0U2V0TWludXRlO1xuICAgIHByb3RvLnNlY29uZCA9IHByb3RvLnNlY29uZHMgPSBnZXRTZXRTZWNvbmQ7XG4gICAgcHJvdG8ubWlsbGlzZWNvbmQgPSBwcm90by5taWxsaXNlY29uZHMgPSBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBwcm90by51dGNPZmZzZXQgPSBnZXRTZXRPZmZzZXQ7XG4gICAgcHJvdG8udXRjID0gc2V0T2Zmc2V0VG9VVEM7XG4gICAgcHJvdG8ubG9jYWwgPSBzZXRPZmZzZXRUb0xvY2FsO1xuICAgIHByb3RvLnBhcnNlWm9uZSA9IHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0O1xuICAgIHByb3RvLmhhc0FsaWduZWRIb3VyT2Zmc2V0ID0gaGFzQWxpZ25lZEhvdXJPZmZzZXQ7XG4gICAgcHJvdG8uaXNEU1QgPSBpc0RheWxpZ2h0U2F2aW5nVGltZTtcbiAgICBwcm90by5pc0xvY2FsID0gaXNMb2NhbDtcbiAgICBwcm90by5pc1V0Y09mZnNldCA9IGlzVXRjT2Zmc2V0O1xuICAgIHByb3RvLmlzVXRjID0gaXNVdGM7XG4gICAgcHJvdG8uaXNVVEMgPSBpc1V0YztcbiAgICBwcm90by56b25lQWJiciA9IGdldFpvbmVBYmJyO1xuICAgIHByb3RvLnpvbmVOYW1lID0gZ2V0Wm9uZU5hbWU7XG4gICAgcHJvdG8uZGF0ZXMgPSBkZXByZWNhdGUoXG4gICAgICAgICdkYXRlcyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLicsXG4gICAgICAgIGdldFNldERheU9mTW9udGhcbiAgICApO1xuICAgIHByb3RvLm1vbnRocyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZCcsXG4gICAgICAgIGdldFNldE1vbnRoXG4gICAgKTtcbiAgICBwcm90by55ZWFycyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3llYXJzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSB5ZWFyIGluc3RlYWQnLFxuICAgICAgICBnZXRTZXRZZWFyXG4gICAgKTtcbiAgICBwcm90by56b25lID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8nLFxuICAgICAgICBnZXRTZXRab25lXG4gICAgKTtcbiAgICBwcm90by5pc0RTVFNoaWZ0ZWQgPSBkZXByZWNhdGUoXG4gICAgICAgICdpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uJyxcbiAgICAgICAgaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkXG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVuaXgoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKGlucHV0ICogMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW5ab25lKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5wYXJzZVpvbmUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVQYXJzZVBvc3RGb3JtYXQoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDEgPSBMb2NhbGUucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMS5jYWxlbmRhciA9IGNhbGVuZGFyO1xuICAgIHByb3RvJDEubG9uZ0RhdGVGb3JtYXQgPSBsb25nRGF0ZUZvcm1hdDtcbiAgICBwcm90byQxLmludmFsaWREYXRlID0gaW52YWxpZERhdGU7XG4gICAgcHJvdG8kMS5vcmRpbmFsID0gb3JkaW5hbDtcbiAgICBwcm90byQxLnByZXBhcnNlID0gcHJlUGFyc2VQb3N0Rm9ybWF0O1xuICAgIHByb3RvJDEucG9zdGZvcm1hdCA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90byQxLnJlbGF0aXZlVGltZSA9IHJlbGF0aXZlVGltZTtcbiAgICBwcm90byQxLnBhc3RGdXR1cmUgPSBwYXN0RnV0dXJlO1xuICAgIHByb3RvJDEuc2V0ID0gc2V0O1xuICAgIHByb3RvJDEuZXJhcyA9IGxvY2FsZUVyYXM7XG4gICAgcHJvdG8kMS5lcmFzUGFyc2UgPSBsb2NhbGVFcmFzUGFyc2U7XG4gICAgcHJvdG8kMS5lcmFzQ29udmVydFllYXIgPSBsb2NhbGVFcmFzQ29udmVydFllYXI7XG4gICAgcHJvdG8kMS5lcmFzQWJiclJlZ2V4ID0gZXJhc0FiYnJSZWdleDtcbiAgICBwcm90byQxLmVyYXNOYW1lUmVnZXggPSBlcmFzTmFtZVJlZ2V4O1xuICAgIHByb3RvJDEuZXJhc05hcnJvd1JlZ2V4ID0gZXJhc05hcnJvd1JlZ2V4O1xuXG4gICAgcHJvdG8kMS5tb250aHMgPSBsb2NhbGVNb250aHM7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydCA9IGxvY2FsZU1vbnRoc1Nob3J0O1xuICAgIHByb3RvJDEubW9udGhzUGFyc2UgPSBsb2NhbGVNb250aHNQYXJzZTtcbiAgICBwcm90byQxLm1vbnRoc1JlZ2V4ID0gbW9udGhzUmVnZXg7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydFJlZ2V4ID0gbW9udGhzU2hvcnRSZWdleDtcbiAgICBwcm90byQxLndlZWsgPSBsb2NhbGVXZWVrO1xuICAgIHByb3RvJDEuZmlyc3REYXlPZlllYXIgPSBsb2NhbGVGaXJzdERheU9mWWVhcjtcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZXZWVrID0gbG9jYWxlRmlyc3REYXlPZldlZWs7XG5cbiAgICBwcm90byQxLndlZWtkYXlzID0gbG9jYWxlV2Vla2RheXM7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pbiA9IGxvY2FsZVdlZWtkYXlzTWluO1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydCA9IGxvY2FsZVdlZWtkYXlzU2hvcnQ7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1BhcnNlID0gbG9jYWxlV2Vla2RheXNQYXJzZTtcblxuICAgIHByb3RvJDEud2Vla2RheXNSZWdleCA9IHdlZWtkYXlzUmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1Nob3J0UmVnZXggPSB3ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pblJlZ2V4ID0gd2Vla2RheXNNaW5SZWdleDtcblxuICAgIHByb3RvJDEuaXNQTSA9IGxvY2FsZUlzUE07XG4gICAgcHJvdG8kMS5tZXJpZGllbSA9IGxvY2FsZU1lcmlkaWVtO1xuXG4gICAgZnVuY3Rpb24gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsIHNldHRlcikge1xuICAgICAgICB2YXIgbG9jYWxlID0gZ2V0TG9jYWxlKCksXG4gICAgICAgICAgICB1dGMgPSBjcmVhdGVVVEMoKS5zZXQoc2V0dGVyLCBpbmRleCk7XG4gICAgICAgIHJldHVybiBsb2NhbGVbZmllbGRdKHV0YywgZm9ybWF0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIGluZGV4LCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG91dCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgb3V0W2ldID0gZ2V0JDEoZm9ybWF0LCBpLCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICAvLyAoKVxuICAgIC8vICg1KVxuICAgIC8vIChmbXQsIDUpXG4gICAgLy8gKGZtdClcbiAgICAvLyAodHJ1ZSlcbiAgICAvLyAodHJ1ZSwgNSlcbiAgICAvLyAodHJ1ZSwgZm10LCA1KVxuICAgIC8vICh0cnVlLCBmbXQpXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsIGZpZWxkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbG9jYWxlU29ydGVkID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBsb2NhbGVTb3J0ZWQ7XG4gICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGxvY2FsZVNvcnRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpLFxuICAgICAgICAgICAgc2hpZnQgPSBsb2NhbGVTb3J0ZWQgPyBsb2NhbGUuX3dlZWsuZG93IDogMCxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvdXQgPSBbXTtcblxuICAgICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldCQxKGZvcm1hdCwgKGluZGV4ICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgKGkgKyBzaGlmdCkgJSA3LCBmaWVsZCwgJ2RheScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRocyhmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc1Nob3J0KGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsICdtb250aHNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5cyhsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXMnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNTaG9ydChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c01pbihsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNNaW4nKTtcbiAgICB9XG5cbiAgICBnZXRTZXRHbG9iYWxMb2NhbGUoJ2VuJywge1xuICAgICAgICBlcmFzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAxLTAxLTAxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogK0luZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQW5ubyBEb21pbmknLFxuICAgICAgICAgICAgICAgIG5hcnJvdzogJ0FEJyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnQUQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaW5jZTogJzAwMDAtMTItMzEnLFxuICAgICAgICAgICAgICAgIHVudGlsOiAtSW5maW5pdHksXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdCZWZvcmUgQ2hyaXN0JyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdCQycsXG4gICAgICAgICAgICAgICAgYWJicjogJ0JDJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSh0aHxzdHxuZHxyZCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIHRvSW50KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBTaWRlIGVmZmVjdCBpbXBvcnRzXG5cbiAgICBob29rcy5sYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmcgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGUgaW5zdGVhZC4nLFxuICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGVcbiAgICApO1xuICAgIGhvb2tzLmxhbmdEYXRhID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLicsXG4gICAgICAgIGdldExvY2FsZVxuICAgICk7XG5cbiAgICB2YXIgbWF0aEFicyA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gYWJzKCkge1xuICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID0gbWF0aEFicyh0aGlzLl9taWxsaXNlY29uZHMpO1xuICAgICAgICB0aGlzLl9kYXlzID0gbWF0aEFicyh0aGlzLl9kYXlzKTtcbiAgICAgICAgdGhpcy5fbW9udGhzID0gbWF0aEFicyh0aGlzLl9tb250aHMpO1xuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWF0aEFicyhkYXRhLm1pbGxpc2Vjb25kcyk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyA9IG1hdGhBYnMoZGF0YS5zZWNvbmRzKTtcbiAgICAgICAgZGF0YS5taW51dGVzID0gbWF0aEFicyhkYXRhLm1pbnV0ZXMpO1xuICAgICAgICBkYXRhLmhvdXJzID0gbWF0aEFicyhkYXRhLmhvdXJzKTtcbiAgICAgICAgZGF0YS5tb250aHMgPSBtYXRoQWJzKGRhdGEubW9udGhzKTtcbiAgICAgICAgZGF0YS55ZWFycyA9IG1hdGhBYnMoZGF0YS55ZWFycyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3VidHJhY3QkMShkdXJhdGlvbiwgaW5wdXQsIHZhbHVlLCBkaXJlY3Rpb24pIHtcbiAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlRHVyYXRpb24oaW5wdXQsIHZhbHVlKTtcblxuICAgICAgICBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9taWxsaXNlY29uZHM7XG4gICAgICAgIGR1cmF0aW9uLl9kYXlzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9kYXlzO1xuICAgICAgICBkdXJhdGlvbi5fbW9udGhzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9tb250aHM7XG5cbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uLl9idWJibGUoKTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0cyBvbmx5IDIuMC1zdHlsZSBhZGQoMSwgJ3MnKSBvciBhZGQoZHVyYXRpb24pXG4gICAgZnVuY3Rpb24gYWRkJDEoaW5wdXQsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBhZGRTdWJ0cmFjdCQxKHRoaXMsIGlucHV0LCB2YWx1ZSwgMSk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgc3VidHJhY3QoMSwgJ3MnKSBvciBzdWJ0cmFjdChkdXJhdGlvbilcbiAgICBmdW5jdGlvbiBzdWJ0cmFjdCQxKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIC0xKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNDZWlsKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1YmJsZSgpIHtcbiAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IHRoaXMuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzLFxuICAgICAgICAgICAgbW9udGhzID0gdGhpcy5fbW9udGhzLFxuICAgICAgICAgICAgZGF0YSA9IHRoaXMuX2RhdGEsXG4gICAgICAgICAgICBzZWNvbmRzLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBtb250aHNGcm9tRGF5cztcblxuICAgICAgICAvLyBpZiB3ZSBoYXZlIGEgbWl4IG9mIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB2YWx1ZXMsIGJ1YmJsZSBkb3duIGZpcnN0XG4gICAgICAgIC8vIGNoZWNrOiBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjE2NlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPj0gMCAmJiBkYXlzID49IDAgJiYgbW9udGhzID49IDApIHx8XG4gICAgICAgICAgICAgICAgKG1pbGxpc2Vjb25kcyA8PSAwICYmIGRheXMgPD0gMCAmJiBtb250aHMgPD0gMClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgKz0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzKSArIGRheXMpICogODY0ZTU7XG4gICAgICAgICAgICBkYXlzID0gMDtcbiAgICAgICAgICAgIG1vbnRocyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYnViYmxlcyB1cCB2YWx1ZXMsIHNlZSB0aGUgdGVzdHMgZm9yXG4gICAgICAgIC8vIGV4YW1wbGVzIG9mIHdoYXQgdGhhdCBtZWFucy5cbiAgICAgICAgZGF0YS5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHMgJSAxMDAwO1xuXG4gICAgICAgIHNlY29uZHMgPSBhYnNGbG9vcihtaWxsaXNlY29uZHMgLyAxMDAwKTtcbiAgICAgICAgZGF0YS5zZWNvbmRzID0gc2Vjb25kcyAlIDYwO1xuXG4gICAgICAgIG1pbnV0ZXMgPSBhYnNGbG9vcihzZWNvbmRzIC8gNjApO1xuICAgICAgICBkYXRhLm1pbnV0ZXMgPSBtaW51dGVzICUgNjA7XG5cbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBkYXRhLmhvdXJzID0gaG91cnMgJSAyNDtcblxuICAgICAgICBkYXlzICs9IGFic0Zsb29yKGhvdXJzIC8gMjQpO1xuXG4gICAgICAgIC8vIGNvbnZlcnQgZGF5cyB0byBtb250aHNcbiAgICAgICAgbW9udGhzRnJvbURheXMgPSBhYnNGbG9vcihkYXlzVG9Nb250aHMoZGF5cykpO1xuICAgICAgICBtb250aHMgKz0gbW9udGhzRnJvbURheXM7XG4gICAgICAgIGRheXMgLT0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzRnJvbURheXMpKTtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cbiAgICAgICAgZGF0YS5kYXlzID0gZGF5cztcbiAgICAgICAgZGF0YS5tb250aHMgPSBtb250aHM7XG4gICAgICAgIGRhdGEueWVhcnMgPSB5ZWFycztcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzVG9Nb250aHMoZGF5cykge1xuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxNDYwOTcgZGF5cyAodGFraW5nIGludG8gYWNjb3VudCBsZWFwIHllYXIgcnVsZXMpXG4gICAgICAgIC8vIDQwMCB5ZWFycyBoYXZlIDEyIG1vbnRocyA9PT0gNDgwMFxuICAgICAgICByZXR1cm4gKGRheXMgKiA0ODAwKSAvIDE0NjA5NztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNUb0RheXMobW9udGhzKSB7XG4gICAgICAgIC8vIHRoZSByZXZlcnNlIG9mIGRheXNUb01vbnRoc1xuICAgICAgICByZXR1cm4gKG1vbnRocyAqIDE0NjA5NykgLyA0ODAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFzKHVuaXRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRheXMsXG4gICAgICAgICAgICBtb250aHMsXG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHM7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgaWYgKHVuaXRzID09PSAnbW9udGgnIHx8IHVuaXRzID09PSAncXVhcnRlcicgfHwgdW5pdHMgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyArIGRheXNUb01vbnRocyhkYXlzKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHM7XG4gICAgICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHMgLyAzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIC8gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBoYW5kbGUgbWlsbGlzZWNvbmRzIHNlcGFyYXRlbHkgYmVjYXVzZSBvZiBmbG9hdGluZyBwb2ludCBtYXRoIGVycm9ycyAoaXNzdWUgIzE4NjcpXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyArIE1hdGgucm91bmQobW9udGhzVG9EYXlzKHRoaXMuX21vbnRocykpO1xuICAgICAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAvIDcgKyBtaWxsaXNlY29uZHMgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAyNCArIG1pbGxpc2Vjb25kcyAvIDM2ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAxNDQwICsgbWlsbGlzZWNvbmRzIC8gNmU0O1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogODY0MDAgKyBtaWxsaXNlY29uZHMgLyAxMDAwO1xuICAgICAgICAgICAgICAgIC8vIE1hdGguZmxvb3IgcHJldmVudHMgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgaGVyZVxuICAgICAgICAgICAgICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoZGF5cyAqIDg2NGU1KSArIG1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdW5pdCAnICsgdW5pdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ETzogVXNlIHRoaXMuYXMoJ21zJyk/XG4gICAgZnVuY3Rpb24gdmFsdWVPZiQxKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgK1xuICAgICAgICAgICAgdGhpcy5fZGF5cyAqIDg2NGU1ICtcbiAgICAgICAgICAgICh0aGlzLl9tb250aHMgJSAxMikgKiAyNTkyZTYgK1xuICAgICAgICAgICAgdG9JbnQodGhpcy5fbW9udGhzIC8gMTIpICogMzE1MzZlNlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VBcyhhbGlhcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXMoYWxpYXMpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBhc01pbGxpc2Vjb25kcyA9IG1ha2VBcygnbXMnKSxcbiAgICAgICAgYXNTZWNvbmRzID0gbWFrZUFzKCdzJyksXG4gICAgICAgIGFzTWludXRlcyA9IG1ha2VBcygnbScpLFxuICAgICAgICBhc0hvdXJzID0gbWFrZUFzKCdoJyksXG4gICAgICAgIGFzRGF5cyA9IG1ha2VBcygnZCcpLFxuICAgICAgICBhc1dlZWtzID0gbWFrZUFzKCd3JyksXG4gICAgICAgIGFzTW9udGhzID0gbWFrZUFzKCdNJyksXG4gICAgICAgIGFzUXVhcnRlcnMgPSBtYWtlQXMoJ1EnKSxcbiAgICAgICAgYXNZZWFycyA9IG1ha2VBcygneScpO1xuXG4gICAgZnVuY3Rpb24gY2xvbmUkMSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldCQyKHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzW3VuaXRzICsgJ3MnXSgpIDogTmFOO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXR0ZXIobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5fZGF0YVtuYW1lXSA6IE5hTjtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgbWlsbGlzZWNvbmRzID0gbWFrZUdldHRlcignbWlsbGlzZWNvbmRzJyksXG4gICAgICAgIHNlY29uZHMgPSBtYWtlR2V0dGVyKCdzZWNvbmRzJyksXG4gICAgICAgIG1pbnV0ZXMgPSBtYWtlR2V0dGVyKCdtaW51dGVzJyksXG4gICAgICAgIGhvdXJzID0gbWFrZUdldHRlcignaG91cnMnKSxcbiAgICAgICAgZGF5cyA9IG1ha2VHZXR0ZXIoJ2RheXMnKSxcbiAgICAgICAgbW9udGhzID0gbWFrZUdldHRlcignbW9udGhzJyksXG4gICAgICAgIHllYXJzID0gbWFrZUdldHRlcigneWVhcnMnKTtcblxuICAgIGZ1bmN0aW9uIHdlZWtzKCkge1xuICAgICAgICByZXR1cm4gYWJzRmxvb3IodGhpcy5kYXlzKCkgLyA3KTtcbiAgICB9XG5cbiAgICB2YXIgcm91bmQgPSBNYXRoLnJvdW5kLFxuICAgICAgICB0aHJlc2hvbGRzID0ge1xuICAgICAgICAgICAgc3M6IDQ0LCAvLyBhIGZldyBzZWNvbmRzIHRvIHNlY29uZHNcbiAgICAgICAgICAgIHM6IDQ1LCAvLyBzZWNvbmRzIHRvIG1pbnV0ZVxuICAgICAgICAgICAgbTogNDUsIC8vIG1pbnV0ZXMgdG8gaG91clxuICAgICAgICAgICAgaDogMjIsIC8vIGhvdXJzIHRvIGRheVxuICAgICAgICAgICAgZDogMjYsIC8vIGRheXMgdG8gbW9udGgvd2Vla1xuICAgICAgICAgICAgdzogbnVsbCwgLy8gd2Vla3MgdG8gbW9udGhcbiAgICAgICAgICAgIE06IDExLCAvLyBtb250aHMgdG8geWVhclxuICAgICAgICB9O1xuXG4gICAgLy8gaGVscGVyIGZ1bmN0aW9uIGZvciBtb21lbnQuZm4uZnJvbSwgbW9tZW50LmZuLmZyb21Ob3csIGFuZCBtb21lbnQuZHVyYXRpb24uZm4uaHVtYW5pemVcbiAgICBmdW5jdGlvbiBzdWJzdGl0dXRlVGltZUFnbyhzdHJpbmcsIG51bWJlciwgd2l0aG91dFN1ZmZpeCwgaXNGdXR1cmUsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLnJlbGF0aXZlVGltZShudW1iZXIgfHwgMSwgISF3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWUkMShwb3NOZWdEdXJhdGlvbiwgd2l0aG91dFN1ZmZpeCwgdGhyZXNob2xkcywgbG9jYWxlKSB7XG4gICAgICAgIHZhciBkdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uKHBvc05lZ0R1cmF0aW9uKS5hYnMoKSxcbiAgICAgICAgICAgIHNlY29uZHMgPSByb3VuZChkdXJhdGlvbi5hcygncycpKSxcbiAgICAgICAgICAgIG1pbnV0ZXMgPSByb3VuZChkdXJhdGlvbi5hcygnbScpKSxcbiAgICAgICAgICAgIGhvdXJzID0gcm91bmQoZHVyYXRpb24uYXMoJ2gnKSksXG4gICAgICAgICAgICBkYXlzID0gcm91bmQoZHVyYXRpb24uYXMoJ2QnKSksXG4gICAgICAgICAgICBtb250aHMgPSByb3VuZChkdXJhdGlvbi5hcygnTScpKSxcbiAgICAgICAgICAgIHdlZWtzID0gcm91bmQoZHVyYXRpb24uYXMoJ3cnKSksXG4gICAgICAgICAgICB5ZWFycyA9IHJvdW5kKGR1cmF0aW9uLmFzKCd5JykpLFxuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgKHNlY29uZHMgPD0gdGhyZXNob2xkcy5zcyAmJiBbJ3MnLCBzZWNvbmRzXSkgfHxcbiAgICAgICAgICAgICAgICAoc2Vjb25kcyA8IHRocmVzaG9sZHMucyAmJiBbJ3NzJywgc2Vjb25kc10pIHx8XG4gICAgICAgICAgICAgICAgKG1pbnV0ZXMgPD0gMSAmJiBbJ20nXSkgfHxcbiAgICAgICAgICAgICAgICAobWludXRlcyA8IHRocmVzaG9sZHMubSAmJiBbJ21tJywgbWludXRlc10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDw9IDEgJiYgWydoJ10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDwgdGhyZXNob2xkcy5oICYmIFsnaGgnLCBob3Vyc10pIHx8XG4gICAgICAgICAgICAgICAgKGRheXMgPD0gMSAmJiBbJ2QnXSkgfHxcbiAgICAgICAgICAgICAgICAoZGF5cyA8IHRocmVzaG9sZHMuZCAmJiBbJ2RkJywgZGF5c10pO1xuXG4gICAgICAgIGlmICh0aHJlc2hvbGRzLncgIT0gbnVsbCkge1xuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgYSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8PSAxICYmIFsndyddKSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8IHRocmVzaG9sZHMudyAmJiBbJ3d3Jywgd2Vla3NdKTtcbiAgICAgICAgfVxuICAgICAgICBhID0gYSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8PSAxICYmIFsnTSddKSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8IHRocmVzaG9sZHMuTSAmJiBbJ01NJywgbW9udGhzXSkgfHxcbiAgICAgICAgICAgICh5ZWFycyA8PSAxICYmIFsneSddKSB8fCBbJ3l5JywgeWVhcnNdO1xuXG4gICAgICAgIGFbMl0gPSB3aXRob3V0U3VmZml4O1xuICAgICAgICBhWzNdID0gK3Bvc05lZ0R1cmF0aW9uID4gMDtcbiAgICAgICAgYVs0XSA9IGxvY2FsZTtcbiAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGVUaW1lQWdvLmFwcGx5KG51bGwsIGEpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBzZXQgdGhlIHJvdW5kaW5nIGZ1bmN0aW9uIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZyhyb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgIGlmIChyb3VuZGluZ0Z1bmN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByb3VuZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJvdW5kaW5nRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJvdW5kID0gcm91bmRpbmdGdW5jdGlvbjtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IGEgdGhyZXNob2xkIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQodGhyZXNob2xkLCBsaW1pdCkge1xuICAgICAgICBpZiAodGhyZXNob2xkc1t0aHJlc2hvbGRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGltaXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRocmVzaG9sZHNbdGhyZXNob2xkXTtcbiAgICAgICAgfVxuICAgICAgICB0aHJlc2hvbGRzW3RocmVzaG9sZF0gPSBsaW1pdDtcbiAgICAgICAgaWYgKHRocmVzaG9sZCA9PT0gJ3MnKSB7XG4gICAgICAgICAgICB0aHJlc2hvbGRzLnNzID0gbGltaXQgLSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGh1bWFuaXplKGFyZ1dpdGhTdWZmaXgsIGFyZ1RocmVzaG9sZHMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2l0aFN1ZmZpeCA9IGZhbHNlLFxuICAgICAgICAgICAgdGggPSB0aHJlc2hvbGRzLFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgb3V0cHV0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGFyZ1RocmVzaG9sZHMgPSBhcmdXaXRoU3VmZml4O1xuICAgICAgICAgICAgYXJnV2l0aFN1ZmZpeCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB3aXRoU3VmZml4ID0gYXJnV2l0aFN1ZmZpeDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyZ1RocmVzaG9sZHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aCA9IE9iamVjdC5hc3NpZ24oe30sIHRocmVzaG9sZHMsIGFyZ1RocmVzaG9sZHMpO1xuICAgICAgICAgICAgaWYgKGFyZ1RocmVzaG9sZHMucyAhPSBudWxsICYmIGFyZ1RocmVzaG9sZHMuc3MgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoLnNzID0gYXJnVGhyZXNob2xkcy5zIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsZSA9IHRoaXMubG9jYWxlRGF0YSgpO1xuICAgICAgICBvdXRwdXQgPSByZWxhdGl2ZVRpbWUkMSh0aGlzLCAhd2l0aFN1ZmZpeCwgdGgsIGxvY2FsZSk7XG5cbiAgICAgICAgaWYgKHdpdGhTdWZmaXgpIHtcbiAgICAgICAgICAgIG91dHB1dCA9IGxvY2FsZS5wYXN0RnV0dXJlKCt0aGlzLCBvdXRwdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxvY2FsZS5wb3N0Zm9ybWF0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFicyQxID0gTWF0aC5hYnM7XG5cbiAgICBmdW5jdGlvbiBzaWduKHgpIHtcbiAgICAgICAgcmV0dXJuICh4ID4gMCkgLSAoeCA8IDApIHx8ICt4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nJDEoKSB7XG4gICAgICAgIC8vIGZvciBJU08gc3RyaW5ncyB3ZSBkbyBub3QgdXNlIHRoZSBub3JtYWwgYnViYmxpbmcgcnVsZXM6XG4gICAgICAgIC8vICAqIG1pbGxpc2Vjb25kcyBidWJibGUgdXAgdW50aWwgdGhleSBiZWNvbWUgaG91cnNcbiAgICAgICAgLy8gICogZGF5cyBkbyBub3QgYnViYmxlIGF0IGFsbFxuICAgICAgICAvLyAgKiBtb250aHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIHllYXJzXG4gICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBpcyBubyBjb250ZXh0LWZyZWUgY29udmVyc2lvbiBiZXR3ZWVuIGhvdXJzIGFuZCBkYXlzXG4gICAgICAgIC8vICh0aGluayBvZiBjbG9jayBjaGFuZ2VzKVxuICAgICAgICAvLyBhbmQgYWxzbyBub3QgYmV0d2VlbiBkYXlzIGFuZCBtb250aHMgKDI4LTMxIGRheXMgcGVyIG1vbnRoKVxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZWNvbmRzID0gYWJzJDEodGhpcy5fbWlsbGlzZWNvbmRzKSAvIDEwMDAsXG4gICAgICAgICAgICBkYXlzID0gYWJzJDEodGhpcy5fZGF5cyksXG4gICAgICAgICAgICBtb250aHMgPSBhYnMkMSh0aGlzLl9tb250aHMpLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBzLFxuICAgICAgICAgICAgdG90YWwgPSB0aGlzLmFzU2Vjb25kcygpLFxuICAgICAgICAgICAgdG90YWxTaWduLFxuICAgICAgICAgICAgeW1TaWduLFxuICAgICAgICAgICAgZGF5c1NpZ24sXG4gICAgICAgICAgICBobXNTaWduO1xuXG4gICAgICAgIGlmICghdG90YWwpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIHNhbWUgYXMgQyMncyAoTm9kYSkgYW5kIHB5dGhvbiAoaXNvZGF0ZSkuLi5cbiAgICAgICAgICAgIC8vIGJ1dCBub3Qgb3RoZXIgSlMgKGdvb2cuZGF0ZSlcbiAgICAgICAgICAgIHJldHVybiAnUDBEJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDM2MDAgc2Vjb25kcyAtPiA2MCBtaW51dGVzIC0+IDEgaG91clxuICAgICAgICBtaW51dGVzID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBzZWNvbmRzICU9IDYwO1xuICAgICAgICBtaW51dGVzICU9IDYwO1xuXG4gICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcbiAgICAgICAgeWVhcnMgPSBhYnNGbG9vcihtb250aHMgLyAxMik7XG4gICAgICAgIG1vbnRocyAlPSAxMjtcblxuICAgICAgICAvLyBpbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZG9yZGlsbGUvbW9tZW50LWlzb2R1cmF0aW9uL2Jsb2IvbWFzdGVyL21vbWVudC5pc29kdXJhdGlvbi5qc1xuICAgICAgICBzID0gc2Vjb25kcyA/IHNlY29uZHMudG9GaXhlZCgzKS5yZXBsYWNlKC9cXC4/MCskLywgJycpIDogJyc7XG5cbiAgICAgICAgdG90YWxTaWduID0gdG90YWwgPCAwID8gJy0nIDogJyc7XG4gICAgICAgIHltU2lnbiA9IHNpZ24odGhpcy5fbW9udGhzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICAgICAgZGF5c1NpZ24gPSBzaWduKHRoaXMuX2RheXMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICBobXNTaWduID0gc2lnbih0aGlzLl9taWxsaXNlY29uZHMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0b3RhbFNpZ24gK1xuICAgICAgICAgICAgJ1AnICtcbiAgICAgICAgICAgICh5ZWFycyA/IHltU2lnbiArIHllYXJzICsgJ1knIDogJycpICtcbiAgICAgICAgICAgIChtb250aHMgPyB5bVNpZ24gKyBtb250aHMgKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKGRheXMgPyBkYXlzU2lnbiArIGRheXMgKyAnRCcgOiAnJykgK1xuICAgICAgICAgICAgKGhvdXJzIHx8IG1pbnV0ZXMgfHwgc2Vjb25kcyA/ICdUJyA6ICcnKSArXG4gICAgICAgICAgICAoaG91cnMgPyBobXNTaWduICsgaG91cnMgKyAnSCcgOiAnJykgK1xuICAgICAgICAgICAgKG1pbnV0ZXMgPyBobXNTaWduICsgbWludXRlcyArICdNJyA6ICcnKSArXG4gICAgICAgICAgICAoc2Vjb25kcyA/IGhtc1NpZ24gKyBzICsgJ1MnIDogJycpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDIgPSBEdXJhdGlvbi5wcm90b3R5cGU7XG5cbiAgICBwcm90byQyLmlzVmFsaWQgPSBpc1ZhbGlkJDE7XG4gICAgcHJvdG8kMi5hYnMgPSBhYnM7XG4gICAgcHJvdG8kMi5hZGQgPSBhZGQkMTtcbiAgICBwcm90byQyLnN1YnRyYWN0ID0gc3VidHJhY3QkMTtcbiAgICBwcm90byQyLmFzID0gYXM7XG4gICAgcHJvdG8kMi5hc01pbGxpc2Vjb25kcyA9IGFzTWlsbGlzZWNvbmRzO1xuICAgIHByb3RvJDIuYXNTZWNvbmRzID0gYXNTZWNvbmRzO1xuICAgIHByb3RvJDIuYXNNaW51dGVzID0gYXNNaW51dGVzO1xuICAgIHByb3RvJDIuYXNIb3VycyA9IGFzSG91cnM7XG4gICAgcHJvdG8kMi5hc0RheXMgPSBhc0RheXM7XG4gICAgcHJvdG8kMi5hc1dlZWtzID0gYXNXZWVrcztcbiAgICBwcm90byQyLmFzTW9udGhzID0gYXNNb250aHM7XG4gICAgcHJvdG8kMi5hc1F1YXJ0ZXJzID0gYXNRdWFydGVycztcbiAgICBwcm90byQyLmFzWWVhcnMgPSBhc1llYXJzO1xuICAgIHByb3RvJDIudmFsdWVPZiA9IHZhbHVlT2YkMTtcbiAgICBwcm90byQyLl9idWJibGUgPSBidWJibGU7XG4gICAgcHJvdG8kMi5jbG9uZSA9IGNsb25lJDE7XG4gICAgcHJvdG8kMi5nZXQgPSBnZXQkMjtcbiAgICBwcm90byQyLm1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLnNlY29uZHMgPSBzZWNvbmRzO1xuICAgIHByb3RvJDIubWludXRlcyA9IG1pbnV0ZXM7XG4gICAgcHJvdG8kMi5ob3VycyA9IGhvdXJzO1xuICAgIHByb3RvJDIuZGF5cyA9IGRheXM7XG4gICAgcHJvdG8kMi53ZWVrcyA9IHdlZWtzO1xuICAgIHByb3RvJDIubW9udGhzID0gbW9udGhzO1xuICAgIHByb3RvJDIueWVhcnMgPSB5ZWFycztcbiAgICBwcm90byQyLmh1bWFuaXplID0gaHVtYW5pemU7XG4gICAgcHJvdG8kMi50b0lTT1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b0pTT04gPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIubG9jYWxlID0gbG9jYWxlO1xuICAgIHByb3RvJDIubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG5cbiAgICBwcm90byQyLnRvSXNvU3RyaW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAndG9Jc29TdHJpbmcoKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRvSVNPU3RyaW5nKCkgaW5zdGVhZCAobm90aWNlIHRoZSBjYXBpdGFscyknLFxuICAgICAgICB0b0lTT1N0cmluZyQxXG4gICAgKTtcbiAgICBwcm90byQyLmxhbmcgPSBsYW5nO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1gnLCAwLCAwLCAndW5peCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd4JywgMCwgMCwgJ3ZhbHVlT2YnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3gnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWCcsIG1hdGNoVGltZXN0YW1wKTtcbiAgICBhZGRQYXJzZVRva2VuKCdYJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKHBhcnNlRmxvYXQoaW5wdXQpICogMTAwMCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbigneCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSh0b0ludChpbnB1dCkpO1xuICAgIH0pO1xuXG4gICAgLy8hIG1vbWVudC5qc1xuXG4gICAgaG9va3MudmVyc2lvbiA9ICcyLjI5LjEnO1xuXG4gICAgc2V0SG9va0NhbGxiYWNrKGNyZWF0ZUxvY2FsKTtcblxuICAgIGhvb2tzLmZuID0gcHJvdG87XG4gICAgaG9va3MubWluID0gbWluO1xuICAgIGhvb2tzLm1heCA9IG1heDtcbiAgICBob29rcy5ub3cgPSBub3c7XG4gICAgaG9va3MudXRjID0gY3JlYXRlVVRDO1xuICAgIGhvb2tzLnVuaXggPSBjcmVhdGVVbml4O1xuICAgIGhvb2tzLm1vbnRocyA9IGxpc3RNb250aHM7XG4gICAgaG9va3MuaXNEYXRlID0gaXNEYXRlO1xuICAgIGhvb2tzLmxvY2FsZSA9IGdldFNldEdsb2JhbExvY2FsZTtcbiAgICBob29rcy5pbnZhbGlkID0gY3JlYXRlSW52YWxpZDtcbiAgICBob29rcy5kdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uO1xuICAgIGhvb2tzLmlzTW9tZW50ID0gaXNNb21lbnQ7XG4gICAgaG9va3Mud2Vla2RheXMgPSBsaXN0V2Vla2RheXM7XG4gICAgaG9va3MucGFyc2Vab25lID0gY3JlYXRlSW5ab25lO1xuICAgIGhvb2tzLmxvY2FsZURhdGEgPSBnZXRMb2NhbGU7XG4gICAgaG9va3MuaXNEdXJhdGlvbiA9IGlzRHVyYXRpb247XG4gICAgaG9va3MubW9udGhzU2hvcnQgPSBsaXN0TW9udGhzU2hvcnQ7XG4gICAgaG9va3Mud2Vla2RheXNNaW4gPSBsaXN0V2Vla2RheXNNaW47XG4gICAgaG9va3MuZGVmaW5lTG9jYWxlID0gZGVmaW5lTG9jYWxlO1xuICAgIGhvb2tzLnVwZGF0ZUxvY2FsZSA9IHVwZGF0ZUxvY2FsZTtcbiAgICBob29rcy5sb2NhbGVzID0gbGlzdExvY2FsZXM7XG4gICAgaG9va3Mud2Vla2RheXNTaG9ydCA9IGxpc3RXZWVrZGF5c1Nob3J0O1xuICAgIGhvb2tzLm5vcm1hbGl6ZVVuaXRzID0gbm9ybWFsaXplVW5pdHM7XG4gICAgaG9va3MucmVsYXRpdmVUaW1lUm91bmRpbmcgPSBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZztcbiAgICBob29rcy5yZWxhdGl2ZVRpbWVUaHJlc2hvbGQgPSBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQ7XG4gICAgaG9va3MuY2FsZW5kYXJGb3JtYXQgPSBnZXRDYWxlbmRhckZvcm1hdDtcbiAgICBob29rcy5wcm90b3R5cGUgPSBwcm90bztcblxuICAgIC8vIGN1cnJlbnRseSBIVE1MNSBpbnB1dCB0eXBlIG9ubHkgc3VwcG9ydHMgMjQtaG91ciBmb3JtYXRzXG4gICAgaG9va3MuSFRNTDVfRk1UID0ge1xuICAgICAgICBEQVRFVElNRV9MT0NBTDogJ1lZWVktTU0tRERUSEg6bW0nLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfU0VDT05EUzogJ1lZWVktTU0tRERUSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICBEQVRFVElNRV9MT0NBTF9NUzogJ1lZWVktTU0tRERUSEg6bW06c3MuU1NTJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIwLjAwMVwiIC8+XG4gICAgICAgIERBVEU6ICdZWVlZLU1NLUREJywgLy8gPGlucHV0IHR5cGU9XCJkYXRlXCIgLz5cbiAgICAgICAgVElNRTogJ0hIOm1tJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgLz5cbiAgICAgICAgVElNRV9TRUNPTkRTOiAnSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMVwiIC8+XG4gICAgICAgIFRJTUVfTVM6ICdISDptbTpzcy5TU1MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICAgICAgICBXRUVLOiAnR0dHRy1bV11XVycsIC8vIDxpbnB1dCB0eXBlPVwid2Vla1wiIC8+XG4gICAgICAgIE1PTlRIOiAnWVlZWS1NTScsIC8vIDxpbnB1dCB0eXBlPVwibW9udGhcIiAvPlxuICAgIH07XG5cbiAgICByZXR1cm4gaG9va3M7XG5cbn0pKSk7XG4iLCIvKipcbiAqIFNTUiBXaW5kb3cgMi4wLjBcbiAqIEJldHRlciBoYW5kbGluZyBmb3Igd2luZG93IG9iamVjdCBpbiBTU1IgZW52aXJvbm1lbnRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2xpbWl0czR3ZWIvc3NyLXdpbmRvd1xuICpcbiAqIENvcHlyaWdodCAyMDIwLCBWbGFkaW1pciBLaGFybGFtcGlkaVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVFxuICpcbiAqIFJlbGVhc2VkIG9uOiBNYXkgMTIsIDIwMjBcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xuICAgIHJldHVybiAob2JqICE9PSBudWxsICYmXG4gICAgICAgIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmXG4gICAgICAgICdjb25zdHJ1Y3RvcicgaW4gb2JqICYmXG4gICAgICAgIG9iai5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KTtcbn1cbmZ1bmN0aW9uIGV4dGVuZCh0YXJnZXQsIHNyYykge1xuICAgIGlmICh0YXJnZXQgPT09IHZvaWQgMCkgeyB0YXJnZXQgPSB7fTsgfVxuICAgIGlmIChzcmMgPT09IHZvaWQgMCkgeyBzcmMgPSB7fTsgfVxuICAgIE9iamVjdC5rZXlzKHNyYykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0W2tleV0gPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBzcmNba2V5XTtcbiAgICAgICAgZWxzZSBpZiAoaXNPYmplY3Qoc3JjW2tleV0pICYmXG4gICAgICAgICAgICBpc09iamVjdCh0YXJnZXRba2V5XSkgJiZcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHNyY1trZXldKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBleHRlbmQodGFyZ2V0W2tleV0sIHNyY1trZXldKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG52YXIgZG9jID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyA/IGRvY3VtZW50IDoge307XG52YXIgc3NyRG9jdW1lbnQgPSB7XG4gICAgYm9keToge30sXG4gICAgYWRkRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gKCkgeyB9LFxuICAgIHJlbW92ZUV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uICgpIHsgfSxcbiAgICBhY3RpdmVFbGVtZW50OiB7XG4gICAgICAgIGJsdXI6IGZ1bmN0aW9uICgpIHsgfSxcbiAgICAgICAgbm9kZU5hbWU6ICcnLFxuICAgIH0sXG4gICAgcXVlcnlTZWxlY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIHF1ZXJ5U2VsZWN0b3JBbGw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH0sXG4gICAgZ2V0RWxlbWVudEJ5SWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICBjcmVhdGVFdmVudDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5pdEV2ZW50OiBmdW5jdGlvbiAoKSB7IH0sXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBjcmVhdGVFbGVtZW50OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICBjaGlsZE5vZGVzOiBbXSxcbiAgICAgICAgICAgIHN0eWxlOiB7fSxcbiAgICAgICAgICAgIHNldEF0dHJpYnV0ZTogZnVuY3Rpb24gKCkgeyB9LFxuICAgICAgICAgICAgZ2V0RWxlbWVudHNCeVRhZ05hbWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH0sXG4gICAgY3JlYXRlRWxlbWVudE5TOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9LFxuICAgIGltcG9ydE5vZGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICBsb2NhdGlvbjoge1xuICAgICAgICBoYXNoOiAnJyxcbiAgICAgICAgaG9zdDogJycsXG4gICAgICAgIGhvc3RuYW1lOiAnJyxcbiAgICAgICAgaHJlZjogJycsXG4gICAgICAgIG9yaWdpbjogJycsXG4gICAgICAgIHBhdGhuYW1lOiAnJyxcbiAgICAgICAgcHJvdG9jb2w6ICcnLFxuICAgICAgICBzZWFyY2g6ICcnLFxuICAgIH0sXG59O1xuZXh0ZW5kKGRvYywgc3NyRG9jdW1lbnQpO1xuXG52YXIgd2luID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB7fTtcbnZhciBzc3JXaW5kb3cgPSB7XG4gICAgZG9jdW1lbnQ6IHNzckRvY3VtZW50LFxuICAgIG5hdmlnYXRvcjoge1xuICAgICAgICB1c2VyQWdlbnQ6ICcnLFxuICAgIH0sXG4gICAgbG9jYXRpb246IHtcbiAgICAgICAgaGFzaDogJycsXG4gICAgICAgIGhvc3Q6ICcnLFxuICAgICAgICBob3N0bmFtZTogJycsXG4gICAgICAgIGhyZWY6ICcnLFxuICAgICAgICBvcmlnaW46ICcnLFxuICAgICAgICBwYXRobmFtZTogJycsXG4gICAgICAgIHByb3RvY29sOiAnJyxcbiAgICAgICAgc2VhcmNoOiAnJyxcbiAgICB9LFxuICAgIGhpc3Rvcnk6IHtcbiAgICAgICAgcmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAoKSB7IH0sXG4gICAgICAgIHB1c2hTdGF0ZTogZnVuY3Rpb24gKCkgeyB9LFxuICAgICAgICBnbzogZnVuY3Rpb24gKCkgeyB9LFxuICAgICAgICBiYWNrOiBmdW5jdGlvbiAoKSB7IH0sXG4gICAgfSxcbiAgICBDdXN0b21FdmVudDogZnVuY3Rpb24gQ3VzdG9tRXZlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgYWRkRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gKCkgeyB9LFxuICAgIHJlbW92ZUV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uICgpIHsgfSxcbiAgICBnZXRDb21wdXRlZFN0eWxlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBnZXRQcm9wZXJ0eVZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIEltYWdlOiBmdW5jdGlvbiAoKSB7IH0sXG4gICAgRGF0ZTogZnVuY3Rpb24gKCkgeyB9LFxuICAgIHNjcmVlbjoge30sXG4gICAgc2V0VGltZW91dDogZnVuY3Rpb24gKCkgeyB9LFxuICAgIGNsZWFyVGltZW91dDogZnVuY3Rpb24gKCkgeyB9LFxuICAgIG1hdGNoTWVkaWE6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH0sXG59O1xuZXh0ZW5kKHdpbiwgc3NyV2luZG93KTtcblxuZXhwb3J0IHsgZG9jIGFzIGRvY3VtZW50LCBleHRlbmQsIHdpbiBhcyB3aW5kb3cgfTtcbiIsImltcG9ydCB7XG4gICQsXG4gIGFkZENsYXNzLFxuICByZW1vdmVDbGFzcyxcbiAgaGFzQ2xhc3MsXG4gIHRvZ2dsZUNsYXNzLFxuICBhdHRyLFxuICByZW1vdmVBdHRyLFxuICBkYXRhLFxuICB0cmFuc2Zvcm0sXG4gIHRyYW5zaXRpb24sXG4gIG9uLFxuICBvZmYsXG4gIHRyaWdnZXIsXG4gIHRyYW5zaXRpb25FbmQsXG4gIG91dGVyV2lkdGgsXG4gIG91dGVySGVpZ2h0LFxuICBvZmZzZXQsXG4gIGNzcyxcbiAgZWFjaCxcbiAgaHRtbCxcbiAgdGV4dCxcbiAgaXMsXG4gIGluZGV4LFxuICBlcSxcbiAgYXBwZW5kLFxuICBwcmVwZW5kLFxuICBuZXh0LFxuICBuZXh0QWxsLFxuICBwcmV2LFxuICBwcmV2QWxsLFxuICBwYXJlbnQsXG4gIHBhcmVudHMsXG4gIGNsb3Nlc3QsXG4gIGZpbmQsXG4gIGNoaWxkcmVuLFxuICBmaWx0ZXIsXG4gIHJlbW92ZSxcbiAgYWRkLFxuICBzdHlsZXMsXG59IGZyb20gJ2RvbTcvZGlzdC9kb203Lm1vZHVsYXInO1xuXG5jb25zdCBNZXRob2RzID0ge1xuICBhZGRDbGFzcyxcbiAgcmVtb3ZlQ2xhc3MsXG4gIGhhc0NsYXNzLFxuICB0b2dnbGVDbGFzcyxcbiAgYXR0cixcbiAgcmVtb3ZlQXR0cixcbiAgZGF0YSxcbiAgdHJhbnNmb3JtLFxuICB0cmFuc2l0aW9uLFxuICBvbixcbiAgb2ZmLFxuICB0cmlnZ2VyLFxuICB0cmFuc2l0aW9uRW5kLFxuICBvdXRlcldpZHRoLFxuICBvdXRlckhlaWdodCxcbiAgb2Zmc2V0LFxuICBjc3MsXG4gIGVhY2gsXG4gIGh0bWwsXG4gIHRleHQsXG4gIGlzLFxuICBpbmRleCxcbiAgZXEsXG4gIGFwcGVuZCxcbiAgcHJlcGVuZCxcbiAgbmV4dCxcbiAgbmV4dEFsbCxcbiAgcHJldixcbiAgcHJldkFsbCxcbiAgcGFyZW50LFxuICBwYXJlbnRzLFxuICBjbG9zZXN0LFxuICBmaW5kLFxuICBjaGlsZHJlbixcbiAgZmlsdGVyLFxuICByZW1vdmUsXG4gIGFkZCxcbiAgc3R5bGVzLFxufTtcblxuT2JqZWN0LmtleXMoTWV0aG9kcykuZm9yRWFjaCgobWV0aG9kTmFtZSkgPT4ge1xuICAkLmZuW21ldGhvZE5hbWVdID0gJC5mblttZXRob2ROYW1lXSB8fCBNZXRob2RzW21ldGhvZE5hbWVdO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0ICQ7XG4iLCJpbXBvcnQgeyB3aW5kb3cgfSBmcm9tICdzc3Itd2luZG93JztcblxuY29uc3QgVXRpbHMgPSB7XG4gIGRlbGV0ZVByb3BzKG9iaikge1xuICAgIGNvbnN0IG9iamVjdCA9IG9iajtcbiAgICBPYmplY3Qua2V5cyhvYmplY3QpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgb2JqZWN0W2tleV0gPSBudWxsO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBubyBnZXR0ZXIgZm9yIG9iamVjdFxuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgZGVsZXRlIG9iamVjdFtrZXldO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBzb21ldGhpbmcgZ290IHdyb25nXG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG4gIG5leHRUaWNrKGNhbGxiYWNrLCBkZWxheSA9IDApIHtcbiAgICByZXR1cm4gc2V0VGltZW91dChjYWxsYmFjaywgZGVsYXkpO1xuICB9LFxuICBub3coKSB7XG4gICAgcmV0dXJuIERhdGUubm93KCk7XG4gIH0sXG4gIGdldFRyYW5zbGF0ZShlbCwgYXhpcyA9ICd4Jykge1xuICAgIGxldCBtYXRyaXg7XG4gICAgbGV0IGN1clRyYW5zZm9ybTtcbiAgICBsZXQgdHJhbnNmb3JtTWF0cml4O1xuXG4gICAgY29uc3QgY3VyU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCwgbnVsbCk7XG5cbiAgICBpZiAod2luZG93LldlYktpdENTU01hdHJpeCkge1xuICAgICAgY3VyVHJhbnNmb3JtID0gY3VyU3R5bGUudHJhbnNmb3JtIHx8IGN1clN0eWxlLndlYmtpdFRyYW5zZm9ybTtcbiAgICAgIGlmIChjdXJUcmFuc2Zvcm0uc3BsaXQoJywnKS5sZW5ndGggPiA2KSB7XG4gICAgICAgIGN1clRyYW5zZm9ybSA9IGN1clRyYW5zZm9ybS5zcGxpdCgnLCAnKS5tYXAoKGEpID0+IGEucmVwbGFjZSgnLCcsICcuJykpLmpvaW4oJywgJyk7XG4gICAgICB9XG4gICAgICAvLyBTb21lIG9sZCB2ZXJzaW9ucyBvZiBXZWJraXQgY2hva2Ugd2hlbiAnbm9uZScgaXMgcGFzc2VkOyBwYXNzXG4gICAgICAvLyBlbXB0eSBzdHJpbmcgaW5zdGVhZCBpbiB0aGlzIGNhc2VcbiAgICAgIHRyYW5zZm9ybU1hdHJpeCA9IG5ldyB3aW5kb3cuV2ViS2l0Q1NTTWF0cml4KGN1clRyYW5zZm9ybSA9PT0gJ25vbmUnID8gJycgOiBjdXJUcmFuc2Zvcm0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cmFuc2Zvcm1NYXRyaXggPSBjdXJTdHlsZS5Nb3pUcmFuc2Zvcm0gfHwgY3VyU3R5bGUuT1RyYW5zZm9ybSB8fCBjdXJTdHlsZS5Nc1RyYW5zZm9ybSB8fCBjdXJTdHlsZS5tc1RyYW5zZm9ybSB8fCBjdXJTdHlsZS50cmFuc2Zvcm0gfHwgY3VyU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgndHJhbnNmb3JtJykucmVwbGFjZSgndHJhbnNsYXRlKCcsICdtYXRyaXgoMSwgMCwgMCwgMSwnKTtcbiAgICAgIG1hdHJpeCA9IHRyYW5zZm9ybU1hdHJpeC50b1N0cmluZygpLnNwbGl0KCcsJyk7XG4gICAgfVxuXG4gICAgaWYgKGF4aXMgPT09ICd4Jykge1xuICAgICAgLy8gTGF0ZXN0IENocm9tZSBhbmQgd2Via2l0cyBGaXhcbiAgICAgIGlmICh3aW5kb3cuV2ViS2l0Q1NTTWF0cml4KSBjdXJUcmFuc2Zvcm0gPSB0cmFuc2Zvcm1NYXRyaXgubTQxO1xuICAgICAgLy8gQ3JhenkgSUUxMCBNYXRyaXhcbiAgICAgIGVsc2UgaWYgKG1hdHJpeC5sZW5ndGggPT09IDE2KSBjdXJUcmFuc2Zvcm0gPSBwYXJzZUZsb2F0KG1hdHJpeFsxMl0pO1xuICAgICAgLy8gTm9ybWFsIEJyb3dzZXJzXG4gICAgICBlbHNlIGN1clRyYW5zZm9ybSA9IHBhcnNlRmxvYXQobWF0cml4WzRdKTtcbiAgICB9XG4gICAgaWYgKGF4aXMgPT09ICd5Jykge1xuICAgICAgLy8gTGF0ZXN0IENocm9tZSBhbmQgd2Via2l0cyBGaXhcbiAgICAgIGlmICh3aW5kb3cuV2ViS2l0Q1NTTWF0cml4KSBjdXJUcmFuc2Zvcm0gPSB0cmFuc2Zvcm1NYXRyaXgubTQyO1xuICAgICAgLy8gQ3JhenkgSUUxMCBNYXRyaXhcbiAgICAgIGVsc2UgaWYgKG1hdHJpeC5sZW5ndGggPT09IDE2KSBjdXJUcmFuc2Zvcm0gPSBwYXJzZUZsb2F0KG1hdHJpeFsxM10pO1xuICAgICAgLy8gTm9ybWFsIEJyb3dzZXJzXG4gICAgICBlbHNlIGN1clRyYW5zZm9ybSA9IHBhcnNlRmxvYXQobWF0cml4WzVdKTtcbiAgICB9XG4gICAgcmV0dXJuIGN1clRyYW5zZm9ybSB8fCAwO1xuICB9LFxuICBwYXJzZVVybFF1ZXJ5KHVybCkge1xuICAgIGNvbnN0IHF1ZXJ5ID0ge307XG4gICAgbGV0IHVybFRvUGFyc2UgPSB1cmwgfHwgd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gICAgbGV0IGk7XG4gICAgbGV0IHBhcmFtcztcbiAgICBsZXQgcGFyYW07XG4gICAgbGV0IGxlbmd0aDtcbiAgICBpZiAodHlwZW9mIHVybFRvUGFyc2UgPT09ICdzdHJpbmcnICYmIHVybFRvUGFyc2UubGVuZ3RoKSB7XG4gICAgICB1cmxUb1BhcnNlID0gdXJsVG9QYXJzZS5pbmRleE9mKCc/JykgPiAtMSA/IHVybFRvUGFyc2UucmVwbGFjZSgvXFxTKlxcPy8sICcnKSA6ICcnO1xuICAgICAgcGFyYW1zID0gdXJsVG9QYXJzZS5zcGxpdCgnJicpLmZpbHRlcigocGFyYW1zUGFydCkgPT4gcGFyYW1zUGFydCAhPT0gJycpO1xuICAgICAgbGVuZ3RoID0gcGFyYW1zLmxlbmd0aDtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHBhcmFtID0gcGFyYW1zW2ldLnJlcGxhY2UoLyNcXFMrL2csICcnKS5zcGxpdCgnPScpO1xuICAgICAgICBxdWVyeVtkZWNvZGVVUklDb21wb25lbnQocGFyYW1bMF0pXSA9IHR5cGVvZiBwYXJhbVsxXSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBkZWNvZGVVUklDb21wb25lbnQocGFyYW1bMV0pIHx8ICcnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcXVlcnk7XG4gIH0sXG4gIGlzT2JqZWN0KG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIG8gIT09IG51bGwgJiYgby5jb25zdHJ1Y3RvciAmJiBvLmNvbnN0cnVjdG9yID09PSBPYmplY3Q7XG4gIH0sXG4gIGV4dGVuZCguLi5hcmdzKSB7XG4gICAgY29uc3QgdG8gPSBPYmplY3QoYXJnc1swXSk7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBjb25zdCBuZXh0U291cmNlID0gYXJnc1tpXTtcbiAgICAgIGlmIChuZXh0U291cmNlICE9PSB1bmRlZmluZWQgJiYgbmV4dFNvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBrZXlzQXJyYXkgPSBPYmplY3Qua2V5cyhPYmplY3QobmV4dFNvdXJjZSkpO1xuICAgICAgICBmb3IgKGxldCBuZXh0SW5kZXggPSAwLCBsZW4gPSBrZXlzQXJyYXkubGVuZ3RoOyBuZXh0SW5kZXggPCBsZW47IG5leHRJbmRleCArPSAxKSB7XG4gICAgICAgICAgY29uc3QgbmV4dEtleSA9IGtleXNBcnJheVtuZXh0SW5kZXhdO1xuICAgICAgICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5leHRTb3VyY2UsIG5leHRLZXkpO1xuICAgICAgICAgIGlmIChkZXNjICE9PSB1bmRlZmluZWQgJiYgZGVzYy5lbnVtZXJhYmxlKSB7XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNPYmplY3QodG9bbmV4dEtleV0pICYmIFV0aWxzLmlzT2JqZWN0KG5leHRTb3VyY2VbbmV4dEtleV0pKSB7XG4gICAgICAgICAgICAgIFV0aWxzLmV4dGVuZCh0b1tuZXh0S2V5XSwgbmV4dFNvdXJjZVtuZXh0S2V5XSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFVdGlscy5pc09iamVjdCh0b1tuZXh0S2V5XSkgJiYgVXRpbHMuaXNPYmplY3QobmV4dFNvdXJjZVtuZXh0S2V5XSkpIHtcbiAgICAgICAgICAgICAgdG9bbmV4dEtleV0gPSB7fTtcbiAgICAgICAgICAgICAgVXRpbHMuZXh0ZW5kKHRvW25leHRLZXldLCBuZXh0U291cmNlW25leHRLZXldKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRvW25leHRLZXldID0gbmV4dFNvdXJjZVtuZXh0S2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvO1xuICB9LFxufTtcbmV4cG9ydCBkZWZhdWx0IFV0aWxzO1xuIiwiaW1wb3J0IHsgd2luZG93LCBkb2N1bWVudCB9IGZyb20gJ3Nzci13aW5kb3cnO1xuXG5jb25zdCBTdXBwb3J0ID0gKGZ1bmN0aW9uIFN1cHBvcnQoKSB7XG4gIHJldHVybiB7XG4gICAgdG91Y2g6ICEhKCgnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cpIHx8ICh3aW5kb3cuRG9jdW1lbnRUb3VjaCAmJiBkb2N1bWVudCBpbnN0YW5jZW9mIHdpbmRvdy5Eb2N1bWVudFRvdWNoKSksXG5cbiAgICBwb2ludGVyRXZlbnRzOiAhIXdpbmRvdy5Qb2ludGVyRXZlbnQgJiYgKCdtYXhUb3VjaFBvaW50cycgaW4gd2luZG93Lm5hdmlnYXRvcikgJiYgd2luZG93Lm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+PSAwLFxuXG4gICAgb2JzZXJ2ZXI6IChmdW5jdGlvbiBjaGVja09ic2VydmVyKCkge1xuICAgICAgcmV0dXJuICgnTXV0YXRpb25PYnNlcnZlcicgaW4gd2luZG93IHx8ICdXZWJraXRNdXRhdGlvbk9ic2VydmVyJyBpbiB3aW5kb3cpO1xuICAgIH0oKSksXG5cbiAgICBwYXNzaXZlTGlzdGVuZXI6IChmdW5jdGlvbiBjaGVja1Bhc3NpdmVMaXN0ZW5lcigpIHtcbiAgICAgIGxldCBzdXBwb3J0c1Bhc3NpdmUgPSBmYWxzZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdwYXNzaXZlJywge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIHN1cHBvcnRzUGFzc2l2ZSA9IHRydWU7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0UGFzc2l2ZUxpc3RlbmVyJywgbnVsbCwgb3B0cyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIE5vIHN1cHBvcnRcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdXBwb3J0c1Bhc3NpdmU7XG4gICAgfSgpKSxcblxuICAgIGdlc3R1cmVzOiAoZnVuY3Rpb24gY2hlY2tHZXN0dXJlcygpIHtcbiAgICAgIHJldHVybiAnb25nZXN0dXJlc3RhcnQnIGluIHdpbmRvdztcbiAgICB9KCkpLFxuICB9O1xufSgpKTtcblxuZXhwb3J0IGRlZmF1bHQgU3VwcG9ydDtcbiIsImltcG9ydCBVdGlscyBmcm9tICcuL3V0aWxzJztcblxuY2xhc3MgU3dpcGVyQ2xhc3Mge1xuICBjb25zdHJ1Y3RvcihwYXJhbXMgPSB7fSkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHNlbGYucGFyYW1zID0gcGFyYW1zO1xuXG4gICAgLy8gRXZlbnRzXG4gICAgc2VsZi5ldmVudHNMaXN0ZW5lcnMgPSB7fTtcblxuICAgIGlmIChzZWxmLnBhcmFtcyAmJiBzZWxmLnBhcmFtcy5vbikge1xuICAgICAgT2JqZWN0LmtleXMoc2VsZi5wYXJhbXMub24pLmZvckVhY2goKGV2ZW50TmFtZSkgPT4ge1xuICAgICAgICBzZWxmLm9uKGV2ZW50TmFtZSwgc2VsZi5wYXJhbXMub25bZXZlbnROYW1lXSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvbihldmVudHMsIGhhbmRsZXIsIHByaW9yaXR5KSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gc2VsZjtcbiAgICBjb25zdCBtZXRob2QgPSBwcmlvcml0eSA/ICd1bnNoaWZ0JyA6ICdwdXNoJztcbiAgICBldmVudHMuc3BsaXQoJyAnKS5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgaWYgKCFzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0pIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XSA9IFtdO1xuICAgICAgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdW21ldGhvZF0oaGFuZGxlcik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHNlbGY7XG4gIH1cblxuICBvbmNlKGV2ZW50cywgaGFuZGxlciwgcHJpb3JpdHkpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHJldHVybiBzZWxmO1xuICAgIGZ1bmN0aW9uIG9uY2VIYW5kbGVyKC4uLmFyZ3MpIHtcbiAgICAgIHNlbGYub2ZmKGV2ZW50cywgb25jZUhhbmRsZXIpO1xuICAgICAgaWYgKG9uY2VIYW5kbGVyLmY3cHJveHkpIHtcbiAgICAgICAgZGVsZXRlIG9uY2VIYW5kbGVyLmY3cHJveHk7XG4gICAgICB9XG4gICAgICBoYW5kbGVyLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgIH1cbiAgICBvbmNlSGFuZGxlci5mN3Byb3h5ID0gaGFuZGxlcjtcbiAgICByZXR1cm4gc2VsZi5vbihldmVudHMsIG9uY2VIYW5kbGVyLCBwcmlvcml0eSk7XG4gIH1cblxuICBvZmYoZXZlbnRzLCBoYW5kbGVyKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgaWYgKCFzZWxmLmV2ZW50c0xpc3RlbmVycykgcmV0dXJuIHNlbGY7XG4gICAgZXZlbnRzLnNwbGl0KCcgJykuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdID0gW107XG4gICAgICB9IGVsc2UgaWYgKHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XSAmJiBzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0ubGVuZ3RoKSB7XG4gICAgICAgIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XS5mb3JFYWNoKChldmVudEhhbmRsZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50SGFuZGxlciA9PT0gaGFuZGxlciB8fCAoZXZlbnRIYW5kbGVyLmY3cHJveHkgJiYgZXZlbnRIYW5kbGVyLmY3cHJveHkgPT09IGhhbmRsZXIpKSB7XG4gICAgICAgICAgICBzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzZWxmO1xuICB9XG5cbiAgZW1pdCguLi5hcmdzKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgaWYgKCFzZWxmLmV2ZW50c0xpc3RlbmVycykgcmV0dXJuIHNlbGY7XG4gICAgbGV0IGV2ZW50cztcbiAgICBsZXQgZGF0YTtcbiAgICBsZXQgY29udGV4dDtcbiAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnIHx8IEFycmF5LmlzQXJyYXkoYXJnc1swXSkpIHtcbiAgICAgIGV2ZW50cyA9IGFyZ3NbMF07XG4gICAgICBkYXRhID0gYXJncy5zbGljZSgxLCBhcmdzLmxlbmd0aCk7XG4gICAgICBjb250ZXh0ID0gc2VsZjtcbiAgICB9IGVsc2Uge1xuICAgICAgZXZlbnRzID0gYXJnc1swXS5ldmVudHM7XG4gICAgICBkYXRhID0gYXJnc1swXS5kYXRhO1xuICAgICAgY29udGV4dCA9IGFyZ3NbMF0uY29udGV4dCB8fCBzZWxmO1xuICAgIH1cbiAgICBjb25zdCBldmVudHNBcnJheSA9IEFycmF5LmlzQXJyYXkoZXZlbnRzKSA/IGV2ZW50cyA6IGV2ZW50cy5zcGxpdCgnICcpO1xuICAgIGV2ZW50c0FycmF5LmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoc2VsZi5ldmVudHNMaXN0ZW5lcnMgJiYgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJzID0gW107XG4gICAgICAgIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XS5mb3JFYWNoKChldmVudEhhbmRsZXIpID0+IHtcbiAgICAgICAgICBoYW5kbGVycy5wdXNoKGV2ZW50SGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgICAgICBoYW5kbGVycy5mb3JFYWNoKChldmVudEhhbmRsZXIpID0+IHtcbiAgICAgICAgICBldmVudEhhbmRsZXIuYXBwbHkoY29udGV4dCwgZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzZWxmO1xuICB9XG5cbiAgdXNlTW9kdWxlc1BhcmFtcyhpbnN0YW5jZVBhcmFtcykge1xuICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcztcbiAgICBpZiAoIWluc3RhbmNlLm1vZHVsZXMpIHJldHVybjtcbiAgICBPYmplY3Qua2V5cyhpbnN0YW5jZS5tb2R1bGVzKS5mb3JFYWNoKChtb2R1bGVOYW1lKSA9PiB7XG4gICAgICBjb25zdCBtb2R1bGUgPSBpbnN0YW5jZS5tb2R1bGVzW21vZHVsZU5hbWVdO1xuICAgICAgLy8gRXh0ZW5kIHBhcmFtc1xuICAgICAgaWYgKG1vZHVsZS5wYXJhbXMpIHtcbiAgICAgICAgVXRpbHMuZXh0ZW5kKGluc3RhbmNlUGFyYW1zLCBtb2R1bGUucGFyYW1zKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHVzZU1vZHVsZXMobW9kdWxlc1BhcmFtcyA9IHt9KSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzO1xuICAgIGlmICghaW5zdGFuY2UubW9kdWxlcykgcmV0dXJuO1xuICAgIE9iamVjdC5rZXlzKGluc3RhbmNlLm1vZHVsZXMpLmZvckVhY2goKG1vZHVsZU5hbWUpID0+IHtcbiAgICAgIGNvbnN0IG1vZHVsZSA9IGluc3RhbmNlLm1vZHVsZXNbbW9kdWxlTmFtZV07XG4gICAgICBjb25zdCBtb2R1bGVQYXJhbXMgPSBtb2R1bGVzUGFyYW1zW21vZHVsZU5hbWVdIHx8IHt9O1xuICAgICAgLy8gRXh0ZW5kIGluc3RhbmNlIG1ldGhvZHMgYW5kIHByb3BzXG4gICAgICBpZiAobW9kdWxlLmluc3RhbmNlKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKG1vZHVsZS5pbnN0YW5jZSkuZm9yRWFjaCgobW9kdWxlUHJvcE5hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCBtb2R1bGVQcm9wID0gbW9kdWxlLmluc3RhbmNlW21vZHVsZVByb3BOYW1lXTtcbiAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZVByb3AgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGluc3RhbmNlW21vZHVsZVByb3BOYW1lXSA9IG1vZHVsZVByb3AuYmluZChpbnN0YW5jZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluc3RhbmNlW21vZHVsZVByb3BOYW1lXSA9IG1vZHVsZVByb3A7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIEFkZCBldmVudCBsaXN0ZW5lcnNcbiAgICAgIGlmIChtb2R1bGUub24gJiYgaW5zdGFuY2Uub24pIHtcbiAgICAgICAgT2JqZWN0LmtleXMobW9kdWxlLm9uKS5mb3JFYWNoKChtb2R1bGVFdmVudE5hbWUpID0+IHtcbiAgICAgICAgICBpbnN0YW5jZS5vbihtb2R1bGVFdmVudE5hbWUsIG1vZHVsZS5vblttb2R1bGVFdmVudE5hbWVdKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIE1vZHVsZSBjcmVhdGUgY2FsbGJhY2tcbiAgICAgIGlmIChtb2R1bGUuY3JlYXRlKSB7XG4gICAgICAgIG1vZHVsZS5jcmVhdGUuYmluZChpbnN0YW5jZSkobW9kdWxlUGFyYW1zKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBzZXQgY29tcG9uZW50cyhjb21wb25lbnRzKSB7XG4gICAgY29uc3QgQ2xhc3MgPSB0aGlzO1xuICAgIGlmICghQ2xhc3MudXNlKSByZXR1cm47XG4gICAgQ2xhc3MudXNlKGNvbXBvbmVudHMpO1xuICB9XG5cbiAgc3RhdGljIGluc3RhbGxNb2R1bGUobW9kdWxlLCAuLi5wYXJhbXMpIHtcbiAgICBjb25zdCBDbGFzcyA9IHRoaXM7XG4gICAgaWYgKCFDbGFzcy5wcm90b3R5cGUubW9kdWxlcykgQ2xhc3MucHJvdG90eXBlLm1vZHVsZXMgPSB7fTtcbiAgICBjb25zdCBuYW1lID0gbW9kdWxlLm5hbWUgfHwgKGAke09iamVjdC5rZXlzKENsYXNzLnByb3RvdHlwZS5tb2R1bGVzKS5sZW5ndGh9XyR7VXRpbHMubm93KCl9YCk7XG4gICAgQ2xhc3MucHJvdG90eXBlLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGU7XG4gICAgLy8gUHJvdG90eXBlXG4gICAgaWYgKG1vZHVsZS5wcm90bykge1xuICAgICAgT2JqZWN0LmtleXMobW9kdWxlLnByb3RvKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgQ2xhc3MucHJvdG90eXBlW2tleV0gPSBtb2R1bGUucHJvdG9ba2V5XTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBDbGFzc1xuICAgIGlmIChtb2R1bGUuc3RhdGljKSB7XG4gICAgICBPYmplY3Qua2V5cyhtb2R1bGUuc3RhdGljKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgQ2xhc3Nba2V5XSA9IG1vZHVsZS5zdGF0aWNba2V5XTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBDYWxsYmFja1xuICAgIGlmIChtb2R1bGUuaW5zdGFsbCkge1xuICAgICAgbW9kdWxlLmluc3RhbGwuYXBwbHkoQ2xhc3MsIHBhcmFtcyk7XG4gICAgfVxuICAgIHJldHVybiBDbGFzcztcbiAgfVxuXG4gIHN0YXRpYyB1c2UobW9kdWxlLCAuLi5wYXJhbXMpIHtcbiAgICBjb25zdCBDbGFzcyA9IHRoaXM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobW9kdWxlKSkge1xuICAgICAgbW9kdWxlLmZvckVhY2goKG0pID0+IENsYXNzLmluc3RhbGxNb2R1bGUobSkpO1xuICAgICAgcmV0dXJuIENsYXNzO1xuICAgIH1cbiAgICByZXR1cm4gQ2xhc3MuaW5zdGFsbE1vZHVsZShtb2R1bGUsIC4uLnBhcmFtcyk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3dpcGVyQ2xhc3M7XG4iLCJpbXBvcnQgVXRpbHMgZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGxldCB3aWR0aDtcbiAgbGV0IGhlaWdodDtcbiAgY29uc3QgJGVsID0gc3dpcGVyLiRlbDtcbiAgaWYgKHR5cGVvZiBzd2lwZXIucGFyYW1zLndpZHRoICE9PSAndW5kZWZpbmVkJykge1xuICAgIHdpZHRoID0gc3dpcGVyLnBhcmFtcy53aWR0aDtcbiAgfSBlbHNlIHtcbiAgICB3aWR0aCA9ICRlbFswXS5jbGllbnRXaWR0aDtcbiAgfVxuICBpZiAodHlwZW9mIHN3aXBlci5wYXJhbXMuaGVpZ2h0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGhlaWdodCA9IHN3aXBlci5wYXJhbXMuaGVpZ2h0O1xuICB9IGVsc2Uge1xuICAgIGhlaWdodCA9ICRlbFswXS5jbGllbnRIZWlnaHQ7XG4gIH1cbiAgaWYgKCh3aWR0aCA9PT0gMCAmJiBzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHx8IChoZWlnaHQgPT09IDAgJiYgc3dpcGVyLmlzVmVydGljYWwoKSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBTdWJ0cmFjdCBwYWRkaW5nc1xuICB3aWR0aCA9IHdpZHRoIC0gcGFyc2VJbnQoJGVsLmNzcygncGFkZGluZy1sZWZ0JyksIDEwKSAtIHBhcnNlSW50KCRlbC5jc3MoJ3BhZGRpbmctcmlnaHQnKSwgMTApO1xuICBoZWlnaHQgPSBoZWlnaHQgLSBwYXJzZUludCgkZWwuY3NzKCdwYWRkaW5nLXRvcCcpLCAxMCkgLSBwYXJzZUludCgkZWwuY3NzKCdwYWRkaW5nLWJvdHRvbScpLCAxMCk7XG5cbiAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBzaXplOiBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyB3aWR0aCA6IGhlaWdodCxcbiAgfSk7XG59XG4iLCJpbXBvcnQgeyB3aW5kb3cgfSBmcm9tICdzc3Itd2luZG93JztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi8uLi91dGlscy91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcblxuICBjb25zdCB7XG4gICAgJHdyYXBwZXJFbCwgc2l6ZTogc3dpcGVyU2l6ZSwgcnRsVHJhbnNsYXRlOiBydGwsIHdyb25nUlRMLFxuICB9ID0gc3dpcGVyO1xuICBjb25zdCBpc1ZpcnR1YWwgPSBzd2lwZXIudmlydHVhbCAmJiBwYXJhbXMudmlydHVhbC5lbmFibGVkO1xuICBjb25zdCBwcmV2aW91c1NsaWRlc0xlbmd0aCA9IGlzVmlydHVhbCA/IHN3aXBlci52aXJ0dWFsLnNsaWRlcy5sZW5ndGggOiBzd2lwZXIuc2xpZGVzLmxlbmd0aDtcbiAgY29uc3Qgc2xpZGVzID0gJHdyYXBwZXJFbC5jaGlsZHJlbihgLiR7c3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzfWApO1xuICBjb25zdCBzbGlkZXNMZW5ndGggPSBpc1ZpcnR1YWwgPyBzd2lwZXIudmlydHVhbC5zbGlkZXMubGVuZ3RoIDogc2xpZGVzLmxlbmd0aDtcbiAgbGV0IHNuYXBHcmlkID0gW107XG4gIGNvbnN0IHNsaWRlc0dyaWQgPSBbXTtcbiAgY29uc3Qgc2xpZGVzU2l6ZXNHcmlkID0gW107XG5cbiAgZnVuY3Rpb24gc2xpZGVzRm9yTWFyZ2luKHNsaWRlSW5kZXgpIHtcbiAgICBpZiAoIXBhcmFtcy5jc3NNb2RlKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoc2xpZGVJbmRleCA9PT0gc2xpZGVzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBsZXQgb2Zmc2V0QmVmb3JlID0gcGFyYW1zLnNsaWRlc09mZnNldEJlZm9yZTtcbiAgaWYgKHR5cGVvZiBvZmZzZXRCZWZvcmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvZmZzZXRCZWZvcmUgPSBwYXJhbXMuc2xpZGVzT2Zmc2V0QmVmb3JlLmNhbGwoc3dpcGVyKTtcbiAgfVxuXG4gIGxldCBvZmZzZXRBZnRlciA9IHBhcmFtcy5zbGlkZXNPZmZzZXRBZnRlcjtcbiAgaWYgKHR5cGVvZiBvZmZzZXRBZnRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG9mZnNldEFmdGVyID0gcGFyYW1zLnNsaWRlc09mZnNldEFmdGVyLmNhbGwoc3dpcGVyKTtcbiAgfVxuXG4gIGNvbnN0IHByZXZpb3VzU25hcEdyaWRMZW5ndGggPSBzd2lwZXIuc25hcEdyaWQubGVuZ3RoO1xuICBjb25zdCBwcmV2aW91c1NsaWRlc0dyaWRMZW5ndGggPSBzd2lwZXIuc25hcEdyaWQubGVuZ3RoO1xuXG4gIGxldCBzcGFjZUJldHdlZW4gPSBwYXJhbXMuc3BhY2VCZXR3ZWVuO1xuICBsZXQgc2xpZGVQb3NpdGlvbiA9IC1vZmZzZXRCZWZvcmU7XG4gIGxldCBwcmV2U2xpZGVTaXplID0gMDtcbiAgbGV0IGluZGV4ID0gMDtcbiAgaWYgKHR5cGVvZiBzd2lwZXJTaXplID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAodHlwZW9mIHNwYWNlQmV0d2VlbiA9PT0gJ3N0cmluZycgJiYgc3BhY2VCZXR3ZWVuLmluZGV4T2YoJyUnKSA+PSAwKSB7XG4gICAgc3BhY2VCZXR3ZWVuID0gKHBhcnNlRmxvYXQoc3BhY2VCZXR3ZWVuLnJlcGxhY2UoJyUnLCAnJykpIC8gMTAwKSAqIHN3aXBlclNpemU7XG4gIH1cblxuICBzd2lwZXIudmlydHVhbFNpemUgPSAtc3BhY2VCZXR3ZWVuO1xuXG4gIC8vIHJlc2V0IG1hcmdpbnNcbiAgaWYgKHJ0bCkgc2xpZGVzLmNzcyh7IG1hcmdpbkxlZnQ6ICcnLCBtYXJnaW5Ub3A6ICcnIH0pO1xuICBlbHNlIHNsaWRlcy5jc3MoeyBtYXJnaW5SaWdodDogJycsIG1hcmdpbkJvdHRvbTogJycgfSk7XG5cbiAgbGV0IHNsaWRlc051bWJlckV2ZW5Ub1Jvd3M7XG4gIGlmIChwYXJhbXMuc2xpZGVzUGVyQ29sdW1uID4gMSkge1xuICAgIGlmIChNYXRoLmZsb29yKHNsaWRlc0xlbmd0aCAvIHBhcmFtcy5zbGlkZXNQZXJDb2x1bW4pID09PSBzbGlkZXNMZW5ndGggLyBzd2lwZXIucGFyYW1zLnNsaWRlc1BlckNvbHVtbikge1xuICAgICAgc2xpZGVzTnVtYmVyRXZlblRvUm93cyA9IHNsaWRlc0xlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgc2xpZGVzTnVtYmVyRXZlblRvUm93cyA9IE1hdGguY2VpbChzbGlkZXNMZW5ndGggLyBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uKSAqIHBhcmFtcy5zbGlkZXNQZXJDb2x1bW47XG4gICAgfVxuICAgIGlmIChwYXJhbXMuc2xpZGVzUGVyVmlldyAhPT0gJ2F1dG8nICYmIHBhcmFtcy5zbGlkZXNQZXJDb2x1bW5GaWxsID09PSAncm93Jykge1xuICAgICAgc2xpZGVzTnVtYmVyRXZlblRvUm93cyA9IE1hdGgubWF4KHNsaWRlc051bWJlckV2ZW5Ub1Jvd3MsIHBhcmFtcy5zbGlkZXNQZXJWaWV3ICogcGFyYW1zLnNsaWRlc1BlckNvbHVtbik7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2FsYyBzbGlkZXNcbiAgbGV0IHNsaWRlU2l6ZTtcbiAgY29uc3Qgc2xpZGVzUGVyQ29sdW1uID0gcGFyYW1zLnNsaWRlc1BlckNvbHVtbjtcbiAgY29uc3Qgc2xpZGVzUGVyUm93ID0gc2xpZGVzTnVtYmVyRXZlblRvUm93cyAvIHNsaWRlc1BlckNvbHVtbjtcbiAgY29uc3QgbnVtRnVsbENvbHVtbnMgPSBNYXRoLmZsb29yKHNsaWRlc0xlbmd0aCAvIHBhcmFtcy5zbGlkZXNQZXJDb2x1bW4pO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWRlc0xlbmd0aDsgaSArPSAxKSB7XG4gICAgc2xpZGVTaXplID0gMDtcbiAgICBjb25zdCBzbGlkZSA9IHNsaWRlcy5lcShpKTtcbiAgICBpZiAocGFyYW1zLnNsaWRlc1BlckNvbHVtbiA+IDEpIHtcbiAgICAgIC8vIFNldCBzbGlkZXMgb3JkZXJcbiAgICAgIGxldCBuZXdTbGlkZU9yZGVySW5kZXg7XG4gICAgICBsZXQgY29sdW1uO1xuICAgICAgbGV0IHJvdztcbiAgICAgIGlmIChwYXJhbXMuc2xpZGVzUGVyQ29sdW1uRmlsbCA9PT0gJ3JvdycgJiYgcGFyYW1zLnNsaWRlc1Blckdyb3VwID4gMSkge1xuICAgICAgICBjb25zdCBncm91cEluZGV4ID0gTWF0aC5mbG9vcihpIC8gKHBhcmFtcy5zbGlkZXNQZXJHcm91cCAqIHBhcmFtcy5zbGlkZXNQZXJDb2x1bW4pKTtcbiAgICAgICAgY29uc3Qgc2xpZGVJbmRleEluR3JvdXAgPSBpIC0gcGFyYW1zLnNsaWRlc1BlckNvbHVtbiAqIHBhcmFtcy5zbGlkZXNQZXJHcm91cCAqIGdyb3VwSW5kZXg7XG4gICAgICAgIGNvbnN0IGNvbHVtbnNJbkdyb3VwID0gZ3JvdXBJbmRleCA9PT0gMFxuICAgICAgICAgID8gcGFyYW1zLnNsaWRlc1Blckdyb3VwXG4gICAgICAgICAgOiBNYXRoLm1pbihNYXRoLmNlaWwoKHNsaWRlc0xlbmd0aCAtIGdyb3VwSW5kZXggKiBzbGlkZXNQZXJDb2x1bW4gKiBwYXJhbXMuc2xpZGVzUGVyR3JvdXApIC8gc2xpZGVzUGVyQ29sdW1uKSwgcGFyYW1zLnNsaWRlc1Blckdyb3VwKTtcbiAgICAgICAgcm93ID0gTWF0aC5mbG9vcihzbGlkZUluZGV4SW5Hcm91cCAvIGNvbHVtbnNJbkdyb3VwKTtcbiAgICAgICAgY29sdW1uID0gKHNsaWRlSW5kZXhJbkdyb3VwIC0gcm93ICogY29sdW1uc0luR3JvdXApICsgZ3JvdXBJbmRleCAqIHBhcmFtcy5zbGlkZXNQZXJHcm91cDtcblxuICAgICAgICBuZXdTbGlkZU9yZGVySW5kZXggPSBjb2x1bW4gKyAoKHJvdyAqIHNsaWRlc051bWJlckV2ZW5Ub1Jvd3MpIC8gc2xpZGVzUGVyQ29sdW1uKTtcbiAgICAgICAgc2xpZGVcbiAgICAgICAgICAuY3NzKHtcbiAgICAgICAgICAgICctd2Via2l0LWJveC1vcmRpbmFsLWdyb3VwJzogbmV3U2xpZGVPcmRlckluZGV4LFxuICAgICAgICAgICAgJy1tb3otYm94LW9yZGluYWwtZ3JvdXAnOiBuZXdTbGlkZU9yZGVySW5kZXgsXG4gICAgICAgICAgICAnLW1zLWZsZXgtb3JkZXInOiBuZXdTbGlkZU9yZGVySW5kZXgsXG4gICAgICAgICAgICAnLXdlYmtpdC1vcmRlcic6IG5ld1NsaWRlT3JkZXJJbmRleCxcbiAgICAgICAgICAgIG9yZGVyOiBuZXdTbGlkZU9yZGVySW5kZXgsXG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHBhcmFtcy5zbGlkZXNQZXJDb2x1bW5GaWxsID09PSAnY29sdW1uJykge1xuICAgICAgICBjb2x1bW4gPSBNYXRoLmZsb29yKGkgLyBzbGlkZXNQZXJDb2x1bW4pO1xuICAgICAgICByb3cgPSBpIC0gKGNvbHVtbiAqIHNsaWRlc1BlckNvbHVtbik7XG4gICAgICAgIGlmIChjb2x1bW4gPiBudW1GdWxsQ29sdW1ucyB8fCAoY29sdW1uID09PSBudW1GdWxsQ29sdW1ucyAmJiByb3cgPT09IHNsaWRlc1BlckNvbHVtbiAtIDEpKSB7XG4gICAgICAgICAgcm93ICs9IDE7XG4gICAgICAgICAgaWYgKHJvdyA+PSBzbGlkZXNQZXJDb2x1bW4pIHtcbiAgICAgICAgICAgIHJvdyA9IDA7XG4gICAgICAgICAgICBjb2x1bW4gKz0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvdyA9IE1hdGguZmxvb3IoaSAvIHNsaWRlc1BlclJvdyk7XG4gICAgICAgIGNvbHVtbiA9IGkgLSAocm93ICogc2xpZGVzUGVyUm93KTtcbiAgICAgIH1cbiAgICAgIHNsaWRlLmNzcyhcbiAgICAgICAgYG1hcmdpbi0ke3N3aXBlci5pc0hvcml6b250YWwoKSA/ICd0b3AnIDogJ2xlZnQnfWAsXG4gICAgICAgIChyb3cgIT09IDAgJiYgcGFyYW1zLnNwYWNlQmV0d2VlbikgJiYgKGAke3BhcmFtcy5zcGFjZUJldHdlZW59cHhgKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHNsaWRlLmNzcygnZGlzcGxheScpID09PSAnbm9uZScpIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAocGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJykge1xuICAgICAgY29uc3Qgc2xpZGVTdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzbGlkZVswXSwgbnVsbCk7XG4gICAgICBjb25zdCBjdXJyZW50VHJhbnNmb3JtID0gc2xpZGVbMF0uc3R5bGUudHJhbnNmb3JtO1xuICAgICAgY29uc3QgY3VycmVudFdlYktpdFRyYW5zZm9ybSA9IHNsaWRlWzBdLnN0eWxlLndlYmtpdFRyYW5zZm9ybTtcbiAgICAgIGlmIChjdXJyZW50VHJhbnNmb3JtKSB7XG4gICAgICAgIHNsaWRlWzBdLnN0eWxlLnRyYW5zZm9ybSA9ICdub25lJztcbiAgICAgIH1cbiAgICAgIGlmIChjdXJyZW50V2ViS2l0VHJhbnNmb3JtKSB7XG4gICAgICAgIHNsaWRlWzBdLnN0eWxlLndlYmtpdFRyYW5zZm9ybSA9ICdub25lJztcbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSB7XG4gICAgICAgIHNsaWRlU2l6ZSA9IHN3aXBlci5pc0hvcml6b250YWwoKVxuICAgICAgICAgID8gc2xpZGUub3V0ZXJXaWR0aCh0cnVlKVxuICAgICAgICAgIDogc2xpZGUub3V0ZXJIZWlnaHQodHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgaWYgKHN3aXBlci5pc0hvcml6b250YWwoKSkge1xuICAgICAgICAgIGNvbnN0IHdpZHRoID0gcGFyc2VGbG9hdChzbGlkZVN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCd3aWR0aCcpKTtcbiAgICAgICAgICBjb25zdCBwYWRkaW5nTGVmdCA9IHBhcnNlRmxvYXQoc2xpZGVTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1sZWZ0JykpO1xuICAgICAgICAgIGNvbnN0IHBhZGRpbmdSaWdodCA9IHBhcnNlRmxvYXQoc2xpZGVTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1yaWdodCcpKTtcbiAgICAgICAgICBjb25zdCBtYXJnaW5MZWZ0ID0gcGFyc2VGbG9hdChzbGlkZVN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdtYXJnaW4tbGVmdCcpKTtcbiAgICAgICAgICBjb25zdCBtYXJnaW5SaWdodCA9IHBhcnNlRmxvYXQoc2xpZGVTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgnbWFyZ2luLXJpZ2h0JykpO1xuICAgICAgICAgIGNvbnN0IGJveFNpemluZyA9IHNsaWRlU3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ2JveC1zaXppbmcnKTtcbiAgICAgICAgICBpZiAoYm94U2l6aW5nICYmIGJveFNpemluZyA9PT0gJ2JvcmRlci1ib3gnKSB7XG4gICAgICAgICAgICBzbGlkZVNpemUgPSB3aWR0aCArIG1hcmdpbkxlZnQgKyBtYXJnaW5SaWdodDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2xpZGVTaXplID0gd2lkdGggKyBwYWRkaW5nTGVmdCArIHBhZGRpbmdSaWdodCArIG1hcmdpbkxlZnQgKyBtYXJnaW5SaWdodDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgaGVpZ2h0ID0gcGFyc2VGbG9hdChzbGlkZVN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdoZWlnaHQnKSk7XG4gICAgICAgICAgY29uc3QgcGFkZGluZ1RvcCA9IHBhcnNlRmxvYXQoc2xpZGVTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy10b3AnKSk7XG4gICAgICAgICAgY29uc3QgcGFkZGluZ0JvdHRvbSA9IHBhcnNlRmxvYXQoc2xpZGVTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1ib3R0b20nKSk7XG4gICAgICAgICAgY29uc3QgbWFyZ2luVG9wID0gcGFyc2VGbG9hdChzbGlkZVN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdtYXJnaW4tdG9wJykpO1xuICAgICAgICAgIGNvbnN0IG1hcmdpbkJvdHRvbSA9IHBhcnNlRmxvYXQoc2xpZGVTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgnbWFyZ2luLWJvdHRvbScpKTtcbiAgICAgICAgICBjb25zdCBib3hTaXppbmcgPSBzbGlkZVN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3gtc2l6aW5nJyk7XG4gICAgICAgICAgaWYgKGJveFNpemluZyAmJiBib3hTaXppbmcgPT09ICdib3JkZXItYm94Jykge1xuICAgICAgICAgICAgc2xpZGVTaXplID0gaGVpZ2h0ICsgbWFyZ2luVG9wICsgbWFyZ2luQm90dG9tO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzbGlkZVNpemUgPSBoZWlnaHQgKyBwYWRkaW5nVG9wICsgcGFkZGluZ0JvdHRvbSArIG1hcmdpblRvcCArIG1hcmdpbkJvdHRvbTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjdXJyZW50VHJhbnNmb3JtKSB7XG4gICAgICAgIHNsaWRlWzBdLnN0eWxlLnRyYW5zZm9ybSA9IGN1cnJlbnRUcmFuc2Zvcm07XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudFdlYktpdFRyYW5zZm9ybSkge1xuICAgICAgICBzbGlkZVswXS5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSBjdXJyZW50V2ViS2l0VHJhbnNmb3JtO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcy5yb3VuZExlbmd0aHMpIHNsaWRlU2l6ZSA9IE1hdGguZmxvb3Ioc2xpZGVTaXplKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2xpZGVTaXplID0gKHN3aXBlclNpemUgLSAoKHBhcmFtcy5zbGlkZXNQZXJWaWV3IC0gMSkgKiBzcGFjZUJldHdlZW4pKSAvIHBhcmFtcy5zbGlkZXNQZXJWaWV3O1xuICAgICAgaWYgKHBhcmFtcy5yb3VuZExlbmd0aHMpIHNsaWRlU2l6ZSA9IE1hdGguZmxvb3Ioc2xpZGVTaXplKTtcblxuICAgICAgaWYgKHNsaWRlc1tpXSkge1xuICAgICAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgICAgc2xpZGVzW2ldLnN0eWxlLndpZHRoID0gYCR7c2xpZGVTaXplfXB4YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzbGlkZXNbaV0uc3R5bGUuaGVpZ2h0ID0gYCR7c2xpZGVTaXplfXB4YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2xpZGVzW2ldKSB7XG4gICAgICBzbGlkZXNbaV0uc3dpcGVyU2xpZGVTaXplID0gc2xpZGVTaXplO1xuICAgIH1cbiAgICBzbGlkZXNTaXplc0dyaWQucHVzaChzbGlkZVNpemUpO1xuXG5cbiAgICBpZiAocGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICBzbGlkZVBvc2l0aW9uID0gc2xpZGVQb3NpdGlvbiArIChzbGlkZVNpemUgLyAyKSArIChwcmV2U2xpZGVTaXplIC8gMikgKyBzcGFjZUJldHdlZW47XG4gICAgICBpZiAocHJldlNsaWRlU2l6ZSA9PT0gMCAmJiBpICE9PSAwKSBzbGlkZVBvc2l0aW9uID0gc2xpZGVQb3NpdGlvbiAtIChzd2lwZXJTaXplIC8gMikgLSBzcGFjZUJldHdlZW47XG4gICAgICBpZiAoaSA9PT0gMCkgc2xpZGVQb3NpdGlvbiA9IHNsaWRlUG9zaXRpb24gLSAoc3dpcGVyU2l6ZSAvIDIpIC0gc3BhY2VCZXR3ZWVuO1xuICAgICAgaWYgKE1hdGguYWJzKHNsaWRlUG9zaXRpb24pIDwgMSAvIDEwMDApIHNsaWRlUG9zaXRpb24gPSAwO1xuICAgICAgaWYgKHBhcmFtcy5yb3VuZExlbmd0aHMpIHNsaWRlUG9zaXRpb24gPSBNYXRoLmZsb29yKHNsaWRlUG9zaXRpb24pO1xuICAgICAgaWYgKChpbmRleCkgJSBwYXJhbXMuc2xpZGVzUGVyR3JvdXAgPT09IDApIHNuYXBHcmlkLnB1c2goc2xpZGVQb3NpdGlvbik7XG4gICAgICBzbGlkZXNHcmlkLnB1c2goc2xpZGVQb3NpdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSBzbGlkZVBvc2l0aW9uID0gTWF0aC5mbG9vcihzbGlkZVBvc2l0aW9uKTtcbiAgICAgIGlmICgoaW5kZXggLSBNYXRoLm1pbihzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwU2tpcCwgaW5kZXgpKSAlIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXAgPT09IDApIHNuYXBHcmlkLnB1c2goc2xpZGVQb3NpdGlvbik7XG4gICAgICBzbGlkZXNHcmlkLnB1c2goc2xpZGVQb3NpdGlvbik7XG4gICAgICBzbGlkZVBvc2l0aW9uID0gc2xpZGVQb3NpdGlvbiArIHNsaWRlU2l6ZSArIHNwYWNlQmV0d2VlbjtcbiAgICB9XG5cbiAgICBzd2lwZXIudmlydHVhbFNpemUgKz0gc2xpZGVTaXplICsgc3BhY2VCZXR3ZWVuO1xuXG4gICAgcHJldlNsaWRlU2l6ZSA9IHNsaWRlU2l6ZTtcblxuICAgIGluZGV4ICs9IDE7XG4gIH1cbiAgc3dpcGVyLnZpcnR1YWxTaXplID0gTWF0aC5tYXgoc3dpcGVyLnZpcnR1YWxTaXplLCBzd2lwZXJTaXplKSArIG9mZnNldEFmdGVyO1xuICBsZXQgbmV3U2xpZGVzR3JpZDtcblxuICBpZiAoXG4gICAgcnRsICYmIHdyb25nUlRMICYmIChwYXJhbXMuZWZmZWN0ID09PSAnc2xpZGUnIHx8IHBhcmFtcy5lZmZlY3QgPT09ICdjb3ZlcmZsb3cnKSkge1xuICAgICR3cmFwcGVyRWwuY3NzKHsgd2lkdGg6IGAke3N3aXBlci52aXJ0dWFsU2l6ZSArIHBhcmFtcy5zcGFjZUJldHdlZW59cHhgIH0pO1xuICB9XG4gIGlmIChwYXJhbXMuc2V0V3JhcHBlclNpemUpIHtcbiAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSAkd3JhcHBlckVsLmNzcyh7IHdpZHRoOiBgJHtzd2lwZXIudmlydHVhbFNpemUgKyBwYXJhbXMuc3BhY2VCZXR3ZWVufXB4YCB9KTtcbiAgICBlbHNlICR3cmFwcGVyRWwuY3NzKHsgaGVpZ2h0OiBgJHtzd2lwZXIudmlydHVhbFNpemUgKyBwYXJhbXMuc3BhY2VCZXR3ZWVufXB4YCB9KTtcbiAgfVxuXG4gIGlmIChwYXJhbXMuc2xpZGVzUGVyQ29sdW1uID4gMSkge1xuICAgIHN3aXBlci52aXJ0dWFsU2l6ZSA9IChzbGlkZVNpemUgKyBwYXJhbXMuc3BhY2VCZXR3ZWVuKSAqIHNsaWRlc051bWJlckV2ZW5Ub1Jvd3M7XG4gICAgc3dpcGVyLnZpcnR1YWxTaXplID0gTWF0aC5jZWlsKHN3aXBlci52aXJ0dWFsU2l6ZSAvIHBhcmFtcy5zbGlkZXNQZXJDb2x1bW4pIC0gcGFyYW1zLnNwYWNlQmV0d2VlbjtcbiAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSAkd3JhcHBlckVsLmNzcyh7IHdpZHRoOiBgJHtzd2lwZXIudmlydHVhbFNpemUgKyBwYXJhbXMuc3BhY2VCZXR3ZWVufXB4YCB9KTtcbiAgICBlbHNlICR3cmFwcGVyRWwuY3NzKHsgaGVpZ2h0OiBgJHtzd2lwZXIudmlydHVhbFNpemUgKyBwYXJhbXMuc3BhY2VCZXR3ZWVufXB4YCB9KTtcbiAgICBpZiAocGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICBuZXdTbGlkZXNHcmlkID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNuYXBHcmlkLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGxldCBzbGlkZXNHcmlkSXRlbSA9IHNuYXBHcmlkW2ldO1xuICAgICAgICBpZiAocGFyYW1zLnJvdW5kTGVuZ3Rocykgc2xpZGVzR3JpZEl0ZW0gPSBNYXRoLmZsb29yKHNsaWRlc0dyaWRJdGVtKTtcbiAgICAgICAgaWYgKHNuYXBHcmlkW2ldIDwgc3dpcGVyLnZpcnR1YWxTaXplICsgc25hcEdyaWRbMF0pIG5ld1NsaWRlc0dyaWQucHVzaChzbGlkZXNHcmlkSXRlbSk7XG4gICAgICB9XG4gICAgICBzbmFwR3JpZCA9IG5ld1NsaWRlc0dyaWQ7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVtb3ZlIGxhc3QgZ3JpZCBlbGVtZW50cyBkZXBlbmRpbmcgb24gd2lkdGhcbiAgaWYgKCFwYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICBuZXdTbGlkZXNHcmlkID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbmFwR3JpZC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgbGV0IHNsaWRlc0dyaWRJdGVtID0gc25hcEdyaWRbaV07XG4gICAgICBpZiAocGFyYW1zLnJvdW5kTGVuZ3Rocykgc2xpZGVzR3JpZEl0ZW0gPSBNYXRoLmZsb29yKHNsaWRlc0dyaWRJdGVtKTtcbiAgICAgIGlmIChzbmFwR3JpZFtpXSA8PSBzd2lwZXIudmlydHVhbFNpemUgLSBzd2lwZXJTaXplKSB7XG4gICAgICAgIG5ld1NsaWRlc0dyaWQucHVzaChzbGlkZXNHcmlkSXRlbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHNuYXBHcmlkID0gbmV3U2xpZGVzR3JpZDtcbiAgICBpZiAoTWF0aC5mbG9vcihzd2lwZXIudmlydHVhbFNpemUgLSBzd2lwZXJTaXplKSAtIE1hdGguZmxvb3Ioc25hcEdyaWRbc25hcEdyaWQubGVuZ3RoIC0gMV0pID4gMSkge1xuICAgICAgc25hcEdyaWQucHVzaChzd2lwZXIudmlydHVhbFNpemUgLSBzd2lwZXJTaXplKTtcbiAgICB9XG4gIH1cbiAgaWYgKHNuYXBHcmlkLmxlbmd0aCA9PT0gMCkgc25hcEdyaWQgPSBbMF07XG5cbiAgaWYgKHBhcmFtcy5zcGFjZUJldHdlZW4gIT09IDApIHtcbiAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICBpZiAocnRsKSBzbGlkZXMuZmlsdGVyKHNsaWRlc0Zvck1hcmdpbikuY3NzKHsgbWFyZ2luTGVmdDogYCR7c3BhY2VCZXR3ZWVufXB4YCB9KTtcbiAgICAgIGVsc2Ugc2xpZGVzLmZpbHRlcihzbGlkZXNGb3JNYXJnaW4pLmNzcyh7IG1hcmdpblJpZ2h0OiBgJHtzcGFjZUJldHdlZW59cHhgIH0pO1xuICAgIH0gZWxzZSBzbGlkZXMuZmlsdGVyKHNsaWRlc0Zvck1hcmdpbikuY3NzKHsgbWFyZ2luQm90dG9tOiBgJHtzcGFjZUJldHdlZW59cHhgIH0pO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5jZW50ZXJlZFNsaWRlcyAmJiBwYXJhbXMuY2VudGVyZWRTbGlkZXNCb3VuZHMpIHtcbiAgICBsZXQgYWxsU2xpZGVzU2l6ZSA9IDA7XG4gICAgc2xpZGVzU2l6ZXNHcmlkLmZvckVhY2goKHNsaWRlU2l6ZVZhbHVlKSA9PiB7XG4gICAgICBhbGxTbGlkZXNTaXplICs9IHNsaWRlU2l6ZVZhbHVlICsgKHBhcmFtcy5zcGFjZUJldHdlZW4gPyBwYXJhbXMuc3BhY2VCZXR3ZWVuIDogMCk7XG4gICAgfSk7XG4gICAgYWxsU2xpZGVzU2l6ZSAtPSBwYXJhbXMuc3BhY2VCZXR3ZWVuO1xuICAgIGNvbnN0IG1heFNuYXAgPSBhbGxTbGlkZXNTaXplIC0gc3dpcGVyU2l6ZTtcbiAgICBzbmFwR3JpZCA9IHNuYXBHcmlkLm1hcCgoc25hcCkgPT4ge1xuICAgICAgaWYgKHNuYXAgPCAwKSByZXR1cm4gLW9mZnNldEJlZm9yZTtcbiAgICAgIGlmIChzbmFwID4gbWF4U25hcCkgcmV0dXJuIG1heFNuYXAgKyBvZmZzZXRBZnRlcjtcbiAgICAgIHJldHVybiBzbmFwO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5jZW50ZXJJbnN1ZmZpY2llbnRTbGlkZXMpIHtcbiAgICBsZXQgYWxsU2xpZGVzU2l6ZSA9IDA7XG4gICAgc2xpZGVzU2l6ZXNHcmlkLmZvckVhY2goKHNsaWRlU2l6ZVZhbHVlKSA9PiB7XG4gICAgICBhbGxTbGlkZXNTaXplICs9IHNsaWRlU2l6ZVZhbHVlICsgKHBhcmFtcy5zcGFjZUJldHdlZW4gPyBwYXJhbXMuc3BhY2VCZXR3ZWVuIDogMCk7XG4gICAgfSk7XG4gICAgYWxsU2xpZGVzU2l6ZSAtPSBwYXJhbXMuc3BhY2VCZXR3ZWVuO1xuICAgIGlmIChhbGxTbGlkZXNTaXplIDwgc3dpcGVyU2l6ZSkge1xuICAgICAgY29uc3QgYWxsU2xpZGVzT2Zmc2V0ID0gKHN3aXBlclNpemUgLSBhbGxTbGlkZXNTaXplKSAvIDI7XG4gICAgICBzbmFwR3JpZC5mb3JFYWNoKChzbmFwLCBzbmFwSW5kZXgpID0+IHtcbiAgICAgICAgc25hcEdyaWRbc25hcEluZGV4XSA9IHNuYXAgLSBhbGxTbGlkZXNPZmZzZXQ7XG4gICAgICB9KTtcbiAgICAgIHNsaWRlc0dyaWQuZm9yRWFjaCgoc25hcCwgc25hcEluZGV4KSA9PiB7XG4gICAgICAgIHNsaWRlc0dyaWRbc25hcEluZGV4XSA9IHNuYXAgKyBhbGxTbGlkZXNPZmZzZXQ7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgc2xpZGVzLFxuICAgIHNuYXBHcmlkLFxuICAgIHNsaWRlc0dyaWQsXG4gICAgc2xpZGVzU2l6ZXNHcmlkLFxuICB9KTtcblxuICBpZiAoc2xpZGVzTGVuZ3RoICE9PSBwcmV2aW91c1NsaWRlc0xlbmd0aCkge1xuICAgIHN3aXBlci5lbWl0KCdzbGlkZXNMZW5ndGhDaGFuZ2UnKTtcbiAgfVxuICBpZiAoc25hcEdyaWQubGVuZ3RoICE9PSBwcmV2aW91c1NuYXBHcmlkTGVuZ3RoKSB7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMud2F0Y2hPdmVyZmxvdykgc3dpcGVyLmNoZWNrT3ZlcmZsb3coKTtcbiAgICBzd2lwZXIuZW1pdCgnc25hcEdyaWRMZW5ndGhDaGFuZ2UnKTtcbiAgfVxuICBpZiAoc2xpZGVzR3JpZC5sZW5ndGggIT09IHByZXZpb3VzU2xpZGVzR3JpZExlbmd0aCkge1xuICAgIHN3aXBlci5lbWl0KCdzbGlkZXNHcmlkTGVuZ3RoQ2hhbmdlJyk7XG4gIH1cblxuICBpZiAocGFyYW1zLndhdGNoU2xpZGVzUHJvZ3Jlc3MgfHwgcGFyYW1zLndhdGNoU2xpZGVzVmlzaWJpbGl0eSkge1xuICAgIHN3aXBlci51cGRhdGVTbGlkZXNPZmZzZXQoKTtcbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHNwZWVkKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IGFjdGl2ZVNsaWRlcyA9IFtdO1xuICBsZXQgbmV3SGVpZ2h0ID0gMDtcbiAgbGV0IGk7XG4gIGlmICh0eXBlb2Ygc3BlZWQgPT09ICdudW1iZXInKSB7XG4gICAgc3dpcGVyLnNldFRyYW5zaXRpb24oc3BlZWQpO1xuICB9IGVsc2UgaWYgKHNwZWVkID09PSB0cnVlKSB7XG4gICAgc3dpcGVyLnNldFRyYW5zaXRpb24oc3dpcGVyLnBhcmFtcy5zcGVlZCk7XG4gIH1cbiAgLy8gRmluZCBzbGlkZXMgY3VycmVudGx5IGluIHZpZXdcbiAgaWYgKHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldyAhPT0gJ2F1dG8nICYmIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldyA+IDEpIHtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgc3dpcGVyLnZpc2libGVTbGlkZXMuZWFjaCgoaW5kZXgsIHNsaWRlKSA9PiB7XG4gICAgICAgIGFjdGl2ZVNsaWRlcy5wdXNoKHNsaWRlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgTWF0aC5jZWlsKHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldyk7IGkgKz0gMSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleCArIGk7XG4gICAgICAgIGlmIChpbmRleCA+IHN3aXBlci5zbGlkZXMubGVuZ3RoKSBicmVhaztcbiAgICAgICAgYWN0aXZlU2xpZGVzLnB1c2goc3dpcGVyLnNsaWRlcy5lcShpbmRleClbMF0pO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBhY3RpdmVTbGlkZXMucHVzaChzd2lwZXIuc2xpZGVzLmVxKHN3aXBlci5hY3RpdmVJbmRleClbMF0pO1xuICB9XG5cbiAgLy8gRmluZCBuZXcgaGVpZ2h0IGZyb20gaGlnaGVzdCBzbGlkZSBpbiB2aWV3XG4gIGZvciAoaSA9IDA7IGkgPCBhY3RpdmVTbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAodHlwZW9mIGFjdGl2ZVNsaWRlc1tpXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnN0IGhlaWdodCA9IGFjdGl2ZVNsaWRlc1tpXS5vZmZzZXRIZWlnaHQ7XG4gICAgICBuZXdIZWlnaHQgPSBoZWlnaHQgPiBuZXdIZWlnaHQgPyBoZWlnaHQgOiBuZXdIZWlnaHQ7XG4gICAgfVxuICB9XG5cbiAgLy8gVXBkYXRlIEhlaWdodFxuICBpZiAobmV3SGVpZ2h0KSBzd2lwZXIuJHdyYXBwZXJFbC5jc3MoJ2hlaWdodCcsIGAke25ld0hlaWdodH1weGApO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHNsaWRlc1tpXS5zd2lwZXJTbGlkZU9mZnNldCA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/IHNsaWRlc1tpXS5vZmZzZXRMZWZ0IDogc2xpZGVzW2ldLm9mZnNldFRvcDtcbiAgfVxufVxuIiwiaW1wb3J0ICQgZnJvbSAnLi4vLi4vLi4vdXRpbHMvZG9tJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHRyYW5zbGF0ZSA9ICh0aGlzICYmIHRoaXMudHJhbnNsYXRlKSB8fCAwKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG5cbiAgY29uc3QgeyBzbGlkZXMsIHJ0bFRyYW5zbGF0ZTogcnRsIH0gPSBzd2lwZXI7XG5cbiAgaWYgKHNsaWRlcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgaWYgKHR5cGVvZiBzbGlkZXNbMF0uc3dpcGVyU2xpZGVPZmZzZXQgPT09ICd1bmRlZmluZWQnKSBzd2lwZXIudXBkYXRlU2xpZGVzT2Zmc2V0KCk7XG5cbiAgbGV0IG9mZnNldENlbnRlciA9IC10cmFuc2xhdGU7XG4gIGlmIChydGwpIG9mZnNldENlbnRlciA9IHRyYW5zbGF0ZTtcblxuICAvLyBWaXNpYmxlIFNsaWRlc1xuICBzbGlkZXMucmVtb3ZlQ2xhc3MocGFyYW1zLnNsaWRlVmlzaWJsZUNsYXNzKTtcblxuICBzd2lwZXIudmlzaWJsZVNsaWRlc0luZGV4ZXMgPSBbXTtcbiAgc3dpcGVyLnZpc2libGVTbGlkZXMgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGNvbnN0IHNsaWRlID0gc2xpZGVzW2ldO1xuICAgIGNvbnN0IHNsaWRlUHJvZ3Jlc3MgPSAoXG4gICAgICAob2Zmc2V0Q2VudGVyICsgKHBhcmFtcy5jZW50ZXJlZFNsaWRlcyA/IHN3aXBlci5taW5UcmFuc2xhdGUoKSA6IDApKSAtIHNsaWRlLnN3aXBlclNsaWRlT2Zmc2V0XG4gICAgKSAvIChzbGlkZS5zd2lwZXJTbGlkZVNpemUgKyBwYXJhbXMuc3BhY2VCZXR3ZWVuKTtcbiAgICBpZiAocGFyYW1zLndhdGNoU2xpZGVzVmlzaWJpbGl0eSB8fCAocGFyYW1zLmNlbnRlcmVkU2xpZGVzICYmIHBhcmFtcy5hdXRvSGVpZ2h0KSkge1xuICAgICAgY29uc3Qgc2xpZGVCZWZvcmUgPSAtKG9mZnNldENlbnRlciAtIHNsaWRlLnN3aXBlclNsaWRlT2Zmc2V0KTtcbiAgICAgIGNvbnN0IHNsaWRlQWZ0ZXIgPSBzbGlkZUJlZm9yZSArIHN3aXBlci5zbGlkZXNTaXplc0dyaWRbaV07XG4gICAgICBjb25zdCBpc1Zpc2libGUgPSAoc2xpZGVCZWZvcmUgPj0gMCAmJiBzbGlkZUJlZm9yZSA8IHN3aXBlci5zaXplIC0gMSlcbiAgICAgICAgICAgICAgICB8fCAoc2xpZGVBZnRlciA+IDEgJiYgc2xpZGVBZnRlciA8PSBzd2lwZXIuc2l6ZSlcbiAgICAgICAgICAgICAgICB8fCAoc2xpZGVCZWZvcmUgPD0gMCAmJiBzbGlkZUFmdGVyID49IHN3aXBlci5zaXplKTtcbiAgICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgICAgc3dpcGVyLnZpc2libGVTbGlkZXMucHVzaChzbGlkZSk7XG4gICAgICAgIHN3aXBlci52aXNpYmxlU2xpZGVzSW5kZXhlcy5wdXNoKGkpO1xuICAgICAgICBzbGlkZXMuZXEoaSkuYWRkQ2xhc3MocGFyYW1zLnNsaWRlVmlzaWJsZUNsYXNzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc2xpZGUucHJvZ3Jlc3MgPSBydGwgPyAtc2xpZGVQcm9ncmVzcyA6IHNsaWRlUHJvZ3Jlc3M7XG4gIH1cbiAgc3dpcGVyLnZpc2libGVTbGlkZXMgPSAkKHN3aXBlci52aXNpYmxlU2xpZGVzKTtcbn1cbiIsImltcG9ydCBVdGlscyBmcm9tICcuLi8uLi8uLi91dGlscy91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICh0cmFuc2xhdGUpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgaWYgKHR5cGVvZiB0cmFuc2xhdGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc3QgbXVsdGlwbGllciA9IHN3aXBlci5ydGxUcmFuc2xhdGUgPyAtMSA6IDE7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgdHJhbnNsYXRlID0gKHN3aXBlciAmJiBzd2lwZXIudHJhbnNsYXRlICYmIChzd2lwZXIudHJhbnNsYXRlICogbXVsdGlwbGllcikpIHx8IDA7XG4gIH1cbiAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgY29uc3QgdHJhbnNsYXRlc0RpZmYgPSBzd2lwZXIubWF4VHJhbnNsYXRlKCkgLSBzd2lwZXIubWluVHJhbnNsYXRlKCk7XG4gIGxldCB7IHByb2dyZXNzLCBpc0JlZ2lubmluZywgaXNFbmQgfSA9IHN3aXBlcjtcbiAgY29uc3Qgd2FzQmVnaW5uaW5nID0gaXNCZWdpbm5pbmc7XG4gIGNvbnN0IHdhc0VuZCA9IGlzRW5kO1xuICBpZiAodHJhbnNsYXRlc0RpZmYgPT09IDApIHtcbiAgICBwcm9ncmVzcyA9IDA7XG4gICAgaXNCZWdpbm5pbmcgPSB0cnVlO1xuICAgIGlzRW5kID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBwcm9ncmVzcyA9ICh0cmFuc2xhdGUgLSBzd2lwZXIubWluVHJhbnNsYXRlKCkpIC8gKHRyYW5zbGF0ZXNEaWZmKTtcbiAgICBpc0JlZ2lubmluZyA9IHByb2dyZXNzIDw9IDA7XG4gICAgaXNFbmQgPSBwcm9ncmVzcyA+PSAxO1xuICB9XG4gIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICBwcm9ncmVzcyxcbiAgICBpc0JlZ2lubmluZyxcbiAgICBpc0VuZCxcbiAgfSk7XG5cbiAgaWYgKHBhcmFtcy53YXRjaFNsaWRlc1Byb2dyZXNzIHx8IHBhcmFtcy53YXRjaFNsaWRlc1Zpc2liaWxpdHkgfHwgKHBhcmFtcy5jZW50ZXJlZFNsaWRlcyAmJiBwYXJhbXMuYXV0b0hlaWdodCkpIHN3aXBlci51cGRhdGVTbGlkZXNQcm9ncmVzcyh0cmFuc2xhdGUpO1xuXG4gIGlmIChpc0JlZ2lubmluZyAmJiAhd2FzQmVnaW5uaW5nKSB7XG4gICAgc3dpcGVyLmVtaXQoJ3JlYWNoQmVnaW5uaW5nIHRvRWRnZScpO1xuICB9XG4gIGlmIChpc0VuZCAmJiAhd2FzRW5kKSB7XG4gICAgc3dpcGVyLmVtaXQoJ3JlYWNoRW5kIHRvRWRnZScpO1xuICB9XG4gIGlmICgod2FzQmVnaW5uaW5nICYmICFpc0JlZ2lubmluZykgfHwgKHdhc0VuZCAmJiAhaXNFbmQpKSB7XG4gICAgc3dpcGVyLmVtaXQoJ2Zyb21FZGdlJyk7XG4gIH1cblxuICBzd2lwZXIuZW1pdCgncHJvZ3Jlc3MnLCBwcm9ncmVzcyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG5cbiAgY29uc3Qge1xuICAgIHNsaWRlcywgcGFyYW1zLCAkd3JhcHBlckVsLCBhY3RpdmVJbmRleCwgcmVhbEluZGV4LFxuICB9ID0gc3dpcGVyO1xuICBjb25zdCBpc1ZpcnR1YWwgPSBzd2lwZXIudmlydHVhbCAmJiBwYXJhbXMudmlydHVhbC5lbmFibGVkO1xuXG4gIHNsaWRlcy5yZW1vdmVDbGFzcyhgJHtwYXJhbXMuc2xpZGVBY3RpdmVDbGFzc30gJHtwYXJhbXMuc2xpZGVOZXh0Q2xhc3N9ICR7cGFyYW1zLnNsaWRlUHJldkNsYXNzfSAke3BhcmFtcy5zbGlkZUR1cGxpY2F0ZUFjdGl2ZUNsYXNzfSAke3BhcmFtcy5zbGlkZUR1cGxpY2F0ZU5leHRDbGFzc30gJHtwYXJhbXMuc2xpZGVEdXBsaWNhdGVQcmV2Q2xhc3N9YCk7XG5cbiAgbGV0IGFjdGl2ZVNsaWRlO1xuICBpZiAoaXNWaXJ0dWFsKSB7XG4gICAgYWN0aXZlU2xpZGUgPSBzd2lwZXIuJHdyYXBwZXJFbC5maW5kKGAuJHtwYXJhbXMuc2xpZGVDbGFzc31bZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XCIke2FjdGl2ZUluZGV4fVwiXWApO1xuICB9IGVsc2Uge1xuICAgIGFjdGl2ZVNsaWRlID0gc2xpZGVzLmVxKGFjdGl2ZUluZGV4KTtcbiAgfVxuXG4gIC8vIEFjdGl2ZSBjbGFzc2VzXG4gIGFjdGl2ZVNsaWRlLmFkZENsYXNzKHBhcmFtcy5zbGlkZUFjdGl2ZUNsYXNzKTtcblxuICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAvLyBEdXBsaWNhdGUgdG8gYWxsIGxvb3BlZCBzbGlkZXNcbiAgICBpZiAoYWN0aXZlU2xpZGUuaGFzQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKSB7XG4gICAgICAkd3JhcHBlckVsXG4gICAgICAgIC5jaGlsZHJlbihgLiR7cGFyYW1zLnNsaWRlQ2xhc3N9Om5vdCguJHtwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzc30pW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVwiJHtyZWFsSW5kZXh9XCJdYClcbiAgICAgICAgLmFkZENsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUFjdGl2ZUNsYXNzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJHdyYXBwZXJFbFxuICAgICAgICAuY2hpbGRyZW4oYC4ke3BhcmFtcy5zbGlkZUNsYXNzfS4ke3BhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzfVtkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cIiR7cmVhbEluZGV4fVwiXWApXG4gICAgICAgIC5hZGRDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVBY3RpdmVDbGFzcyk7XG4gICAgfVxuICB9XG4gIC8vIE5leHQgU2xpZGVcbiAgbGV0IG5leHRTbGlkZSA9IGFjdGl2ZVNsaWRlLm5leHRBbGwoYC4ke3BhcmFtcy5zbGlkZUNsYXNzfWApLmVxKDApLmFkZENsYXNzKHBhcmFtcy5zbGlkZU5leHRDbGFzcyk7XG4gIGlmIChwYXJhbXMubG9vcCAmJiBuZXh0U2xpZGUubGVuZ3RoID09PSAwKSB7XG4gICAgbmV4dFNsaWRlID0gc2xpZGVzLmVxKDApO1xuICAgIG5leHRTbGlkZS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVOZXh0Q2xhc3MpO1xuICB9XG4gIC8vIFByZXYgU2xpZGVcbiAgbGV0IHByZXZTbGlkZSA9IGFjdGl2ZVNsaWRlLnByZXZBbGwoYC4ke3BhcmFtcy5zbGlkZUNsYXNzfWApLmVxKDApLmFkZENsYXNzKHBhcmFtcy5zbGlkZVByZXZDbGFzcyk7XG4gIGlmIChwYXJhbXMubG9vcCAmJiBwcmV2U2xpZGUubGVuZ3RoID09PSAwKSB7XG4gICAgcHJldlNsaWRlID0gc2xpZGVzLmVxKC0xKTtcbiAgICBwcmV2U2xpZGUuYWRkQ2xhc3MocGFyYW1zLnNsaWRlUHJldkNsYXNzKTtcbiAgfVxuICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAvLyBEdXBsaWNhdGUgdG8gYWxsIGxvb3BlZCBzbGlkZXNcbiAgICBpZiAobmV4dFNsaWRlLmhhc0NsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSkge1xuICAgICAgJHdyYXBwZXJFbFxuICAgICAgICAuY2hpbGRyZW4oYC4ke3BhcmFtcy5zbGlkZUNsYXNzfTpub3QoLiR7cGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3N9KVtkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cIiR7bmV4dFNsaWRlLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4Jyl9XCJdYClcbiAgICAgICAgLmFkZENsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZU5leHRDbGFzcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICR3cmFwcGVyRWxcbiAgICAgICAgLmNoaWxkcmVuKGAuJHtwYXJhbXMuc2xpZGVDbGFzc30uJHtwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzc31bZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XCIke25leHRTbGlkZS5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpfVwiXWApXG4gICAgICAgIC5hZGRDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVOZXh0Q2xhc3MpO1xuICAgIH1cbiAgICBpZiAocHJldlNsaWRlLmhhc0NsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSkge1xuICAgICAgJHdyYXBwZXJFbFxuICAgICAgICAuY2hpbGRyZW4oYC4ke3BhcmFtcy5zbGlkZUNsYXNzfTpub3QoLiR7cGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3N9KVtkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cIiR7cHJldlNsaWRlLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4Jyl9XCJdYClcbiAgICAgICAgLmFkZENsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZVByZXZDbGFzcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICR3cmFwcGVyRWxcbiAgICAgICAgLmNoaWxkcmVuKGAuJHtwYXJhbXMuc2xpZGVDbGFzc30uJHtwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzc31bZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XCIke3ByZXZTbGlkZS5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpfVwiXWApXG4gICAgICAgIC5hZGRDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVQcmV2Q2xhc3MpO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uLy4uL3V0aWxzL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKG5ld0FjdGl2ZUluZGV4KSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHN3aXBlci5ydGxUcmFuc2xhdGUgPyBzd2lwZXIudHJhbnNsYXRlIDogLXN3aXBlci50cmFuc2xhdGU7XG4gIGNvbnN0IHtcbiAgICBzbGlkZXNHcmlkLCBzbmFwR3JpZCwgcGFyYW1zLCBhY3RpdmVJbmRleDogcHJldmlvdXNJbmRleCwgcmVhbEluZGV4OiBwcmV2aW91c1JlYWxJbmRleCwgc25hcEluZGV4OiBwcmV2aW91c1NuYXBJbmRleCxcbiAgfSA9IHN3aXBlcjtcbiAgbGV0IGFjdGl2ZUluZGV4ID0gbmV3QWN0aXZlSW5kZXg7XG4gIGxldCBzbmFwSW5kZXg7XG4gIGlmICh0eXBlb2YgYWN0aXZlSW5kZXggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbGlkZXNHcmlkLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAodHlwZW9mIHNsaWRlc0dyaWRbaSArIDFdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpZiAodHJhbnNsYXRlID49IHNsaWRlc0dyaWRbaV0gJiYgdHJhbnNsYXRlIDwgc2xpZGVzR3JpZFtpICsgMV0gLSAoKHNsaWRlc0dyaWRbaSArIDFdIC0gc2xpZGVzR3JpZFtpXSkgLyAyKSkge1xuICAgICAgICAgIGFjdGl2ZUluZGV4ID0gaTtcbiAgICAgICAgfSBlbHNlIGlmICh0cmFuc2xhdGUgPj0gc2xpZGVzR3JpZFtpXSAmJiB0cmFuc2xhdGUgPCBzbGlkZXNHcmlkW2kgKyAxXSkge1xuICAgICAgICAgIGFjdGl2ZUluZGV4ID0gaSArIDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHJhbnNsYXRlID49IHNsaWRlc0dyaWRbaV0pIHtcbiAgICAgICAgYWN0aXZlSW5kZXggPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBOb3JtYWxpemUgc2xpZGVJbmRleFxuICAgIGlmIChwYXJhbXMubm9ybWFsaXplU2xpZGVJbmRleCkge1xuICAgICAgaWYgKGFjdGl2ZUluZGV4IDwgMCB8fCB0eXBlb2YgYWN0aXZlSW5kZXggPT09ICd1bmRlZmluZWQnKSBhY3RpdmVJbmRleCA9IDA7XG4gICAgfVxuICB9XG4gIGlmIChzbmFwR3JpZC5pbmRleE9mKHRyYW5zbGF0ZSkgPj0gMCkge1xuICAgIHNuYXBJbmRleCA9IHNuYXBHcmlkLmluZGV4T2YodHJhbnNsYXRlKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBza2lwID0gTWF0aC5taW4ocGFyYW1zLnNsaWRlc1Blckdyb3VwU2tpcCwgYWN0aXZlSW5kZXgpO1xuICAgIHNuYXBJbmRleCA9IHNraXAgKyBNYXRoLmZsb29yKChhY3RpdmVJbmRleCAtIHNraXApIC8gcGFyYW1zLnNsaWRlc1Blckdyb3VwKTtcbiAgfVxuICBpZiAoc25hcEluZGV4ID49IHNuYXBHcmlkLmxlbmd0aCkgc25hcEluZGV4ID0gc25hcEdyaWQubGVuZ3RoIC0gMTtcbiAgaWYgKGFjdGl2ZUluZGV4ID09PSBwcmV2aW91c0luZGV4KSB7XG4gICAgaWYgKHNuYXBJbmRleCAhPT0gcHJldmlvdXNTbmFwSW5kZXgpIHtcbiAgICAgIHN3aXBlci5zbmFwSW5kZXggPSBzbmFwSW5kZXg7XG4gICAgICBzd2lwZXIuZW1pdCgnc25hcEluZGV4Q2hhbmdlJyk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEdldCByZWFsIGluZGV4XG4gIGNvbnN0IHJlYWxJbmRleCA9IHBhcnNlSW50KHN3aXBlci5zbGlkZXMuZXEoYWN0aXZlSW5kZXgpLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JykgfHwgYWN0aXZlSW5kZXgsIDEwKTtcblxuICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgc25hcEluZGV4LFxuICAgIHJlYWxJbmRleCxcbiAgICBwcmV2aW91c0luZGV4LFxuICAgIGFjdGl2ZUluZGV4LFxuICB9KTtcbiAgc3dpcGVyLmVtaXQoJ2FjdGl2ZUluZGV4Q2hhbmdlJyk7XG4gIHN3aXBlci5lbWl0KCdzbmFwSW5kZXhDaGFuZ2UnKTtcbiAgaWYgKHByZXZpb3VzUmVhbEluZGV4ICE9PSByZWFsSW5kZXgpIHtcbiAgICBzd2lwZXIuZW1pdCgncmVhbEluZGV4Q2hhbmdlJyk7XG4gIH1cbiAgaWYgKHN3aXBlci5pbml0aWFsaXplZCB8fCBzd2lwZXIucGFyYW1zLnJ1bkNhbGxiYWNrc09uSW5pdCkge1xuICAgIHN3aXBlci5lbWl0KCdzbGlkZUNoYW5nZScpO1xuICB9XG59XG4iLCJpbXBvcnQgJCBmcm9tICcuLi8uLi8uLi91dGlscy9kb20nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoZSkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICBjb25zdCBzbGlkZSA9ICQoZS50YXJnZXQpLmNsb3Nlc3QoYC4ke3BhcmFtcy5zbGlkZUNsYXNzfWApWzBdO1xuICBsZXQgc2xpZGVGb3VuZCA9IGZhbHNlO1xuICBpZiAoc2xpZGUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN3aXBlci5zbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmIChzd2lwZXIuc2xpZGVzW2ldID09PSBzbGlkZSkgc2xpZGVGb3VuZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKHNsaWRlICYmIHNsaWRlRm91bmQpIHtcbiAgICBzd2lwZXIuY2xpY2tlZFNsaWRlID0gc2xpZGU7XG4gICAgaWYgKHN3aXBlci52aXJ0dWFsICYmIHN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkKSB7XG4gICAgICBzd2lwZXIuY2xpY2tlZEluZGV4ID0gcGFyc2VJbnQoJChzbGlkZSkuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSwgMTApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuY2xpY2tlZEluZGV4ID0gJChzbGlkZSkuaW5kZXgoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3dpcGVyLmNsaWNrZWRTbGlkZSA9IHVuZGVmaW5lZDtcbiAgICBzd2lwZXIuY2xpY2tlZEluZGV4ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocGFyYW1zLnNsaWRlVG9DbGlja2VkU2xpZGUgJiYgc3dpcGVyLmNsaWNrZWRJbmRleCAhPT0gdW5kZWZpbmVkICYmIHN3aXBlci5jbGlja2VkSW5kZXggIT09IHN3aXBlci5hY3RpdmVJbmRleCkge1xuICAgIHN3aXBlci5zbGlkZVRvQ2xpY2tlZFNsaWRlKCk7XG4gIH1cbn1cbiIsImltcG9ydCB1cGRhdGVTaXplIGZyb20gJy4vdXBkYXRlU2l6ZSc7XG5pbXBvcnQgdXBkYXRlU2xpZGVzIGZyb20gJy4vdXBkYXRlU2xpZGVzJztcbmltcG9ydCB1cGRhdGVBdXRvSGVpZ2h0IGZyb20gJy4vdXBkYXRlQXV0b0hlaWdodCc7XG5pbXBvcnQgdXBkYXRlU2xpZGVzT2Zmc2V0IGZyb20gJy4vdXBkYXRlU2xpZGVzT2Zmc2V0JztcbmltcG9ydCB1cGRhdGVTbGlkZXNQcm9ncmVzcyBmcm9tICcuL3VwZGF0ZVNsaWRlc1Byb2dyZXNzJztcbmltcG9ydCB1cGRhdGVQcm9ncmVzcyBmcm9tICcuL3VwZGF0ZVByb2dyZXNzJztcbmltcG9ydCB1cGRhdGVTbGlkZXNDbGFzc2VzIGZyb20gJy4vdXBkYXRlU2xpZGVzQ2xhc3Nlcyc7XG5pbXBvcnQgdXBkYXRlQWN0aXZlSW5kZXggZnJvbSAnLi91cGRhdGVBY3RpdmVJbmRleCc7XG5pbXBvcnQgdXBkYXRlQ2xpY2tlZFNsaWRlIGZyb20gJy4vdXBkYXRlQ2xpY2tlZFNsaWRlJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICB1cGRhdGVTaXplLFxuICB1cGRhdGVTbGlkZXMsXG4gIHVwZGF0ZUF1dG9IZWlnaHQsXG4gIHVwZGF0ZVNsaWRlc09mZnNldCxcbiAgdXBkYXRlU2xpZGVzUHJvZ3Jlc3MsXG4gIHVwZGF0ZVByb2dyZXNzLFxuICB1cGRhdGVTbGlkZXNDbGFzc2VzLFxuICB1cGRhdGVBY3RpdmVJbmRleCxcbiAgdXBkYXRlQ2xpY2tlZFNsaWRlLFxufTtcbiIsImltcG9ydCBVdGlscyBmcm9tICcuLi8uLi8uLi91dGlscy91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChheGlzID0gdGhpcy5pc0hvcml6b250YWwoKSA/ICd4JyA6ICd5Jykge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuXG4gIGNvbnN0IHtcbiAgICBwYXJhbXMsIHJ0bFRyYW5zbGF0ZTogcnRsLCB0cmFuc2xhdGUsICR3cmFwcGVyRWwsXG4gIH0gPSBzd2lwZXI7XG5cbiAgaWYgKHBhcmFtcy52aXJ0dWFsVHJhbnNsYXRlKSB7XG4gICAgcmV0dXJuIHJ0bCA/IC10cmFuc2xhdGUgOiB0cmFuc2xhdGU7XG4gIH1cbiAgaWYgKHBhcmFtcy5jc3NNb2RlKSB7XG4gICAgcmV0dXJuIHRyYW5zbGF0ZTtcbiAgfVxuXG4gIGxldCBjdXJyZW50VHJhbnNsYXRlID0gVXRpbHMuZ2V0VHJhbnNsYXRlKCR3cmFwcGVyRWxbMF0sIGF4aXMpO1xuICBpZiAocnRsKSBjdXJyZW50VHJhbnNsYXRlID0gLWN1cnJlbnRUcmFuc2xhdGU7XG5cbiAgcmV0dXJuIGN1cnJlbnRUcmFuc2xhdGUgfHwgMDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICh0cmFuc2xhdGUsIGJ5Q29udHJvbGxlcikge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7XG4gICAgcnRsVHJhbnNsYXRlOiBydGwsIHBhcmFtcywgJHdyYXBwZXJFbCwgd3JhcHBlckVsLCBwcm9ncmVzcyxcbiAgfSA9IHN3aXBlcjtcbiAgbGV0IHggPSAwO1xuICBsZXQgeSA9IDA7XG4gIGNvbnN0IHogPSAwO1xuXG4gIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICB4ID0gcnRsID8gLXRyYW5zbGF0ZSA6IHRyYW5zbGF0ZTtcbiAgfSBlbHNlIHtcbiAgICB5ID0gdHJhbnNsYXRlO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5yb3VuZExlbmd0aHMpIHtcbiAgICB4ID0gTWF0aC5mbG9vcih4KTtcbiAgICB5ID0gTWF0aC5mbG9vcih5KTtcbiAgfVxuXG4gIGlmIChwYXJhbXMuY3NzTW9kZSkge1xuICAgIHdyYXBwZXJFbFtzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAnc2Nyb2xsTGVmdCcgOiAnc2Nyb2xsVG9wJ10gPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAteCA6IC15O1xuICB9IGVsc2UgaWYgKCFwYXJhbXMudmlydHVhbFRyYW5zbGF0ZSkge1xuICAgICR3cmFwcGVyRWwudHJhbnNmb3JtKGB0cmFuc2xhdGUzZCgke3h9cHgsICR7eX1weCwgJHt6fXB4KWApO1xuICB9XG4gIHN3aXBlci5wcmV2aW91c1RyYW5zbGF0ZSA9IHN3aXBlci50cmFuc2xhdGU7XG4gIHN3aXBlci50cmFuc2xhdGUgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyB4IDogeTtcblxuICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIHVwZGF0ZSBwcm9ncmVzc1xuICBsZXQgbmV3UHJvZ3Jlc3M7XG4gIGNvbnN0IHRyYW5zbGF0ZXNEaWZmID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpO1xuICBpZiAodHJhbnNsYXRlc0RpZmYgPT09IDApIHtcbiAgICBuZXdQcm9ncmVzcyA9IDA7XG4gIH0gZWxzZSB7XG4gICAgbmV3UHJvZ3Jlc3MgPSAodHJhbnNsYXRlIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSAvICh0cmFuc2xhdGVzRGlmZik7XG4gIH1cbiAgaWYgKG5ld1Byb2dyZXNzICE9PSBwcm9ncmVzcykge1xuICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcyh0cmFuc2xhdGUpO1xuICB9XG5cbiAgc3dpcGVyLmVtaXQoJ3NldFRyYW5zbGF0ZScsIHN3aXBlci50cmFuc2xhdGUsIGJ5Q29udHJvbGxlcik7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAoLXRoaXMuc25hcEdyaWRbMF0pO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKC10aGlzLnNuYXBHcmlkW3RoaXMuc25hcEdyaWQubGVuZ3RoIC0gMV0pO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHRyYW5zbGF0ZSA9IDAsIHNwZWVkID0gdGhpcy5wYXJhbXMuc3BlZWQsIHJ1bkNhbGxiYWNrcyA9IHRydWUsIHRyYW5zbGF0ZUJvdW5kcyA9IHRydWUsIGludGVybmFsKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG5cbiAgY29uc3Qge1xuICAgIHBhcmFtcyxcbiAgICB3cmFwcGVyRWwsXG4gIH0gPSBzd2lwZXI7XG5cbiAgaWYgKHN3aXBlci5hbmltYXRpbmcgJiYgcGFyYW1zLnByZXZlbnRJbnRlcmFjdGlvbk9uVHJhbnNpdGlvbikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IG1pblRyYW5zbGF0ZSA9IHN3aXBlci5taW5UcmFuc2xhdGUoKTtcbiAgY29uc3QgbWF4VHJhbnNsYXRlID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpO1xuICBsZXQgbmV3VHJhbnNsYXRlO1xuICBpZiAodHJhbnNsYXRlQm91bmRzICYmIHRyYW5zbGF0ZSA+IG1pblRyYW5zbGF0ZSkgbmV3VHJhbnNsYXRlID0gbWluVHJhbnNsYXRlO1xuICBlbHNlIGlmICh0cmFuc2xhdGVCb3VuZHMgJiYgdHJhbnNsYXRlIDwgbWF4VHJhbnNsYXRlKSBuZXdUcmFuc2xhdGUgPSBtYXhUcmFuc2xhdGU7XG4gIGVsc2UgbmV3VHJhbnNsYXRlID0gdHJhbnNsYXRlO1xuXG4gIC8vIFVwZGF0ZSBwcm9ncmVzc1xuICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3MobmV3VHJhbnNsYXRlKTtcblxuICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICBjb25zdCBpc0ggPSBzd2lwZXIuaXNIb3Jpem9udGFsKCk7XG4gICAgaWYgKHNwZWVkID09PSAwKSB7XG4gICAgICB3cmFwcGVyRWxbaXNIID8gJ3Njcm9sbExlZnQnIDogJ3Njcm9sbFRvcCddID0gLW5ld1RyYW5zbGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICBpZiAod3JhcHBlckVsLnNjcm9sbFRvKSB7XG4gICAgICAgIHdyYXBwZXJFbC5zY3JvbGxUbyh7XG4gICAgICAgICAgW2lzSCA/ICdsZWZ0JyA6ICd0b3AnXTogLW5ld1RyYW5zbGF0ZSxcbiAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd3JhcHBlckVsW2lzSCA/ICdzY3JvbGxMZWZ0JyA6ICdzY3JvbGxUb3AnXSA9IC1uZXdUcmFuc2xhdGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHNwZWVkID09PSAwKSB7XG4gICAgc3dpcGVyLnNldFRyYW5zaXRpb24oMCk7XG4gICAgc3dpcGVyLnNldFRyYW5zbGF0ZShuZXdUcmFuc2xhdGUpO1xuICAgIGlmIChydW5DYWxsYmFja3MpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdiZWZvcmVUcmFuc2l0aW9uU3RhcnQnLCBzcGVlZCwgaW50ZXJuYWwpO1xuICAgICAgc3dpcGVyLmVtaXQoJ3RyYW5zaXRpb25FbmQnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3dpcGVyLnNldFRyYW5zaXRpb24oc3BlZWQpO1xuICAgIHN3aXBlci5zZXRUcmFuc2xhdGUobmV3VHJhbnNsYXRlKTtcbiAgICBpZiAocnVuQ2FsbGJhY2tzKSB7XG4gICAgICBzd2lwZXIuZW1pdCgnYmVmb3JlVHJhbnNpdGlvblN0YXJ0Jywgc3BlZWQsIGludGVybmFsKTtcbiAgICAgIHN3aXBlci5lbWl0KCd0cmFuc2l0aW9uU3RhcnQnKTtcbiAgICB9XG4gICAgaWYgKCFzd2lwZXIuYW5pbWF0aW5nKSB7XG4gICAgICBzd2lwZXIuYW5pbWF0aW5nID0gdHJ1ZTtcbiAgICAgIGlmICghc3dpcGVyLm9uVHJhbnNsYXRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCkge1xuICAgICAgICBzd2lwZXIub25UcmFuc2xhdGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kID0gZnVuY3Rpb24gdHJhbnNpdGlvbkVuZChlKSB7XG4gICAgICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgICAgIGlmIChlLnRhcmdldCAhPT0gdGhpcykgcmV0dXJuO1xuICAgICAgICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBzd2lwZXIub25UcmFuc2xhdGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kKTtcbiAgICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJraXRUcmFuc2l0aW9uRW5kJywgc3dpcGVyLm9uVHJhbnNsYXRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCk7XG4gICAgICAgICAgc3dpcGVyLm9uVHJhbnNsYXRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCA9IG51bGw7XG4gICAgICAgICAgZGVsZXRlIHN3aXBlci5vblRyYW5zbGF0ZVRvV3JhcHBlclRyYW5zaXRpb25FbmQ7XG4gICAgICAgICAgaWYgKHJ1bkNhbGxiYWNrcykge1xuICAgICAgICAgICAgc3dpcGVyLmVtaXQoJ3RyYW5zaXRpb25FbmQnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgc3dpcGVyLm9uVHJhbnNsYXRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCk7XG4gICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5hZGRFdmVudExpc3RlbmVyKCd3ZWJraXRUcmFuc2l0aW9uRW5kJywgc3dpcGVyLm9uVHJhbnNsYXRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG4iLCJpbXBvcnQgZ2V0VHJhbnNsYXRlIGZyb20gJy4vZ2V0VHJhbnNsYXRlJztcbmltcG9ydCBzZXRUcmFuc2xhdGUgZnJvbSAnLi9zZXRUcmFuc2xhdGUnO1xuaW1wb3J0IG1pblRyYW5zbGF0ZSBmcm9tICcuL21pblRyYW5zbGF0ZSc7XG5pbXBvcnQgbWF4VHJhbnNsYXRlIGZyb20gJy4vbWF4VHJhbnNsYXRlJztcbmltcG9ydCB0cmFuc2xhdGVUbyBmcm9tICcuL3RyYW5zbGF0ZVRvJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBnZXRUcmFuc2xhdGUsXG4gIHNldFRyYW5zbGF0ZSxcbiAgbWluVHJhbnNsYXRlLFxuICBtYXhUcmFuc2xhdGUsXG4gIHRyYW5zbGF0ZVRvLFxufTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChkdXJhdGlvbiwgYnlDb250cm9sbGVyKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG5cbiAgaWYgKCFzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICBzd2lwZXIuJHdyYXBwZXJFbC50cmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgfVxuXG4gIHN3aXBlci5lbWl0KCdzZXRUcmFuc2l0aW9uJywgZHVyYXRpb24sIGJ5Q29udHJvbGxlcik7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAocnVuQ2FsbGJhY2tzID0gdHJ1ZSwgZGlyZWN0aW9uKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IHsgYWN0aXZlSW5kZXgsIHBhcmFtcywgcHJldmlvdXNJbmRleCB9ID0gc3dpcGVyO1xuICBpZiAocGFyYW1zLmNzc01vZGUpIHJldHVybjtcbiAgaWYgKHBhcmFtcy5hdXRvSGVpZ2h0KSB7XG4gICAgc3dpcGVyLnVwZGF0ZUF1dG9IZWlnaHQoKTtcbiAgfVxuXG4gIGxldCBkaXIgPSBkaXJlY3Rpb247XG4gIGlmICghZGlyKSB7XG4gICAgaWYgKGFjdGl2ZUluZGV4ID4gcHJldmlvdXNJbmRleCkgZGlyID0gJ25leHQnO1xuICAgIGVsc2UgaWYgKGFjdGl2ZUluZGV4IDwgcHJldmlvdXNJbmRleCkgZGlyID0gJ3ByZXYnO1xuICAgIGVsc2UgZGlyID0gJ3Jlc2V0JztcbiAgfVxuXG4gIHN3aXBlci5lbWl0KCd0cmFuc2l0aW9uU3RhcnQnKTtcblxuICBpZiAocnVuQ2FsbGJhY2tzICYmIGFjdGl2ZUluZGV4ICE9PSBwcmV2aW91c0luZGV4KSB7XG4gICAgaWYgKGRpciA9PT0gJ3Jlc2V0Jykge1xuICAgICAgc3dpcGVyLmVtaXQoJ3NsaWRlUmVzZXRUcmFuc2l0aW9uU3RhcnQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3dpcGVyLmVtaXQoJ3NsaWRlQ2hhbmdlVHJhbnNpdGlvblN0YXJ0Jyk7XG4gICAgaWYgKGRpciA9PT0gJ25leHQnKSB7XG4gICAgICBzd2lwZXIuZW1pdCgnc2xpZGVOZXh0VHJhbnNpdGlvblN0YXJ0Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5lbWl0KCdzbGlkZVByZXZUcmFuc2l0aW9uU3RhcnQnKTtcbiAgICB9XG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChydW5DYWxsYmFja3MgPSB0cnVlLCBkaXJlY3Rpb24pIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3QgeyBhY3RpdmVJbmRleCwgcHJldmlvdXNJbmRleCwgcGFyYW1zIH0gPSBzd2lwZXI7XG4gIHN3aXBlci5hbmltYXRpbmcgPSBmYWxzZTtcbiAgaWYgKHBhcmFtcy5jc3NNb2RlKSByZXR1cm47XG4gIHN3aXBlci5zZXRUcmFuc2l0aW9uKDApO1xuXG4gIGxldCBkaXIgPSBkaXJlY3Rpb247XG4gIGlmICghZGlyKSB7XG4gICAgaWYgKGFjdGl2ZUluZGV4ID4gcHJldmlvdXNJbmRleCkgZGlyID0gJ25leHQnO1xuICAgIGVsc2UgaWYgKGFjdGl2ZUluZGV4IDwgcHJldmlvdXNJbmRleCkgZGlyID0gJ3ByZXYnO1xuICAgIGVsc2UgZGlyID0gJ3Jlc2V0JztcbiAgfVxuXG4gIHN3aXBlci5lbWl0KCd0cmFuc2l0aW9uRW5kJyk7XG5cbiAgaWYgKHJ1bkNhbGxiYWNrcyAmJiBhY3RpdmVJbmRleCAhPT0gcHJldmlvdXNJbmRleCkge1xuICAgIGlmIChkaXIgPT09ICdyZXNldCcpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdzbGlkZVJlc2V0VHJhbnNpdGlvbkVuZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzd2lwZXIuZW1pdCgnc2xpZGVDaGFuZ2VUcmFuc2l0aW9uRW5kJyk7XG4gICAgaWYgKGRpciA9PT0gJ25leHQnKSB7XG4gICAgICBzd2lwZXIuZW1pdCgnc2xpZGVOZXh0VHJhbnNpdGlvbkVuZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuZW1pdCgnc2xpZGVQcmV2VHJhbnNpdGlvbkVuZCcpO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHNldFRyYW5zaXRpb24gZnJvbSAnLi9zZXRUcmFuc2l0aW9uJztcbmltcG9ydCB0cmFuc2l0aW9uU3RhcnQgZnJvbSAnLi90cmFuc2l0aW9uU3RhcnQnO1xuaW1wb3J0IHRyYW5zaXRpb25FbmQgZnJvbSAnLi90cmFuc2l0aW9uRW5kJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBzZXRUcmFuc2l0aW9uLFxuICB0cmFuc2l0aW9uU3RhcnQsXG4gIHRyYW5zaXRpb25FbmQsXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKGluZGV4ID0gMCwgc3BlZWQgPSB0aGlzLnBhcmFtcy5zcGVlZCwgcnVuQ2FsbGJhY2tzID0gdHJ1ZSwgaW50ZXJuYWwpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgbGV0IHNsaWRlSW5kZXggPSBpbmRleDtcbiAgaWYgKHNsaWRlSW5kZXggPCAwKSBzbGlkZUluZGV4ID0gMDtcblxuICBjb25zdCB7XG4gICAgcGFyYW1zLCBzbmFwR3JpZCwgc2xpZGVzR3JpZCwgcHJldmlvdXNJbmRleCwgYWN0aXZlSW5kZXgsIHJ0bFRyYW5zbGF0ZTogcnRsLCB3cmFwcGVyRWwsXG4gIH0gPSBzd2lwZXI7XG4gIGlmIChzd2lwZXIuYW5pbWF0aW5nICYmIHBhcmFtcy5wcmV2ZW50SW50ZXJhY3Rpb25PblRyYW5zaXRpb24pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBza2lwID0gTWF0aC5taW4oc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cFNraXAsIHNsaWRlSW5kZXgpO1xuICBsZXQgc25hcEluZGV4ID0gc2tpcCArIE1hdGguZmxvb3IoKHNsaWRlSW5kZXggLSBza2lwKSAvIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXApO1xuICBpZiAoc25hcEluZGV4ID49IHNuYXBHcmlkLmxlbmd0aCkgc25hcEluZGV4ID0gc25hcEdyaWQubGVuZ3RoIC0gMTtcblxuICBpZiAoKGFjdGl2ZUluZGV4IHx8IHBhcmFtcy5pbml0aWFsU2xpZGUgfHwgMCkgPT09IChwcmV2aW91c0luZGV4IHx8IDApICYmIHJ1bkNhbGxiYWNrcykge1xuICAgIHN3aXBlci5lbWl0KCdiZWZvcmVTbGlkZUNoYW5nZVN0YXJ0Jyk7XG4gIH1cblxuICBjb25zdCB0cmFuc2xhdGUgPSAtc25hcEdyaWRbc25hcEluZGV4XTtcblxuICAvLyBVcGRhdGUgcHJvZ3Jlc3NcbiAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKHRyYW5zbGF0ZSk7XG5cbiAgLy8gTm9ybWFsaXplIHNsaWRlSW5kZXhcbiAgaWYgKHBhcmFtcy5ub3JtYWxpemVTbGlkZUluZGV4KSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbGlkZXNHcmlkLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAoLU1hdGguZmxvb3IodHJhbnNsYXRlICogMTAwKSA+PSBNYXRoLmZsb29yKHNsaWRlc0dyaWRbaV0gKiAxMDApKSB7XG4gICAgICAgIHNsaWRlSW5kZXggPSBpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBEaXJlY3Rpb25zIGxvY2tzXG4gIGlmIChzd2lwZXIuaW5pdGlhbGl6ZWQgJiYgc2xpZGVJbmRleCAhPT0gYWN0aXZlSW5kZXgpIHtcbiAgICBpZiAoIXN3aXBlci5hbGxvd1NsaWRlTmV4dCAmJiB0cmFuc2xhdGUgPCBzd2lwZXIudHJhbnNsYXRlICYmIHRyYW5zbGF0ZSA8IHN3aXBlci5taW5UcmFuc2xhdGUoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIXN3aXBlci5hbGxvd1NsaWRlUHJldiAmJiB0cmFuc2xhdGUgPiBzd2lwZXIudHJhbnNsYXRlICYmIHRyYW5zbGF0ZSA+IHN3aXBlci5tYXhUcmFuc2xhdGUoKSkge1xuICAgICAgaWYgKChhY3RpdmVJbmRleCB8fCAwKSAhPT0gc2xpZGVJbmRleCkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGxldCBkaXJlY3Rpb247XG4gIGlmIChzbGlkZUluZGV4ID4gYWN0aXZlSW5kZXgpIGRpcmVjdGlvbiA9ICduZXh0JztcbiAgZWxzZSBpZiAoc2xpZGVJbmRleCA8IGFjdGl2ZUluZGV4KSBkaXJlY3Rpb24gPSAncHJldic7XG4gIGVsc2UgZGlyZWN0aW9uID0gJ3Jlc2V0JztcblxuXG4gIC8vIFVwZGF0ZSBJbmRleFxuICBpZiAoKHJ0bCAmJiAtdHJhbnNsYXRlID09PSBzd2lwZXIudHJhbnNsYXRlKSB8fCAoIXJ0bCAmJiB0cmFuc2xhdGUgPT09IHN3aXBlci50cmFuc2xhdGUpKSB7XG4gICAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KHNsaWRlSW5kZXgpO1xuICAgIC8vIFVwZGF0ZSBIZWlnaHRcbiAgICBpZiAocGFyYW1zLmF1dG9IZWlnaHQpIHtcbiAgICAgIHN3aXBlci51cGRhdGVBdXRvSGVpZ2h0KCk7XG4gICAgfVxuICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gICAgaWYgKHBhcmFtcy5lZmZlY3QgIT09ICdzbGlkZScpIHtcbiAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUodHJhbnNsYXRlKTtcbiAgICB9XG4gICAgaWYgKGRpcmVjdGlvbiAhPT0gJ3Jlc2V0Jykge1xuICAgICAgc3dpcGVyLnRyYW5zaXRpb25TdGFydChydW5DYWxsYmFja3MsIGRpcmVjdGlvbik7XG4gICAgICBzd2lwZXIudHJhbnNpdGlvbkVuZChydW5DYWxsYmFja3MsIGRpcmVjdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICBjb25zdCBpc0ggPSBzd2lwZXIuaXNIb3Jpem9udGFsKCk7XG4gICAgbGV0IHQgPSAtdHJhbnNsYXRlO1xuICAgIGlmIChydGwpIHtcbiAgICAgIHQgPSB3cmFwcGVyRWwuc2Nyb2xsV2lkdGggLSB3cmFwcGVyRWwub2Zmc2V0V2lkdGggLSB0O1xuICAgIH1cbiAgICBpZiAoc3BlZWQgPT09IDApIHtcbiAgICAgIHdyYXBwZXJFbFtpc0ggPyAnc2Nyb2xsTGVmdCcgOiAnc2Nyb2xsVG9wJ10gPSB0O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGlmICh3cmFwcGVyRWwuc2Nyb2xsVG8pIHtcbiAgICAgICAgd3JhcHBlckVsLnNjcm9sbFRvKHtcbiAgICAgICAgICBbaXNIID8gJ2xlZnQnIDogJ3RvcCddOiB0LFxuICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3cmFwcGVyRWxbaXNIID8gJ3Njcm9sbExlZnQnIDogJ3Njcm9sbFRvcCddID0gdDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoc3BlZWQgPT09IDApIHtcbiAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbigwKTtcbiAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKHRyYW5zbGF0ZSk7XG4gICAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KHNsaWRlSW5kZXgpO1xuICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gICAgc3dpcGVyLmVtaXQoJ2JlZm9yZVRyYW5zaXRpb25TdGFydCcsIHNwZWVkLCBpbnRlcm5hbCk7XG4gICAgc3dpcGVyLnRyYW5zaXRpb25TdGFydChydW5DYWxsYmFja3MsIGRpcmVjdGlvbik7XG4gICAgc3dpcGVyLnRyYW5zaXRpb25FbmQocnVuQ2FsbGJhY2tzLCBkaXJlY3Rpb24pO1xuICB9IGVsc2Uge1xuICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKHNwZWVkKTtcbiAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKHRyYW5zbGF0ZSk7XG4gICAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KHNsaWRlSW5kZXgpO1xuICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gICAgc3dpcGVyLmVtaXQoJ2JlZm9yZVRyYW5zaXRpb25TdGFydCcsIHNwZWVkLCBpbnRlcm5hbCk7XG4gICAgc3dpcGVyLnRyYW5zaXRpb25TdGFydChydW5DYWxsYmFja3MsIGRpcmVjdGlvbik7XG4gICAgaWYgKCFzd2lwZXIuYW5pbWF0aW5nKSB7XG4gICAgICBzd2lwZXIuYW5pbWF0aW5nID0gdHJ1ZTtcbiAgICAgIGlmICghc3dpcGVyLm9uU2xpZGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kKSB7XG4gICAgICAgIHN3aXBlci5vblNsaWRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25FbmQoZSkge1xuICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHJldHVybjtcbiAgICAgICAgICBpZiAoZS50YXJnZXQgIT09IHRoaXMpIHJldHVybjtcbiAgICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgc3dpcGVyLm9uU2xpZGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kKTtcbiAgICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJraXRUcmFuc2l0aW9uRW5kJywgc3dpcGVyLm9uU2xpZGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kKTtcbiAgICAgICAgICBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQgPSBudWxsO1xuICAgICAgICAgIGRlbGV0ZSBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQ7XG4gICAgICAgICAgc3dpcGVyLnRyYW5zaXRpb25FbmQocnVuQ2FsbGJhY2tzLCBkaXJlY3Rpb24pO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0uYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIHN3aXBlci5vblNsaWRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCk7XG4gICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5hZGRFdmVudExpc3RlbmVyKCd3ZWJraXRUcmFuc2l0aW9uRW5kJywgc3dpcGVyLm9uU2xpZGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChpbmRleCA9IDAsIHNwZWVkID0gdGhpcy5wYXJhbXMuc3BlZWQsIHJ1bkNhbGxiYWNrcyA9IHRydWUsIGludGVybmFsKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGxldCBuZXdJbmRleCA9IGluZGV4O1xuICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgbmV3SW5kZXggKz0gc3dpcGVyLmxvb3BlZFNsaWRlcztcbiAgfVxuXG4gIHJldHVybiBzd2lwZXIuc2xpZGVUbyhuZXdJbmRleCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xufVxuIiwiLyogZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoc3BlZWQgPSB0aGlzLnBhcmFtcy5zcGVlZCwgcnVuQ2FsbGJhY2tzID0gdHJ1ZSwgaW50ZXJuYWwpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3QgeyBwYXJhbXMsIGFuaW1hdGluZyB9ID0gc3dpcGVyO1xuICBjb25zdCBpbmNyZW1lbnQgPSBzd2lwZXIuYWN0aXZlSW5kZXggPCBwYXJhbXMuc2xpZGVzUGVyR3JvdXBTa2lwID8gMSA6IHBhcmFtcy5zbGlkZXNQZXJHcm91cDtcbiAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgaWYgKGFuaW1hdGluZykgcmV0dXJuIGZhbHNlO1xuICAgIHN3aXBlci5sb29wRml4KCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgc3dpcGVyLl9jbGllbnRMZWZ0ID0gc3dpcGVyLiR3cmFwcGVyRWxbMF0uY2xpZW50TGVmdDtcbiAgfVxuICByZXR1cm4gc3dpcGVyLnNsaWRlVG8oc3dpcGVyLmFjdGl2ZUluZGV4ICsgaW5jcmVtZW50LCBzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCk7XG59XG4iLCIvKiBlc2xpbnQgbm8tdW51c2VkLXZhcnM6IFwib2ZmXCIgKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkLCBydW5DYWxsYmFja3MgPSB0cnVlLCBpbnRlcm5hbCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7XG4gICAgcGFyYW1zLCBhbmltYXRpbmcsIHNuYXBHcmlkLCBzbGlkZXNHcmlkLCBydGxUcmFuc2xhdGUsXG4gIH0gPSBzd2lwZXI7XG5cbiAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgaWYgKGFuaW1hdGluZykgcmV0dXJuIGZhbHNlO1xuICAgIHN3aXBlci5sb29wRml4KCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgc3dpcGVyLl9jbGllbnRMZWZ0ID0gc3dpcGVyLiR3cmFwcGVyRWxbMF0uY2xpZW50TGVmdDtcbiAgfVxuICBjb25zdCB0cmFuc2xhdGUgPSBydGxUcmFuc2xhdGUgPyBzd2lwZXIudHJhbnNsYXRlIDogLXN3aXBlci50cmFuc2xhdGU7XG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZSh2YWwpIHtcbiAgICBpZiAodmFsIDwgMCkgcmV0dXJuIC1NYXRoLmZsb29yKE1hdGguYWJzKHZhbCkpO1xuICAgIHJldHVybiBNYXRoLmZsb29yKHZhbCk7XG4gIH1cbiAgY29uc3Qgbm9ybWFsaXplZFRyYW5zbGF0ZSA9IG5vcm1hbGl6ZSh0cmFuc2xhdGUpO1xuICBjb25zdCBub3JtYWxpemVkU25hcEdyaWQgPSBzbmFwR3JpZC5tYXAoKHZhbCkgPT4gbm9ybWFsaXplKHZhbCkpO1xuICBjb25zdCBub3JtYWxpemVkU2xpZGVzR3JpZCA9IHNsaWRlc0dyaWQubWFwKCh2YWwpID0+IG5vcm1hbGl6ZSh2YWwpKTtcblxuICBjb25zdCBjdXJyZW50U25hcCA9IHNuYXBHcmlkW25vcm1hbGl6ZWRTbmFwR3JpZC5pbmRleE9mKG5vcm1hbGl6ZWRUcmFuc2xhdGUpXTtcbiAgbGV0IHByZXZTbmFwID0gc25hcEdyaWRbbm9ybWFsaXplZFNuYXBHcmlkLmluZGV4T2Yobm9ybWFsaXplZFRyYW5zbGF0ZSkgLSAxXTtcbiAgaWYgKHR5cGVvZiBwcmV2U25hcCA9PT0gJ3VuZGVmaW5lZCcgJiYgcGFyYW1zLmNzc01vZGUpIHtcbiAgICBzbmFwR3JpZC5mb3JFYWNoKChzbmFwKSA9PiB7XG4gICAgICBpZiAoIXByZXZTbmFwICYmIG5vcm1hbGl6ZWRUcmFuc2xhdGUgPj0gc25hcCkgcHJldlNuYXAgPSBzbmFwO1xuICAgIH0pO1xuICB9XG4gIGxldCBwcmV2SW5kZXg7XG4gIGlmICh0eXBlb2YgcHJldlNuYXAgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcHJldkluZGV4ID0gc2xpZGVzR3JpZC5pbmRleE9mKHByZXZTbmFwKTtcbiAgICBpZiAocHJldkluZGV4IDwgMCkgcHJldkluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4IC0gMTtcbiAgfVxuICByZXR1cm4gc3dpcGVyLnNsaWRlVG8ocHJldkluZGV4LCBzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCk7XG59XG4iLCIvKiBlc2xpbnQgbm8tdW51c2VkLXZhcnM6IFwib2ZmXCIgKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkLCBydW5DYWxsYmFja3MgPSB0cnVlLCBpbnRlcm5hbCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICByZXR1cm4gc3dpcGVyLnNsaWRlVG8oc3dpcGVyLmFjdGl2ZUluZGV4LCBzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCk7XG59XG4iLCIvKiBlc2xpbnQgbm8tdW51c2VkLXZhcnM6IFwib2ZmXCIgKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkLCBydW5DYWxsYmFja3MgPSB0cnVlLCBpbnRlcm5hbCwgdGhyZXNob2xkID0gMC41KSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGxldCBpbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgY29uc3Qgc2tpcCA9IE1hdGgubWluKHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXBTa2lwLCBpbmRleCk7XG4gIGNvbnN0IHNuYXBJbmRleCA9IHNraXAgKyBNYXRoLmZsb29yKChpbmRleCAtIHNraXApIC8gc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cCk7XG5cbiAgY29uc3QgdHJhbnNsYXRlID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSA/IHN3aXBlci50cmFuc2xhdGUgOiAtc3dpcGVyLnRyYW5zbGF0ZTtcblxuICBpZiAodHJhbnNsYXRlID49IHN3aXBlci5zbmFwR3JpZFtzbmFwSW5kZXhdKSB7XG4gICAgLy8gVGhlIGN1cnJlbnQgdHJhbnNsYXRlIGlzIG9uIG9yIGFmdGVyIHRoZSBjdXJyZW50IHNuYXAgaW5kZXgsIHNvIHRoZSBjaG9pY2VcbiAgICAvLyBpcyBiZXR3ZWVuIHRoZSBjdXJyZW50IGluZGV4IGFuZCB0aGUgb25lIGFmdGVyIGl0LlxuICAgIGNvbnN0IGN1cnJlbnRTbmFwID0gc3dpcGVyLnNuYXBHcmlkW3NuYXBJbmRleF07XG4gICAgY29uc3QgbmV4dFNuYXAgPSBzd2lwZXIuc25hcEdyaWRbc25hcEluZGV4ICsgMV07XG4gICAgaWYgKCh0cmFuc2xhdGUgLSBjdXJyZW50U25hcCkgPiAobmV4dFNuYXAgLSBjdXJyZW50U25hcCkgKiB0aHJlc2hvbGQpIHtcbiAgICAgIGluZGV4ICs9IHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFRoZSBjdXJyZW50IHRyYW5zbGF0ZSBpcyBiZWZvcmUgdGhlIGN1cnJlbnQgc25hcCBpbmRleCwgc28gdGhlIGNob2ljZVxuICAgIC8vIGlzIGJldHdlZW4gdGhlIGN1cnJlbnQgaW5kZXggYW5kIHRoZSBvbmUgYmVmb3JlIGl0LlxuICAgIGNvbnN0IHByZXZTbmFwID0gc3dpcGVyLnNuYXBHcmlkW3NuYXBJbmRleCAtIDFdO1xuICAgIGNvbnN0IGN1cnJlbnRTbmFwID0gc3dpcGVyLnNuYXBHcmlkW3NuYXBJbmRleF07XG4gICAgaWYgKCh0cmFuc2xhdGUgLSBwcmV2U25hcCkgPD0gKGN1cnJlbnRTbmFwIC0gcHJldlNuYXApICogdGhyZXNob2xkKSB7XG4gICAgICBpbmRleCAtPSBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwO1xuICAgIH1cbiAgfVxuICBpbmRleCA9IE1hdGgubWF4KGluZGV4LCAwKTtcbiAgaW5kZXggPSBNYXRoLm1pbihpbmRleCwgc3dpcGVyLnNsaWRlc0dyaWQubGVuZ3RoIC0gMSk7XG5cbiAgcmV0dXJuIHN3aXBlci5zbGlkZVRvKGluZGV4LCBzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCk7XG59XG4iLCJpbXBvcnQgJCBmcm9tICcuLi8uLi8uLi91dGlscy9kb20nO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uLy4uL3V0aWxzL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7IHBhcmFtcywgJHdyYXBwZXJFbCB9ID0gc3dpcGVyO1xuXG4gIGNvbnN0IHNsaWRlc1BlclZpZXcgPSBwYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nID8gc3dpcGVyLnNsaWRlc1BlclZpZXdEeW5hbWljKCkgOiBwYXJhbXMuc2xpZGVzUGVyVmlldztcbiAgbGV0IHNsaWRlVG9JbmRleCA9IHN3aXBlci5jbGlja2VkSW5kZXg7XG4gIGxldCByZWFsSW5kZXg7XG4gIGlmIChwYXJhbXMubG9vcCkge1xuICAgIGlmIChzd2lwZXIuYW5pbWF0aW5nKSByZXR1cm47XG4gICAgcmVhbEluZGV4ID0gcGFyc2VJbnQoJChzd2lwZXIuY2xpY2tlZFNsaWRlKS5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpLCAxMCk7XG4gICAgaWYgKHBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgaWYgKFxuICAgICAgICAoc2xpZGVUb0luZGV4IDwgc3dpcGVyLmxvb3BlZFNsaWRlcyAtIChzbGlkZXNQZXJWaWV3IC8gMikpXG4gICAgICAgIHx8IChzbGlkZVRvSW5kZXggPiAoc3dpcGVyLnNsaWRlcy5sZW5ndGggLSBzd2lwZXIubG9vcGVkU2xpZGVzKSArIChzbGlkZXNQZXJWaWV3IC8gMikpXG4gICAgICApIHtcbiAgICAgICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgICAgICAgc2xpZGVUb0luZGV4ID0gJHdyYXBwZXJFbFxuICAgICAgICAgIC5jaGlsZHJlbihgLiR7cGFyYW1zLnNsaWRlQ2xhc3N9W2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVwiJHtyZWFsSW5kZXh9XCJdOm5vdCguJHtwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzc30pYClcbiAgICAgICAgICAuZXEoMClcbiAgICAgICAgICAuaW5kZXgoKTtcblxuICAgICAgICBVdGlscy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgc3dpcGVyLnNsaWRlVG8oc2xpZGVUb0luZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhzbGlkZVRvSW5kZXgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc2xpZGVUb0luZGV4ID4gc3dpcGVyLnNsaWRlcy5sZW5ndGggLSBzbGlkZXNQZXJWaWV3KSB7XG4gICAgICBzd2lwZXIubG9vcEZpeCgpO1xuICAgICAgc2xpZGVUb0luZGV4ID0gJHdyYXBwZXJFbFxuICAgICAgICAuY2hpbGRyZW4oYC4ke3BhcmFtcy5zbGlkZUNsYXNzfVtkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cIiR7cmVhbEluZGV4fVwiXTpub3QoLiR7cGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3N9KWApXG4gICAgICAgIC5lcSgwKVxuICAgICAgICAuaW5kZXgoKTtcblxuICAgICAgVXRpbHMubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhzbGlkZVRvSW5kZXgpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvKHNsaWRlVG9JbmRleCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHN3aXBlci5zbGlkZVRvKHNsaWRlVG9JbmRleCk7XG4gIH1cbn1cbiIsImltcG9ydCBzbGlkZVRvIGZyb20gJy4vc2xpZGVUbyc7XG5pbXBvcnQgc2xpZGVUb0xvb3AgZnJvbSAnLi9zbGlkZVRvTG9vcCc7XG5pbXBvcnQgc2xpZGVOZXh0IGZyb20gJy4vc2xpZGVOZXh0JztcbmltcG9ydCBzbGlkZVByZXYgZnJvbSAnLi9zbGlkZVByZXYnO1xuaW1wb3J0IHNsaWRlUmVzZXQgZnJvbSAnLi9zbGlkZVJlc2V0JztcbmltcG9ydCBzbGlkZVRvQ2xvc2VzdCBmcm9tICcuL3NsaWRlVG9DbG9zZXN0JztcbmltcG9ydCBzbGlkZVRvQ2xpY2tlZFNsaWRlIGZyb20gJy4vc2xpZGVUb0NsaWNrZWRTbGlkZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2xpZGVUbyxcbiAgc2xpZGVUb0xvb3AsXG4gIHNsaWRlTmV4dCxcbiAgc2xpZGVQcmV2LFxuICBzbGlkZVJlc2V0LFxuICBzbGlkZVRvQ2xvc2VzdCxcbiAgc2xpZGVUb0NsaWNrZWRTbGlkZSxcbn07XG4iLCJpbXBvcnQgeyBkb2N1bWVudCB9IGZyb20gJ3Nzci13aW5kb3cnO1xuaW1wb3J0ICQgZnJvbSAnLi4vLi4vLi4vdXRpbHMvZG9tJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7IHBhcmFtcywgJHdyYXBwZXJFbCB9ID0gc3dpcGVyO1xuICAvLyBSZW1vdmUgZHVwbGljYXRlZCBzbGlkZXNcbiAgJHdyYXBwZXJFbC5jaGlsZHJlbihgLiR7cGFyYW1zLnNsaWRlQ2xhc3N9LiR7cGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3N9YCkucmVtb3ZlKCk7XG5cbiAgbGV0IHNsaWRlcyA9ICR3cmFwcGVyRWwuY2hpbGRyZW4oYC4ke3BhcmFtcy5zbGlkZUNsYXNzfWApO1xuXG4gIGlmIChwYXJhbXMubG9vcEZpbGxHcm91cFdpdGhCbGFuaykge1xuICAgIGNvbnN0IGJsYW5rU2xpZGVzTnVtID0gcGFyYW1zLnNsaWRlc1Blckdyb3VwIC0gKHNsaWRlcy5sZW5ndGggJSBwYXJhbXMuc2xpZGVzUGVyR3JvdXApO1xuICAgIGlmIChibGFua1NsaWRlc051bSAhPT0gcGFyYW1zLnNsaWRlc1Blckdyb3VwKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJsYW5rU2xpZGVzTnVtOyBpICs9IDEpIHtcbiAgICAgICAgY29uc3QgYmxhbmtOb2RlID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkuYWRkQ2xhc3MoYCR7cGFyYW1zLnNsaWRlQ2xhc3N9ICR7cGFyYW1zLnNsaWRlQmxhbmtDbGFzc31gKTtcbiAgICAgICAgJHdyYXBwZXJFbC5hcHBlbmQoYmxhbmtOb2RlKTtcbiAgICAgIH1cbiAgICAgIHNsaWRlcyA9ICR3cmFwcGVyRWwuY2hpbGRyZW4oYC4ke3BhcmFtcy5zbGlkZUNsYXNzfWApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nICYmICFwYXJhbXMubG9vcGVkU2xpZGVzKSBwYXJhbXMubG9vcGVkU2xpZGVzID0gc2xpZGVzLmxlbmd0aDtcblxuICBzd2lwZXIubG9vcGVkU2xpZGVzID0gTWF0aC5jZWlsKHBhcnNlRmxvYXQocGFyYW1zLmxvb3BlZFNsaWRlcyB8fCBwYXJhbXMuc2xpZGVzUGVyVmlldywgMTApKTtcbiAgc3dpcGVyLmxvb3BlZFNsaWRlcyArPSBwYXJhbXMubG9vcEFkZGl0aW9uYWxTbGlkZXM7XG4gIGlmIChzd2lwZXIubG9vcGVkU2xpZGVzID4gc2xpZGVzLmxlbmd0aCkge1xuICAgIHN3aXBlci5sb29wZWRTbGlkZXMgPSBzbGlkZXMubGVuZ3RoO1xuICB9XG5cbiAgY29uc3QgcHJlcGVuZFNsaWRlcyA9IFtdO1xuICBjb25zdCBhcHBlbmRTbGlkZXMgPSBbXTtcbiAgc2xpZGVzLmVhY2goKGluZGV4LCBlbCkgPT4ge1xuICAgIGNvbnN0IHNsaWRlID0gJChlbCk7XG4gICAgaWYgKGluZGV4IDwgc3dpcGVyLmxvb3BlZFNsaWRlcykgYXBwZW5kU2xpZGVzLnB1c2goZWwpO1xuICAgIGlmIChpbmRleCA8IHNsaWRlcy5sZW5ndGggJiYgaW5kZXggPj0gc2xpZGVzLmxlbmd0aCAtIHN3aXBlci5sb29wZWRTbGlkZXMpIHByZXBlbmRTbGlkZXMucHVzaChlbCk7XG4gICAgc2xpZGUuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnLCBpbmRleCk7XG4gIH0pO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFwcGVuZFNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICR3cmFwcGVyRWwuYXBwZW5kKCQoYXBwZW5kU2xpZGVzW2ldLmNsb25lTm9kZSh0cnVlKSkuYWRkQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKTtcbiAgfVxuICBmb3IgKGxldCBpID0gcHJlcGVuZFNsaWRlcy5sZW5ndGggLSAxOyBpID49IDA7IGkgLT0gMSkge1xuICAgICR3cmFwcGVyRWwucHJlcGVuZCgkKHByZXBlbmRTbGlkZXNbaV0uY2xvbmVOb2RlKHRydWUpKS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykpO1xuICB9XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG5cbiAgc3dpcGVyLmVtaXQoJ2JlZm9yZUxvb3BGaXgnKTtcblxuICBjb25zdCB7XG4gICAgYWN0aXZlSW5kZXgsIHNsaWRlcywgbG9vcGVkU2xpZGVzLCBhbGxvd1NsaWRlUHJldiwgYWxsb3dTbGlkZU5leHQsIHNuYXBHcmlkLCBydGxUcmFuc2xhdGU6IHJ0bCxcbiAgfSA9IHN3aXBlcjtcbiAgbGV0IG5ld0luZGV4O1xuICBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPSB0cnVlO1xuICBzd2lwZXIuYWxsb3dTbGlkZU5leHQgPSB0cnVlO1xuXG4gIGNvbnN0IHNuYXBUcmFuc2xhdGUgPSAtc25hcEdyaWRbYWN0aXZlSW5kZXhdO1xuICBjb25zdCBkaWZmID0gc25hcFRyYW5zbGF0ZSAtIHN3aXBlci5nZXRUcmFuc2xhdGUoKTtcblxuICAvLyBGaXggRm9yIE5lZ2F0aXZlIE92ZXJzbGlkaW5nXG4gIGlmIChhY3RpdmVJbmRleCA8IGxvb3BlZFNsaWRlcykge1xuICAgIG5ld0luZGV4ID0gKHNsaWRlcy5sZW5ndGggLSAobG9vcGVkU2xpZGVzICogMykpICsgYWN0aXZlSW5kZXg7XG4gICAgbmV3SW5kZXggKz0gbG9vcGVkU2xpZGVzO1xuICAgIGNvbnN0IHNsaWRlQ2hhbmdlZCA9IHN3aXBlci5zbGlkZVRvKG5ld0luZGV4LCAwLCBmYWxzZSwgdHJ1ZSk7XG4gICAgaWYgKHNsaWRlQ2hhbmdlZCAmJiBkaWZmICE9PSAwKSB7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKChydGwgPyAtc3dpcGVyLnRyYW5zbGF0ZSA6IHN3aXBlci50cmFuc2xhdGUpIC0gZGlmZik7XG4gICAgfVxuICB9IGVsc2UgaWYgKGFjdGl2ZUluZGV4ID49IHNsaWRlcy5sZW5ndGggLSBsb29wZWRTbGlkZXMpIHtcbiAgICAvLyBGaXggRm9yIFBvc2l0aXZlIE92ZXJzbGlkaW5nXG4gICAgbmV3SW5kZXggPSAtc2xpZGVzLmxlbmd0aCArIGFjdGl2ZUluZGV4ICsgbG9vcGVkU2xpZGVzO1xuICAgIG5ld0luZGV4ICs9IGxvb3BlZFNsaWRlcztcbiAgICBjb25zdCBzbGlkZUNoYW5nZWQgPSBzd2lwZXIuc2xpZGVUbyhuZXdJbmRleCwgMCwgZmFsc2UsIHRydWUpO1xuICAgIGlmIChzbGlkZUNoYW5nZWQgJiYgZGlmZiAhPT0gMCkge1xuICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZSgocnRsID8gLXN3aXBlci50cmFuc2xhdGUgOiBzd2lwZXIudHJhbnNsYXRlKSAtIGRpZmYpO1xuICAgIH1cbiAgfVxuICBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPSBhbGxvd1NsaWRlUHJldjtcbiAgc3dpcGVyLmFsbG93U2xpZGVOZXh0ID0gYWxsb3dTbGlkZU5leHQ7XG5cbiAgc3dpcGVyLmVtaXQoJ2xvb3BGaXgnKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3QgeyAkd3JhcHBlckVsLCBwYXJhbXMsIHNsaWRlcyB9ID0gc3dpcGVyO1xuICAkd3JhcHBlckVsLmNoaWxkcmVuKGAuJHtwYXJhbXMuc2xpZGVDbGFzc30uJHtwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzc30sLiR7cGFyYW1zLnNsaWRlQ2xhc3N9LiR7cGFyYW1zLnNsaWRlQmxhbmtDbGFzc31gKS5yZW1vdmUoKTtcbiAgc2xpZGVzLnJlbW92ZUF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4Jyk7XG59XG4iLCJpbXBvcnQgbG9vcENyZWF0ZSBmcm9tICcuL2xvb3BDcmVhdGUnO1xuaW1wb3J0IGxvb3BGaXggZnJvbSAnLi9sb29wRml4JztcbmltcG9ydCBsb29wRGVzdHJveSBmcm9tICcuL2xvb3BEZXN0cm95JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBsb29wQ3JlYXRlLFxuICBsb29wRml4LFxuICBsb29wRGVzdHJveSxcbn07XG4iLCJpbXBvcnQgU3VwcG9ydCBmcm9tICcuLi8uLi8uLi91dGlscy9zdXBwb3J0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKG1vdmluZykge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBpZiAoU3VwcG9ydC50b3VjaCB8fCAhc3dpcGVyLnBhcmFtcy5zaW11bGF0ZVRvdWNoIHx8IChzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc3dpcGVyLmlzTG9ja2VkKSB8fCBzd2lwZXIucGFyYW1zLmNzc01vZGUpIHJldHVybjtcbiAgY29uc3QgZWwgPSBzd2lwZXIuZWw7XG4gIGVsLnN0eWxlLmN1cnNvciA9ICdtb3ZlJztcbiAgZWwuc3R5bGUuY3Vyc29yID0gbW92aW5nID8gJy13ZWJraXQtZ3JhYmJpbmcnIDogJy13ZWJraXQtZ3JhYic7XG4gIGVsLnN0eWxlLmN1cnNvciA9IG1vdmluZyA/ICctbW96LWdyYWJiaW4nIDogJy1tb3otZ3JhYic7XG4gIGVsLnN0eWxlLmN1cnNvciA9IG1vdmluZyA/ICdncmFiYmluZycgOiAnZ3JhYic7XG59XG4iLCJpbXBvcnQgU3VwcG9ydCBmcm9tICcuLi8uLi8uLi91dGlscy9zdXBwb3J0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBpZiAoU3VwcG9ydC50b3VjaCB8fCAoc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHN3aXBlci5pc0xvY2tlZCkgfHwgc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSByZXR1cm47XG4gIHN3aXBlci5lbC5zdHlsZS5jdXJzb3IgPSAnJztcbn1cbiIsImltcG9ydCBzZXRHcmFiQ3Vyc29yIGZyb20gJy4vc2V0R3JhYkN1cnNvcic7XG5pbXBvcnQgdW5zZXRHcmFiQ3Vyc29yIGZyb20gJy4vdW5zZXRHcmFiQ3Vyc29yJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBzZXRHcmFiQ3Vyc29yLFxuICB1bnNldEdyYWJDdXJzb3IsXG59O1xuIiwiaW1wb3J0IFN1cHBvcnQgZnJvbSAnLi4vLi4vLi4vdXRpbHMvc3VwcG9ydCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChzbGlkZXMpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3QgeyAkd3JhcHBlckVsLCBwYXJhbXMgfSA9IHN3aXBlcjtcbiAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgc3dpcGVyLmxvb3BEZXN0cm95KCk7XG4gIH1cbiAgaWYgKHR5cGVvZiBzbGlkZXMgPT09ICdvYmplY3QnICYmICdsZW5ndGgnIGluIHNsaWRlcykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAoc2xpZGVzW2ldKSAkd3JhcHBlckVsLmFwcGVuZChzbGlkZXNbaV0pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAkd3JhcHBlckVsLmFwcGVuZChzbGlkZXMpO1xuICB9XG4gIGlmIChwYXJhbXMubG9vcCkge1xuICAgIHN3aXBlci5sb29wQ3JlYXRlKCk7XG4gIH1cbiAgaWYgKCEocGFyYW1zLm9ic2VydmVyICYmIFN1cHBvcnQub2JzZXJ2ZXIpKSB7XG4gICAgc3dpcGVyLnVwZGF0ZSgpO1xuICB9XG59XG4iLCJpbXBvcnQgU3VwcG9ydCBmcm9tICcuLi8uLi8uLi91dGlscy9zdXBwb3J0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHNsaWRlcykge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7IHBhcmFtcywgJHdyYXBwZXJFbCwgYWN0aXZlSW5kZXggfSA9IHN3aXBlcjtcblxuICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICBzd2lwZXIubG9vcERlc3Ryb3koKTtcbiAgfVxuICBsZXQgbmV3QWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleCArIDE7XG4gIGlmICh0eXBlb2Ygc2xpZGVzID09PSAnb2JqZWN0JyAmJiAnbGVuZ3RoJyBpbiBzbGlkZXMpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKHNsaWRlc1tpXSkgJHdyYXBwZXJFbC5wcmVwZW5kKHNsaWRlc1tpXSk7XG4gICAgfVxuICAgIG5ld0FjdGl2ZUluZGV4ID0gYWN0aXZlSW5kZXggKyBzbGlkZXMubGVuZ3RoO1xuICB9IGVsc2Uge1xuICAgICR3cmFwcGVyRWwucHJlcGVuZChzbGlkZXMpO1xuICB9XG4gIGlmIChwYXJhbXMubG9vcCkge1xuICAgIHN3aXBlci5sb29wQ3JlYXRlKCk7XG4gIH1cbiAgaWYgKCEocGFyYW1zLm9ic2VydmVyICYmIFN1cHBvcnQub2JzZXJ2ZXIpKSB7XG4gICAgc3dpcGVyLnVwZGF0ZSgpO1xuICB9XG4gIHN3aXBlci5zbGlkZVRvKG5ld0FjdGl2ZUluZGV4LCAwLCBmYWxzZSk7XG59XG4iLCJpbXBvcnQgU3VwcG9ydCBmcm9tICcuLi8uLi8uLi91dGlscy9zdXBwb3J0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKGluZGV4LCBzbGlkZXMpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3QgeyAkd3JhcHBlckVsLCBwYXJhbXMsIGFjdGl2ZUluZGV4IH0gPSBzd2lwZXI7XG4gIGxldCBhY3RpdmVJbmRleEJ1ZmZlciA9IGFjdGl2ZUluZGV4O1xuICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICBhY3RpdmVJbmRleEJ1ZmZlciAtPSBzd2lwZXIubG9vcGVkU2xpZGVzO1xuICAgIHN3aXBlci5sb29wRGVzdHJveSgpO1xuICAgIHN3aXBlci5zbGlkZXMgPSAkd3JhcHBlckVsLmNoaWxkcmVuKGAuJHtwYXJhbXMuc2xpZGVDbGFzc31gKTtcbiAgfVxuICBjb25zdCBiYXNlTGVuZ3RoID0gc3dpcGVyLnNsaWRlcy5sZW5ndGg7XG4gIGlmIChpbmRleCA8PSAwKSB7XG4gICAgc3dpcGVyLnByZXBlbmRTbGlkZShzbGlkZXMpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoaW5kZXggPj0gYmFzZUxlbmd0aCkge1xuICAgIHN3aXBlci5hcHBlbmRTbGlkZShzbGlkZXMpO1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgbmV3QWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleEJ1ZmZlciA+IGluZGV4ID8gYWN0aXZlSW5kZXhCdWZmZXIgKyAxIDogYWN0aXZlSW5kZXhCdWZmZXI7XG5cbiAgY29uc3Qgc2xpZGVzQnVmZmVyID0gW107XG4gIGZvciAobGV0IGkgPSBiYXNlTGVuZ3RoIC0gMTsgaSA+PSBpbmRleDsgaSAtPSAxKSB7XG4gICAgY29uc3QgY3VycmVudFNsaWRlID0gc3dpcGVyLnNsaWRlcy5lcShpKTtcbiAgICBjdXJyZW50U2xpZGUucmVtb3ZlKCk7XG4gICAgc2xpZGVzQnVmZmVyLnVuc2hpZnQoY3VycmVudFNsaWRlKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc2xpZGVzID09PSAnb2JqZWN0JyAmJiAnbGVuZ3RoJyBpbiBzbGlkZXMpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKHNsaWRlc1tpXSkgJHdyYXBwZXJFbC5hcHBlbmQoc2xpZGVzW2ldKTtcbiAgICB9XG4gICAgbmV3QWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleEJ1ZmZlciA+IGluZGV4ID8gYWN0aXZlSW5kZXhCdWZmZXIgKyBzbGlkZXMubGVuZ3RoIDogYWN0aXZlSW5kZXhCdWZmZXI7XG4gIH0gZWxzZSB7XG4gICAgJHdyYXBwZXJFbC5hcHBlbmQoc2xpZGVzKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2xpZGVzQnVmZmVyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgJHdyYXBwZXJFbC5hcHBlbmQoc2xpZGVzQnVmZmVyW2ldKTtcbiAgfVxuXG4gIGlmIChwYXJhbXMubG9vcCkge1xuICAgIHN3aXBlci5sb29wQ3JlYXRlKCk7XG4gIH1cbiAgaWYgKCEocGFyYW1zLm9ic2VydmVyICYmIFN1cHBvcnQub2JzZXJ2ZXIpKSB7XG4gICAgc3dpcGVyLnVwZGF0ZSgpO1xuICB9XG4gIGlmIChwYXJhbXMubG9vcCkge1xuICAgIHN3aXBlci5zbGlkZVRvKG5ld0FjdGl2ZUluZGV4ICsgc3dpcGVyLmxvb3BlZFNsaWRlcywgMCwgZmFsc2UpO1xuICB9IGVsc2Uge1xuICAgIHN3aXBlci5zbGlkZVRvKG5ld0FjdGl2ZUluZGV4LCAwLCBmYWxzZSk7XG4gIH1cbn1cbiIsImltcG9ydCBTdXBwb3J0IGZyb20gJy4uLy4uLy4uL3V0aWxzL3N1cHBvcnQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoc2xpZGVzSW5kZXhlcykge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7IHBhcmFtcywgJHdyYXBwZXJFbCwgYWN0aXZlSW5kZXggfSA9IHN3aXBlcjtcblxuICBsZXQgYWN0aXZlSW5kZXhCdWZmZXIgPSBhY3RpdmVJbmRleDtcbiAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgYWN0aXZlSW5kZXhCdWZmZXIgLT0gc3dpcGVyLmxvb3BlZFNsaWRlcztcbiAgICBzd2lwZXIubG9vcERlc3Ryb3koKTtcbiAgICBzd2lwZXIuc2xpZGVzID0gJHdyYXBwZXJFbC5jaGlsZHJlbihgLiR7cGFyYW1zLnNsaWRlQ2xhc3N9YCk7XG4gIH1cbiAgbGV0IG5ld0FjdGl2ZUluZGV4ID0gYWN0aXZlSW5kZXhCdWZmZXI7XG4gIGxldCBpbmRleFRvUmVtb3ZlO1xuXG4gIGlmICh0eXBlb2Ygc2xpZGVzSW5kZXhlcyA9PT0gJ29iamVjdCcgJiYgJ2xlbmd0aCcgaW4gc2xpZGVzSW5kZXhlcykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2xpZGVzSW5kZXhlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaW5kZXhUb1JlbW92ZSA9IHNsaWRlc0luZGV4ZXNbaV07XG4gICAgICBpZiAoc3dpcGVyLnNsaWRlc1tpbmRleFRvUmVtb3ZlXSkgc3dpcGVyLnNsaWRlcy5lcShpbmRleFRvUmVtb3ZlKS5yZW1vdmUoKTtcbiAgICAgIGlmIChpbmRleFRvUmVtb3ZlIDwgbmV3QWN0aXZlSW5kZXgpIG5ld0FjdGl2ZUluZGV4IC09IDE7XG4gICAgfVxuICAgIG5ld0FjdGl2ZUluZGV4ID0gTWF0aC5tYXgobmV3QWN0aXZlSW5kZXgsIDApO1xuICB9IGVsc2Uge1xuICAgIGluZGV4VG9SZW1vdmUgPSBzbGlkZXNJbmRleGVzO1xuICAgIGlmIChzd2lwZXIuc2xpZGVzW2luZGV4VG9SZW1vdmVdKSBzd2lwZXIuc2xpZGVzLmVxKGluZGV4VG9SZW1vdmUpLnJlbW92ZSgpO1xuICAgIGlmIChpbmRleFRvUmVtb3ZlIDwgbmV3QWN0aXZlSW5kZXgpIG5ld0FjdGl2ZUluZGV4IC09IDE7XG4gICAgbmV3QWN0aXZlSW5kZXggPSBNYXRoLm1heChuZXdBY3RpdmVJbmRleCwgMCk7XG4gIH1cblxuICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICBzd2lwZXIubG9vcENyZWF0ZSgpO1xuICB9XG5cbiAgaWYgKCEocGFyYW1zLm9ic2VydmVyICYmIFN1cHBvcnQub2JzZXJ2ZXIpKSB7XG4gICAgc3dpcGVyLnVwZGF0ZSgpO1xuICB9XG4gIGlmIChwYXJhbXMubG9vcCkge1xuICAgIHN3aXBlci5zbGlkZVRvKG5ld0FjdGl2ZUluZGV4ICsgc3dpcGVyLmxvb3BlZFNsaWRlcywgMCwgZmFsc2UpO1xuICB9IGVsc2Uge1xuICAgIHN3aXBlci5zbGlkZVRvKG5ld0FjdGl2ZUluZGV4LCAwLCBmYWxzZSk7XG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcblxuICBjb25zdCBzbGlkZXNJbmRleGVzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3dpcGVyLnNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHNsaWRlc0luZGV4ZXMucHVzaChpKTtcbiAgfVxuICBzd2lwZXIucmVtb3ZlU2xpZGUoc2xpZGVzSW5kZXhlcyk7XG59XG4iLCJpbXBvcnQgYXBwZW5kU2xpZGUgZnJvbSAnLi9hcHBlbmRTbGlkZSc7XG5pbXBvcnQgcHJlcGVuZFNsaWRlIGZyb20gJy4vcHJlcGVuZFNsaWRlJztcbmltcG9ydCBhZGRTbGlkZSBmcm9tICcuL2FkZFNsaWRlJztcbmltcG9ydCByZW1vdmVTbGlkZSBmcm9tICcuL3JlbW92ZVNsaWRlJztcbmltcG9ydCByZW1vdmVBbGxTbGlkZXMgZnJvbSAnLi9yZW1vdmVBbGxTbGlkZXMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGFwcGVuZFNsaWRlLFxuICBwcmVwZW5kU2xpZGUsXG4gIGFkZFNsaWRlLFxuICByZW1vdmVTbGlkZSxcbiAgcmVtb3ZlQWxsU2xpZGVzLFxufTtcbiIsImltcG9ydCB7IHdpbmRvdyB9IGZyb20gJ3Nzci13aW5kb3cnO1xuaW1wb3J0IFN1cHBvcnQgZnJvbSAnLi9zdXBwb3J0JztcblxuY29uc3QgRGV2aWNlID0gKGZ1bmN0aW9uIERldmljZSgpIHtcbiAgY29uc3QgcGxhdGZvcm0gPSB3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtO1xuICBjb25zdCB1YSA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xuXG4gIGNvbnN0IGRldmljZSA9IHtcbiAgICBpb3M6IGZhbHNlLFxuICAgIGFuZHJvaWQ6IGZhbHNlLFxuICAgIGFuZHJvaWRDaHJvbWU6IGZhbHNlLFxuICAgIGRlc2t0b3A6IGZhbHNlLFxuICAgIGlwaG9uZTogZmFsc2UsXG4gICAgaXBvZDogZmFsc2UsXG4gICAgaXBhZDogZmFsc2UsXG4gICAgZWRnZTogZmFsc2UsXG4gICAgaWU6IGZhbHNlLFxuICAgIGZpcmVmb3g6IGZhbHNlLFxuICAgIG1hY29zOiBmYWxzZSxcbiAgICB3aW5kb3dzOiBmYWxzZSxcbiAgICBjb3Jkb3ZhOiAhISh3aW5kb3cuY29yZG92YSB8fCB3aW5kb3cucGhvbmVnYXApLFxuICAgIHBob25lZ2FwOiAhISh3aW5kb3cuY29yZG92YSB8fCB3aW5kb3cucGhvbmVnYXApLFxuICAgIGVsZWN0cm9uOiBmYWxzZSxcbiAgfTtcblxuICBjb25zdCBzY3JlZW5XaWR0aCA9IHdpbmRvdy5zY3JlZW4ud2lkdGg7XG4gIGNvbnN0IHNjcmVlbkhlaWdodCA9IHdpbmRvdy5zY3JlZW4uaGVpZ2h0O1xuXG4gIGNvbnN0IGFuZHJvaWQgPSB1YS5tYXRjaCgvKEFuZHJvaWQpOz9bXFxzXFwvXSsoW1xcZC5dKyk/Lyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgbGV0IGlwYWQgPSB1YS5tYXRjaCgvKGlQYWQpLipPU1xccyhbXFxkX10rKS8pO1xuICBjb25zdCBpcG9kID0gdWEubWF0Y2goLyhpUG9kKSguKk9TXFxzKFtcXGRfXSspKT8vKTtcbiAgY29uc3QgaXBob25lID0gIWlwYWQgJiYgdWEubWF0Y2goLyhpUGhvbmVcXHNPU3xpT1MpXFxzKFtcXGRfXSspLyk7XG4gIGNvbnN0IGllID0gdWEuaW5kZXhPZignTVNJRSAnKSA+PSAwIHx8IHVhLmluZGV4T2YoJ1RyaWRlbnQvJykgPj0gMDtcbiAgY29uc3QgZWRnZSA9IHVhLmluZGV4T2YoJ0VkZ2UvJykgPj0gMDtcbiAgY29uc3QgZmlyZWZveCA9IHVhLmluZGV4T2YoJ0dlY2tvLycpID49IDAgJiYgdWEuaW5kZXhPZignRmlyZWZveC8nKSA+PSAwO1xuICBjb25zdCB3aW5kb3dzID0gcGxhdGZvcm0gPT09ICdXaW4zMic7XG4gIGNvbnN0IGVsZWN0cm9uID0gdWEudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdlbGVjdHJvbicpID49IDA7XG4gIGxldCBtYWNvcyA9IHBsYXRmb3JtID09PSAnTWFjSW50ZWwnO1xuXG4gIC8vIGlQYWRPcyAxMyBmaXhcbiAgaWYgKCFpcGFkXG4gICAgJiYgbWFjb3NcbiAgICAmJiBTdXBwb3J0LnRvdWNoXG4gICAgJiYgKFxuICAgICAgKHNjcmVlbldpZHRoID09PSAxMDI0ICYmIHNjcmVlbkhlaWdodCA9PT0gMTM2NikgLy8gUHJvIDEyLjlcbiAgICAgIHx8IChzY3JlZW5XaWR0aCA9PT0gODM0ICYmIHNjcmVlbkhlaWdodCA9PT0gMTE5NCkgLy8gUHJvIDExXG4gICAgICB8fCAoc2NyZWVuV2lkdGggPT09IDgzNCAmJiBzY3JlZW5IZWlnaHQgPT09IDExMTIpIC8vIFBybyAxMC41XG4gICAgICB8fCAoc2NyZWVuV2lkdGggPT09IDc2OCAmJiBzY3JlZW5IZWlnaHQgPT09IDEwMjQpIC8vIG90aGVyXG4gICAgKVxuICApIHtcbiAgICBpcGFkID0gdWEubWF0Y2goLyhWZXJzaW9uKVxcLyhbXFxkLl0rKS8pO1xuICAgIG1hY29zID0gZmFsc2U7XG4gIH1cblxuICBkZXZpY2UuaWUgPSBpZTtcbiAgZGV2aWNlLmVkZ2UgPSBlZGdlO1xuICBkZXZpY2UuZmlyZWZveCA9IGZpcmVmb3g7XG5cbiAgLy8gQW5kcm9pZFxuICBpZiAoYW5kcm9pZCAmJiAhd2luZG93cykge1xuICAgIGRldmljZS5vcyA9ICdhbmRyb2lkJztcbiAgICBkZXZpY2Uub3NWZXJzaW9uID0gYW5kcm9pZFsyXTtcbiAgICBkZXZpY2UuYW5kcm9pZCA9IHRydWU7XG4gICAgZGV2aWNlLmFuZHJvaWRDaHJvbWUgPSB1YS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2Nocm9tZScpID49IDA7XG4gIH1cbiAgaWYgKGlwYWQgfHwgaXBob25lIHx8IGlwb2QpIHtcbiAgICBkZXZpY2Uub3MgPSAnaW9zJztcbiAgICBkZXZpY2UuaW9zID0gdHJ1ZTtcbiAgfVxuICAvLyBpT1NcbiAgaWYgKGlwaG9uZSAmJiAhaXBvZCkge1xuICAgIGRldmljZS5vc1ZlcnNpb24gPSBpcGhvbmVbMl0ucmVwbGFjZSgvXy9nLCAnLicpO1xuICAgIGRldmljZS5pcGhvbmUgPSB0cnVlO1xuICB9XG4gIGlmIChpcGFkKSB7XG4gICAgZGV2aWNlLm9zVmVyc2lvbiA9IGlwYWRbMl0ucmVwbGFjZSgvXy9nLCAnLicpO1xuICAgIGRldmljZS5pcGFkID0gdHJ1ZTtcbiAgfVxuICBpZiAoaXBvZCkge1xuICAgIGRldmljZS5vc1ZlcnNpb24gPSBpcG9kWzNdID8gaXBvZFszXS5yZXBsYWNlKC9fL2csICcuJykgOiBudWxsO1xuICAgIGRldmljZS5pcG9kID0gdHJ1ZTtcbiAgfVxuICAvLyBpT1MgOCsgY2hhbmdlZCBVQVxuICBpZiAoZGV2aWNlLmlvcyAmJiBkZXZpY2Uub3NWZXJzaW9uICYmIHVhLmluZGV4T2YoJ1ZlcnNpb24vJykgPj0gMCkge1xuICAgIGlmIChkZXZpY2Uub3NWZXJzaW9uLnNwbGl0KCcuJylbMF0gPT09ICcxMCcpIHtcbiAgICAgIGRldmljZS5vc1ZlcnNpb24gPSB1YS50b0xvd2VyQ2FzZSgpLnNwbGl0KCd2ZXJzaW9uLycpWzFdLnNwbGl0KCcgJylbMF07XG4gICAgfVxuICB9XG5cbiAgLy8gV2Vidmlld1xuICBkZXZpY2Uud2ViVmlldyA9ICEhKChpcGhvbmUgfHwgaXBhZCB8fCBpcG9kKSAmJiAodWEubWF0Y2goLy4qQXBwbGVXZWJLaXQoPyEuKlNhZmFyaSkvaSkgfHwgd2luZG93Lm5hdmlnYXRvci5zdGFuZGFsb25lKSlcbiAgICB8fCAod2luZG93Lm1hdGNoTWVkaWEgJiYgd2luZG93Lm1hdGNoTWVkaWEoJyhkaXNwbGF5LW1vZGU6IHN0YW5kYWxvbmUpJykubWF0Y2hlcyk7XG4gIGRldmljZS53ZWJ2aWV3ID0gZGV2aWNlLndlYlZpZXc7XG4gIGRldmljZS5zdGFuZGFsb25lID0gZGV2aWNlLndlYlZpZXc7XG5cbiAgLy8gRGVza3RvcFxuICBkZXZpY2UuZGVza3RvcCA9ICEoZGV2aWNlLmlvcyB8fCBkZXZpY2UuYW5kcm9pZCkgfHwgZWxlY3Ryb247XG4gIGlmIChkZXZpY2UuZGVza3RvcCkge1xuICAgIGRldmljZS5lbGVjdHJvbiA9IGVsZWN0cm9uO1xuICAgIGRldmljZS5tYWNvcyA9IG1hY29zO1xuICAgIGRldmljZS53aW5kb3dzID0gd2luZG93cztcbiAgICBpZiAoZGV2aWNlLm1hY29zKSB7XG4gICAgICBkZXZpY2Uub3MgPSAnbWFjb3MnO1xuICAgIH1cbiAgICBpZiAoZGV2aWNlLndpbmRvd3MpIHtcbiAgICAgIGRldmljZS5vcyA9ICd3aW5kb3dzJztcbiAgICB9XG4gIH1cblxuICAvLyBQaXhlbCBSYXRpb1xuICBkZXZpY2UucGl4ZWxSYXRpbyA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG5cbiAgLy8gRXhwb3J0IG9iamVjdFxuICByZXR1cm4gZGV2aWNlO1xufSgpKTtcblxuZXhwb3J0IGRlZmF1bHQgRGV2aWNlO1xuIiwiaW1wb3J0IHsgd2luZG93LCBkb2N1bWVudCB9IGZyb20gJ3Nzci13aW5kb3cnO1xuaW1wb3J0ICQgZnJvbSAnLi4vLi4vLi4vdXRpbHMvZG9tJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi8uLi91dGlscy91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChldmVudCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCBkYXRhID0gc3dpcGVyLnRvdWNoRXZlbnRzRGF0YTtcbiAgY29uc3QgeyBwYXJhbXMsIHRvdWNoZXMgfSA9IHN3aXBlcjtcblxuICBpZiAoc3dpcGVyLmFuaW1hdGluZyAmJiBwYXJhbXMucHJldmVudEludGVyYWN0aW9uT25UcmFuc2l0aW9uKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBlID0gZXZlbnQ7XG4gIGlmIChlLm9yaWdpbmFsRXZlbnQpIGUgPSBlLm9yaWdpbmFsRXZlbnQ7XG4gIGNvbnN0ICR0YXJnZXRFbCA9ICQoZS50YXJnZXQpO1xuXG4gIGlmIChwYXJhbXMudG91Y2hFdmVudHNUYXJnZXQgPT09ICd3cmFwcGVyJykge1xuICAgIGlmICghJHRhcmdldEVsLmNsb3Nlc3Qoc3dpcGVyLndyYXBwZXJFbCkubGVuZ3RoKSByZXR1cm47XG4gIH1cbiAgZGF0YS5pc1RvdWNoRXZlbnQgPSBlLnR5cGUgPT09ICd0b3VjaHN0YXJ0JztcbiAgaWYgKCFkYXRhLmlzVG91Y2hFdmVudCAmJiAnd2hpY2gnIGluIGUgJiYgZS53aGljaCA9PT0gMykgcmV0dXJuO1xuICBpZiAoIWRhdGEuaXNUb3VjaEV2ZW50ICYmICdidXR0b24nIGluIGUgJiYgZS5idXR0b24gPiAwKSByZXR1cm47XG4gIGlmIChkYXRhLmlzVG91Y2hlZCAmJiBkYXRhLmlzTW92ZWQpIHJldHVybjtcbiAgaWYgKHBhcmFtcy5ub1N3aXBpbmcgJiYgJHRhcmdldEVsLmNsb3Nlc3QocGFyYW1zLm5vU3dpcGluZ1NlbGVjdG9yID8gcGFyYW1zLm5vU3dpcGluZ1NlbGVjdG9yIDogYC4ke3BhcmFtcy5ub1N3aXBpbmdDbGFzc31gKVswXSkge1xuICAgIHN3aXBlci5hbGxvd0NsaWNrID0gdHJ1ZTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHBhcmFtcy5zd2lwZUhhbmRsZXIpIHtcbiAgICBpZiAoISR0YXJnZXRFbC5jbG9zZXN0KHBhcmFtcy5zd2lwZUhhbmRsZXIpWzBdKSByZXR1cm47XG4gIH1cblxuICB0b3VjaGVzLmN1cnJlbnRYID0gZS50eXBlID09PSAndG91Y2hzdGFydCcgPyBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVggOiBlLnBhZ2VYO1xuICB0b3VjaGVzLmN1cnJlbnRZID0gZS50eXBlID09PSAndG91Y2hzdGFydCcgPyBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVkgOiBlLnBhZ2VZO1xuICBjb25zdCBzdGFydFggPSB0b3VjaGVzLmN1cnJlbnRYO1xuICBjb25zdCBzdGFydFkgPSB0b3VjaGVzLmN1cnJlbnRZO1xuXG4gIC8vIERvIE5PVCBzdGFydCBpZiBpT1MgZWRnZSBzd2lwZSBpcyBkZXRlY3RlZC4gT3RoZXJ3aXNlIGlPUyBhcHAgY2Fubm90IHN3aXBlLXRvLWdvLWJhY2sgYW55bW9yZVxuXG4gIGNvbnN0IGVkZ2VTd2lwZURldGVjdGlvbiA9IHBhcmFtcy5lZGdlU3dpcGVEZXRlY3Rpb24gfHwgcGFyYW1zLmlPU0VkZ2VTd2lwZURldGVjdGlvbjtcbiAgY29uc3QgZWRnZVN3aXBlVGhyZXNob2xkID0gcGFyYW1zLmVkZ2VTd2lwZVRocmVzaG9sZCB8fCBwYXJhbXMuaU9TRWRnZVN3aXBlVGhyZXNob2xkO1xuICBpZiAoXG4gICAgZWRnZVN3aXBlRGV0ZWN0aW9uXG4gICAgJiYgKChzdGFydFggPD0gZWRnZVN3aXBlVGhyZXNob2xkKVxuICAgIHx8IChzdGFydFggPj0gd2luZG93LnNjcmVlbi53aWR0aCAtIGVkZ2VTd2lwZVRocmVzaG9sZCkpXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIFV0aWxzLmV4dGVuZChkYXRhLCB7XG4gICAgaXNUb3VjaGVkOiB0cnVlLFxuICAgIGlzTW92ZWQ6IGZhbHNlLFxuICAgIGFsbG93VG91Y2hDYWxsYmFja3M6IHRydWUsXG4gICAgaXNTY3JvbGxpbmc6IHVuZGVmaW5lZCxcbiAgICBzdGFydE1vdmluZzogdW5kZWZpbmVkLFxuICB9KTtcblxuICB0b3VjaGVzLnN0YXJ0WCA9IHN0YXJ0WDtcbiAgdG91Y2hlcy5zdGFydFkgPSBzdGFydFk7XG4gIGRhdGEudG91Y2hTdGFydFRpbWUgPSBVdGlscy5ub3coKTtcbiAgc3dpcGVyLmFsbG93Q2xpY2sgPSB0cnVlO1xuICBzd2lwZXIudXBkYXRlU2l6ZSgpO1xuICBzd2lwZXIuc3dpcGVEaXJlY3Rpb24gPSB1bmRlZmluZWQ7XG4gIGlmIChwYXJhbXMudGhyZXNob2xkID4gMCkgZGF0YS5hbGxvd1RocmVzaG9sZE1vdmUgPSBmYWxzZTtcbiAgaWYgKGUudHlwZSAhPT0gJ3RvdWNoc3RhcnQnKSB7XG4gICAgbGV0IHByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcbiAgICBpZiAoJHRhcmdldEVsLmlzKGRhdGEuZm9ybUVsZW1lbnRzKSkgcHJldmVudERlZmF1bHQgPSBmYWxzZTtcbiAgICBpZiAoXG4gICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50XG4gICAgICAmJiAkKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLmlzKGRhdGEuZm9ybUVsZW1lbnRzKVxuICAgICAgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gJHRhcmdldEVsWzBdXG4gICAgKSB7XG4gICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKTtcbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IHByZXZlbnREZWZhdWx0ICYmIHN3aXBlci5hbGxvd1RvdWNoTW92ZSAmJiBwYXJhbXMudG91Y2hTdGFydFByZXZlbnREZWZhdWx0O1xuICAgIGlmIChwYXJhbXMudG91Y2hTdGFydEZvcmNlUHJldmVudERlZmF1bHQgfHwgc2hvdWxkUHJldmVudERlZmF1bHQpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbiAgc3dpcGVyLmVtaXQoJ3RvdWNoU3RhcnQnLCBlKTtcbn1cbiIsImltcG9ydCB7IGRvY3VtZW50IH0gZnJvbSAnc3NyLXdpbmRvdyc7XG5pbXBvcnQgJCBmcm9tICcuLi8uLi8uLi91dGlscy9kb20nO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uLy4uL3V0aWxzL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IGRhdGEgPSBzd2lwZXIudG91Y2hFdmVudHNEYXRhO1xuICBjb25zdCB7IHBhcmFtcywgdG91Y2hlcywgcnRsVHJhbnNsYXRlOiBydGwgfSA9IHN3aXBlcjtcbiAgbGV0IGUgPSBldmVudDtcbiAgaWYgKGUub3JpZ2luYWxFdmVudCkgZSA9IGUub3JpZ2luYWxFdmVudDtcbiAgaWYgKCFkYXRhLmlzVG91Y2hlZCkge1xuICAgIGlmIChkYXRhLnN0YXJ0TW92aW5nICYmIGRhdGEuaXNTY3JvbGxpbmcpIHtcbiAgICAgIHN3aXBlci5lbWl0KCd0b3VjaE1vdmVPcHBvc2l0ZScsIGUpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGRhdGEuaXNUb3VjaEV2ZW50ICYmIGUudHlwZSAhPT0gJ3RvdWNobW92ZScpIHJldHVybjtcbiAgY29uc3QgdGFyZ2V0VG91Y2ggPSBlLnR5cGUgPT09ICd0b3VjaG1vdmUnICYmIGUudGFyZ2V0VG91Y2hlcyAmJiAoZS50YXJnZXRUb3VjaGVzWzBdIHx8IGUuY2hhbmdlZFRvdWNoZXNbMF0pO1xuICBjb25zdCBwYWdlWCA9IGUudHlwZSA9PT0gJ3RvdWNobW92ZScgPyB0YXJnZXRUb3VjaC5wYWdlWCA6IGUucGFnZVg7XG4gIGNvbnN0IHBhZ2VZID0gZS50eXBlID09PSAndG91Y2htb3ZlJyA/IHRhcmdldFRvdWNoLnBhZ2VZIDogZS5wYWdlWTtcbiAgaWYgKGUucHJldmVudGVkQnlOZXN0ZWRTd2lwZXIpIHtcbiAgICB0b3VjaGVzLnN0YXJ0WCA9IHBhZ2VYO1xuICAgIHRvdWNoZXMuc3RhcnRZID0gcGFnZVk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghc3dpcGVyLmFsbG93VG91Y2hNb3ZlKSB7XG4gICAgLy8gaXNNb3ZlZCA9IHRydWU7XG4gICAgc3dpcGVyLmFsbG93Q2xpY2sgPSBmYWxzZTtcbiAgICBpZiAoZGF0YS5pc1RvdWNoZWQpIHtcbiAgICAgIFV0aWxzLmV4dGVuZCh0b3VjaGVzLCB7XG4gICAgICAgIHN0YXJ0WDogcGFnZVgsXG4gICAgICAgIHN0YXJ0WTogcGFnZVksXG4gICAgICAgIGN1cnJlbnRYOiBwYWdlWCxcbiAgICAgICAgY3VycmVudFk6IHBhZ2VZLFxuICAgICAgfSk7XG4gICAgICBkYXRhLnRvdWNoU3RhcnRUaW1lID0gVXRpbHMubm93KCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZGF0YS5pc1RvdWNoRXZlbnQgJiYgcGFyYW1zLnRvdWNoUmVsZWFzZU9uRWRnZXMgJiYgIXBhcmFtcy5sb29wKSB7XG4gICAgaWYgKHN3aXBlci5pc1ZlcnRpY2FsKCkpIHtcbiAgICAgIC8vIFZlcnRpY2FsXG4gICAgICBpZiAoXG4gICAgICAgIChwYWdlWSA8IHRvdWNoZXMuc3RhcnRZICYmIHN3aXBlci50cmFuc2xhdGUgPD0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpKVxuICAgICAgICB8fCAocGFnZVkgPiB0b3VjaGVzLnN0YXJ0WSAmJiBzd2lwZXIudHJhbnNsYXRlID49IHN3aXBlci5taW5UcmFuc2xhdGUoKSlcbiAgICAgICkge1xuICAgICAgICBkYXRhLmlzVG91Y2hlZCA9IGZhbHNlO1xuICAgICAgICBkYXRhLmlzTW92ZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICAocGFnZVggPCB0b3VjaGVzLnN0YXJ0WCAmJiBzd2lwZXIudHJhbnNsYXRlIDw9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSlcbiAgICAgIHx8IChwYWdlWCA+IHRvdWNoZXMuc3RhcnRYICYmIHN3aXBlci50cmFuc2xhdGUgPj0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBpZiAoZGF0YS5pc1RvdWNoRXZlbnQgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgIGlmIChlLnRhcmdldCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiAkKGUudGFyZ2V0KS5pcyhkYXRhLmZvcm1FbGVtZW50cykpIHtcbiAgICAgIGRhdGEuaXNNb3ZlZCA9IHRydWU7XG4gICAgICBzd2lwZXIuYWxsb3dDbGljayA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBpZiAoZGF0YS5hbGxvd1RvdWNoQ2FsbGJhY2tzKSB7XG4gICAgc3dpcGVyLmVtaXQoJ3RvdWNoTW92ZScsIGUpO1xuICB9XG4gIGlmIChlLnRhcmdldFRvdWNoZXMgJiYgZS50YXJnZXRUb3VjaGVzLmxlbmd0aCA+IDEpIHJldHVybjtcblxuICB0b3VjaGVzLmN1cnJlbnRYID0gcGFnZVg7XG4gIHRvdWNoZXMuY3VycmVudFkgPSBwYWdlWTtcblxuICBjb25zdCBkaWZmWCA9IHRvdWNoZXMuY3VycmVudFggLSB0b3VjaGVzLnN0YXJ0WDtcbiAgY29uc3QgZGlmZlkgPSB0b3VjaGVzLmN1cnJlbnRZIC0gdG91Y2hlcy5zdGFydFk7XG4gIGlmIChzd2lwZXIucGFyYW1zLnRocmVzaG9sZCAmJiBNYXRoLnNxcnQoKGRpZmZYICoqIDIpICsgKGRpZmZZICoqIDIpKSA8IHN3aXBlci5wYXJhbXMudGhyZXNob2xkKSByZXR1cm47XG5cbiAgaWYgKHR5cGVvZiBkYXRhLmlzU2Nyb2xsaW5nID09PSAndW5kZWZpbmVkJykge1xuICAgIGxldCB0b3VjaEFuZ2xlO1xuICAgIGlmICgoc3dpcGVyLmlzSG9yaXpvbnRhbCgpICYmIHRvdWNoZXMuY3VycmVudFkgPT09IHRvdWNoZXMuc3RhcnRZKSB8fCAoc3dpcGVyLmlzVmVydGljYWwoKSAmJiB0b3VjaGVzLmN1cnJlbnRYID09PSB0b3VjaGVzLnN0YXJ0WCkpIHtcbiAgICAgIGRhdGEuaXNTY3JvbGxpbmcgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICBpZiAoKGRpZmZYICogZGlmZlgpICsgKGRpZmZZICogZGlmZlkpID49IDI1KSB7XG4gICAgICAgIHRvdWNoQW5nbGUgPSAoTWF0aC5hdGFuMihNYXRoLmFicyhkaWZmWSksIE1hdGguYWJzKGRpZmZYKSkgKiAxODApIC8gTWF0aC5QSTtcbiAgICAgICAgZGF0YS5pc1Njcm9sbGluZyA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/IHRvdWNoQW5nbGUgPiBwYXJhbXMudG91Y2hBbmdsZSA6ICg5MCAtIHRvdWNoQW5nbGUgPiBwYXJhbXMudG91Y2hBbmdsZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChkYXRhLmlzU2Nyb2xsaW5nKSB7XG4gICAgc3dpcGVyLmVtaXQoJ3RvdWNoTW92ZU9wcG9zaXRlJywgZSk7XG4gIH1cbiAgaWYgKHR5cGVvZiBkYXRhLnN0YXJ0TW92aW5nID09PSAndW5kZWZpbmVkJykge1xuICAgIGlmICh0b3VjaGVzLmN1cnJlbnRYICE9PSB0b3VjaGVzLnN0YXJ0WCB8fCB0b3VjaGVzLmN1cnJlbnRZICE9PSB0b3VjaGVzLnN0YXJ0WSkge1xuICAgICAgZGF0YS5zdGFydE1vdmluZyA9IHRydWU7XG4gICAgfVxuICB9XG4gIGlmIChkYXRhLmlzU2Nyb2xsaW5nKSB7XG4gICAgZGF0YS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFkYXRhLnN0YXJ0TW92aW5nKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHN3aXBlci5hbGxvd0NsaWNrID0gZmFsc2U7XG4gIGlmICghcGFyYW1zLmNzc01vZGUgJiYgZS5jYW5jZWxhYmxlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG4gIGlmIChwYXJhbXMudG91Y2hNb3ZlU3RvcFByb3BhZ2F0aW9uICYmICFwYXJhbXMubmVzdGVkKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIGlmICghZGF0YS5pc01vdmVkKSB7XG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBzd2lwZXIubG9vcEZpeCgpO1xuICAgIH1cbiAgICBkYXRhLnN0YXJ0VHJhbnNsYXRlID0gc3dpcGVyLmdldFRyYW5zbGF0ZSgpO1xuICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKDApO1xuICAgIGlmIChzd2lwZXIuYW5pbWF0aW5nKSB7XG4gICAgICBzd2lwZXIuJHdyYXBwZXJFbC50cmlnZ2VyKCd3ZWJraXRUcmFuc2l0aW9uRW5kIHRyYW5zaXRpb25lbmQnKTtcbiAgICB9XG4gICAgZGF0YS5hbGxvd01vbWVudHVtQm91bmNlID0gZmFsc2U7XG4gICAgLy8gR3JhYiBDdXJzb3JcbiAgICBpZiAocGFyYW1zLmdyYWJDdXJzb3IgJiYgKHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9PT0gdHJ1ZSB8fCBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPT09IHRydWUpKSB7XG4gICAgICBzd2lwZXIuc2V0R3JhYkN1cnNvcih0cnVlKTtcbiAgICB9XG4gICAgc3dpcGVyLmVtaXQoJ3NsaWRlckZpcnN0TW92ZScsIGUpO1xuICB9XG4gIHN3aXBlci5lbWl0KCdzbGlkZXJNb3ZlJywgZSk7XG4gIGRhdGEuaXNNb3ZlZCA9IHRydWU7XG5cbiAgbGV0IGRpZmYgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyBkaWZmWCA6IGRpZmZZO1xuICB0b3VjaGVzLmRpZmYgPSBkaWZmO1xuXG4gIGRpZmYgKj0gcGFyYW1zLnRvdWNoUmF0aW87XG4gIGlmIChydGwpIGRpZmYgPSAtZGlmZjtcblxuICBzd2lwZXIuc3dpcGVEaXJlY3Rpb24gPSBkaWZmID4gMCA/ICdwcmV2JyA6ICduZXh0JztcbiAgZGF0YS5jdXJyZW50VHJhbnNsYXRlID0gZGlmZiArIGRhdGEuc3RhcnRUcmFuc2xhdGU7XG5cbiAgbGV0IGRpc2FibGVQYXJlbnRTd2lwZXIgPSB0cnVlO1xuICBsZXQgcmVzaXN0YW5jZVJhdGlvID0gcGFyYW1zLnJlc2lzdGFuY2VSYXRpbztcbiAgaWYgKHBhcmFtcy50b3VjaFJlbGVhc2VPbkVkZ2VzKSB7XG4gICAgcmVzaXN0YW5jZVJhdGlvID0gMDtcbiAgfVxuICBpZiAoKGRpZmYgPiAwICYmIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA+IHN3aXBlci5taW5UcmFuc2xhdGUoKSkpIHtcbiAgICBkaXNhYmxlUGFyZW50U3dpcGVyID0gZmFsc2U7XG4gICAgaWYgKHBhcmFtcy5yZXNpc3RhbmNlKSBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPSAoc3dpcGVyLm1pblRyYW5zbGF0ZSgpIC0gMSkgKyAoKC1zd2lwZXIubWluVHJhbnNsYXRlKCkgKyBkYXRhLnN0YXJ0VHJhbnNsYXRlICsgZGlmZikgKiogcmVzaXN0YW5jZVJhdGlvKTtcbiAgfSBlbHNlIGlmIChkaWZmIDwgMCAmJiBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPCBzd2lwZXIubWF4VHJhbnNsYXRlKCkpIHtcbiAgICBkaXNhYmxlUGFyZW50U3dpcGVyID0gZmFsc2U7XG4gICAgaWYgKHBhcmFtcy5yZXNpc3RhbmNlKSBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPSAoc3dpcGVyLm1heFRyYW5zbGF0ZSgpICsgMSkgLSAoKHN3aXBlci5tYXhUcmFuc2xhdGUoKSAtIGRhdGEuc3RhcnRUcmFuc2xhdGUgLSBkaWZmKSAqKiByZXNpc3RhbmNlUmF0aW8pO1xuICB9XG5cbiAgaWYgKGRpc2FibGVQYXJlbnRTd2lwZXIpIHtcbiAgICBlLnByZXZlbnRlZEJ5TmVzdGVkU3dpcGVyID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIERpcmVjdGlvbnMgbG9ja3NcbiAgaWYgKCFzd2lwZXIuYWxsb3dTbGlkZU5leHQgJiYgc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAnbmV4dCcgJiYgZGF0YS5jdXJyZW50VHJhbnNsYXRlIDwgZGF0YS5zdGFydFRyYW5zbGF0ZSkge1xuICAgIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IGRhdGEuc3RhcnRUcmFuc2xhdGU7XG4gIH1cbiAgaWYgKCFzd2lwZXIuYWxsb3dTbGlkZVByZXYgJiYgc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAncHJldicgJiYgZGF0YS5jdXJyZW50VHJhbnNsYXRlID4gZGF0YS5zdGFydFRyYW5zbGF0ZSkge1xuICAgIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IGRhdGEuc3RhcnRUcmFuc2xhdGU7XG4gIH1cblxuXG4gIC8vIFRocmVzaG9sZFxuICBpZiAocGFyYW1zLnRocmVzaG9sZCA+IDApIHtcbiAgICBpZiAoTWF0aC5hYnMoZGlmZikgPiBwYXJhbXMudGhyZXNob2xkIHx8IGRhdGEuYWxsb3dUaHJlc2hvbGRNb3ZlKSB7XG4gICAgICBpZiAoIWRhdGEuYWxsb3dUaHJlc2hvbGRNb3ZlKSB7XG4gICAgICAgIGRhdGEuYWxsb3dUaHJlc2hvbGRNb3ZlID0gdHJ1ZTtcbiAgICAgICAgdG91Y2hlcy5zdGFydFggPSB0b3VjaGVzLmN1cnJlbnRYO1xuICAgICAgICB0b3VjaGVzLnN0YXJ0WSA9IHRvdWNoZXMuY3VycmVudFk7XG4gICAgICAgIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IGRhdGEuc3RhcnRUcmFuc2xhdGU7XG4gICAgICAgIHRvdWNoZXMuZGlmZiA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/IHRvdWNoZXMuY3VycmVudFggLSB0b3VjaGVzLnN0YXJ0WCA6IHRvdWNoZXMuY3VycmVudFkgLSB0b3VjaGVzLnN0YXJ0WTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPSBkYXRhLnN0YXJ0VHJhbnNsYXRlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmICghcGFyYW1zLmZvbGxvd0ZpbmdlciB8fCBwYXJhbXMuY3NzTW9kZSkgcmV0dXJuO1xuXG4gIC8vIFVwZGF0ZSBhY3RpdmUgaW5kZXggaW4gZnJlZSBtb2RlXG4gIGlmIChwYXJhbXMuZnJlZU1vZGUgfHwgcGFyYW1zLndhdGNoU2xpZGVzUHJvZ3Jlc3MgfHwgcGFyYW1zLndhdGNoU2xpZGVzVmlzaWJpbGl0eSkge1xuICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gIH1cbiAgaWYgKHBhcmFtcy5mcmVlTW9kZSkge1xuICAgIC8vIFZlbG9jaXR5XG4gICAgaWYgKGRhdGEudmVsb2NpdGllcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGRhdGEudmVsb2NpdGllcy5wdXNoKHtcbiAgICAgICAgcG9zaXRpb246IHRvdWNoZXNbc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ3N0YXJ0WCcgOiAnc3RhcnRZJ10sXG4gICAgICAgIHRpbWU6IGRhdGEudG91Y2hTdGFydFRpbWUsXG4gICAgICB9KTtcbiAgICB9XG4gICAgZGF0YS52ZWxvY2l0aWVzLnB1c2goe1xuICAgICAgcG9zaXRpb246IHRvdWNoZXNbc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ2N1cnJlbnRYJyA6ICdjdXJyZW50WSddLFxuICAgICAgdGltZTogVXRpbHMubm93KCksXG4gICAgfSk7XG4gIH1cbiAgLy8gVXBkYXRlIHByb2dyZXNzXG4gIHN3aXBlci51cGRhdGVQcm9ncmVzcyhkYXRhLmN1cnJlbnRUcmFuc2xhdGUpO1xuICAvLyBVcGRhdGUgdHJhbnNsYXRlXG4gIHN3aXBlci5zZXRUcmFuc2xhdGUoZGF0YS5jdXJyZW50VHJhbnNsYXRlKTtcbn1cbiIsImltcG9ydCBVdGlscyBmcm9tICcuLi8uLi8uLi91dGlscy91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChldmVudCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCBkYXRhID0gc3dpcGVyLnRvdWNoRXZlbnRzRGF0YTtcblxuICBjb25zdCB7XG4gICAgcGFyYW1zLCB0b3VjaGVzLCBydGxUcmFuc2xhdGU6IHJ0bCwgJHdyYXBwZXJFbCwgc2xpZGVzR3JpZCwgc25hcEdyaWQsXG4gIH0gPSBzd2lwZXI7XG4gIGxldCBlID0gZXZlbnQ7XG4gIGlmIChlLm9yaWdpbmFsRXZlbnQpIGUgPSBlLm9yaWdpbmFsRXZlbnQ7XG4gIGlmIChkYXRhLmFsbG93VG91Y2hDYWxsYmFja3MpIHtcbiAgICBzd2lwZXIuZW1pdCgndG91Y2hFbmQnLCBlKTtcbiAgfVxuICBkYXRhLmFsbG93VG91Y2hDYWxsYmFja3MgPSBmYWxzZTtcbiAgaWYgKCFkYXRhLmlzVG91Y2hlZCkge1xuICAgIGlmIChkYXRhLmlzTW92ZWQgJiYgcGFyYW1zLmdyYWJDdXJzb3IpIHtcbiAgICAgIHN3aXBlci5zZXRHcmFiQ3Vyc29yKGZhbHNlKTtcbiAgICB9XG4gICAgZGF0YS5pc01vdmVkID0gZmFsc2U7XG4gICAgZGF0YS5zdGFydE1vdmluZyA9IGZhbHNlO1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBSZXR1cm4gR3JhYiBDdXJzb3JcbiAgaWYgKHBhcmFtcy5ncmFiQ3Vyc29yICYmIGRhdGEuaXNNb3ZlZCAmJiBkYXRhLmlzVG91Y2hlZCAmJiAoc3dpcGVyLmFsbG93U2xpZGVOZXh0ID09PSB0cnVlIHx8IHN3aXBlci5hbGxvd1NsaWRlUHJldiA9PT0gdHJ1ZSkpIHtcbiAgICBzd2lwZXIuc2V0R3JhYkN1cnNvcihmYWxzZSk7XG4gIH1cblxuICAvLyBUaW1lIGRpZmZcbiAgY29uc3QgdG91Y2hFbmRUaW1lID0gVXRpbHMubm93KCk7XG4gIGNvbnN0IHRpbWVEaWZmID0gdG91Y2hFbmRUaW1lIC0gZGF0YS50b3VjaFN0YXJ0VGltZTtcblxuICAvLyBUYXAsIGRvdWJsZVRhcCwgQ2xpY2tcbiAgaWYgKHN3aXBlci5hbGxvd0NsaWNrKSB7XG4gICAgc3dpcGVyLnVwZGF0ZUNsaWNrZWRTbGlkZShlKTtcbiAgICBzd2lwZXIuZW1pdCgndGFwIGNsaWNrJywgZSk7XG4gICAgaWYgKHRpbWVEaWZmIDwgMzAwICYmICh0b3VjaEVuZFRpbWUgLSBkYXRhLmxhc3RDbGlja1RpbWUpIDwgMzAwKSB7XG4gICAgICBzd2lwZXIuZW1pdCgnZG91YmxlVGFwIGRvdWJsZUNsaWNrJywgZSk7XG4gICAgfVxuICB9XG5cbiAgZGF0YS5sYXN0Q2xpY2tUaW1lID0gVXRpbHMubm93KCk7XG4gIFV0aWxzLm5leHRUaWNrKCgpID0+IHtcbiAgICBpZiAoIXN3aXBlci5kZXN0cm95ZWQpIHN3aXBlci5hbGxvd0NsaWNrID0gdHJ1ZTtcbiAgfSk7XG5cbiAgaWYgKCFkYXRhLmlzVG91Y2hlZCB8fCAhZGF0YS5pc01vdmVkIHx8ICFzd2lwZXIuc3dpcGVEaXJlY3Rpb24gfHwgdG91Y2hlcy5kaWZmID09PSAwIHx8IGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9PT0gZGF0YS5zdGFydFRyYW5zbGF0ZSkge1xuICAgIGRhdGEuaXNUb3VjaGVkID0gZmFsc2U7XG4gICAgZGF0YS5pc01vdmVkID0gZmFsc2U7XG4gICAgZGF0YS5zdGFydE1vdmluZyA9IGZhbHNlO1xuICAgIHJldHVybjtcbiAgfVxuICBkYXRhLmlzVG91Y2hlZCA9IGZhbHNlO1xuICBkYXRhLmlzTW92ZWQgPSBmYWxzZTtcbiAgZGF0YS5zdGFydE1vdmluZyA9IGZhbHNlO1xuXG4gIGxldCBjdXJyZW50UG9zO1xuICBpZiAocGFyYW1zLmZvbGxvd0Zpbmdlcikge1xuICAgIGN1cnJlbnRQb3MgPSBydGwgPyBzd2lwZXIudHJhbnNsYXRlIDogLXN3aXBlci50cmFuc2xhdGU7XG4gIH0gZWxzZSB7XG4gICAgY3VycmVudFBvcyA9IC1kYXRhLmN1cnJlbnRUcmFuc2xhdGU7XG4gIH1cblxuICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocGFyYW1zLmZyZWVNb2RlKSB7XG4gICAgaWYgKGN1cnJlbnRQb3MgPCAtc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuYWN0aXZlSW5kZXgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY3VycmVudFBvcyA+IC1zd2lwZXIubWF4VHJhbnNsYXRlKCkpIHtcbiAgICAgIGlmIChzd2lwZXIuc2xpZGVzLmxlbmd0aCA8IHNuYXBHcmlkLmxlbmd0aCkge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhzbmFwR3JpZC5sZW5ndGggLSAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gMSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5mcmVlTW9kZU1vbWVudHVtKSB7XG4gICAgICBpZiAoZGF0YS52ZWxvY2l0aWVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgY29uc3QgbGFzdE1vdmVFdmVudCA9IGRhdGEudmVsb2NpdGllcy5wb3AoKTtcbiAgICAgICAgY29uc3QgdmVsb2NpdHlFdmVudCA9IGRhdGEudmVsb2NpdGllcy5wb3AoKTtcblxuICAgICAgICBjb25zdCBkaXN0YW5jZSA9IGxhc3RNb3ZlRXZlbnQucG9zaXRpb24gLSB2ZWxvY2l0eUV2ZW50LnBvc2l0aW9uO1xuICAgICAgICBjb25zdCB0aW1lID0gbGFzdE1vdmVFdmVudC50aW1lIC0gdmVsb2NpdHlFdmVudC50aW1lO1xuICAgICAgICBzd2lwZXIudmVsb2NpdHkgPSBkaXN0YW5jZSAvIHRpbWU7XG4gICAgICAgIHN3aXBlci52ZWxvY2l0eSAvPSAyO1xuICAgICAgICBpZiAoTWF0aC5hYnMoc3dpcGVyLnZlbG9jaXR5KSA8IHBhcmFtcy5mcmVlTW9kZU1pbmltdW1WZWxvY2l0eSkge1xuICAgICAgICAgIHN3aXBlci52ZWxvY2l0eSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGhpcyBpbXBsaWVzIHRoYXQgdGhlIHVzZXIgc3RvcHBlZCBtb3ZpbmcgYSBmaW5nZXIgdGhlbiByZWxlYXNlZC5cbiAgICAgICAgLy8gVGhlcmUgd291bGQgYmUgbm8gZXZlbnRzIHdpdGggZGlzdGFuY2UgemVybywgc28gdGhlIGxhc3QgZXZlbnQgaXMgc3RhbGUuXG4gICAgICAgIGlmICh0aW1lID4gMTUwIHx8IChVdGlscy5ub3coKSAtIGxhc3RNb3ZlRXZlbnQudGltZSkgPiAzMDApIHtcbiAgICAgICAgICBzd2lwZXIudmVsb2NpdHkgPSAwO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIudmVsb2NpdHkgPSAwO1xuICAgICAgfVxuICAgICAgc3dpcGVyLnZlbG9jaXR5ICo9IHBhcmFtcy5mcmVlTW9kZU1vbWVudHVtVmVsb2NpdHlSYXRpbztcblxuICAgICAgZGF0YS52ZWxvY2l0aWVzLmxlbmd0aCA9IDA7XG4gICAgICBsZXQgbW9tZW50dW1EdXJhdGlvbiA9IDEwMDAgKiBwYXJhbXMuZnJlZU1vZGVNb21lbnR1bVJhdGlvO1xuICAgICAgY29uc3QgbW9tZW50dW1EaXN0YW5jZSA9IHN3aXBlci52ZWxvY2l0eSAqIG1vbWVudHVtRHVyYXRpb247XG5cbiAgICAgIGxldCBuZXdQb3NpdGlvbiA9IHN3aXBlci50cmFuc2xhdGUgKyBtb21lbnR1bURpc3RhbmNlO1xuICAgICAgaWYgKHJ0bCkgbmV3UG9zaXRpb24gPSAtbmV3UG9zaXRpb247XG5cbiAgICAgIGxldCBkb0JvdW5jZSA9IGZhbHNlO1xuICAgICAgbGV0IGFmdGVyQm91bmNlUG9zaXRpb247XG4gICAgICBjb25zdCBib3VuY2VBbW91bnQgPSBNYXRoLmFicyhzd2lwZXIudmVsb2NpdHkpICogMjAgKiBwYXJhbXMuZnJlZU1vZGVNb21lbnR1bUJvdW5jZVJhdGlvO1xuICAgICAgbGV0IG5lZWRzTG9vcEZpeDtcbiAgICAgIGlmIChuZXdQb3NpdGlvbiA8IHN3aXBlci5tYXhUcmFuc2xhdGUoKSkge1xuICAgICAgICBpZiAocGFyYW1zLmZyZWVNb2RlTW9tZW50dW1Cb3VuY2UpIHtcbiAgICAgICAgICBpZiAobmV3UG9zaXRpb24gKyBzd2lwZXIubWF4VHJhbnNsYXRlKCkgPCAtYm91bmNlQW1vdW50KSB7XG4gICAgICAgICAgICBuZXdQb3NpdGlvbiA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSAtIGJvdW5jZUFtb3VudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWZ0ZXJCb3VuY2VQb3NpdGlvbiA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKTtcbiAgICAgICAgICBkb0JvdW5jZSA9IHRydWU7XG4gICAgICAgICAgZGF0YS5hbGxvd01vbWVudHVtQm91bmNlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdQb3NpdGlvbiA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1zLmxvb3AgJiYgcGFyYW1zLmNlbnRlcmVkU2xpZGVzKSBuZWVkc0xvb3BGaXggPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChuZXdQb3NpdGlvbiA+IHN3aXBlci5taW5UcmFuc2xhdGUoKSkge1xuICAgICAgICBpZiAocGFyYW1zLmZyZWVNb2RlTW9tZW50dW1Cb3VuY2UpIHtcbiAgICAgICAgICBpZiAobmV3UG9zaXRpb24gLSBzd2lwZXIubWluVHJhbnNsYXRlKCkgPiBib3VuY2VBbW91bnQpIHtcbiAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpICsgYm91bmNlQW1vdW50O1xuICAgICAgICAgIH1cbiAgICAgICAgICBhZnRlckJvdW5jZVBvc2l0aW9uID0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpO1xuICAgICAgICAgIGRvQm91bmNlID0gdHJ1ZTtcbiAgICAgICAgICBkYXRhLmFsbG93TW9tZW50dW1Cb3VuY2UgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbXMubG9vcCAmJiBwYXJhbXMuY2VudGVyZWRTbGlkZXMpIG5lZWRzTG9vcEZpeCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHBhcmFtcy5mcmVlTW9kZVN0aWNreSkge1xuICAgICAgICBsZXQgbmV4dFNsaWRlO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHNuYXBHcmlkLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgICAgaWYgKHNuYXBHcmlkW2pdID4gLW5ld1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICBuZXh0U2xpZGUgPSBqO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKHNuYXBHcmlkW25leHRTbGlkZV0gLSBuZXdQb3NpdGlvbikgPCBNYXRoLmFicyhzbmFwR3JpZFtuZXh0U2xpZGUgLSAxXSAtIG5ld1Bvc2l0aW9uKSB8fCBzd2lwZXIuc3dpcGVEaXJlY3Rpb24gPT09ICduZXh0Jykge1xuICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc25hcEdyaWRbbmV4dFNsaWRlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdQb3NpdGlvbiA9IHNuYXBHcmlkW25leHRTbGlkZSAtIDFdO1xuICAgICAgICB9XG4gICAgICAgIG5ld1Bvc2l0aW9uID0gLW5ld1Bvc2l0aW9uO1xuICAgICAgfVxuICAgICAgaWYgKG5lZWRzTG9vcEZpeCkge1xuICAgICAgICBzd2lwZXIub25jZSgndHJhbnNpdGlvbkVuZCcsICgpID0+IHtcbiAgICAgICAgICBzd2lwZXIubG9vcEZpeCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIEZpeCBkdXJhdGlvblxuICAgICAgaWYgKHN3aXBlci52ZWxvY2l0eSAhPT0gMCkge1xuICAgICAgICBpZiAocnRsKSB7XG4gICAgICAgICAgbW9tZW50dW1EdXJhdGlvbiA9IE1hdGguYWJzKCgtbmV3UG9zaXRpb24gLSBzd2lwZXIudHJhbnNsYXRlKSAvIHN3aXBlci52ZWxvY2l0eSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbW9tZW50dW1EdXJhdGlvbiA9IE1hdGguYWJzKChuZXdQb3NpdGlvbiAtIHN3aXBlci50cmFuc2xhdGUpIC8gc3dpcGVyLnZlbG9jaXR5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1zLmZyZWVNb2RlU3RpY2t5KSB7XG4gICAgICAgICAgLy8gSWYgZnJlZU1vZGVTdGlja3kgaXMgYWN0aXZlIGFuZCB0aGUgdXNlciBlbmRzIGEgc3dpcGUgd2l0aCBhIHNsb3ctdmVsb2NpdHlcbiAgICAgICAgICAvLyBldmVudCwgdGhlbiBkdXJhdGlvbnMgY2FuIGJlIDIwKyBzZWNvbmRzIHRvIHNsaWRlIG9uZSAob3IgemVybyEpIHNsaWRlcy5cbiAgICAgICAgICAvLyBJdCdzIGVhc3kgdG8gc2VlIHRoaXMgd2hlbiBzaW11bGF0aW5nIHRvdWNoIHdpdGggbW91c2UgZXZlbnRzLiBUbyBmaXggdGhpcyxcbiAgICAgICAgICAvLyBsaW1pdCBzaW5nbGUtc2xpZGUgc3dpcGVzIHRvIHRoZSBkZWZhdWx0IHNsaWRlIGR1cmF0aW9uLiBUaGlzIGFsc28gaGFzIHRoZVxuICAgICAgICAgIC8vIG5pY2Ugc2lkZSBlZmZlY3Qgb2YgbWF0Y2hpbmcgc2xpZGUgc3BlZWQgaWYgdGhlIHVzZXIgc3RvcHBlZCBtb3ZpbmcgYmVmb3JlXG4gICAgICAgICAgLy8gbGlmdGluZyBmaW5nZXIgb3IgbW91c2UgdnMuIG1vdmluZyBzbG93bHkgYmVmb3JlIGxpZnRpbmcgdGhlIGZpbmdlci9tb3VzZS5cbiAgICAgICAgICAvLyBGb3IgZmFzdGVyIHN3aXBlcywgYWxzbyBhcHBseSBsaW1pdHMgKGFsYmVpdCBoaWdoZXIgb25lcykuXG4gICAgICAgICAgY29uc3QgbW92ZURpc3RhbmNlID0gTWF0aC5hYnMoKHJ0bCA/IC1uZXdQb3NpdGlvbiA6IG5ld1Bvc2l0aW9uKSAtIHN3aXBlci50cmFuc2xhdGUpO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRTbGlkZVNpemUgPSBzd2lwZXIuc2xpZGVzU2l6ZXNHcmlkW3N3aXBlci5hY3RpdmVJbmRleF07XG4gICAgICAgICAgaWYgKG1vdmVEaXN0YW5jZSA8IGN1cnJlbnRTbGlkZVNpemUpIHtcbiAgICAgICAgICAgIG1vbWVudHVtRHVyYXRpb24gPSBwYXJhbXMuc3BlZWQ7XG4gICAgICAgICAgfSBlbHNlIGlmIChtb3ZlRGlzdGFuY2UgPCAyICogY3VycmVudFNsaWRlU2l6ZSkge1xuICAgICAgICAgICAgbW9tZW50dW1EdXJhdGlvbiA9IHBhcmFtcy5zcGVlZCAqIDEuNTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbW9tZW50dW1EdXJhdGlvbiA9IHBhcmFtcy5zcGVlZCAqIDIuNTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLmZyZWVNb2RlU3RpY2t5KSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvQ2xvc2VzdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJhbXMuZnJlZU1vZGVNb21lbnR1bUJvdW5jZSAmJiBkb0JvdW5jZSkge1xuICAgICAgICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3MoYWZ0ZXJCb3VuY2VQb3NpdGlvbik7XG4gICAgICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKG1vbWVudHVtRHVyYXRpb24pO1xuICAgICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKG5ld1Bvc2l0aW9uKTtcbiAgICAgICAgc3dpcGVyLnRyYW5zaXRpb25TdGFydCh0cnVlLCBzd2lwZXIuc3dpcGVEaXJlY3Rpb24pO1xuICAgICAgICBzd2lwZXIuYW5pbWF0aW5nID0gdHJ1ZTtcbiAgICAgICAgJHdyYXBwZXJFbC50cmFuc2l0aW9uRW5kKCgpID0+IHtcbiAgICAgICAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkIHx8ICFkYXRhLmFsbG93TW9tZW50dW1Cb3VuY2UpIHJldHVybjtcbiAgICAgICAgICBzd2lwZXIuZW1pdCgnbW9tZW50dW1Cb3VuY2UnKTtcbiAgICAgICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihwYXJhbXMuc3BlZWQpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZShhZnRlckJvdW5jZVBvc2l0aW9uKTtcbiAgICAgICAgICAgICR3cmFwcGVyRWwudHJhbnNpdGlvbkVuZCgoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHJldHVybjtcbiAgICAgICAgICAgICAgc3dpcGVyLnRyYW5zaXRpb25FbmQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoc3dpcGVyLnZlbG9jaXR5KSB7XG4gICAgICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcyhuZXdQb3NpdGlvbik7XG4gICAgICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKG1vbWVudHVtRHVyYXRpb24pO1xuICAgICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKG5ld1Bvc2l0aW9uKTtcbiAgICAgICAgc3dpcGVyLnRyYW5zaXRpb25TdGFydCh0cnVlLCBzd2lwZXIuc3dpcGVEaXJlY3Rpb24pO1xuICAgICAgICBpZiAoIXN3aXBlci5hbmltYXRpbmcpIHtcbiAgICAgICAgICBzd2lwZXIuYW5pbWF0aW5nID0gdHJ1ZTtcbiAgICAgICAgICAkd3JhcHBlckVsLnRyYW5zaXRpb25FbmQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgICAgICAgc3dpcGVyLnRyYW5zaXRpb25FbmQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKG5ld1Bvc2l0aW9uKTtcbiAgICAgIH1cblxuICAgICAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KCk7XG4gICAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zLmZyZWVNb2RlU3RpY2t5KSB7XG4gICAgICBzd2lwZXIuc2xpZGVUb0Nsb3Nlc3QoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXBhcmFtcy5mcmVlTW9kZU1vbWVudHVtIHx8IHRpbWVEaWZmID49IHBhcmFtcy5sb25nU3dpcGVzTXMpIHtcbiAgICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcygpO1xuICAgICAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KCk7XG4gICAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGaW5kIGN1cnJlbnQgc2xpZGVcbiAgbGV0IHN0b3BJbmRleCA9IDA7XG4gIGxldCBncm91cFNpemUgPSBzd2lwZXIuc2xpZGVzU2l6ZXNHcmlkWzBdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWRlc0dyaWQubGVuZ3RoOyBpICs9IChpIDwgcGFyYW1zLnNsaWRlc1Blckdyb3VwU2tpcCA/IDEgOiBwYXJhbXMuc2xpZGVzUGVyR3JvdXApKSB7XG4gICAgY29uc3QgaW5jcmVtZW50ID0gKGkgPCBwYXJhbXMuc2xpZGVzUGVyR3JvdXBTa2lwIC0gMSA/IDEgOiBwYXJhbXMuc2xpZGVzUGVyR3JvdXApO1xuICAgIGlmICh0eXBlb2Ygc2xpZGVzR3JpZFtpICsgaW5jcmVtZW50XSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmIChjdXJyZW50UG9zID49IHNsaWRlc0dyaWRbaV0gJiYgY3VycmVudFBvcyA8IHNsaWRlc0dyaWRbaSArIGluY3JlbWVudF0pIHtcbiAgICAgICAgc3RvcEluZGV4ID0gaTtcbiAgICAgICAgZ3JvdXBTaXplID0gc2xpZGVzR3JpZFtpICsgaW5jcmVtZW50XSAtIHNsaWRlc0dyaWRbaV07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjdXJyZW50UG9zID49IHNsaWRlc0dyaWRbaV0pIHtcbiAgICAgIHN0b3BJbmRleCA9IGk7XG4gICAgICBncm91cFNpemUgPSBzbGlkZXNHcmlkW3NsaWRlc0dyaWQubGVuZ3RoIC0gMV0gLSBzbGlkZXNHcmlkW3NsaWRlc0dyaWQubGVuZ3RoIC0gMl07XG4gICAgfVxuICB9XG5cbiAgLy8gRmluZCBjdXJyZW50IHNsaWRlIHNpemVcbiAgY29uc3QgcmF0aW8gPSAoY3VycmVudFBvcyAtIHNsaWRlc0dyaWRbc3RvcEluZGV4XSkgLyBncm91cFNpemU7XG4gIGNvbnN0IGluY3JlbWVudCA9IChzdG9wSW5kZXggPCBwYXJhbXMuc2xpZGVzUGVyR3JvdXBTa2lwIC0gMSA/IDEgOiBwYXJhbXMuc2xpZGVzUGVyR3JvdXApO1xuXG4gIGlmICh0aW1lRGlmZiA+IHBhcmFtcy5sb25nU3dpcGVzTXMpIHtcbiAgICAvLyBMb25nIHRvdWNoZXNcbiAgICBpZiAoIXBhcmFtcy5sb25nU3dpcGVzKSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuYWN0aXZlSW5kZXgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAnbmV4dCcpIHtcbiAgICAgIGlmIChyYXRpbyA+PSBwYXJhbXMubG9uZ1N3aXBlc1JhdGlvKSBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXggKyBpbmNyZW1lbnQpO1xuICAgICAgZWxzZSBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXgpO1xuICAgIH1cbiAgICBpZiAoc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAncHJldicpIHtcbiAgICAgIGlmIChyYXRpbyA+ICgxIC0gcGFyYW1zLmxvbmdTd2lwZXNSYXRpbykpIHN3aXBlci5zbGlkZVRvKHN0b3BJbmRleCArIGluY3JlbWVudCk7XG4gICAgICBlbHNlIHN3aXBlci5zbGlkZVRvKHN0b3BJbmRleCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFNob3J0IHN3aXBlc1xuICAgIGlmICghcGFyYW1zLnNob3J0U3dpcGVzKSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuYWN0aXZlSW5kZXgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpc05hdkJ1dHRvblRhcmdldCA9IHN3aXBlci5uYXZpZ2F0aW9uICYmIChlLnRhcmdldCA9PT0gc3dpcGVyLm5hdmlnYXRpb24ubmV4dEVsIHx8IGUudGFyZ2V0ID09PSBzd2lwZXIubmF2aWdhdGlvbi5wcmV2RWwpO1xuICAgIGlmICghaXNOYXZCdXR0b25UYXJnZXQpIHtcbiAgICAgIGlmIChzd2lwZXIuc3dpcGVEaXJlY3Rpb24gPT09ICduZXh0Jykge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXggKyBpbmNyZW1lbnQpO1xuICAgICAgfVxuICAgICAgaWYgKHN3aXBlci5zd2lwZURpcmVjdGlvbiA9PT0gJ3ByZXYnKSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHN0b3BJbmRleCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlLnRhcmdldCA9PT0gc3dpcGVyLm5hdmlnYXRpb24ubmV4dEVsKSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXggKyBpbmNyZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXgpO1xuICAgIH1cbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuXG4gIGNvbnN0IHsgcGFyYW1zLCBlbCB9ID0gc3dpcGVyO1xuXG4gIGlmIChlbCAmJiBlbC5vZmZzZXRXaWR0aCA9PT0gMCkgcmV0dXJuO1xuXG4gIC8vIEJyZWFrcG9pbnRzXG4gIGlmIChwYXJhbXMuYnJlYWtwb2ludHMpIHtcbiAgICBzd2lwZXIuc2V0QnJlYWtwb2ludCgpO1xuICB9XG5cbiAgLy8gU2F2ZSBsb2Nrc1xuICBjb25zdCB7IGFsbG93U2xpZGVOZXh0LCBhbGxvd1NsaWRlUHJldiwgc25hcEdyaWQgfSA9IHN3aXBlcjtcblxuICAvLyBEaXNhYmxlIGxvY2tzIG9uIHJlc2l6ZVxuICBzd2lwZXIuYWxsb3dTbGlkZU5leHQgPSB0cnVlO1xuICBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPSB0cnVlO1xuXG4gIHN3aXBlci51cGRhdGVTaXplKCk7XG4gIHN3aXBlci51cGRhdGVTbGlkZXMoKTtcblxuICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICBpZiAoKHBhcmFtcy5zbGlkZXNQZXJWaWV3ID09PSAnYXV0bycgfHwgcGFyYW1zLnNsaWRlc1BlclZpZXcgPiAxKSAmJiBzd2lwZXIuaXNFbmQgJiYgIXN3aXBlci5pc0JlZ2lubmluZyAmJiAhc3dpcGVyLnBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gMSwgMCwgZmFsc2UsIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCwgMCwgZmFsc2UsIHRydWUpO1xuICB9XG5cbiAgaWYgKHN3aXBlci5hdXRvcGxheSAmJiBzd2lwZXIuYXV0b3BsYXkucnVubmluZyAmJiBzd2lwZXIuYXV0b3BsYXkucGF1c2VkKSB7XG4gICAgc3dpcGVyLmF1dG9wbGF5LnJ1bigpO1xuICB9XG4gIC8vIFJldHVybiBsb2NrcyBhZnRlciByZXNpemVcbiAgc3dpcGVyLmFsbG93U2xpZGVQcmV2ID0gYWxsb3dTbGlkZVByZXY7XG4gIHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9IGFsbG93U2xpZGVOZXh0O1xuXG4gIGlmIChzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc25hcEdyaWQgIT09IHN3aXBlci5zbmFwR3JpZCkge1xuICAgIHN3aXBlci5jaGVja092ZXJmbG93KCk7XG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChlKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGlmICghc3dpcGVyLmFsbG93Q2xpY2spIHtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5wcmV2ZW50Q2xpY2tzKSBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMucHJldmVudENsaWNrc1Byb3BhZ2F0aW9uICYmIHN3aXBlci5hbmltYXRpbmcpIHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7IHdyYXBwZXJFbCwgcnRsVHJhbnNsYXRlIH0gPSBzd2lwZXI7XG4gIHN3aXBlci5wcmV2aW91c1RyYW5zbGF0ZSA9IHN3aXBlci50cmFuc2xhdGU7XG4gIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICBpZiAocnRsVHJhbnNsYXRlKSB7XG4gICAgICBzd2lwZXIudHJhbnNsYXRlID0gKCh3cmFwcGVyRWwuc2Nyb2xsV2lkdGggLSB3cmFwcGVyRWwub2Zmc2V0V2lkdGgpIC0gd3JhcHBlckVsLnNjcm9sbExlZnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIudHJhbnNsYXRlID0gLXdyYXBwZXJFbC5zY3JvbGxMZWZ0O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBzd2lwZXIudHJhbnNsYXRlID0gLXdyYXBwZXJFbC5zY3JvbGxUb3A7XG4gIH1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIGlmIChzd2lwZXIudHJhbnNsYXRlID09PSAtMCkgc3dpcGVyLnRyYW5zbGF0ZSA9IDA7XG5cbiAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KCk7XG4gIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG5cbiAgbGV0IG5ld1Byb2dyZXNzO1xuICBjb25zdCB0cmFuc2xhdGVzRGlmZiA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKTtcbiAgaWYgKHRyYW5zbGF0ZXNEaWZmID09PSAwKSB7XG4gICAgbmV3UHJvZ3Jlc3MgPSAwO1xuICB9IGVsc2Uge1xuICAgIG5ld1Byb2dyZXNzID0gKHN3aXBlci50cmFuc2xhdGUgLSBzd2lwZXIubWluVHJhbnNsYXRlKCkpIC8gKHRyYW5zbGF0ZXNEaWZmKTtcbiAgfVxuICBpZiAobmV3UHJvZ3Jlc3MgIT09IHN3aXBlci5wcm9ncmVzcykge1xuICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcyhydGxUcmFuc2xhdGUgPyAtc3dpcGVyLnRyYW5zbGF0ZSA6IHN3aXBlci50cmFuc2xhdGUpO1xuICB9XG5cbiAgc3dpcGVyLmVtaXQoJ3NldFRyYW5zbGF0ZScsIHN3aXBlci50cmFuc2xhdGUsIGZhbHNlKTtcbn1cbiIsImltcG9ydCB7IGRvY3VtZW50IH0gZnJvbSAnc3NyLXdpbmRvdyc7XG5pbXBvcnQgRGV2aWNlIGZyb20gJy4uLy4uLy4uL3V0aWxzL2RldmljZSc7XG5pbXBvcnQgU3VwcG9ydCBmcm9tICcuLi8uLi8uLi91dGlscy9zdXBwb3J0JztcblxuaW1wb3J0IG9uVG91Y2hTdGFydCBmcm9tICcuL29uVG91Y2hTdGFydCc7XG5pbXBvcnQgb25Ub3VjaE1vdmUgZnJvbSAnLi9vblRvdWNoTW92ZSc7XG5pbXBvcnQgb25Ub3VjaEVuZCBmcm9tICcuL29uVG91Y2hFbmQnO1xuaW1wb3J0IG9uUmVzaXplIGZyb20gJy4vb25SZXNpemUnO1xuaW1wb3J0IG9uQ2xpY2sgZnJvbSAnLi9vbkNsaWNrJztcbmltcG9ydCBvblNjcm9sbCBmcm9tICcuL29uU2Nyb2xsJztcblxubGV0IGR1bW15RXZlbnRBdHRhY2hlZCA9IGZhbHNlO1xuZnVuY3Rpb24gZHVtbXlFdmVudExpc3RlbmVyKCkge31cblxuZnVuY3Rpb24gYXR0YWNoRXZlbnRzKCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7XG4gICAgcGFyYW1zLCB0b3VjaEV2ZW50cywgZWwsIHdyYXBwZXJFbCxcbiAgfSA9IHN3aXBlcjtcblxuICBzd2lwZXIub25Ub3VjaFN0YXJ0ID0gb25Ub3VjaFN0YXJ0LmJpbmQoc3dpcGVyKTtcbiAgc3dpcGVyLm9uVG91Y2hNb3ZlID0gb25Ub3VjaE1vdmUuYmluZChzd2lwZXIpO1xuICBzd2lwZXIub25Ub3VjaEVuZCA9IG9uVG91Y2hFbmQuYmluZChzd2lwZXIpO1xuICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICBzd2lwZXIub25TY3JvbGwgPSBvblNjcm9sbC5iaW5kKHN3aXBlcik7XG4gIH1cblxuICBzd2lwZXIub25DbGljayA9IG9uQ2xpY2suYmluZChzd2lwZXIpO1xuXG4gIGNvbnN0IGNhcHR1cmUgPSAhIXBhcmFtcy5uZXN0ZWQ7XG5cbiAgLy8gVG91Y2ggRXZlbnRzXG4gIGlmICghU3VwcG9ydC50b3VjaCAmJiBTdXBwb3J0LnBvaW50ZXJFdmVudHMpIHtcbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLnN0YXJ0LCBzd2lwZXIub25Ub3VjaFN0YXJ0LCBmYWxzZSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50cy5tb3ZlLCBzd2lwZXIub25Ub3VjaE1vdmUsIGNhcHR1cmUpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMuZW5kLCBzd2lwZXIub25Ub3VjaEVuZCwgZmFsc2UpO1xuICB9IGVsc2Uge1xuICAgIGlmIChTdXBwb3J0LnRvdWNoKSB7XG4gICAgICBjb25zdCBwYXNzaXZlTGlzdGVuZXIgPSB0b3VjaEV2ZW50cy5zdGFydCA9PT0gJ3RvdWNoc3RhcnQnICYmIFN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyICYmIHBhcmFtcy5wYXNzaXZlTGlzdGVuZXJzID8geyBwYXNzaXZlOiB0cnVlLCBjYXB0dXJlOiBmYWxzZSB9IDogZmFsc2U7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLnN0YXJ0LCBzd2lwZXIub25Ub3VjaFN0YXJ0LCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50cy5tb3ZlLCBzd2lwZXIub25Ub3VjaE1vdmUsIFN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyID8geyBwYXNzaXZlOiBmYWxzZSwgY2FwdHVyZSB9IDogY2FwdHVyZSk7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLmVuZCwgc3dpcGVyLm9uVG91Y2hFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICBpZiAodG91Y2hFdmVudHMuY2FuY2VsKSB7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMuY2FuY2VsLCBzd2lwZXIub25Ub3VjaEVuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIGlmICghZHVtbXlFdmVudEF0dGFjaGVkKSB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBkdW1teUV2ZW50TGlzdGVuZXIpO1xuICAgICAgICBkdW1teUV2ZW50QXR0YWNoZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoKHBhcmFtcy5zaW11bGF0ZVRvdWNoICYmICFEZXZpY2UuaW9zICYmICFEZXZpY2UuYW5kcm9pZCkgfHwgKHBhcmFtcy5zaW11bGF0ZVRvdWNoICYmICFTdXBwb3J0LnRvdWNoICYmIERldmljZS5pb3MpKSB7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBzd2lwZXIub25Ub3VjaFN0YXJ0LCBmYWxzZSk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBzd2lwZXIub25Ub3VjaE1vdmUsIGNhcHR1cmUpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHN3aXBlci5vblRvdWNoRW5kLCBmYWxzZSk7XG4gICAgfVxuICB9XG4gIC8vIFByZXZlbnQgTGlua3MgQ2xpY2tzXG4gIGlmIChwYXJhbXMucHJldmVudENsaWNrcyB8fCBwYXJhbXMucHJldmVudENsaWNrc1Byb3BhZ2F0aW9uKSB7XG4gICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzd2lwZXIub25DbGljaywgdHJ1ZSk7XG4gIH1cbiAgaWYgKHBhcmFtcy5jc3NNb2RlKSB7XG4gICAgd3JhcHBlckVsLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHN3aXBlci5vblNjcm9sbCk7XG4gIH1cblxuICAvLyBSZXNpemUgaGFuZGxlclxuICBpZiAocGFyYW1zLnVwZGF0ZU9uV2luZG93UmVzaXplKSB7XG4gICAgc3dpcGVyLm9uKChEZXZpY2UuaW9zIHx8IERldmljZS5hbmRyb2lkID8gJ3Jlc2l6ZSBvcmllbnRhdGlvbmNoYW5nZSBvYnNlcnZlclVwZGF0ZScgOiAncmVzaXplIG9ic2VydmVyVXBkYXRlJyksIG9uUmVzaXplLCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICBzd2lwZXIub24oJ29ic2VydmVyVXBkYXRlJywgb25SZXNpemUsIHRydWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRldGFjaEV2ZW50cygpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcblxuICBjb25zdCB7XG4gICAgcGFyYW1zLCB0b3VjaEV2ZW50cywgZWwsIHdyYXBwZXJFbCxcbiAgfSA9IHN3aXBlcjtcblxuICBjb25zdCBjYXB0dXJlID0gISFwYXJhbXMubmVzdGVkO1xuXG4gIC8vIFRvdWNoIEV2ZW50c1xuICBpZiAoIVN1cHBvcnQudG91Y2ggJiYgU3VwcG9ydC5wb2ludGVyRXZlbnRzKSB7XG4gICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50cy5zdGFydCwgc3dpcGVyLm9uVG91Y2hTdGFydCwgZmFsc2UpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMubW92ZSwgc3dpcGVyLm9uVG91Y2hNb3ZlLCBjYXB0dXJlKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLmVuZCwgc3dpcGVyLm9uVG91Y2hFbmQsIGZhbHNlKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoU3VwcG9ydC50b3VjaCkge1xuICAgICAgY29uc3QgcGFzc2l2ZUxpc3RlbmVyID0gdG91Y2hFdmVudHMuc3RhcnQgPT09ICdvblRvdWNoU3RhcnQnICYmIFN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyICYmIHBhcmFtcy5wYXNzaXZlTGlzdGVuZXJzID8geyBwYXNzaXZlOiB0cnVlLCBjYXB0dXJlOiBmYWxzZSB9IDogZmFsc2U7XG4gICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLnN0YXJ0LCBzd2lwZXIub25Ub3VjaFN0YXJ0LCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50cy5tb3ZlLCBzd2lwZXIub25Ub3VjaE1vdmUsIGNhcHR1cmUpO1xuICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50cy5lbmQsIHN3aXBlci5vblRvdWNoRW5kLCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgaWYgKHRvdWNoRXZlbnRzLmNhbmNlbCkge1xuICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLmNhbmNlbCwgc3dpcGVyLm9uVG91Y2hFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgocGFyYW1zLnNpbXVsYXRlVG91Y2ggJiYgIURldmljZS5pb3MgJiYgIURldmljZS5hbmRyb2lkKSB8fCAocGFyYW1zLnNpbXVsYXRlVG91Y2ggJiYgIVN1cHBvcnQudG91Y2ggJiYgRGV2aWNlLmlvcykpIHtcbiAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHN3aXBlci5vblRvdWNoU3RhcnQsIGZhbHNlKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHN3aXBlci5vblRvdWNoTW92ZSwgY2FwdHVyZSk7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgc3dpcGVyLm9uVG91Y2hFbmQsIGZhbHNlKTtcbiAgICB9XG4gIH1cbiAgLy8gUHJldmVudCBMaW5rcyBDbGlja3NcbiAgaWYgKHBhcmFtcy5wcmV2ZW50Q2xpY2tzIHx8IHBhcmFtcy5wcmV2ZW50Q2xpY2tzUHJvcGFnYXRpb24pIHtcbiAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHN3aXBlci5vbkNsaWNrLCB0cnVlKTtcbiAgfVxuXG4gIGlmIChwYXJhbXMuY3NzTW9kZSkge1xuICAgIHdyYXBwZXJFbC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzd2lwZXIub25TY3JvbGwpO1xuICB9XG5cbiAgLy8gUmVzaXplIGhhbmRsZXJcbiAgc3dpcGVyLm9mZigoRGV2aWNlLmlvcyB8fCBEZXZpY2UuYW5kcm9pZCA/ICdyZXNpemUgb3JpZW50YXRpb25jaGFuZ2Ugb2JzZXJ2ZXJVcGRhdGUnIDogJ3Jlc2l6ZSBvYnNlcnZlclVwZGF0ZScpLCBvblJlc2l6ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgYXR0YWNoRXZlbnRzLFxuICBkZXRhY2hFdmVudHMsXG59O1xuIiwiaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uLy4uL3V0aWxzL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7XG4gICAgYWN0aXZlSW5kZXgsIGluaXRpYWxpemVkLCBsb29wZWRTbGlkZXMgPSAwLCBwYXJhbXMsICRlbCxcbiAgfSA9IHN3aXBlcjtcbiAgY29uc3QgYnJlYWtwb2ludHMgPSBwYXJhbXMuYnJlYWtwb2ludHM7XG4gIGlmICghYnJlYWtwb2ludHMgfHwgKGJyZWFrcG9pbnRzICYmIE9iamVjdC5rZXlzKGJyZWFrcG9pbnRzKS5sZW5ndGggPT09IDApKSByZXR1cm47XG5cbiAgLy8gR2V0IGJyZWFrcG9pbnQgZm9yIHdpbmRvdyB3aWR0aCBhbmQgdXBkYXRlIHBhcmFtZXRlcnNcbiAgY29uc3QgYnJlYWtwb2ludCA9IHN3aXBlci5nZXRCcmVha3BvaW50KGJyZWFrcG9pbnRzKTtcblxuICBpZiAoYnJlYWtwb2ludCAmJiBzd2lwZXIuY3VycmVudEJyZWFrcG9pbnQgIT09IGJyZWFrcG9pbnQpIHtcbiAgICBjb25zdCBicmVha3BvaW50T25seVBhcmFtcyA9IGJyZWFrcG9pbnQgaW4gYnJlYWtwb2ludHMgPyBicmVha3BvaW50c1ticmVha3BvaW50XSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoYnJlYWtwb2ludE9ubHlQYXJhbXMpIHtcbiAgICAgIFsnc2xpZGVzUGVyVmlldycsICdzcGFjZUJldHdlZW4nLCAnc2xpZGVzUGVyR3JvdXAnLCAnc2xpZGVzUGVyR3JvdXBTa2lwJywgJ3NsaWRlc1BlckNvbHVtbiddLmZvckVhY2goKHBhcmFtKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmFtVmFsdWUgPSBicmVha3BvaW50T25seVBhcmFtc1twYXJhbV07XG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW1WYWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcbiAgICAgICAgaWYgKHBhcmFtID09PSAnc2xpZGVzUGVyVmlldycgJiYgKHBhcmFtVmFsdWUgPT09ICdBVVRPJyB8fCBwYXJhbVZhbHVlID09PSAnYXV0bycpKSB7XG4gICAgICAgICAgYnJlYWtwb2ludE9ubHlQYXJhbXNbcGFyYW1dID0gJ2F1dG8nO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFtID09PSAnc2xpZGVzUGVyVmlldycpIHtcbiAgICAgICAgICBicmVha3BvaW50T25seVBhcmFtc1twYXJhbV0gPSBwYXJzZUZsb2F0KHBhcmFtVmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJyZWFrcG9pbnRPbmx5UGFyYW1zW3BhcmFtXSA9IHBhcnNlSW50KHBhcmFtVmFsdWUsIDEwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgYnJlYWtwb2ludFBhcmFtcyA9IGJyZWFrcG9pbnRPbmx5UGFyYW1zIHx8IHN3aXBlci5vcmlnaW5hbFBhcmFtcztcbiAgICBjb25zdCB3YXNNdWx0aVJvdyA9IHBhcmFtcy5zbGlkZXNQZXJDb2x1bW4gPiAxO1xuICAgIGNvbnN0IGlzTXVsdGlSb3cgPSBicmVha3BvaW50UGFyYW1zLnNsaWRlc1BlckNvbHVtbiA+IDE7XG4gICAgaWYgKHdhc011bHRpUm93ICYmICFpc011bHRpUm93KSB7XG4gICAgICAkZWwucmVtb3ZlQ2xhc3MoYCR7cGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3N9bXVsdGlyb3cgJHtwYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzc31tdWx0aXJvdy1jb2x1bW5gKTtcbiAgICB9IGVsc2UgaWYgKCF3YXNNdWx0aVJvdyAmJiBpc011bHRpUm93KSB7XG4gICAgICAkZWwuYWRkQ2xhc3MoYCR7cGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3N9bXVsdGlyb3dgKTtcbiAgICAgIGlmIChicmVha3BvaW50UGFyYW1zLnNsaWRlc1BlckNvbHVtbkZpbGwgPT09ICdjb2x1bW4nKSB7XG4gICAgICAgICRlbC5hZGRDbGFzcyhgJHtwYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzc31tdWx0aXJvdy1jb2x1bW5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkaXJlY3Rpb25DaGFuZ2VkID0gYnJlYWtwb2ludFBhcmFtcy5kaXJlY3Rpb24gJiYgYnJlYWtwb2ludFBhcmFtcy5kaXJlY3Rpb24gIT09IHBhcmFtcy5kaXJlY3Rpb247XG4gICAgY29uc3QgbmVlZHNSZUxvb3AgPSBwYXJhbXMubG9vcCAmJiAoYnJlYWtwb2ludFBhcmFtcy5zbGlkZXNQZXJWaWV3ICE9PSBwYXJhbXMuc2xpZGVzUGVyVmlldyB8fCBkaXJlY3Rpb25DaGFuZ2VkKTtcblxuICAgIGlmIChkaXJlY3Rpb25DaGFuZ2VkICYmIGluaXRpYWxpemVkKSB7XG4gICAgICBzd2lwZXIuY2hhbmdlRGlyZWN0aW9uKCk7XG4gICAgfVxuXG4gICAgVXRpbHMuZXh0ZW5kKHN3aXBlci5wYXJhbXMsIGJyZWFrcG9pbnRQYXJhbXMpO1xuXG4gICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgYWxsb3dUb3VjaE1vdmU6IHN3aXBlci5wYXJhbXMuYWxsb3dUb3VjaE1vdmUsXG4gICAgICBhbGxvd1NsaWRlTmV4dDogc3dpcGVyLnBhcmFtcy5hbGxvd1NsaWRlTmV4dCxcbiAgICAgIGFsbG93U2xpZGVQcmV2OiBzd2lwZXIucGFyYW1zLmFsbG93U2xpZGVQcmV2LFxuICAgIH0pO1xuXG4gICAgc3dpcGVyLmN1cnJlbnRCcmVha3BvaW50ID0gYnJlYWtwb2ludDtcblxuICAgIGlmIChuZWVkc1JlTG9vcCAmJiBpbml0aWFsaXplZCkge1xuICAgICAgc3dpcGVyLmxvb3BEZXN0cm95KCk7XG4gICAgICBzd2lwZXIubG9vcENyZWF0ZSgpO1xuICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlcygpO1xuICAgICAgc3dpcGVyLnNsaWRlVG8oKGFjdGl2ZUluZGV4IC0gbG9vcGVkU2xpZGVzKSArIHN3aXBlci5sb29wZWRTbGlkZXMsIDAsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBzd2lwZXIuZW1pdCgnYnJlYWtwb2ludCcsIGJyZWFrcG9pbnRQYXJhbXMpO1xuICB9XG59XG4iLCJpbXBvcnQgeyB3aW5kb3cgfSBmcm9tICdzc3Itd2luZG93JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKGJyZWFrcG9pbnRzKSB7XG4gIC8vIEdldCBicmVha3BvaW50IGZvciB3aW5kb3cgd2lkdGhcbiAgaWYgKCFicmVha3BvaW50cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgbGV0IGJyZWFrcG9pbnQgPSBmYWxzZTtcblxuICBjb25zdCBwb2ludHMgPSBPYmplY3Qua2V5cyhicmVha3BvaW50cykubWFwKChwb2ludCkgPT4ge1xuICAgIGlmICh0eXBlb2YgcG9pbnQgPT09ICdzdHJpbmcnICYmIHBvaW50LmluZGV4T2YoJ0AnKSA9PT0gMCkge1xuICAgICAgY29uc3QgbWluUmF0aW8gPSBwYXJzZUZsb2F0KHBvaW50LnN1YnN0cigxKSk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHdpbmRvdy5pbm5lckhlaWdodCAqIG1pblJhdGlvO1xuICAgICAgcmV0dXJuIHsgdmFsdWUsIHBvaW50IH07XG4gICAgfVxuICAgIHJldHVybiB7IHZhbHVlOiBwb2ludCwgcG9pbnQgfTtcbiAgfSk7XG5cbiAgcG9pbnRzLnNvcnQoKGEsIGIpID0+IHBhcnNlSW50KGEudmFsdWUsIDEwKSAtIHBhcnNlSW50KGIudmFsdWUsIDEwKSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgY29uc3QgeyBwb2ludCwgdmFsdWUgfSA9IHBvaW50c1tpXTtcbiAgICBpZiAodmFsdWUgPD0gd2luZG93LmlubmVyV2lkdGgpIHtcbiAgICAgIGJyZWFrcG9pbnQgPSBwb2ludDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJyZWFrcG9pbnQgfHwgJ21heCc7XG59XG4iLCJpbXBvcnQgc2V0QnJlYWtwb2ludCBmcm9tICcuL3NldEJyZWFrcG9pbnQnO1xuaW1wb3J0IGdldEJyZWFrcG9pbnQgZnJvbSAnLi9nZXRCcmVha3BvaW50JztcblxuZXhwb3J0IGRlZmF1bHQgeyBzZXRCcmVha3BvaW50LCBnZXRCcmVha3BvaW50IH07XG4iLCJpbXBvcnQgRGV2aWNlIGZyb20gJy4uLy4uLy4uL3V0aWxzL2RldmljZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3Qge1xuICAgIGNsYXNzTmFtZXMsIHBhcmFtcywgcnRsLCAkZWwsXG4gIH0gPSBzd2lwZXI7XG4gIGNvbnN0IHN1ZmZpeGVzID0gW107XG5cbiAgc3VmZml4ZXMucHVzaCgnaW5pdGlhbGl6ZWQnKTtcbiAgc3VmZml4ZXMucHVzaChwYXJhbXMuZGlyZWN0aW9uKTtcblxuICBpZiAocGFyYW1zLmZyZWVNb2RlKSB7XG4gICAgc3VmZml4ZXMucHVzaCgnZnJlZS1tb2RlJyk7XG4gIH1cbiAgaWYgKHBhcmFtcy5hdXRvSGVpZ2h0KSB7XG4gICAgc3VmZml4ZXMucHVzaCgnYXV0b2hlaWdodCcpO1xuICB9XG4gIGlmIChydGwpIHtcbiAgICBzdWZmaXhlcy5wdXNoKCdydGwnKTtcbiAgfVxuICBpZiAocGFyYW1zLnNsaWRlc1BlckNvbHVtbiA+IDEpIHtcbiAgICBzdWZmaXhlcy5wdXNoKCdtdWx0aXJvdycpO1xuICAgIGlmIChwYXJhbXMuc2xpZGVzUGVyQ29sdW1uRmlsbCA9PT0gJ2NvbHVtbicpIHtcbiAgICAgIHN1ZmZpeGVzLnB1c2goJ211bHRpcm93LWNvbHVtbicpO1xuICAgIH1cbiAgfVxuICBpZiAoRGV2aWNlLmFuZHJvaWQpIHtcbiAgICBzdWZmaXhlcy5wdXNoKCdhbmRyb2lkJyk7XG4gIH1cbiAgaWYgKERldmljZS5pb3MpIHtcbiAgICBzdWZmaXhlcy5wdXNoKCdpb3MnKTtcbiAgfVxuXG4gIGlmIChwYXJhbXMuY3NzTW9kZSkge1xuICAgIHN1ZmZpeGVzLnB1c2goJ2Nzcy1tb2RlJyk7XG4gIH1cblxuICBzdWZmaXhlcy5mb3JFYWNoKChzdWZmaXgpID0+IHtcbiAgICBjbGFzc05hbWVzLnB1c2gocGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MgKyBzdWZmaXgpO1xuICB9KTtcblxuICAkZWwuYWRkQ2xhc3MoY2xhc3NOYW1lcy5qb2luKCcgJykpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7ICRlbCwgY2xhc3NOYW1lcyB9ID0gc3dpcGVyO1xuXG4gICRlbC5yZW1vdmVDbGFzcyhjbGFzc05hbWVzLmpvaW4oJyAnKSk7XG59XG4iLCJpbXBvcnQgYWRkQ2xhc3NlcyBmcm9tICcuL2FkZENsYXNzZXMnO1xuaW1wb3J0IHJlbW92ZUNsYXNzZXMgZnJvbSAnLi9yZW1vdmVDbGFzc2VzJztcblxuZXhwb3J0IGRlZmF1bHQgeyBhZGRDbGFzc2VzLCByZW1vdmVDbGFzc2VzIH07XG4iLCJpbXBvcnQgeyB3aW5kb3cgfSBmcm9tICdzc3Itd2luZG93JztcbmltcG9ydCAkIGZyb20gJy4uLy4uLy4uL3V0aWxzL2RvbSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChpbWFnZUVsLCBzcmMsIHNyY3NldCwgc2l6ZXMsIGNoZWNrRm9yQ29tcGxldGUsIGNhbGxiYWNrKSB7XG4gIGxldCBpbWFnZTtcbiAgZnVuY3Rpb24gb25SZWFkeSgpIHtcbiAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKCk7XG4gIH1cbiAgY29uc3QgaXNQaWN0dXJlID0gJChpbWFnZUVsKS5wYXJlbnQoJ3BpY3R1cmUnKVswXTtcblxuICBpZiAoIWlzUGljdHVyZSAmJiAoIWltYWdlRWwuY29tcGxldGUgfHwgIWNoZWNrRm9yQ29tcGxldGUpKSB7XG4gICAgaWYgKHNyYykge1xuICAgICAgaW1hZ2UgPSBuZXcgd2luZG93LkltYWdlKCk7XG4gICAgICBpbWFnZS5vbmxvYWQgPSBvblJlYWR5O1xuICAgICAgaW1hZ2Uub25lcnJvciA9IG9uUmVhZHk7XG4gICAgICBpZiAoc2l6ZXMpIHtcbiAgICAgICAgaW1hZ2Uuc2l6ZXMgPSBzaXplcztcbiAgICAgIH1cbiAgICAgIGlmIChzcmNzZXQpIHtcbiAgICAgICAgaW1hZ2Uuc3Jjc2V0ID0gc3Jjc2V0O1xuICAgICAgfVxuICAgICAgaWYgKHNyYykge1xuICAgICAgICBpbWFnZS5zcmMgPSBzcmM7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uUmVhZHkoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gaW1hZ2UgYWxyZWFkeSBsb2FkZWQuLi5cbiAgICBvblJlYWR5KCk7XG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgc3dpcGVyLmltYWdlc1RvTG9hZCA9IHN3aXBlci4kZWwuZmluZCgnaW1nJyk7XG4gIGZ1bmN0aW9uIG9uUmVhZHkoKSB7XG4gICAgaWYgKHR5cGVvZiBzd2lwZXIgPT09ICd1bmRlZmluZWQnIHx8IHN3aXBlciA9PT0gbnVsbCB8fCAhc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHJldHVybjtcbiAgICBpZiAoc3dpcGVyLmltYWdlc0xvYWRlZCAhPT0gdW5kZWZpbmVkKSBzd2lwZXIuaW1hZ2VzTG9hZGVkICs9IDE7XG4gICAgaWYgKHN3aXBlci5pbWFnZXNMb2FkZWQgPT09IHN3aXBlci5pbWFnZXNUb0xvYWQubGVuZ3RoKSB7XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy51cGRhdGVPbkltYWdlc1JlYWR5KSBzd2lwZXIudXBkYXRlKCk7XG4gICAgICBzd2lwZXIuZW1pdCgnaW1hZ2VzUmVhZHknKTtcbiAgICB9XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzd2lwZXIuaW1hZ2VzVG9Mb2FkLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgY29uc3QgaW1hZ2VFbCA9IHN3aXBlci5pbWFnZXNUb0xvYWRbaV07XG4gICAgc3dpcGVyLmxvYWRJbWFnZShcbiAgICAgIGltYWdlRWwsXG4gICAgICBpbWFnZUVsLmN1cnJlbnRTcmMgfHwgaW1hZ2VFbC5nZXRBdHRyaWJ1dGUoJ3NyYycpLFxuICAgICAgaW1hZ2VFbC5zcmNzZXQgfHwgaW1hZ2VFbC5nZXRBdHRyaWJ1dGUoJ3NyY3NldCcpLFxuICAgICAgaW1hZ2VFbC5zaXplcyB8fCBpbWFnZUVsLmdldEF0dHJpYnV0ZSgnc2l6ZXMnKSxcbiAgICAgIHRydWUsXG4gICAgICBvblJlYWR5XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IGxvYWRJbWFnZSBmcm9tICcuL2xvYWRJbWFnZSc7XG5pbXBvcnQgcHJlbG9hZEltYWdlcyBmcm9tICcuL3ByZWxvYWRJbWFnZXMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGxvYWRJbWFnZSxcbiAgcHJlbG9hZEltYWdlcyxcbn07XG4iLCJcbmZ1bmN0aW9uIGNoZWNrT3ZlcmZsb3coKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gIGNvbnN0IHdhc0xvY2tlZCA9IHN3aXBlci5pc0xvY2tlZDtcbiAgY29uc3QgbGFzdFNsaWRlUG9zaXRpb24gPSBzd2lwZXIuc2xpZGVzLmxlbmd0aCA+IDAgJiYgKHBhcmFtcy5zbGlkZXNPZmZzZXRCZWZvcmUgKyAocGFyYW1zLnNwYWNlQmV0d2VlbiAqIChzd2lwZXIuc2xpZGVzLmxlbmd0aCAtIDEpKSArICgoc3dpcGVyLnNsaWRlc1swXSkub2Zmc2V0V2lkdGgpICogc3dpcGVyLnNsaWRlcy5sZW5ndGgpO1xuXG4gIGlmIChwYXJhbXMuc2xpZGVzT2Zmc2V0QmVmb3JlICYmIHBhcmFtcy5zbGlkZXNPZmZzZXRBZnRlciAmJiBsYXN0U2xpZGVQb3NpdGlvbikge1xuICAgIHN3aXBlci5pc0xvY2tlZCA9IGxhc3RTbGlkZVBvc2l0aW9uIDw9IHN3aXBlci5zaXplO1xuICB9IGVsc2Uge1xuICAgIHN3aXBlci5pc0xvY2tlZCA9IHN3aXBlci5zbmFwR3JpZC5sZW5ndGggPT09IDE7XG4gIH1cblxuICBzd2lwZXIuYWxsb3dTbGlkZU5leHQgPSAhc3dpcGVyLmlzTG9ja2VkO1xuICBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPSAhc3dpcGVyLmlzTG9ja2VkO1xuXG4gIC8vIGV2ZW50c1xuICBpZiAod2FzTG9ja2VkICE9PSBzd2lwZXIuaXNMb2NrZWQpIHN3aXBlci5lbWl0KHN3aXBlci5pc0xvY2tlZCA/ICdsb2NrJyA6ICd1bmxvY2snKTtcblxuICBpZiAod2FzTG9ja2VkICYmIHdhc0xvY2tlZCAhPT0gc3dpcGVyLmlzTG9ja2VkKSB7XG4gICAgc3dpcGVyLmlzRW5kID0gZmFsc2U7XG4gICAgaWYgKHN3aXBlci5uYXZpZ2F0aW9uKSBzd2lwZXIubmF2aWdhdGlvbi51cGRhdGUoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7IGNoZWNrT3ZlcmZsb3cgfTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogdHJ1ZSxcbiAgZGlyZWN0aW9uOiAnaG9yaXpvbnRhbCcsXG4gIHRvdWNoRXZlbnRzVGFyZ2V0OiAnY29udGFpbmVyJyxcbiAgaW5pdGlhbFNsaWRlOiAwLFxuICBzcGVlZDogMzAwLFxuICBjc3NNb2RlOiBmYWxzZSxcbiAgdXBkYXRlT25XaW5kb3dSZXNpemU6IHRydWUsXG4gIC8vXG4gIHByZXZlbnRJbnRlcmFjdGlvbk9uVHJhbnNpdGlvbjogZmFsc2UsXG5cbiAgLy8gVG8gc3VwcG9ydCBpT1MncyBzd2lwZS10by1nby1iYWNrIGdlc3R1cmUgKHdoZW4gYmVpbmcgdXNlZCBpbi1hcHApLlxuICBlZGdlU3dpcGVEZXRlY3Rpb246IGZhbHNlLFxuICBlZGdlU3dpcGVUaHJlc2hvbGQ6IDIwLFxuXG4gIC8vIEZyZWUgbW9kZVxuICBmcmVlTW9kZTogZmFsc2UsXG4gIGZyZWVNb2RlTW9tZW50dW06IHRydWUsXG4gIGZyZWVNb2RlTW9tZW50dW1SYXRpbzogMSxcbiAgZnJlZU1vZGVNb21lbnR1bUJvdW5jZTogdHJ1ZSxcbiAgZnJlZU1vZGVNb21lbnR1bUJvdW5jZVJhdGlvOiAxLFxuICBmcmVlTW9kZU1vbWVudHVtVmVsb2NpdHlSYXRpbzogMSxcbiAgZnJlZU1vZGVTdGlja3k6IGZhbHNlLFxuICBmcmVlTW9kZU1pbmltdW1WZWxvY2l0eTogMC4wMixcblxuICAvLyBBdXRvaGVpZ2h0XG4gIGF1dG9IZWlnaHQ6IGZhbHNlLFxuXG4gIC8vIFNldCB3cmFwcGVyIHdpZHRoXG4gIHNldFdyYXBwZXJTaXplOiBmYWxzZSxcblxuICAvLyBWaXJ0dWFsIFRyYW5zbGF0ZVxuICB2aXJ0dWFsVHJhbnNsYXRlOiBmYWxzZSxcblxuICAvLyBFZmZlY3RzXG4gIGVmZmVjdDogJ3NsaWRlJywgLy8gJ3NsaWRlJyBvciAnZmFkZScgb3IgJ2N1YmUnIG9yICdjb3ZlcmZsb3cnIG9yICdmbGlwJ1xuXG4gIC8vIEJyZWFrcG9pbnRzXG4gIGJyZWFrcG9pbnRzOiB1bmRlZmluZWQsXG5cbiAgLy8gU2xpZGVzIGdyaWRcbiAgc3BhY2VCZXR3ZWVuOiAwLFxuICBzbGlkZXNQZXJWaWV3OiAxLFxuICBzbGlkZXNQZXJDb2x1bW46IDEsXG4gIHNsaWRlc1BlckNvbHVtbkZpbGw6ICdjb2x1bW4nLFxuICBzbGlkZXNQZXJHcm91cDogMSxcbiAgc2xpZGVzUGVyR3JvdXBTa2lwOiAwLFxuICBjZW50ZXJlZFNsaWRlczogZmFsc2UsXG4gIGNlbnRlcmVkU2xpZGVzQm91bmRzOiBmYWxzZSxcbiAgc2xpZGVzT2Zmc2V0QmVmb3JlOiAwLCAvLyBpbiBweFxuICBzbGlkZXNPZmZzZXRBZnRlcjogMCwgLy8gaW4gcHhcbiAgbm9ybWFsaXplU2xpZGVJbmRleDogdHJ1ZSxcbiAgY2VudGVySW5zdWZmaWNpZW50U2xpZGVzOiBmYWxzZSxcblxuICAvLyBEaXNhYmxlIHN3aXBlciBhbmQgaGlkZSBuYXZpZ2F0aW9uIHdoZW4gY29udGFpbmVyIG5vdCBvdmVyZmxvd1xuICB3YXRjaE92ZXJmbG93OiBmYWxzZSxcblxuICAvLyBSb3VuZCBsZW5ndGhcbiAgcm91bmRMZW5ndGhzOiBmYWxzZSxcblxuICAvLyBUb3VjaGVzXG4gIHRvdWNoUmF0aW86IDEsXG4gIHRvdWNoQW5nbGU6IDQ1LFxuICBzaW11bGF0ZVRvdWNoOiB0cnVlLFxuICBzaG9ydFN3aXBlczogdHJ1ZSxcbiAgbG9uZ1N3aXBlczogdHJ1ZSxcbiAgbG9uZ1N3aXBlc1JhdGlvOiAwLjUsXG4gIGxvbmdTd2lwZXNNczogMzAwLFxuICBmb2xsb3dGaW5nZXI6IHRydWUsXG4gIGFsbG93VG91Y2hNb3ZlOiB0cnVlLFxuICB0aHJlc2hvbGQ6IDAsXG4gIHRvdWNoTW92ZVN0b3BQcm9wYWdhdGlvbjogZmFsc2UsXG4gIHRvdWNoU3RhcnRQcmV2ZW50RGVmYXVsdDogdHJ1ZSxcbiAgdG91Y2hTdGFydEZvcmNlUHJldmVudERlZmF1bHQ6IGZhbHNlLFxuICB0b3VjaFJlbGVhc2VPbkVkZ2VzOiBmYWxzZSxcblxuICAvLyBVbmlxdWUgTmF2aWdhdGlvbiBFbGVtZW50c1xuICB1bmlxdWVOYXZFbGVtZW50czogdHJ1ZSxcblxuICAvLyBSZXNpc3RhbmNlXG4gIHJlc2lzdGFuY2U6IHRydWUsXG4gIHJlc2lzdGFuY2VSYXRpbzogMC44NSxcblxuICAvLyBQcm9ncmVzc1xuICB3YXRjaFNsaWRlc1Byb2dyZXNzOiBmYWxzZSxcbiAgd2F0Y2hTbGlkZXNWaXNpYmlsaXR5OiBmYWxzZSxcblxuICAvLyBDdXJzb3JcbiAgZ3JhYkN1cnNvcjogZmFsc2UsXG5cbiAgLy8gQ2xpY2tzXG4gIHByZXZlbnRDbGlja3M6IHRydWUsXG4gIHByZXZlbnRDbGlja3NQcm9wYWdhdGlvbjogdHJ1ZSxcbiAgc2xpZGVUb0NsaWNrZWRTbGlkZTogZmFsc2UsXG5cbiAgLy8gSW1hZ2VzXG4gIHByZWxvYWRJbWFnZXM6IHRydWUsXG4gIHVwZGF0ZU9uSW1hZ2VzUmVhZHk6IHRydWUsXG5cbiAgLy8gbG9vcFxuICBsb29wOiBmYWxzZSxcbiAgbG9vcEFkZGl0aW9uYWxTbGlkZXM6IDAsXG4gIGxvb3BlZFNsaWRlczogbnVsbCxcbiAgbG9vcEZpbGxHcm91cFdpdGhCbGFuazogZmFsc2UsXG5cbiAgLy8gU3dpcGluZy9ubyBzd2lwaW5nXG4gIGFsbG93U2xpZGVQcmV2OiB0cnVlLFxuICBhbGxvd1NsaWRlTmV4dDogdHJ1ZSxcbiAgc3dpcGVIYW5kbGVyOiBudWxsLCAvLyAnLnN3aXBlLWhhbmRsZXInLFxuICBub1N3aXBpbmc6IHRydWUsXG4gIG5vU3dpcGluZ0NsYXNzOiAnc3dpcGVyLW5vLXN3aXBpbmcnLFxuICBub1N3aXBpbmdTZWxlY3RvcjogbnVsbCxcblxuICAvLyBQYXNzaXZlIExpc3RlbmVyc1xuICBwYXNzaXZlTGlzdGVuZXJzOiB0cnVlLFxuXG4gIC8vIE5TXG4gIGNvbnRhaW5lck1vZGlmaWVyQ2xhc3M6ICdzd2lwZXItY29udGFpbmVyLScsIC8vIE5FV1xuICBzbGlkZUNsYXNzOiAnc3dpcGVyLXNsaWRlJyxcbiAgc2xpZGVCbGFua0NsYXNzOiAnc3dpcGVyLXNsaWRlLWludmlzaWJsZS1ibGFuaycsXG4gIHNsaWRlQWN0aXZlQ2xhc3M6ICdzd2lwZXItc2xpZGUtYWN0aXZlJyxcbiAgc2xpZGVEdXBsaWNhdGVBY3RpdmVDbGFzczogJ3N3aXBlci1zbGlkZS1kdXBsaWNhdGUtYWN0aXZlJyxcbiAgc2xpZGVWaXNpYmxlQ2xhc3M6ICdzd2lwZXItc2xpZGUtdmlzaWJsZScsXG4gIHNsaWRlRHVwbGljYXRlQ2xhc3M6ICdzd2lwZXItc2xpZGUtZHVwbGljYXRlJyxcbiAgc2xpZGVOZXh0Q2xhc3M6ICdzd2lwZXItc2xpZGUtbmV4dCcsXG4gIHNsaWRlRHVwbGljYXRlTmV4dENsYXNzOiAnc3dpcGVyLXNsaWRlLWR1cGxpY2F0ZS1uZXh0JyxcbiAgc2xpZGVQcmV2Q2xhc3M6ICdzd2lwZXItc2xpZGUtcHJldicsXG4gIHNsaWRlRHVwbGljYXRlUHJldkNsYXNzOiAnc3dpcGVyLXNsaWRlLWR1cGxpY2F0ZS1wcmV2JyxcbiAgd3JhcHBlckNsYXNzOiAnc3dpcGVyLXdyYXBwZXInLFxuXG4gIC8vIENhbGxiYWNrc1xuICBydW5DYWxsYmFja3NPbkluaXQ6IHRydWUsXG59O1xuIiwiLyogZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOiBcIm9mZlwiICovXG5pbXBvcnQgJCBmcm9tICcuLi8uLi91dGlscy9kb20nO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uL3V0aWxzL3V0aWxzJztcbmltcG9ydCBTdXBwb3J0IGZyb20gJy4uLy4uL3V0aWxzL3N1cHBvcnQnO1xuXG5pbXBvcnQgU3dpcGVyQ2xhc3MgZnJvbSAnLi4vLi4vdXRpbHMvY2xhc3MnO1xuXG5pbXBvcnQgdXBkYXRlIGZyb20gJy4vdXBkYXRlL2luZGV4JztcbmltcG9ydCB0cmFuc2xhdGUgZnJvbSAnLi90cmFuc2xhdGUvaW5kZXgnO1xuaW1wb3J0IHRyYW5zaXRpb24gZnJvbSAnLi90cmFuc2l0aW9uL2luZGV4JztcbmltcG9ydCBzbGlkZSBmcm9tICcuL3NsaWRlL2luZGV4JztcbmltcG9ydCBsb29wIGZyb20gJy4vbG9vcC9pbmRleCc7XG5pbXBvcnQgZ3JhYkN1cnNvciBmcm9tICcuL2dyYWItY3Vyc29yL2luZGV4JztcbmltcG9ydCBtYW5pcHVsYXRpb24gZnJvbSAnLi9tYW5pcHVsYXRpb24vaW5kZXgnO1xuaW1wb3J0IGV2ZW50cyBmcm9tICcuL2V2ZW50cy9pbmRleCc7XG5pbXBvcnQgYnJlYWtwb2ludHMgZnJvbSAnLi9icmVha3BvaW50cy9pbmRleCc7XG5pbXBvcnQgY2xhc3NlcyBmcm9tICcuL2NsYXNzZXMvaW5kZXgnO1xuaW1wb3J0IGltYWdlcyBmcm9tICcuL2ltYWdlcy9pbmRleCc7XG5pbXBvcnQgY2hlY2tPdmVyZmxvdyBmcm9tICcuL2NoZWNrLW92ZXJmbG93L2luZGV4JztcblxuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4vZGVmYXVsdHMnO1xuXG5jb25zdCBwcm90b3R5cGVzID0ge1xuICB1cGRhdGUsXG4gIHRyYW5zbGF0ZSxcbiAgdHJhbnNpdGlvbixcbiAgc2xpZGUsXG4gIGxvb3AsXG4gIGdyYWJDdXJzb3IsXG4gIG1hbmlwdWxhdGlvbixcbiAgZXZlbnRzLFxuICBicmVha3BvaW50cyxcbiAgY2hlY2tPdmVyZmxvdyxcbiAgY2xhc3NlcyxcbiAgaW1hZ2VzLFxufTtcblxuY29uc3QgZXh0ZW5kZWREZWZhdWx0cyA9IHt9O1xuXG5jbGFzcyBTd2lwZXIgZXh0ZW5kcyBTd2lwZXJDbGFzcyB7XG4gIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICBsZXQgZWw7XG4gICAgbGV0IHBhcmFtcztcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgYXJnc1swXS5jb25zdHJ1Y3RvciAmJiBhcmdzWzBdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcbiAgICAgIHBhcmFtcyA9IGFyZ3NbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIFtlbCwgcGFyYW1zXSA9IGFyZ3M7XG4gICAgfVxuICAgIGlmICghcGFyYW1zKSBwYXJhbXMgPSB7fTtcblxuICAgIHBhcmFtcyA9IFV0aWxzLmV4dGVuZCh7fSwgcGFyYW1zKTtcbiAgICBpZiAoZWwgJiYgIXBhcmFtcy5lbCkgcGFyYW1zLmVsID0gZWw7XG5cbiAgICBzdXBlcihwYXJhbXMpO1xuXG4gICAgT2JqZWN0LmtleXMocHJvdG90eXBlcykuZm9yRWFjaCgocHJvdG90eXBlR3JvdXApID0+IHtcbiAgICAgIE9iamVjdC5rZXlzKHByb3RvdHlwZXNbcHJvdG90eXBlR3JvdXBdKS5mb3JFYWNoKChwcm90b01ldGhvZCkgPT4ge1xuICAgICAgICBpZiAoIVN3aXBlci5wcm90b3R5cGVbcHJvdG9NZXRob2RdKSB7XG4gICAgICAgICAgU3dpcGVyLnByb3RvdHlwZVtwcm90b01ldGhvZF0gPSBwcm90b3R5cGVzW3Byb3RvdHlwZUdyb3VwXVtwcm90b01ldGhvZF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gU3dpcGVyIEluc3RhbmNlXG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHN3aXBlci5tb2R1bGVzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgc3dpcGVyLm1vZHVsZXMgPSB7fTtcbiAgICB9XG4gICAgT2JqZWN0LmtleXMoc3dpcGVyLm1vZHVsZXMpLmZvckVhY2goKG1vZHVsZU5hbWUpID0+IHtcbiAgICAgIGNvbnN0IG1vZHVsZSA9IHN3aXBlci5tb2R1bGVzW21vZHVsZU5hbWVdO1xuICAgICAgaWYgKG1vZHVsZS5wYXJhbXMpIHtcbiAgICAgICAgY29uc3QgbW9kdWxlUGFyYW1OYW1lID0gT2JqZWN0LmtleXMobW9kdWxlLnBhcmFtcylbMF07XG4gICAgICAgIGNvbnN0IG1vZHVsZVBhcmFtcyA9IG1vZHVsZS5wYXJhbXNbbW9kdWxlUGFyYW1OYW1lXTtcbiAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGVQYXJhbXMgIT09ICdvYmplY3QnIHx8IG1vZHVsZVBhcmFtcyA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBpZiAoIShtb2R1bGVQYXJhbU5hbWUgaW4gcGFyYW1zICYmICdlbmFibGVkJyBpbiBtb2R1bGVQYXJhbXMpKSByZXR1cm47XG4gICAgICAgIGlmIChwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdID0geyBlbmFibGVkOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGVvZiBwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAmJiAhKCdlbmFibGVkJyBpbiBwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0uZW5hYmxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSkgcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0gPSB7IGVuYWJsZWQ6IGZhbHNlIH07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBFeHRlbmQgZGVmYXVsdHMgd2l0aCBtb2R1bGVzIHBhcmFtc1xuICAgIGNvbnN0IHN3aXBlclBhcmFtcyA9IFV0aWxzLmV4dGVuZCh7fSwgZGVmYXVsdHMpO1xuICAgIHN3aXBlci51c2VNb2R1bGVzUGFyYW1zKHN3aXBlclBhcmFtcyk7XG5cbiAgICAvLyBFeHRlbmQgZGVmYXVsdHMgd2l0aCBwYXNzZWQgcGFyYW1zXG4gICAgc3dpcGVyLnBhcmFtcyA9IFV0aWxzLmV4dGVuZCh7fSwgc3dpcGVyUGFyYW1zLCBleHRlbmRlZERlZmF1bHRzLCBwYXJhbXMpO1xuICAgIHN3aXBlci5vcmlnaW5hbFBhcmFtcyA9IFV0aWxzLmV4dGVuZCh7fSwgc3dpcGVyLnBhcmFtcyk7XG4gICAgc3dpcGVyLnBhc3NlZFBhcmFtcyA9IFV0aWxzLmV4dGVuZCh7fSwgcGFyYW1zKTtcblxuICAgIC8vIFNhdmUgRG9tIGxpYlxuICAgIHN3aXBlci4kID0gJDtcblxuICAgIC8vIEZpbmQgZWxcbiAgICBjb25zdCAkZWwgPSAkKHN3aXBlci5wYXJhbXMuZWwpO1xuICAgIGVsID0gJGVsWzBdO1xuXG4gICAgaWYgKCFlbCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoJGVsLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnN0IHN3aXBlcnMgPSBbXTtcbiAgICAgICRlbC5lYWNoKChpbmRleCwgY29udGFpbmVyRWwpID0+IHtcbiAgICAgICAgY29uc3QgbmV3UGFyYW1zID0gVXRpbHMuZXh0ZW5kKHt9LCBwYXJhbXMsIHsgZWw6IGNvbnRhaW5lckVsIH0pO1xuICAgICAgICBzd2lwZXJzLnB1c2gobmV3IFN3aXBlcihuZXdQYXJhbXMpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHN3aXBlcnM7XG4gICAgfVxuXG4gICAgZWwuc3dpcGVyID0gc3dpcGVyO1xuICAgICRlbC5kYXRhKCdzd2lwZXInLCBzd2lwZXIpO1xuXG4gICAgLy8gRmluZCBXcmFwcGVyXG4gICAgbGV0ICR3cmFwcGVyRWw7XG4gICAgaWYgKGVsICYmIGVsLnNoYWRvd1Jvb3QgJiYgZWwuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKSB7XG4gICAgICAkd3JhcHBlckVsID0gJChlbC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYC4ke3N3aXBlci5wYXJhbXMud3JhcHBlckNsYXNzfWApKTtcbiAgICAgIC8vIENoaWxkcmVuIG5lZWRzIHRvIHJldHVybiBzbG90IGl0ZW1zXG4gICAgICAkd3JhcHBlckVsLmNoaWxkcmVuID0gKG9wdGlvbnMpID0+ICRlbC5jaGlsZHJlbihvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJHdyYXBwZXJFbCA9ICRlbC5jaGlsZHJlbihgLiR7c3dpcGVyLnBhcmFtcy53cmFwcGVyQ2xhc3N9YCk7XG4gICAgfVxuICAgIC8vIEV4dGVuZCBTd2lwZXJcbiAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICAkZWwsXG4gICAgICBlbCxcbiAgICAgICR3cmFwcGVyRWwsXG4gICAgICB3cmFwcGVyRWw6ICR3cmFwcGVyRWxbMF0sXG5cbiAgICAgIC8vIENsYXNzZXNcbiAgICAgIGNsYXNzTmFtZXM6IFtdLFxuXG4gICAgICAvLyBTbGlkZXNcbiAgICAgIHNsaWRlczogJCgpLFxuICAgICAgc2xpZGVzR3JpZDogW10sXG4gICAgICBzbmFwR3JpZDogW10sXG4gICAgICBzbGlkZXNTaXplc0dyaWQ6IFtdLFxuXG4gICAgICAvLyBpc0RpcmVjdGlvblxuICAgICAgaXNIb3Jpem9udGFsKCkge1xuICAgICAgICByZXR1cm4gc3dpcGVyLnBhcmFtcy5kaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJztcbiAgICAgIH0sXG4gICAgICBpc1ZlcnRpY2FsKCkge1xuICAgICAgICByZXR1cm4gc3dpcGVyLnBhcmFtcy5kaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCc7XG4gICAgICB9LFxuICAgICAgLy8gUlRMXG4gICAgICBydGw6IChlbC5kaXIudG9Mb3dlckNhc2UoKSA9PT0gJ3J0bCcgfHwgJGVsLmNzcygnZGlyZWN0aW9uJykgPT09ICdydGwnKSxcbiAgICAgIHJ0bFRyYW5zbGF0ZTogc3dpcGVyLnBhcmFtcy5kaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyAmJiAoZWwuZGlyLnRvTG93ZXJDYXNlKCkgPT09ICdydGwnIHx8ICRlbC5jc3MoJ2RpcmVjdGlvbicpID09PSAncnRsJyksXG4gICAgICB3cm9uZ1JUTDogJHdyYXBwZXJFbC5jc3MoJ2Rpc3BsYXknKSA9PT0gJy13ZWJraXQtYm94JyxcblxuICAgICAgLy8gSW5kZXhlc1xuICAgICAgYWN0aXZlSW5kZXg6IDAsXG4gICAgICByZWFsSW5kZXg6IDAsXG5cbiAgICAgIC8vXG4gICAgICBpc0JlZ2lubmluZzogdHJ1ZSxcbiAgICAgIGlzRW5kOiBmYWxzZSxcblxuICAgICAgLy8gUHJvcHNcbiAgICAgIHRyYW5zbGF0ZTogMCxcbiAgICAgIHByZXZpb3VzVHJhbnNsYXRlOiAwLFxuICAgICAgcHJvZ3Jlc3M6IDAsXG4gICAgICB2ZWxvY2l0eTogMCxcbiAgICAgIGFuaW1hdGluZzogZmFsc2UsXG5cbiAgICAgIC8vIExvY2tzXG4gICAgICBhbGxvd1NsaWRlTmV4dDogc3dpcGVyLnBhcmFtcy5hbGxvd1NsaWRlTmV4dCxcbiAgICAgIGFsbG93U2xpZGVQcmV2OiBzd2lwZXIucGFyYW1zLmFsbG93U2xpZGVQcmV2LFxuXG4gICAgICAvLyBUb3VjaCBFdmVudHNcbiAgICAgIHRvdWNoRXZlbnRzOiAoZnVuY3Rpb24gdG91Y2hFdmVudHMoKSB7XG4gICAgICAgIGNvbnN0IHRvdWNoID0gWyd0b3VjaHN0YXJ0JywgJ3RvdWNobW92ZScsICd0b3VjaGVuZCcsICd0b3VjaGNhbmNlbCddO1xuICAgICAgICBsZXQgZGVza3RvcCA9IFsnbW91c2Vkb3duJywgJ21vdXNlbW92ZScsICdtb3VzZXVwJ107XG4gICAgICAgIGlmIChTdXBwb3J0LnBvaW50ZXJFdmVudHMpIHtcbiAgICAgICAgICBkZXNrdG9wID0gWydwb2ludGVyZG93bicsICdwb2ludGVybW92ZScsICdwb2ludGVydXAnXTtcbiAgICAgICAgfVxuICAgICAgICBzd2lwZXIudG91Y2hFdmVudHNUb3VjaCA9IHtcbiAgICAgICAgICBzdGFydDogdG91Y2hbMF0sXG4gICAgICAgICAgbW92ZTogdG91Y2hbMV0sXG4gICAgICAgICAgZW5kOiB0b3VjaFsyXSxcbiAgICAgICAgICBjYW5jZWw6IHRvdWNoWzNdLFxuICAgICAgICB9O1xuICAgICAgICBzd2lwZXIudG91Y2hFdmVudHNEZXNrdG9wID0ge1xuICAgICAgICAgIHN0YXJ0OiBkZXNrdG9wWzBdLFxuICAgICAgICAgIG1vdmU6IGRlc2t0b3BbMV0sXG4gICAgICAgICAgZW5kOiBkZXNrdG9wWzJdLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gU3VwcG9ydC50b3VjaCB8fCAhc3dpcGVyLnBhcmFtcy5zaW11bGF0ZVRvdWNoID8gc3dpcGVyLnRvdWNoRXZlbnRzVG91Y2ggOiBzd2lwZXIudG91Y2hFdmVudHNEZXNrdG9wO1xuICAgICAgfSgpKSxcbiAgICAgIHRvdWNoRXZlbnRzRGF0YToge1xuICAgICAgICBpc1RvdWNoZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgaXNNb3ZlZDogdW5kZWZpbmVkLFxuICAgICAgICBhbGxvd1RvdWNoQ2FsbGJhY2tzOiB1bmRlZmluZWQsXG4gICAgICAgIHRvdWNoU3RhcnRUaW1lOiB1bmRlZmluZWQsXG4gICAgICAgIGlzU2Nyb2xsaW5nOiB1bmRlZmluZWQsXG4gICAgICAgIGN1cnJlbnRUcmFuc2xhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgc3RhcnRUcmFuc2xhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgYWxsb3dUaHJlc2hvbGRNb3ZlOiB1bmRlZmluZWQsXG4gICAgICAgIC8vIEZvcm0gZWxlbWVudHMgdG8gbWF0Y2hcbiAgICAgICAgZm9ybUVsZW1lbnRzOiAnaW5wdXQsIHNlbGVjdCwgb3B0aW9uLCB0ZXh0YXJlYSwgYnV0dG9uLCB2aWRlbywgbGFiZWwnLFxuICAgICAgICAvLyBMYXN0IGNsaWNrIHRpbWVcbiAgICAgICAgbGFzdENsaWNrVGltZTogVXRpbHMubm93KCksXG4gICAgICAgIGNsaWNrVGltZW91dDogdW5kZWZpbmVkLFxuICAgICAgICAvLyBWZWxvY2l0aWVzXG4gICAgICAgIHZlbG9jaXRpZXM6IFtdLFxuICAgICAgICBhbGxvd01vbWVudHVtQm91bmNlOiB1bmRlZmluZWQsXG4gICAgICAgIGlzVG91Y2hFdmVudDogdW5kZWZpbmVkLFxuICAgICAgICBzdGFydE1vdmluZzogdW5kZWZpbmVkLFxuICAgICAgfSxcblxuICAgICAgLy8gQ2xpY2tzXG4gICAgICBhbGxvd0NsaWNrOiB0cnVlLFxuXG4gICAgICAvLyBUb3VjaGVzXG4gICAgICBhbGxvd1RvdWNoTW92ZTogc3dpcGVyLnBhcmFtcy5hbGxvd1RvdWNoTW92ZSxcblxuICAgICAgdG91Y2hlczoge1xuICAgICAgICBzdGFydFg6IDAsXG4gICAgICAgIHN0YXJ0WTogMCxcbiAgICAgICAgY3VycmVudFg6IDAsXG4gICAgICAgIGN1cnJlbnRZOiAwLFxuICAgICAgICBkaWZmOiAwLFxuICAgICAgfSxcblxuICAgICAgLy8gSW1hZ2VzXG4gICAgICBpbWFnZXNUb0xvYWQ6IFtdLFxuICAgICAgaW1hZ2VzTG9hZGVkOiAwLFxuXG4gICAgfSk7XG5cbiAgICAvLyBJbnN0YWxsIE1vZHVsZXNcbiAgICBzd2lwZXIudXNlTW9kdWxlcygpO1xuXG4gICAgLy8gSW5pdFxuICAgIGlmIChzd2lwZXIucGFyYW1zLmluaXQpIHtcbiAgICAgIHN3aXBlci5pbml0KCk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFwcCBpbnN0YW5jZVxuICAgIHJldHVybiBzd2lwZXI7XG4gIH1cblxuICBzbGlkZXNQZXJWaWV3RHluYW1pYygpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGNvbnN0IHtcbiAgICAgIHBhcmFtcywgc2xpZGVzLCBzbGlkZXNHcmlkLCBzaXplOiBzd2lwZXJTaXplLCBhY3RpdmVJbmRleCxcbiAgICB9ID0gc3dpcGVyO1xuICAgIGxldCBzcHYgPSAxO1xuICAgIGlmIChwYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgIGxldCBzbGlkZVNpemUgPSBzbGlkZXNbYWN0aXZlSW5kZXhdLnN3aXBlclNsaWRlU2l6ZTtcbiAgICAgIGxldCBicmVha0xvb3A7XG4gICAgICBmb3IgKGxldCBpID0gYWN0aXZlSW5kZXggKyAxOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChzbGlkZXNbaV0gJiYgIWJyZWFrTG9vcCkge1xuICAgICAgICAgIHNsaWRlU2l6ZSArPSBzbGlkZXNbaV0uc3dpcGVyU2xpZGVTaXplO1xuICAgICAgICAgIHNwdiArPSAxO1xuICAgICAgICAgIGlmIChzbGlkZVNpemUgPiBzd2lwZXJTaXplKSBicmVha0xvb3AgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gYWN0aXZlSW5kZXggLSAxOyBpID49IDA7IGkgLT0gMSkge1xuICAgICAgICBpZiAoc2xpZGVzW2ldICYmICFicmVha0xvb3ApIHtcbiAgICAgICAgICBzbGlkZVNpemUgKz0gc2xpZGVzW2ldLnN3aXBlclNsaWRlU2l6ZTtcbiAgICAgICAgICBzcHYgKz0gMTtcbiAgICAgICAgICBpZiAoc2xpZGVTaXplID4gc3dpcGVyU2l6ZSkgYnJlYWtMb29wID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gYWN0aXZlSW5kZXggKyAxOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChzbGlkZXNHcmlkW2ldIC0gc2xpZGVzR3JpZFthY3RpdmVJbmRleF0gPCBzd2lwZXJTaXplKSB7XG4gICAgICAgICAgc3B2ICs9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNwdjtcbiAgfVxuXG4gIHVwZGF0ZSgpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHJldHVybjtcbiAgICBjb25zdCB7IHNuYXBHcmlkLCBwYXJhbXMgfSA9IHN3aXBlcjtcbiAgICAvLyBCcmVha3BvaW50c1xuICAgIGlmIChwYXJhbXMuYnJlYWtwb2ludHMpIHtcbiAgICAgIHN3aXBlci5zZXRCcmVha3BvaW50KCk7XG4gICAgfVxuICAgIHN3aXBlci51cGRhdGVTaXplKCk7XG4gICAgc3dpcGVyLnVwZGF0ZVNsaWRlcygpO1xuICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcygpO1xuICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG5cbiAgICBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoKSB7XG4gICAgICBjb25zdCB0cmFuc2xhdGVWYWx1ZSA9IHN3aXBlci5ydGxUcmFuc2xhdGUgPyBzd2lwZXIudHJhbnNsYXRlICogLTEgOiBzd2lwZXIudHJhbnNsYXRlO1xuICAgICAgY29uc3QgbmV3VHJhbnNsYXRlID0gTWF0aC5taW4oTWF0aC5tYXgodHJhbnNsYXRlVmFsdWUsIHN3aXBlci5tYXhUcmFuc2xhdGUoKSksIHN3aXBlci5taW5UcmFuc2xhdGUoKSk7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKG5ld1RyYW5zbGF0ZSk7XG4gICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gICAgfVxuICAgIGxldCB0cmFuc2xhdGVkO1xuICAgIGlmIChzd2lwZXIucGFyYW1zLmZyZWVNb2RlKSB7XG4gICAgICBzZXRUcmFuc2xhdGUoKTtcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9IZWlnaHQpIHtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZUF1dG9IZWlnaHQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKChzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJyB8fCBzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcgPiAxKSAmJiBzd2lwZXIuaXNFbmQgJiYgIXN3aXBlci5wYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgICAgdHJhbnNsYXRlZCA9IHN3aXBlci5zbGlkZVRvKHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gMSwgMCwgZmFsc2UsIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJhbnNsYXRlZCA9IHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCwgMCwgZmFsc2UsIHRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKCF0cmFuc2xhdGVkKSB7XG4gICAgICAgIHNldFRyYW5zbGF0ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc25hcEdyaWQgIT09IHN3aXBlci5zbmFwR3JpZCkge1xuICAgICAgc3dpcGVyLmNoZWNrT3ZlcmZsb3coKTtcbiAgICB9XG4gICAgc3dpcGVyLmVtaXQoJ3VwZGF0ZScpO1xuICB9XG5cbiAgY2hhbmdlRGlyZWN0aW9uKG5ld0RpcmVjdGlvbiwgbmVlZFVwZGF0ZSA9IHRydWUpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGNvbnN0IGN1cnJlbnREaXJlY3Rpb24gPSBzd2lwZXIucGFyYW1zLmRpcmVjdGlvbjtcbiAgICBpZiAoIW5ld0RpcmVjdGlvbikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICBuZXdEaXJlY3Rpb24gPSBjdXJyZW50RGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnO1xuICAgIH1cbiAgICBpZiAoKG5ld0RpcmVjdGlvbiA9PT0gY3VycmVudERpcmVjdGlvbikgfHwgKG5ld0RpcmVjdGlvbiAhPT0gJ2hvcml6b250YWwnICYmIG5ld0RpcmVjdGlvbiAhPT0gJ3ZlcnRpY2FsJykpIHtcbiAgICAgIHJldHVybiBzd2lwZXI7XG4gICAgfVxuXG4gICAgc3dpcGVyLiRlbFxuICAgICAgLnJlbW92ZUNsYXNzKGAke3N3aXBlci5wYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzc30ke2N1cnJlbnREaXJlY3Rpb259YClcbiAgICAgIC5hZGRDbGFzcyhgJHtzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3N9JHtuZXdEaXJlY3Rpb259YCk7XG5cbiAgICBzd2lwZXIucGFyYW1zLmRpcmVjdGlvbiA9IG5ld0RpcmVjdGlvbjtcblxuICAgIHN3aXBlci5zbGlkZXMuZWFjaCgoc2xpZGVJbmRleCwgc2xpZGVFbCkgPT4ge1xuICAgICAgaWYgKG5ld0RpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xuICAgICAgICBzbGlkZUVsLnN0eWxlLndpZHRoID0gJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzbGlkZUVsLnN0eWxlLmhlaWdodCA9ICcnO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3dpcGVyLmVtaXQoJ2NoYW5nZURpcmVjdGlvbicpO1xuICAgIGlmIChuZWVkVXBkYXRlKSBzd2lwZXIudXBkYXRlKCk7XG5cbiAgICByZXR1cm4gc3dpcGVyO1xuICB9XG5cbiAgaW5pdCgpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGlmIChzd2lwZXIuaW5pdGlhbGl6ZWQpIHJldHVybjtcblxuICAgIHN3aXBlci5lbWl0KCdiZWZvcmVJbml0Jyk7XG5cbiAgICAvLyBTZXQgYnJlYWtwb2ludFxuICAgIGlmIChzd2lwZXIucGFyYW1zLmJyZWFrcG9pbnRzKSB7XG4gICAgICBzd2lwZXIuc2V0QnJlYWtwb2ludCgpO1xuICAgIH1cblxuICAgIC8vIEFkZCBDbGFzc2VzXG4gICAgc3dpcGVyLmFkZENsYXNzZXMoKTtcblxuICAgIC8vIENyZWF0ZSBsb29wXG4gICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgc3dpcGVyLmxvb3BDcmVhdGUoKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgc2l6ZVxuICAgIHN3aXBlci51cGRhdGVTaXplKCk7XG5cbiAgICAvLyBVcGRhdGUgc2xpZGVzXG4gICAgc3dpcGVyLnVwZGF0ZVNsaWRlcygpO1xuXG4gICAgaWYgKHN3aXBlci5wYXJhbXMud2F0Y2hPdmVyZmxvdykge1xuICAgICAgc3dpcGVyLmNoZWNrT3ZlcmZsb3coKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgR3JhYiBDdXJzb3JcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5ncmFiQ3Vyc29yKSB7XG4gICAgICBzd2lwZXIuc2V0R3JhYkN1cnNvcigpO1xuICAgIH1cblxuICAgIGlmIChzd2lwZXIucGFyYW1zLnByZWxvYWRJbWFnZXMpIHtcbiAgICAgIHN3aXBlci5wcmVsb2FkSW1hZ2VzKCk7XG4gICAgfVxuXG4gICAgLy8gU2xpZGUgVG8gSW5pdGlhbCBTbGlkZVxuICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5wYXJhbXMuaW5pdGlhbFNsaWRlICsgc3dpcGVyLmxvb3BlZFNsaWRlcywgMCwgc3dpcGVyLnBhcmFtcy5ydW5DYWxsYmFja3NPbkluaXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIucGFyYW1zLmluaXRpYWxTbGlkZSwgMCwgc3dpcGVyLnBhcmFtcy5ydW5DYWxsYmFja3NPbkluaXQpO1xuICAgIH1cblxuICAgIC8vIEF0dGFjaCBldmVudHNcbiAgICBzd2lwZXIuYXR0YWNoRXZlbnRzKCk7XG5cbiAgICAvLyBJbml0IEZsYWdcbiAgICBzd2lwZXIuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgLy8gRW1pdFxuICAgIHN3aXBlci5lbWl0KCdpbml0Jyk7XG4gIH1cblxuICBkZXN0cm95KGRlbGV0ZUluc3RhbmNlID0gdHJ1ZSwgY2xlYW5TdHlsZXMgPSB0cnVlKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBjb25zdCB7XG4gICAgICBwYXJhbXMsICRlbCwgJHdyYXBwZXJFbCwgc2xpZGVzLFxuICAgIH0gPSBzd2lwZXI7XG5cbiAgICBpZiAodHlwZW9mIHN3aXBlci5wYXJhbXMgPT09ICd1bmRlZmluZWQnIHx8IHN3aXBlci5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN3aXBlci5lbWl0KCdiZWZvcmVEZXN0cm95Jyk7XG5cbiAgICAvLyBJbml0IEZsYWdcbiAgICBzd2lwZXIuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAgIC8vIERldGFjaCBldmVudHNcbiAgICBzd2lwZXIuZGV0YWNoRXZlbnRzKCk7XG5cbiAgICAvLyBEZXN0cm95IGxvb3BcbiAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgIHN3aXBlci5sb29wRGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8vIENsZWFudXAgc3R5bGVzXG4gICAgaWYgKGNsZWFuU3R5bGVzKSB7XG4gICAgICBzd2lwZXIucmVtb3ZlQ2xhc3NlcygpO1xuICAgICAgJGVsLnJlbW92ZUF0dHIoJ3N0eWxlJyk7XG4gICAgICAkd3JhcHBlckVsLnJlbW92ZUF0dHIoJ3N0eWxlJyk7XG4gICAgICBpZiAoc2xpZGVzICYmIHNsaWRlcy5sZW5ndGgpIHtcbiAgICAgICAgc2xpZGVzXG4gICAgICAgICAgLnJlbW92ZUNsYXNzKFtcbiAgICAgICAgICAgIHBhcmFtcy5zbGlkZVZpc2libGVDbGFzcyxcbiAgICAgICAgICAgIHBhcmFtcy5zbGlkZUFjdGl2ZUNsYXNzLFxuICAgICAgICAgICAgcGFyYW1zLnNsaWRlTmV4dENsYXNzLFxuICAgICAgICAgICAgcGFyYW1zLnNsaWRlUHJldkNsYXNzLFxuICAgICAgICAgIF0uam9pbignICcpKVxuICAgICAgICAgIC5yZW1vdmVBdHRyKCdzdHlsZScpXG4gICAgICAgICAgLnJlbW92ZUF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpcGVyLmVtaXQoJ2Rlc3Ryb3knKTtcblxuICAgIC8vIERldGFjaCBlbWl0dGVyIGV2ZW50c1xuICAgIE9iamVjdC5rZXlzKHN3aXBlci5ldmVudHNMaXN0ZW5lcnMpLmZvckVhY2goKGV2ZW50TmFtZSkgPT4ge1xuICAgICAgc3dpcGVyLm9mZihldmVudE5hbWUpO1xuICAgIH0pO1xuXG4gICAgaWYgKGRlbGV0ZUluc3RhbmNlICE9PSBmYWxzZSkge1xuICAgICAgc3dpcGVyLiRlbFswXS5zd2lwZXIgPSBudWxsO1xuICAgICAgc3dpcGVyLiRlbC5kYXRhKCdzd2lwZXInLCBudWxsKTtcbiAgICAgIFV0aWxzLmRlbGV0ZVByb3BzKHN3aXBlcik7XG4gICAgfVxuICAgIHN3aXBlci5kZXN0cm95ZWQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgZXh0ZW5kRGVmYXVsdHMobmV3RGVmYXVsdHMpIHtcbiAgICBVdGlscy5leHRlbmQoZXh0ZW5kZWREZWZhdWx0cywgbmV3RGVmYXVsdHMpO1xuICB9XG5cbiAgc3RhdGljIGdldCBleHRlbmRlZERlZmF1bHRzKCkge1xuICAgIHJldHVybiBleHRlbmRlZERlZmF1bHRzO1xuICB9XG5cbiAgc3RhdGljIGdldCBkZWZhdWx0cygpIHtcbiAgICByZXR1cm4gZGVmYXVsdHM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IENsYXNzKCkge1xuICAgIHJldHVybiBTd2lwZXJDbGFzcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgJCgpIHtcbiAgICByZXR1cm4gJDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTd2lwZXI7XG4iLCJpbXBvcnQgRGV2aWNlIGZyb20gJy4uLy4uL3V0aWxzL2RldmljZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2RldmljZScsXG4gIHByb3RvOiB7XG4gICAgZGV2aWNlOiBEZXZpY2UsXG4gIH0sXG4gIHN0YXRpYzoge1xuICAgIGRldmljZTogRGV2aWNlLFxuICB9LFxufTtcbiIsImltcG9ydCBTdXBwb3J0IGZyb20gJy4uLy4uL3V0aWxzL3N1cHBvcnQnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdzdXBwb3J0JyxcbiAgcHJvdG86IHtcbiAgICBzdXBwb3J0OiBTdXBwb3J0LFxuICB9LFxuICBzdGF0aWM6IHtcbiAgICBzdXBwb3J0OiBTdXBwb3J0LFxuICB9LFxufTtcbiIsImltcG9ydCB7IHdpbmRvdyB9IGZyb20gJ3Nzci13aW5kb3cnO1xuXG5jb25zdCBCcm93c2VyID0gKGZ1bmN0aW9uIEJyb3dzZXIoKSB7XG4gIGZ1bmN0aW9uIGlzU2FmYXJpKCkge1xuICAgIGNvbnN0IHVhID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKHVhLmluZGV4T2YoJ3NhZmFyaScpID49IDAgJiYgdWEuaW5kZXhPZignY2hyb21lJykgPCAwICYmIHVhLmluZGV4T2YoJ2FuZHJvaWQnKSA8IDApO1xuICB9XG4gIHJldHVybiB7XG4gICAgaXNFZGdlOiAhIXdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9FZGdlL2cpLFxuICAgIGlzU2FmYXJpOiBpc1NhZmFyaSgpLFxuICAgIGlzV2ViVmlldzogLyhpUGhvbmV8aVBvZHxpUGFkKS4qQXBwbGVXZWJLaXQoPyEuKlNhZmFyaSkvaS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSxcbiAgfTtcbn0oKSk7XG5cbmV4cG9ydCBkZWZhdWx0IEJyb3dzZXI7XG4iLCJpbXBvcnQgQnJvd3NlciBmcm9tICcuLi8uLi91dGlscy9icm93c2VyJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYnJvd3NlcicsXG4gIHByb3RvOiB7XG4gICAgYnJvd3NlcjogQnJvd3NlcixcbiAgfSxcbiAgc3RhdGljOiB7XG4gICAgYnJvd3NlcjogQnJvd3NlcixcbiAgfSxcbn07XG4iLCJpbXBvcnQgeyB3aW5kb3cgfSBmcm9tICdzc3Itd2luZG93JztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3Jlc2l6ZScsXG4gIGNyZWF0ZSgpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgIHJlc2l6ZToge1xuICAgICAgICByZXNpemVIYW5kbGVyKCkge1xuICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQgfHwgIXN3aXBlci5pbml0aWFsaXplZCkgcmV0dXJuO1xuICAgICAgICAgIHN3aXBlci5lbWl0KCdiZWZvcmVSZXNpemUnKTtcbiAgICAgICAgICBzd2lwZXIuZW1pdCgncmVzaXplJyk7XG4gICAgICAgIH0sXG4gICAgICAgIG9yaWVudGF0aW9uQ2hhbmdlSGFuZGxlcigpIHtcbiAgICAgICAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkIHx8ICFzd2lwZXIuaW5pdGlhbGl6ZWQpIHJldHVybjtcbiAgICAgICAgICBzd2lwZXIuZW1pdCgnb3JpZW50YXRpb25jaGFuZ2UnKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0sXG4gIG9uOiB7XG4gICAgaW5pdCgpIHtcbiAgICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgICAvLyBFbWl0IHJlc2l6ZVxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHN3aXBlci5yZXNpemUucmVzaXplSGFuZGxlcik7XG5cbiAgICAgIC8vIEVtaXQgb3JpZW50YXRpb25jaGFuZ2VcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvcmllbnRhdGlvbmNoYW5nZScsIHN3aXBlci5yZXNpemUub3JpZW50YXRpb25DaGFuZ2VIYW5kbGVyKTtcbiAgICB9LFxuICAgIGRlc3Ryb3koKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHN3aXBlci5yZXNpemUucmVzaXplSGFuZGxlcik7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignb3JpZW50YXRpb25jaGFuZ2UnLCBzd2lwZXIucmVzaXplLm9yaWVudGF0aW9uQ2hhbmdlSGFuZGxlcik7XG4gICAgfSxcbiAgfSxcbn07XG4iLCJpbXBvcnQgeyB3aW5kb3cgfSBmcm9tICdzc3Itd2luZG93JztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5pbXBvcnQgU3VwcG9ydCBmcm9tICcuLi8uLi91dGlscy9zdXBwb3J0JztcblxuY29uc3QgT2JzZXJ2ZXIgPSB7XG4gIGZ1bmM6IHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyIHx8IHdpbmRvdy5XZWJraXRNdXRhdGlvbk9ic2VydmVyLFxuICBhdHRhY2godGFyZ2V0LCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuXG4gICAgY29uc3QgT2JzZXJ2ZXJGdW5jID0gT2JzZXJ2ZXIuZnVuYztcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBPYnNlcnZlckZ1bmMoKG11dGF0aW9ucykgPT4ge1xuICAgICAgLy8gVGhlIG9ic2VydmVyVXBkYXRlIGV2ZW50IHNob3VsZCBvbmx5IGJlIHRyaWdnZXJlZFxuICAgICAgLy8gb25jZSBkZXNwaXRlIHRoZSBudW1iZXIgb2YgbXV0YXRpb25zLiAgQWRkaXRpb25hbFxuICAgICAgLy8gdHJpZ2dlcnMgYXJlIHJlZHVuZGFudCBhbmQgYXJlIHZlcnkgY29zdGx5XG4gICAgICBpZiAobXV0YXRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBzd2lwZXIuZW1pdCgnb2JzZXJ2ZXJVcGRhdGUnLCBtdXRhdGlvbnNbMF0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBvYnNlcnZlclVwZGF0ZSA9IGZ1bmN0aW9uIG9ic2VydmVyVXBkYXRlKCkge1xuICAgICAgICBzd2lwZXIuZW1pdCgnb2JzZXJ2ZXJVcGRhdGUnLCBtdXRhdGlvbnNbMF0pO1xuICAgICAgfTtcblxuICAgICAgaWYgKHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShvYnNlcnZlclVwZGF0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aW5kb3cuc2V0VGltZW91dChvYnNlcnZlclVwZGF0ZSwgMCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBvYnNlcnZlci5vYnNlcnZlKHRhcmdldCwge1xuICAgICAgYXR0cmlidXRlczogdHlwZW9mIG9wdGlvbnMuYXR0cmlidXRlcyA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogb3B0aW9ucy5hdHRyaWJ1dGVzLFxuICAgICAgY2hpbGRMaXN0OiB0eXBlb2Ygb3B0aW9ucy5jaGlsZExpc3QgPT09ICd1bmRlZmluZWQnID8gdHJ1ZSA6IG9wdGlvbnMuY2hpbGRMaXN0LFxuICAgICAgY2hhcmFjdGVyRGF0YTogdHlwZW9mIG9wdGlvbnMuY2hhcmFjdGVyRGF0YSA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogb3B0aW9ucy5jaGFyYWN0ZXJEYXRhLFxuICAgIH0pO1xuXG4gICAgc3dpcGVyLm9ic2VydmVyLm9ic2VydmVycy5wdXNoKG9ic2VydmVyKTtcbiAgfSxcbiAgaW5pdCgpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGlmICghU3VwcG9ydC5vYnNlcnZlciB8fCAhc3dpcGVyLnBhcmFtcy5vYnNlcnZlcikgcmV0dXJuO1xuICAgIGlmIChzd2lwZXIucGFyYW1zLm9ic2VydmVQYXJlbnRzKSB7XG4gICAgICBjb25zdCBjb250YWluZXJQYXJlbnRzID0gc3dpcGVyLiRlbC5wYXJlbnRzKCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRhaW5lclBhcmVudHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgc3dpcGVyLm9ic2VydmVyLmF0dGFjaChjb250YWluZXJQYXJlbnRzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gT2JzZXJ2ZSBjb250YWluZXJcbiAgICBzd2lwZXIub2JzZXJ2ZXIuYXR0YWNoKHN3aXBlci4kZWxbMF0sIHsgY2hpbGRMaXN0OiBzd2lwZXIucGFyYW1zLm9ic2VydmVTbGlkZUNoaWxkcmVuIH0pO1xuXG4gICAgLy8gT2JzZXJ2ZSB3cmFwcGVyXG4gICAgc3dpcGVyLm9ic2VydmVyLmF0dGFjaChzd2lwZXIuJHdyYXBwZXJFbFswXSwgeyBhdHRyaWJ1dGVzOiBmYWxzZSB9KTtcbiAgfSxcbiAgZGVzdHJveSgpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIHN3aXBlci5vYnNlcnZlci5vYnNlcnZlcnMuZm9yRWFjaCgob2JzZXJ2ZXIpID0+IHtcbiAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9KTtcbiAgICBzd2lwZXIub2JzZXJ2ZXIub2JzZXJ2ZXJzID0gW107XG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdvYnNlcnZlcicsXG4gIHBhcmFtczoge1xuICAgIG9ic2VydmVyOiBmYWxzZSxcbiAgICBvYnNlcnZlUGFyZW50czogZmFsc2UsXG4gICAgb2JzZXJ2ZVNsaWRlQ2hpbGRyZW46IGZhbHNlLFxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICBvYnNlcnZlcjoge1xuICAgICAgICBpbml0OiBPYnNlcnZlci5pbml0LmJpbmQoc3dpcGVyKSxcbiAgICAgICAgYXR0YWNoOiBPYnNlcnZlci5hdHRhY2guYmluZChzd2lwZXIpLFxuICAgICAgICBkZXN0cm95OiBPYnNlcnZlci5kZXN0cm95LmJpbmQoc3dpcGVyKSxcbiAgICAgICAgb2JzZXJ2ZXJzOiBbXSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0sXG4gIG9uOiB7XG4gICAgaW5pdCgpIHtcbiAgICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgICBzd2lwZXIub2JzZXJ2ZXIuaW5pdCgpO1xuICAgIH0sXG4gICAgZGVzdHJveSgpIHtcbiAgICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgICBzd2lwZXIub2JzZXJ2ZXIuZGVzdHJveSgpO1xuICAgIH0sXG4gIH0sXG59O1xuIiwiaW1wb3J0ICQgZnJvbSAnLi4vLi4vdXRpbHMvZG9tJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5cbmNvbnN0IFZpcnR1YWwgPSB7XG4gIHVwZGF0ZShmb3JjZSkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgY29uc3QgeyBzbGlkZXNQZXJWaWV3LCBzbGlkZXNQZXJHcm91cCwgY2VudGVyZWRTbGlkZXMgfSA9IHN3aXBlci5wYXJhbXM7XG4gICAgY29uc3QgeyBhZGRTbGlkZXNCZWZvcmUsIGFkZFNsaWRlc0FmdGVyIH0gPSBzd2lwZXIucGFyYW1zLnZpcnR1YWw7XG4gICAgY29uc3Qge1xuICAgICAgZnJvbTogcHJldmlvdXNGcm9tLFxuICAgICAgdG86IHByZXZpb3VzVG8sXG4gICAgICBzbGlkZXMsXG4gICAgICBzbGlkZXNHcmlkOiBwcmV2aW91c1NsaWRlc0dyaWQsXG4gICAgICByZW5kZXJTbGlkZSxcbiAgICAgIG9mZnNldDogcHJldmlvdXNPZmZzZXQsXG4gICAgfSA9IHN3aXBlci52aXJ0dWFsO1xuICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgIGNvbnN0IGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4IHx8IDA7XG5cbiAgICBsZXQgb2Zmc2V0UHJvcDtcbiAgICBpZiAoc3dpcGVyLnJ0bFRyYW5zbGF0ZSkgb2Zmc2V0UHJvcCA9ICdyaWdodCc7XG4gICAgZWxzZSBvZmZzZXRQcm9wID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ2xlZnQnIDogJ3RvcCc7XG5cbiAgICBsZXQgc2xpZGVzQWZ0ZXI7XG4gICAgbGV0IHNsaWRlc0JlZm9yZTtcbiAgICBpZiAoY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgIHNsaWRlc0FmdGVyID0gTWF0aC5mbG9vcihzbGlkZXNQZXJWaWV3IC8gMikgKyBzbGlkZXNQZXJHcm91cCArIGFkZFNsaWRlc0JlZm9yZTtcbiAgICAgIHNsaWRlc0JlZm9yZSA9IE1hdGguZmxvb3Ioc2xpZGVzUGVyVmlldyAvIDIpICsgc2xpZGVzUGVyR3JvdXAgKyBhZGRTbGlkZXNBZnRlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgc2xpZGVzQWZ0ZXIgPSBzbGlkZXNQZXJWaWV3ICsgKHNsaWRlc1Blckdyb3VwIC0gMSkgKyBhZGRTbGlkZXNCZWZvcmU7XG4gICAgICBzbGlkZXNCZWZvcmUgPSBzbGlkZXNQZXJHcm91cCArIGFkZFNsaWRlc0FmdGVyO1xuICAgIH1cbiAgICBjb25zdCBmcm9tID0gTWF0aC5tYXgoKGFjdGl2ZUluZGV4IHx8IDApIC0gc2xpZGVzQmVmb3JlLCAwKTtcbiAgICBjb25zdCB0byA9IE1hdGgubWluKChhY3RpdmVJbmRleCB8fCAwKSArIHNsaWRlc0FmdGVyLCBzbGlkZXMubGVuZ3RoIC0gMSk7XG4gICAgY29uc3Qgb2Zmc2V0ID0gKHN3aXBlci5zbGlkZXNHcmlkW2Zyb21dIHx8IDApIC0gKHN3aXBlci5zbGlkZXNHcmlkWzBdIHx8IDApO1xuXG4gICAgVXRpbHMuZXh0ZW5kKHN3aXBlci52aXJ0dWFsLCB7XG4gICAgICBmcm9tLFxuICAgICAgdG8sXG4gICAgICBvZmZzZXQsXG4gICAgICBzbGlkZXNHcmlkOiBzd2lwZXIuc2xpZGVzR3JpZCxcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIG9uUmVuZGVyZWQoKSB7XG4gICAgICBzd2lwZXIudXBkYXRlU2xpZGVzKCk7XG4gICAgICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3MoKTtcbiAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gICAgICBpZiAoc3dpcGVyLmxhenkgJiYgc3dpcGVyLnBhcmFtcy5sYXp5LmVuYWJsZWQpIHtcbiAgICAgICAgc3dpcGVyLmxhenkubG9hZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcmV2aW91c0Zyb20gPT09IGZyb20gJiYgcHJldmlvdXNUbyA9PT0gdG8gJiYgIWZvcmNlKSB7XG4gICAgICBpZiAoc3dpcGVyLnNsaWRlc0dyaWQgIT09IHByZXZpb3VzU2xpZGVzR3JpZCAmJiBvZmZzZXQgIT09IHByZXZpb3VzT2Zmc2V0KSB7XG4gICAgICAgIHN3aXBlci5zbGlkZXMuY3NzKG9mZnNldFByb3AsIGAke29mZnNldH1weGApO1xuICAgICAgfVxuICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChzd2lwZXIucGFyYW1zLnZpcnR1YWwucmVuZGVyRXh0ZXJuYWwpIHtcbiAgICAgIHN3aXBlci5wYXJhbXMudmlydHVhbC5yZW5kZXJFeHRlcm5hbC5jYWxsKHN3aXBlciwge1xuICAgICAgICBvZmZzZXQsXG4gICAgICAgIGZyb20sXG4gICAgICAgIHRvLFxuICAgICAgICBzbGlkZXM6IChmdW5jdGlvbiBnZXRTbGlkZXMoKSB7XG4gICAgICAgICAgY29uc3Qgc2xpZGVzVG9SZW5kZXIgPSBbXTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gZnJvbTsgaSA8PSB0bzsgaSArPSAxKSB7XG4gICAgICAgICAgICBzbGlkZXNUb1JlbmRlci5wdXNoKHNsaWRlc1tpXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBzbGlkZXNUb1JlbmRlcjtcbiAgICAgICAgfSgpKSxcbiAgICAgIH0pO1xuICAgICAgb25SZW5kZXJlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwcmVwZW5kSW5kZXhlcyA9IFtdO1xuICAgIGNvbnN0IGFwcGVuZEluZGV4ZXMgPSBbXTtcbiAgICBpZiAoZm9yY2UpIHtcbiAgICAgIHN3aXBlci4kd3JhcHBlckVsLmZpbmQoYC4ke3N3aXBlci5wYXJhbXMuc2xpZGVDbGFzc31gKS5yZW1vdmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgaSA9IHByZXZpb3VzRnJvbTsgaSA8PSBwcmV2aW91c1RvOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKGkgPCBmcm9tIHx8IGkgPiB0bykge1xuICAgICAgICAgIHN3aXBlci4kd3JhcHBlckVsLmZpbmQoYC4ke3N3aXBlci5wYXJhbXMuc2xpZGVDbGFzc31bZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XCIke2l9XCJdYCkucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmIChpID49IGZyb20gJiYgaSA8PSB0bykge1xuICAgICAgICBpZiAodHlwZW9mIHByZXZpb3VzVG8gPT09ICd1bmRlZmluZWQnIHx8IGZvcmNlKSB7XG4gICAgICAgICAgYXBwZW5kSW5kZXhlcy5wdXNoKGkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChpID4gcHJldmlvdXNUbykgYXBwZW5kSW5kZXhlcy5wdXNoKGkpO1xuICAgICAgICAgIGlmIChpIDwgcHJldmlvdXNGcm9tKSBwcmVwZW5kSW5kZXhlcy5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGFwcGVuZEluZGV4ZXMuZm9yRWFjaCgoaW5kZXgpID0+IHtcbiAgICAgIHN3aXBlci4kd3JhcHBlckVsLmFwcGVuZChyZW5kZXJTbGlkZShzbGlkZXNbaW5kZXhdLCBpbmRleCkpO1xuICAgIH0pO1xuICAgIHByZXBlbmRJbmRleGVzLnNvcnQoKGEsIGIpID0+IGIgLSBhKS5mb3JFYWNoKChpbmRleCkgPT4ge1xuICAgICAgc3dpcGVyLiR3cmFwcGVyRWwucHJlcGVuZChyZW5kZXJTbGlkZShzbGlkZXNbaW5kZXhdLCBpbmRleCkpO1xuICAgIH0pO1xuICAgIHN3aXBlci4kd3JhcHBlckVsLmNoaWxkcmVuKCcuc3dpcGVyLXNsaWRlJykuY3NzKG9mZnNldFByb3AsIGAke29mZnNldH1weGApO1xuICAgIG9uUmVuZGVyZWQoKTtcbiAgfSxcbiAgcmVuZGVyU2xpZGUoc2xpZGUsIGluZGV4KSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnZpcnR1YWw7XG4gICAgaWYgKHBhcmFtcy5jYWNoZSAmJiBzd2lwZXIudmlydHVhbC5jYWNoZVtpbmRleF0pIHtcbiAgICAgIHJldHVybiBzd2lwZXIudmlydHVhbC5jYWNoZVtpbmRleF07XG4gICAgfVxuICAgIGNvbnN0ICRzbGlkZUVsID0gcGFyYW1zLnJlbmRlclNsaWRlXG4gICAgICA/ICQocGFyYW1zLnJlbmRlclNsaWRlLmNhbGwoc3dpcGVyLCBzbGlkZSwgaW5kZXgpKVxuICAgICAgOiAkKGA8ZGl2IGNsYXNzPVwiJHtzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3N9XCIgZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XCIke2luZGV4fVwiPiR7c2xpZGV9PC9kaXY+YCk7XG4gICAgaWYgKCEkc2xpZGVFbC5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpKSAkc2xpZGVFbC5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcsIGluZGV4KTtcbiAgICBpZiAocGFyYW1zLmNhY2hlKSBzd2lwZXIudmlydHVhbC5jYWNoZVtpbmRleF0gPSAkc2xpZGVFbDtcbiAgICByZXR1cm4gJHNsaWRlRWw7XG4gIH0sXG4gIGFwcGVuZFNsaWRlKHNsaWRlcykge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKHR5cGVvZiBzbGlkZXMgPT09ICdvYmplY3QnICYmICdsZW5ndGgnIGluIHNsaWRlcykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKHNsaWRlc1tpXSkgc3dpcGVyLnZpcnR1YWwuc2xpZGVzLnB1c2goc2xpZGVzW2ldKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3dpcGVyLnZpcnR1YWwuc2xpZGVzLnB1c2goc2xpZGVzKTtcbiAgICB9XG4gICAgc3dpcGVyLnZpcnR1YWwudXBkYXRlKHRydWUpO1xuICB9LFxuICBwcmVwZW5kU2xpZGUoc2xpZGVzKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBjb25zdCBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICBsZXQgbmV3QWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleCArIDE7XG4gICAgbGV0IG51bWJlck9mTmV3U2xpZGVzID0gMTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHNsaWRlcykpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChzbGlkZXNbaV0pIHN3aXBlci52aXJ0dWFsLnNsaWRlcy51bnNoaWZ0KHNsaWRlc1tpXSk7XG4gICAgICB9XG4gICAgICBuZXdBY3RpdmVJbmRleCA9IGFjdGl2ZUluZGV4ICsgc2xpZGVzLmxlbmd0aDtcbiAgICAgIG51bWJlck9mTmV3U2xpZGVzID0gc2xpZGVzLmxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpcGVyLnZpcnR1YWwuc2xpZGVzLnVuc2hpZnQoc2xpZGVzKTtcbiAgICB9XG4gICAgaWYgKHN3aXBlci5wYXJhbXMudmlydHVhbC5jYWNoZSkge1xuICAgICAgY29uc3QgY2FjaGUgPSBzd2lwZXIudmlydHVhbC5jYWNoZTtcbiAgICAgIGNvbnN0IG5ld0NhY2hlID0ge307XG4gICAgICBPYmplY3Qua2V5cyhjYWNoZSkuZm9yRWFjaCgoY2FjaGVkSW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgJGNhY2hlZEVsID0gY2FjaGVbY2FjaGVkSW5kZXhdO1xuICAgICAgICBjb25zdCBjYWNoZWRFbEluZGV4ID0gJGNhY2hlZEVsLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4Jyk7XG4gICAgICAgIGlmIChjYWNoZWRFbEluZGV4KSB7XG4gICAgICAgICAgJGNhY2hlZEVsLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JywgcGFyc2VJbnQoY2FjaGVkRWxJbmRleCwgMTApICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3Q2FjaGVbcGFyc2VJbnQoY2FjaGVkSW5kZXgsIDEwKSArIG51bWJlck9mTmV3U2xpZGVzXSA9ICRjYWNoZWRFbDtcbiAgICAgIH0pO1xuICAgICAgc3dpcGVyLnZpcnR1YWwuY2FjaGUgPSBuZXdDYWNoZTtcbiAgICB9XG4gICAgc3dpcGVyLnZpcnR1YWwudXBkYXRlKHRydWUpO1xuICAgIHN3aXBlci5zbGlkZVRvKG5ld0FjdGl2ZUluZGV4LCAwKTtcbiAgfSxcbiAgcmVtb3ZlU2xpZGUoc2xpZGVzSW5kZXhlcykge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKHR5cGVvZiBzbGlkZXNJbmRleGVzID09PSAndW5kZWZpbmVkJyB8fCBzbGlkZXNJbmRleGVzID09PSBudWxsKSByZXR1cm47XG4gICAgbGV0IGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNsaWRlc0luZGV4ZXMpKSB7XG4gICAgICBmb3IgKGxldCBpID0gc2xpZGVzSW5kZXhlcy5sZW5ndGggLSAxOyBpID49IDA7IGkgLT0gMSkge1xuICAgICAgICBzd2lwZXIudmlydHVhbC5zbGlkZXMuc3BsaWNlKHNsaWRlc0luZGV4ZXNbaV0sIDEpO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmNhY2hlKSB7XG4gICAgICAgICAgZGVsZXRlIHN3aXBlci52aXJ0dWFsLmNhY2hlW3NsaWRlc0luZGV4ZXNbaV1dO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzbGlkZXNJbmRleGVzW2ldIDwgYWN0aXZlSW5kZXgpIGFjdGl2ZUluZGV4IC09IDE7XG4gICAgICAgIGFjdGl2ZUluZGV4ID0gTWF0aC5tYXgoYWN0aXZlSW5kZXgsIDApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIudmlydHVhbC5zbGlkZXMuc3BsaWNlKHNsaWRlc0luZGV4ZXMsIDEpO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMudmlydHVhbC5jYWNoZSkge1xuICAgICAgICBkZWxldGUgc3dpcGVyLnZpcnR1YWwuY2FjaGVbc2xpZGVzSW5kZXhlc107XG4gICAgICB9XG4gICAgICBpZiAoc2xpZGVzSW5kZXhlcyA8IGFjdGl2ZUluZGV4KSBhY3RpdmVJbmRleCAtPSAxO1xuICAgICAgYWN0aXZlSW5kZXggPSBNYXRoLm1heChhY3RpdmVJbmRleCwgMCk7XG4gICAgfVxuICAgIHN3aXBlci52aXJ0dWFsLnVwZGF0ZSh0cnVlKTtcbiAgICBzd2lwZXIuc2xpZGVUbyhhY3RpdmVJbmRleCwgMCk7XG4gIH0sXG4gIHJlbW92ZUFsbFNsaWRlcygpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIHN3aXBlci52aXJ0dWFsLnNsaWRlcyA9IFtdO1xuICAgIGlmIChzd2lwZXIucGFyYW1zLnZpcnR1YWwuY2FjaGUpIHtcbiAgICAgIHN3aXBlci52aXJ0dWFsLmNhY2hlID0ge307XG4gICAgfVxuICAgIHN3aXBlci52aXJ0dWFsLnVwZGF0ZSh0cnVlKTtcbiAgICBzd2lwZXIuc2xpZGVUbygwLCAwKTtcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3ZpcnR1YWwnLFxuICBwYXJhbXM6IHtcbiAgICB2aXJ0dWFsOiB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIHNsaWRlczogW10sXG4gICAgICBjYWNoZTogdHJ1ZSxcbiAgICAgIHJlbmRlclNsaWRlOiBudWxsLFxuICAgICAgcmVuZGVyRXh0ZXJuYWw6IG51bGwsXG4gICAgICBhZGRTbGlkZXNCZWZvcmU6IDAsXG4gICAgICBhZGRTbGlkZXNBZnRlcjogMCxcbiAgICB9LFxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICB2aXJ0dWFsOiB7XG4gICAgICAgIHVwZGF0ZTogVmlydHVhbC51cGRhdGUuYmluZChzd2lwZXIpLFxuICAgICAgICBhcHBlbmRTbGlkZTogVmlydHVhbC5hcHBlbmRTbGlkZS5iaW5kKHN3aXBlciksXG4gICAgICAgIHByZXBlbmRTbGlkZTogVmlydHVhbC5wcmVwZW5kU2xpZGUuYmluZChzd2lwZXIpLFxuICAgICAgICByZW1vdmVTbGlkZTogVmlydHVhbC5yZW1vdmVTbGlkZS5iaW5kKHN3aXBlciksXG4gICAgICAgIHJlbW92ZUFsbFNsaWRlczogVmlydHVhbC5yZW1vdmVBbGxTbGlkZXMuYmluZChzd2lwZXIpLFxuICAgICAgICByZW5kZXJTbGlkZTogVmlydHVhbC5yZW5kZXJTbGlkZS5iaW5kKHN3aXBlciksXG4gICAgICAgIHNsaWRlczogc3dpcGVyLnBhcmFtcy52aXJ0dWFsLnNsaWRlcyxcbiAgICAgICAgY2FjaGU6IHt9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSxcbiAgb246IHtcbiAgICBiZWZvcmVJbml0KCkge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQpIHJldHVybjtcbiAgICAgIHN3aXBlci5jbGFzc05hbWVzLnB1c2goYCR7c3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzfXZpcnR1YWxgKTtcbiAgICAgIGNvbnN0IG92ZXJ3cml0ZVBhcmFtcyA9IHtcbiAgICAgICAgd2F0Y2hTbGlkZXNQcm9ncmVzczogdHJ1ZSxcbiAgICAgIH07XG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLnBhcmFtcywgb3ZlcndyaXRlUGFyYW1zKTtcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIub3JpZ2luYWxQYXJhbXMsIG92ZXJ3cml0ZVBhcmFtcyk7XG5cbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5pbml0aWFsU2xpZGUpIHtcbiAgICAgICAgc3dpcGVyLnZpcnR1YWwudXBkYXRlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXRUcmFuc2xhdGUoKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCkgcmV0dXJuO1xuICAgICAgc3dpcGVyLnZpcnR1YWwudXBkYXRlKCk7XG4gICAgfSxcbiAgfSxcbn07XG4iLCJpbXBvcnQgeyB3aW5kb3csIGRvY3VtZW50IH0gZnJvbSAnc3NyLXdpbmRvdyc7XG5pbXBvcnQgJCBmcm9tICcuLi8uLi91dGlscy9kb20nO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uL3V0aWxzL3V0aWxzJztcblxuY29uc3QgS2V5Ym9hcmQgPSB7XG4gIGhhbmRsZShldmVudCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgY29uc3QgeyBydGxUcmFuc2xhdGU6IHJ0bCB9ID0gc3dpcGVyO1xuICAgIGxldCBlID0gZXZlbnQ7XG4gICAgaWYgKGUub3JpZ2luYWxFdmVudCkgZSA9IGUub3JpZ2luYWxFdmVudDsgLy8ganF1ZXJ5IGZpeFxuICAgIGNvbnN0IGtjID0gZS5rZXlDb2RlIHx8IGUuY2hhckNvZGU7XG4gICAgY29uc3QgcGFnZVVwRG93biA9IHN3aXBlci5wYXJhbXMua2V5Ym9hcmQucGFnZVVwRG93bjtcbiAgICBjb25zdCBpc1BhZ2VVcCA9IHBhZ2VVcERvd24gJiYga2MgPT09IDMzO1xuICAgIGNvbnN0IGlzUGFnZURvd24gPSBwYWdlVXBEb3duICYmIGtjID09PSAzNDtcbiAgICBjb25zdCBpc0Fycm93TGVmdCA9IGtjID09PSAzNztcbiAgICBjb25zdCBpc0Fycm93UmlnaHQgPSBrYyA9PT0gMzk7XG4gICAgY29uc3QgaXNBcnJvd1VwID0ga2MgPT09IDM4O1xuICAgIGNvbnN0IGlzQXJyb3dEb3duID0ga2MgPT09IDQwO1xuICAgIC8vIERpcmVjdGlvbnMgbG9ja3NcbiAgICBpZiAoIXN3aXBlci5hbGxvd1NsaWRlTmV4dCAmJiAoKHN3aXBlci5pc0hvcml6b250YWwoKSAmJiBpc0Fycm93UmlnaHQpIHx8IChzd2lwZXIuaXNWZXJ0aWNhbCgpICYmIGlzQXJyb3dEb3duKSB8fCBpc1BhZ2VEb3duKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIXN3aXBlci5hbGxvd1NsaWRlUHJldiAmJiAoKHN3aXBlci5pc0hvcml6b250YWwoKSAmJiBpc0Fycm93TGVmdCkgfHwgKHN3aXBlci5pc1ZlcnRpY2FsKCkgJiYgaXNBcnJvd1VwKSB8fCBpc1BhZ2VVcCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGUuc2hpZnRLZXkgfHwgZS5hbHRLZXkgfHwgZS5jdHJsS2V5IHx8IGUubWV0YUtleSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ub2RlTmFtZSAmJiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3RleHRhcmVhJykpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChzd2lwZXIucGFyYW1zLmtleWJvYXJkLm9ubHlJblZpZXdwb3J0ICYmIChpc1BhZ2VVcCB8fCBpc1BhZ2VEb3duIHx8IGlzQXJyb3dMZWZ0IHx8IGlzQXJyb3dSaWdodCB8fCBpc0Fycm93VXAgfHwgaXNBcnJvd0Rvd24pKSB7XG4gICAgICBsZXQgaW5WaWV3ID0gZmFsc2U7XG4gICAgICAvLyBDaGVjayB0aGF0IHN3aXBlciBzaG91bGQgYmUgaW5zaWRlIG9mIHZpc2libGUgYXJlYSBvZiB3aW5kb3dcbiAgICAgIGlmIChzd2lwZXIuJGVsLnBhcmVudHMoYC4ke3N3aXBlci5wYXJhbXMuc2xpZGVDbGFzc31gKS5sZW5ndGggPiAwICYmIHN3aXBlci4kZWwucGFyZW50cyhgLiR7c3dpcGVyLnBhcmFtcy5zbGlkZUFjdGl2ZUNsYXNzfWApLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgY29uc3Qgd2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICAgIGNvbnN0IHdpbmRvd0hlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICAgIGNvbnN0IHN3aXBlck9mZnNldCA9IHN3aXBlci4kZWwub2Zmc2V0KCk7XG4gICAgICBpZiAocnRsKSBzd2lwZXJPZmZzZXQubGVmdCAtPSBzd2lwZXIuJGVsWzBdLnNjcm9sbExlZnQ7XG4gICAgICBjb25zdCBzd2lwZXJDb29yZCA9IFtcbiAgICAgICAgW3N3aXBlck9mZnNldC5sZWZ0LCBzd2lwZXJPZmZzZXQudG9wXSxcbiAgICAgICAgW3N3aXBlck9mZnNldC5sZWZ0ICsgc3dpcGVyLndpZHRoLCBzd2lwZXJPZmZzZXQudG9wXSxcbiAgICAgICAgW3N3aXBlck9mZnNldC5sZWZ0LCBzd2lwZXJPZmZzZXQudG9wICsgc3dpcGVyLmhlaWdodF0sXG4gICAgICAgIFtzd2lwZXJPZmZzZXQubGVmdCArIHN3aXBlci53aWR0aCwgc3dpcGVyT2Zmc2V0LnRvcCArIHN3aXBlci5oZWlnaHRdLFxuICAgICAgXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3dpcGVyQ29vcmQubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBzd2lwZXJDb29yZFtpXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHBvaW50WzBdID49IDAgJiYgcG9pbnRbMF0gPD0gd2luZG93V2lkdGhcbiAgICAgICAgICAmJiBwb2ludFsxXSA+PSAwICYmIHBvaW50WzFdIDw9IHdpbmRvd0hlaWdodFxuICAgICAgICApIHtcbiAgICAgICAgICBpblZpZXcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWluVmlldykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHN3aXBlci5pc0hvcml6b250YWwoKSkge1xuICAgICAgaWYgKGlzUGFnZVVwIHx8IGlzUGFnZURvd24gfHwgaXNBcnJvd0xlZnQgfHwgaXNBcnJvd1JpZ2h0KSB7XG4gICAgICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGVsc2UgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKCgoaXNQYWdlRG93biB8fCBpc0Fycm93UmlnaHQpICYmICFydGwpIHx8ICgoaXNQYWdlVXAgfHwgaXNBcnJvd0xlZnQpICYmIHJ0bCkpIHN3aXBlci5zbGlkZU5leHQoKTtcbiAgICAgIGlmICgoKGlzUGFnZVVwIHx8IGlzQXJyb3dMZWZ0KSAmJiAhcnRsKSB8fCAoKGlzUGFnZURvd24gfHwgaXNBcnJvd1JpZ2h0KSAmJiBydGwpKSBzd2lwZXIuc2xpZGVQcmV2KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc1BhZ2VVcCB8fCBpc1BhZ2VEb3duIHx8IGlzQXJyb3dVcCB8fCBpc0Fycm93RG93bikge1xuICAgICAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlbHNlIGUucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1BhZ2VEb3duIHx8IGlzQXJyb3dEb3duKSBzd2lwZXIuc2xpZGVOZXh0KCk7XG4gICAgICBpZiAoaXNQYWdlVXAgfHwgaXNBcnJvd1VwKSBzd2lwZXIuc2xpZGVQcmV2KCk7XG4gICAgfVxuICAgIHN3aXBlci5lbWl0KCdrZXlQcmVzcycsIGtjKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9LFxuICBlbmFibGUoKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBpZiAoc3dpcGVyLmtleWJvYXJkLmVuYWJsZWQpIHJldHVybjtcbiAgICAkKGRvY3VtZW50KS5vbigna2V5ZG93bicsIHN3aXBlci5rZXlib2FyZC5oYW5kbGUpO1xuICAgIHN3aXBlci5rZXlib2FyZC5lbmFibGVkID0gdHJ1ZTtcbiAgfSxcbiAgZGlzYWJsZSgpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGlmICghc3dpcGVyLmtleWJvYXJkLmVuYWJsZWQpIHJldHVybjtcbiAgICAkKGRvY3VtZW50KS5vZmYoJ2tleWRvd24nLCBzd2lwZXIua2V5Ym9hcmQuaGFuZGxlKTtcbiAgICBzd2lwZXIua2V5Ym9hcmQuZW5hYmxlZCA9IGZhbHNlO1xuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAna2V5Ym9hcmQnLFxuICBwYXJhbXM6IHtcbiAgICBrZXlib2FyZDoge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBvbmx5SW5WaWV3cG9ydDogdHJ1ZSxcbiAgICAgIHBhZ2VVcERvd246IHRydWUsXG4gICAgfSxcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAga2V5Ym9hcmQ6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIGVuYWJsZTogS2V5Ym9hcmQuZW5hYmxlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgZGlzYWJsZTogS2V5Ym9hcmQuZGlzYWJsZS5iaW5kKHN3aXBlciksXG4gICAgICAgIGhhbmRsZTogS2V5Ym9hcmQuaGFuZGxlLmJpbmQoc3dpcGVyKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0sXG4gIG9uOiB7XG4gICAgaW5pdCgpIHtcbiAgICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5rZXlib2FyZC5lbmFibGVkKSB7XG4gICAgICAgIHN3aXBlci5rZXlib2FyZC5lbmFibGUoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlc3Ryb3koKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHN3aXBlci5rZXlib2FyZC5lbmFibGVkKSB7XG4gICAgICAgIHN3aXBlci5rZXlib2FyZC5kaXNhYmxlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgfSxcbn07XG4iLCJpbXBvcnQgeyB3aW5kb3csIGRvY3VtZW50IH0gZnJvbSAnc3NyLXdpbmRvdyc7XG5pbXBvcnQgJCBmcm9tICcuLi8uLi91dGlscy9kb20nO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uL3V0aWxzL3V0aWxzJztcblxuZnVuY3Rpb24gaXNFdmVudFN1cHBvcnRlZCgpIHtcbiAgY29uc3QgZXZlbnROYW1lID0gJ29ud2hlZWwnO1xuICBsZXQgaXNTdXBwb3J0ZWQgPSBldmVudE5hbWUgaW4gZG9jdW1lbnQ7XG5cbiAgaWYgKCFpc1N1cHBvcnRlZCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShldmVudE5hbWUsICdyZXR1cm47Jyk7XG4gICAgaXNTdXBwb3J0ZWQgPSB0eXBlb2YgZWxlbWVudFtldmVudE5hbWVdID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgaWYgKCFpc1N1cHBvcnRlZFxuICAgICYmIGRvY3VtZW50LmltcGxlbWVudGF0aW9uXG4gICAgJiYgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZVxuICAgIC8vIGFsd2F5cyByZXR1cm5zIHRydWUgaW4gbmV3ZXIgYnJvd3NlcnMgYXMgcGVyIHRoZSBzdGFuZGFyZC5cbiAgICAvLyBAc2VlIGh0dHA6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNkb20tZG9taW1wbGVtZW50YXRpb24taGFzZmVhdHVyZVxuICAgICYmIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoJycsICcnKSAhPT0gdHJ1ZVxuICApIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBvbmx5IHdheSB0byB0ZXN0IHN1cHBvcnQgZm9yIHRoZSBgd2hlZWxgIGV2ZW50IGluIElFOSsuXG4gICAgaXNTdXBwb3J0ZWQgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlKCdFdmVudHMud2hlZWwnLCAnMy4wJyk7XG4gIH1cblxuICByZXR1cm4gaXNTdXBwb3J0ZWQ7XG59XG5jb25zdCBNb3VzZXdoZWVsID0ge1xuICBsYXN0U2Nyb2xsVGltZTogVXRpbHMubm93KCksXG4gIGxhc3RFdmVudEJlZm9yZVNuYXA6IHVuZGVmaW5lZCxcbiAgcmVjZW50V2hlZWxFdmVudHM6IFtdLFxuICBldmVudCgpIHtcbiAgICBpZiAod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignZmlyZWZveCcpID4gLTEpIHJldHVybiAnRE9NTW91c2VTY3JvbGwnO1xuICAgIHJldHVybiBpc0V2ZW50U3VwcG9ydGVkKCkgPyAnd2hlZWwnIDogJ21vdXNld2hlZWwnO1xuICB9LFxuICBub3JtYWxpemUoZSkge1xuICAgIC8vIFJlYXNvbmFibGUgZGVmYXVsdHNcbiAgICBjb25zdCBQSVhFTF9TVEVQID0gMTA7XG4gICAgY29uc3QgTElORV9IRUlHSFQgPSA0MDtcbiAgICBjb25zdCBQQUdFX0hFSUdIVCA9IDgwMDtcblxuICAgIGxldCBzWCA9IDA7XG4gICAgbGV0IHNZID0gMDsgLy8gc3BpblgsIHNwaW5ZXG4gICAgbGV0IHBYID0gMDtcbiAgICBsZXQgcFkgPSAwOyAvLyBwaXhlbFgsIHBpeGVsWVxuXG4gICAgLy8gTGVnYWN5XG4gICAgaWYgKCdkZXRhaWwnIGluIGUpIHtcbiAgICAgIHNZID0gZS5kZXRhaWw7XG4gICAgfVxuICAgIGlmICgnd2hlZWxEZWx0YScgaW4gZSkge1xuICAgICAgc1kgPSAtZS53aGVlbERlbHRhIC8gMTIwO1xuICAgIH1cbiAgICBpZiAoJ3doZWVsRGVsdGFZJyBpbiBlKSB7XG4gICAgICBzWSA9IC1lLndoZWVsRGVsdGFZIC8gMTIwO1xuICAgIH1cbiAgICBpZiAoJ3doZWVsRGVsdGFYJyBpbiBlKSB7XG4gICAgICBzWCA9IC1lLndoZWVsRGVsdGFYIC8gMTIwO1xuICAgIH1cblxuICAgIC8vIHNpZGUgc2Nyb2xsaW5nIG9uIEZGIHdpdGggRE9NTW91c2VTY3JvbGxcbiAgICBpZiAoJ2F4aXMnIGluIGUgJiYgZS5heGlzID09PSBlLkhPUklaT05UQUxfQVhJUykge1xuICAgICAgc1ggPSBzWTtcbiAgICAgIHNZID0gMDtcbiAgICB9XG5cbiAgICBwWCA9IHNYICogUElYRUxfU1RFUDtcbiAgICBwWSA9IHNZICogUElYRUxfU1RFUDtcblxuICAgIGlmICgnZGVsdGFZJyBpbiBlKSB7XG4gICAgICBwWSA9IGUuZGVsdGFZO1xuICAgIH1cbiAgICBpZiAoJ2RlbHRhWCcgaW4gZSkge1xuICAgICAgcFggPSBlLmRlbHRhWDtcbiAgICB9XG5cbiAgICBpZiAoZS5zaGlmdEtleSAmJiAhcFgpIHsgLy8gaWYgdXNlciBzY3JvbGxzIHdpdGggc2hpZnQgaGUgd2FudHMgaG9yaXpvbnRhbCBzY3JvbGxcbiAgICAgIHBYID0gcFk7XG4gICAgICBwWSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKChwWCB8fCBwWSkgJiYgZS5kZWx0YU1vZGUpIHtcbiAgICAgIGlmIChlLmRlbHRhTW9kZSA9PT0gMSkgeyAvLyBkZWx0YSBpbiBMSU5FIHVuaXRzXG4gICAgICAgIHBYICo9IExJTkVfSEVJR0hUO1xuICAgICAgICBwWSAqPSBMSU5FX0hFSUdIVDtcbiAgICAgIH0gZWxzZSB7IC8vIGRlbHRhIGluIFBBR0UgdW5pdHNcbiAgICAgICAgcFggKj0gUEFHRV9IRUlHSFQ7XG4gICAgICAgIHBZICo9IFBBR0VfSEVJR0hUO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZhbGwtYmFjayBpZiBzcGluIGNhbm5vdCBiZSBkZXRlcm1pbmVkXG4gICAgaWYgKHBYICYmICFzWCkge1xuICAgICAgc1ggPSAocFggPCAxKSA/IC0xIDogMTtcbiAgICB9XG4gICAgaWYgKHBZICYmICFzWSkge1xuICAgICAgc1kgPSAocFkgPCAxKSA/IC0xIDogMTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3Bpblg6IHNYLFxuICAgICAgc3Bpblk6IHNZLFxuICAgICAgcGl4ZWxYOiBwWCxcbiAgICAgIHBpeGVsWTogcFksXG4gICAgfTtcbiAgfSxcbiAgaGFuZGxlTW91c2VFbnRlcigpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIHN3aXBlci5tb3VzZUVudGVyZWQgPSB0cnVlO1xuICB9LFxuICBoYW5kbGVNb3VzZUxlYXZlKCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgc3dpcGVyLm1vdXNlRW50ZXJlZCA9IGZhbHNlO1xuICB9LFxuICBoYW5kbGUoZXZlbnQpIHtcbiAgICBsZXQgZSA9IGV2ZW50O1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5tb3VzZXdoZWVsO1xuXG4gICAgaWYgKHN3aXBlci5wYXJhbXMuY3NzTW9kZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIGxldCB0YXJnZXQgPSBzd2lwZXIuJGVsO1xuICAgIGlmIChzd2lwZXIucGFyYW1zLm1vdXNld2hlZWwuZXZlbnRzVGFyZ2VkICE9PSAnY29udGFpbmVyJykge1xuICAgICAgdGFyZ2V0ID0gJChzd2lwZXIucGFyYW1zLm1vdXNld2hlZWwuZXZlbnRzVGFyZ2VkKTtcbiAgICB9XG4gICAgaWYgKCFzd2lwZXIubW91c2VFbnRlcmVkICYmICF0YXJnZXRbMF0uY29udGFpbnMoZS50YXJnZXQpICYmICFwYXJhbXMucmVsZWFzZU9uRWRnZXMpIHJldHVybiB0cnVlO1xuXG4gICAgaWYgKGUub3JpZ2luYWxFdmVudCkgZSA9IGUub3JpZ2luYWxFdmVudDsgLy8ganF1ZXJ5IGZpeFxuICAgIGxldCBkZWx0YSA9IDA7XG4gICAgY29uc3QgcnRsRmFjdG9yID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSA/IC0xIDogMTtcblxuICAgIGNvbnN0IGRhdGEgPSBNb3VzZXdoZWVsLm5vcm1hbGl6ZShlKTtcblxuICAgIGlmIChwYXJhbXMuZm9yY2VUb0F4aXMpIHtcbiAgICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgaWYgKE1hdGguYWJzKGRhdGEucGl4ZWxYKSA+IE1hdGguYWJzKGRhdGEucGl4ZWxZKSkgZGVsdGEgPSAtZGF0YS5waXhlbFggKiBydGxGYWN0b3I7XG4gICAgICAgIGVsc2UgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGRhdGEucGl4ZWxZKSA+IE1hdGguYWJzKGRhdGEucGl4ZWxYKSkgZGVsdGEgPSAtZGF0YS5waXhlbFk7XG4gICAgICBlbHNlIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWx0YSA9IE1hdGguYWJzKGRhdGEucGl4ZWxYKSA+IE1hdGguYWJzKGRhdGEucGl4ZWxZKSA/IC1kYXRhLnBpeGVsWCAqIHJ0bEZhY3RvciA6IC1kYXRhLnBpeGVsWTtcbiAgICB9XG5cbiAgICBpZiAoZGVsdGEgPT09IDApIHJldHVybiB0cnVlO1xuXG4gICAgaWYgKHBhcmFtcy5pbnZlcnQpIGRlbHRhID0gLWRlbHRhO1xuXG4gICAgaWYgKCFzd2lwZXIucGFyYW1zLmZyZWVNb2RlKSB7XG4gICAgICAvLyBSZWdpc3RlciB0aGUgbmV3IGV2ZW50IGluIGEgdmFyaWFibGUgd2hpY2ggc3RvcmVzIHRoZSByZWxldmFudCBkYXRhXG4gICAgICBjb25zdCBuZXdFdmVudCA9IHtcbiAgICAgICAgdGltZTogVXRpbHMubm93KCksXG4gICAgICAgIGRlbHRhOiBNYXRoLmFicyhkZWx0YSksXG4gICAgICAgIGRpcmVjdGlvbjogTWF0aC5zaWduKGRlbHRhKSxcbiAgICAgICAgcmF3OiBldmVudCxcbiAgICAgIH07XG5cbiAgICAgIC8vIEtlZXAgdGhlIG1vc3QgcmVjZW50IGV2ZW50c1xuICAgICAgY29uc3QgcmVjZW50V2hlZWxFdmVudHMgPSBzd2lwZXIubW91c2V3aGVlbC5yZWNlbnRXaGVlbEV2ZW50cztcbiAgICAgIGlmIChyZWNlbnRXaGVlbEV2ZW50cy5sZW5ndGggPj0gMikge1xuICAgICAgICByZWNlbnRXaGVlbEV2ZW50cy5zaGlmdCgpOyAvLyBvbmx5IHN0b3JlIHRoZSBsYXN0IE4gZXZlbnRzXG4gICAgICB9XG4gICAgICBjb25zdCBwcmV2RXZlbnQgPSByZWNlbnRXaGVlbEV2ZW50cy5sZW5ndGggPyByZWNlbnRXaGVlbEV2ZW50c1tyZWNlbnRXaGVlbEV2ZW50cy5sZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcbiAgICAgIHJlY2VudFdoZWVsRXZlbnRzLnB1c2gobmV3RXZlbnQpO1xuXG4gICAgICAvLyBJZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgcHJldmlvdXMgcmVjb3JkZWQgZXZlbnQ6XG4gICAgICAvLyAgIElmIGRpcmVjdGlvbiBoYXMgY2hhbmdlZCBvclxuICAgICAgLy8gICBpZiB0aGUgc2Nyb2xsIGlzIHF1aWNrZXIgdGhhbiB0aGUgcHJldmlvdXMgb25lOlxuICAgICAgLy8gICAgIEFuaW1hdGUgdGhlIHNsaWRlci5cbiAgICAgIC8vIEVsc2UgKHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhlIHdoZWVsIGlzIG1vdmVkKTpcbiAgICAgIC8vICAgICBBbmltYXRlIHRoZSBzbGlkZXIuXG4gICAgICBpZiAocHJldkV2ZW50KSB7XG4gICAgICAgIGlmIChuZXdFdmVudC5kaXJlY3Rpb24gIT09IHByZXZFdmVudC5kaXJlY3Rpb24gfHwgbmV3RXZlbnQuZGVsdGEgPiBwcmV2RXZlbnQuZGVsdGEgfHwgbmV3RXZlbnQudGltZSA+IHByZXZFdmVudC50aW1lICsgMTUwKSB7XG4gICAgICAgICAgc3dpcGVyLm1vdXNld2hlZWwuYW5pbWF0ZVNsaWRlcihuZXdFdmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXBlci5tb3VzZXdoZWVsLmFuaW1hdGVTbGlkZXIobmV3RXZlbnQpO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBpdCdzIHRpbWUgdG8gcmVsZWFzZSB0aGUgc2Nyb2xsOlxuICAgICAgLy8gICBSZXR1cm4gbm93IHNvIHlvdSBkb24ndCBoaXQgdGhlIHByZXZlbnREZWZhdWx0LlxuICAgICAgaWYgKHN3aXBlci5tb3VzZXdoZWVsLnJlbGVhc2VTY3JvbGwobmV3RXZlbnQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGcmVlbW9kZSBvciBzY3JvbGxDb250YWluZXI6XG5cbiAgICAgIC8vIElmIHdlIHJlY2VudGx5IHNuYXBwZWQgYWZ0ZXIgYSBtb21lbnR1bSBzY3JvbGwsIHRoZW4gaWdub3JlIHdoZWVsIGV2ZW50c1xuICAgICAgLy8gdG8gZ2l2ZSB0aW1lIGZvciB0aGUgZGVjZWxlcmF0aW9uIHRvIGZpbmlzaC4gU3RvcCBpZ25vcmluZyBhZnRlciA1MDAgbXNlY3NcbiAgICAgIC8vIG9yIGlmIGl0J3MgYSBuZXcgc2Nyb2xsIChsYXJnZXIgZGVsdGEgb3IgaW52ZXJzZSBzaWduIGFzIGxhc3QgZXZlbnQgYmVmb3JlXG4gICAgICAvLyBhbiBlbmQtb2YtbW9tZW50dW0gc25hcCkuXG4gICAgICBjb25zdCBuZXdFdmVudCA9IHsgdGltZTogVXRpbHMubm93KCksIGRlbHRhOiBNYXRoLmFicyhkZWx0YSksIGRpcmVjdGlvbjogTWF0aC5zaWduKGRlbHRhKSB9O1xuICAgICAgY29uc3QgeyBsYXN0RXZlbnRCZWZvcmVTbmFwIH0gPSBzd2lwZXIubW91c2V3aGVlbDtcbiAgICAgIGNvbnN0IGlnbm9yZVdoZWVsRXZlbnRzID0gbGFzdEV2ZW50QmVmb3JlU25hcFxuICAgICAgICAmJiBuZXdFdmVudC50aW1lIDwgbGFzdEV2ZW50QmVmb3JlU25hcC50aW1lICsgNTAwXG4gICAgICAgICYmIG5ld0V2ZW50LmRlbHRhIDw9IGxhc3RFdmVudEJlZm9yZVNuYXAuZGVsdGFcbiAgICAgICAgJiYgbmV3RXZlbnQuZGlyZWN0aW9uID09PSBsYXN0RXZlbnRCZWZvcmVTbmFwLmRpcmVjdGlvbjtcbiAgICAgIGlmICghaWdub3JlV2hlZWxFdmVudHMpIHtcbiAgICAgICAgc3dpcGVyLm1vdXNld2hlZWwubGFzdEV2ZW50QmVmb3JlU25hcCA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcG9zaXRpb24gPSBzd2lwZXIuZ2V0VHJhbnNsYXRlKCkgKyAoZGVsdGEgKiBwYXJhbXMuc2Vuc2l0aXZpdHkpO1xuICAgICAgICBjb25zdCB3YXNCZWdpbm5pbmcgPSBzd2lwZXIuaXNCZWdpbm5pbmc7XG4gICAgICAgIGNvbnN0IHdhc0VuZCA9IHN3aXBlci5pc0VuZDtcblxuICAgICAgICBpZiAocG9zaXRpb24gPj0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSBwb3NpdGlvbiA9IHN3aXBlci5taW5UcmFuc2xhdGUoKTtcbiAgICAgICAgaWYgKHBvc2l0aW9uIDw9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSkgcG9zaXRpb24gPSBzd2lwZXIubWF4VHJhbnNsYXRlKCk7XG5cbiAgICAgICAgc3dpcGVyLnNldFRyYW5zaXRpb24oMCk7XG4gICAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUocG9zaXRpb24pO1xuICAgICAgICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3MoKTtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KCk7XG4gICAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG5cbiAgICAgICAgaWYgKCghd2FzQmVnaW5uaW5nICYmIHN3aXBlci5pc0JlZ2lubmluZykgfHwgKCF3YXNFbmQgJiYgc3dpcGVyLmlzRW5kKSkge1xuICAgICAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5mcmVlTW9kZVN0aWNreSkge1xuICAgICAgICAgIC8vIFdoZW4gd2hlZWwgc2Nyb2xsaW5nIHN0YXJ0cyB3aXRoIHN0aWNreSAoYWthIHNuYXApIGVuYWJsZWQsIHRoZW4gZGV0ZWN0XG4gICAgICAgICAgLy8gdGhlIGVuZCBvZiBhIG1vbWVudHVtIHNjcm9sbCBieSBzdG9yaW5nIHJlY2VudCAoTj0xNT8pIHdoZWVsIGV2ZW50cy5cbiAgICAgICAgICAvLyAxLiBkbyBhbGwgTiBldmVudHMgaGF2ZSBkZWNyZWFzaW5nIG9yIHNhbWUgKGFic29sdXRlIHZhbHVlKSBkZWx0YT9cbiAgICAgICAgICAvLyAyLiBkaWQgYWxsIE4gZXZlbnRzIGFycml2ZSBpbiB0aGUgbGFzdCBNIChNPTUwMD8pIG1zZWNzP1xuICAgICAgICAgIC8vIDMuIGRvZXMgdGhlIGVhcmxpZXN0IGV2ZW50IGhhdmUgYW4gKGFic29sdXRlIHZhbHVlKSBkZWx0YSB0aGF0J3NcbiAgICAgICAgICAvLyAgICBhdCBsZWFzdCBQIChQPTE/KSBsYXJnZXIgdGhhbiB0aGUgbW9zdCByZWNlbnQgZXZlbnQncyBkZWx0YT9cbiAgICAgICAgICAvLyA0LiBkb2VzIHRoZSBsYXRlc3QgZXZlbnQgaGF2ZSBhIGRlbHRhIHRoYXQncyBzbWFsbGVyIHRoYW4gUSAoUT02PykgcGl4ZWxzP1xuICAgICAgICAgIC8vIElmIDEtNCBhcmUgXCJ5ZXNcIiB0aGVuIHdlJ3JlIG5lYXIgdGhlIGVuZCBvZiBhIG1vbXVudHVtIHNjcm9sbCBkZWNlbGVyYXRpb24uXG4gICAgICAgICAgLy8gU25hcCBpbW1lZGlhdGVseSBhbmQgaWdub3JlIHJlbWFpbmluZyB3aGVlbCBldmVudHMgaW4gdGhpcyBzY3JvbGwuXG4gICAgICAgICAgLy8gU2VlIGNvbW1lbnQgYWJvdmUgZm9yIFwicmVtYWluaW5nIHdoZWVsIGV2ZW50cyBpbiB0aGlzIHNjcm9sbFwiIGRldGVybWluYXRpb24uXG4gICAgICAgICAgLy8gSWYgMS00IGFyZW4ndCBzYXRpc2ZpZWQsIHRoZW4gd2FpdCB0byBzbmFwIHVudGlsIDUwMG1zIGFmdGVyIHRoZSBsYXN0IGV2ZW50LlxuICAgICAgICAgIGNsZWFyVGltZW91dChzd2lwZXIubW91c2V3aGVlbC50aW1lb3V0KTtcbiAgICAgICAgICBzd2lwZXIubW91c2V3aGVlbC50aW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnN0IHJlY2VudFdoZWVsRXZlbnRzID0gc3dpcGVyLm1vdXNld2hlZWwucmVjZW50V2hlZWxFdmVudHM7XG4gICAgICAgICAgaWYgKHJlY2VudFdoZWVsRXZlbnRzLmxlbmd0aCA+PSAxNSkge1xuICAgICAgICAgICAgcmVjZW50V2hlZWxFdmVudHMuc2hpZnQoKTsgLy8gb25seSBzdG9yZSB0aGUgbGFzdCBOIGV2ZW50c1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBwcmV2RXZlbnQgPSByZWNlbnRXaGVlbEV2ZW50cy5sZW5ndGggPyByZWNlbnRXaGVlbEV2ZW50c1tyZWNlbnRXaGVlbEV2ZW50cy5sZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICBjb25zdCBmaXJzdEV2ZW50ID0gcmVjZW50V2hlZWxFdmVudHNbMF07XG4gICAgICAgICAgcmVjZW50V2hlZWxFdmVudHMucHVzaChuZXdFdmVudCk7XG4gICAgICAgICAgaWYgKHByZXZFdmVudCAmJiAobmV3RXZlbnQuZGVsdGEgPiBwcmV2RXZlbnQuZGVsdGEgfHwgbmV3RXZlbnQuZGlyZWN0aW9uICE9PSBwcmV2RXZlbnQuZGlyZWN0aW9uKSkge1xuICAgICAgICAgICAgLy8gSW5jcmVhc2luZyBvciByZXZlcnNlLXNpZ24gZGVsdGEgbWVhbnMgdGhlIHVzZXIgc3RhcnRlZCBzY3JvbGxpbmcgYWdhaW4uIENsZWFyIHRoZSB3aGVlbCBldmVudCBsb2cuXG4gICAgICAgICAgICByZWNlbnRXaGVlbEV2ZW50cy5zcGxpY2UoMCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChyZWNlbnRXaGVlbEV2ZW50cy5sZW5ndGggPj0gMTVcbiAgICAgICAgICAgICAgJiYgbmV3RXZlbnQudGltZSAtIGZpcnN0RXZlbnQudGltZSA8IDUwMFxuICAgICAgICAgICAgICAmJiBmaXJzdEV2ZW50LmRlbHRhIC0gbmV3RXZlbnQuZGVsdGEgPj0gMVxuICAgICAgICAgICAgICAmJiBuZXdFdmVudC5kZWx0YSA8PSA2XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBkZWNlbGVyYXRpb24gb2YgYSBtb21lbnR1bSBzY3JvbGwsIHNvIHRoZXJlJ3Mgbm8gbmVlZFxuICAgICAgICAgICAgLy8gdG8gd2FpdCBmb3IgbW9yZSBldmVudHMuIFNuYXAgQVNBUCBvbiB0aGUgbmV4dCB0aWNrLlxuICAgICAgICAgICAgLy8gQWxzbywgYmVjYXVzZSB0aGVyZSdzIHNvbWUgcmVtYWluaW5nIG1vbWVudHVtIHdlJ2xsIGJpYXMgdGhlIHNuYXAgaW4gdGhlXG4gICAgICAgICAgICAvLyBkaXJlY3Rpb24gb2YgdGhlIG9uZ29pbmcgc2Nyb2xsIGJlY2F1c2UgaXQncyBiZXR0ZXIgVVggZm9yIHRoZSBzY3JvbGwgdG8gc25hcFxuICAgICAgICAgICAgLy8gaW4gdGhlIHNhbWUgZGlyZWN0aW9uIGFzIHRoZSBzY3JvbGwgaW5zdGVhZCBvZiByZXZlcnNpbmcgdG8gc25hcC4gIFRoZXJlZm9yZSxcbiAgICAgICAgICAgIC8vIGlmIGl0J3MgYWxyZWFkeSBzY3JvbGxlZCBtb3JlIHRoYW4gMjAlIGluIHRoZSBjdXJyZW50IGRpcmVjdGlvbiwga2VlcCBnb2luZy5cbiAgICAgICAgICAgIGNvbnN0IHNuYXBUb1RocmVzaG9sZCA9IGRlbHRhID4gMCA/IDAuOCA6IDAuMjtcbiAgICAgICAgICAgIHN3aXBlci5tb3VzZXdoZWVsLmxhc3RFdmVudEJlZm9yZVNuYXAgPSBuZXdFdmVudDtcbiAgICAgICAgICAgIHJlY2VudFdoZWVsRXZlbnRzLnNwbGljZSgwKTtcbiAgICAgICAgICAgIHN3aXBlci5tb3VzZXdoZWVsLnRpbWVvdXQgPSBVdGlscy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICAgIHN3aXBlci5zbGlkZVRvQ2xvc2VzdChzd2lwZXIucGFyYW1zLnNwZWVkLCB0cnVlLCB1bmRlZmluZWQsIHNuYXBUb1RocmVzaG9sZCk7XG4gICAgICAgICAgICB9LCAwKTsgLy8gbm8gZGVsYXk7IG1vdmUgb24gbmV4dCB0aWNrXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghc3dpcGVyLm1vdXNld2hlZWwudGltZW91dCkge1xuICAgICAgICAgICAgLy8gaWYgd2UgZ2V0IGhlcmUsIHRoZW4gd2UgaGF2ZW4ndCBkZXRlY3RlZCB0aGUgZW5kIG9mIGEgbW9tZW50dW0gc2Nyb2xsLCBzb1xuICAgICAgICAgICAgLy8gd2UnbGwgY29uc2lkZXIgYSBzY3JvbGwgXCJjb21wbGV0ZVwiIHdoZW4gdGhlcmUgaGF2ZW4ndCBiZWVuIGFueSB3aGVlbCBldmVudHNcbiAgICAgICAgICAgIC8vIGZvciA1MDBtcy5cbiAgICAgICAgICAgIHN3aXBlci5tb3VzZXdoZWVsLnRpbWVvdXQgPSBVdGlscy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHNuYXBUb1RocmVzaG9sZCA9IDAuNTtcbiAgICAgICAgICAgICAgc3dpcGVyLm1vdXNld2hlZWwubGFzdEV2ZW50QmVmb3JlU25hcCA9IG5ld0V2ZW50O1xuICAgICAgICAgICAgICByZWNlbnRXaGVlbEV2ZW50cy5zcGxpY2UoMCk7XG4gICAgICAgICAgICAgIHN3aXBlci5zbGlkZVRvQ2xvc2VzdChzd2lwZXIucGFyYW1zLnNwZWVkLCB0cnVlLCB1bmRlZmluZWQsIHNuYXBUb1RocmVzaG9sZCk7XG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVtaXQgZXZlbnRcbiAgICAgICAgaWYgKCFpZ25vcmVXaGVlbEV2ZW50cykgc3dpcGVyLmVtaXQoJ3Njcm9sbCcsIGUpO1xuXG4gICAgICAgIC8vIFN0b3AgYXV0b3BsYXlcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuYXV0b3BsYXkgJiYgc3dpcGVyLnBhcmFtcy5hdXRvcGxheURpc2FibGVPbkludGVyYWN0aW9uKSBzd2lwZXIuYXV0b3BsYXkuc3RvcCgpO1xuICAgICAgICAvLyBSZXR1cm4gcGFnZSBzY3JvbGwgb24gZWRnZSBwb3NpdGlvbnNcbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSBzd2lwZXIubWluVHJhbnNsYXRlKCkgfHwgcG9zaXRpb24gPT09IHN3aXBlci5tYXhUcmFuc2xhdGUoKSkgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGUucHJldmVudERlZmF1bHQpIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBlbHNlIGUucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGFuaW1hdGVTbGlkZXIobmV3RXZlbnQpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIC8vIElmIHRoZSBtb3ZlbWVudCBpcyBOT1QgYmlnIGVub3VnaCBhbmRcbiAgICAvLyBpZiB0aGUgbGFzdCB0aW1lIHRoZSB1c2VyIHNjcm9sbGVkIHdhcyB0b28gY2xvc2UgdG8gdGhlIGN1cnJlbnQgb25lIChhdm9pZCBjb250aW51b3VzbHkgdHJpZ2dlcmluZyB0aGUgc2xpZGVyKTpcbiAgICAvLyAgIERvbid0IGdvIGFueSBmdXJ0aGVyIChhdm9pZCBpbnNpZ25pZmljYW50IHNjcm9sbCBtb3ZlbWVudCkuXG4gICAgaWYgKG5ld0V2ZW50LmRlbHRhID49IDYgJiYgVXRpbHMubm93KCkgLSBzd2lwZXIubW91c2V3aGVlbC5sYXN0U2Nyb2xsVGltZSA8IDYwKSB7XG4gICAgICAvLyBSZXR1cm4gZmFsc2UgYXMgYSBkZWZhdWx0XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy8gSWYgdXNlciBpcyBzY3JvbGxpbmcgdG93YXJkcyB0aGUgZW5kOlxuICAgIC8vICAgSWYgdGhlIHNsaWRlciBoYXNuJ3QgaGl0IHRoZSBsYXRlc3Qgc2xpZGUgb3JcbiAgICAvLyAgIGlmIHRoZSBzbGlkZXIgaXMgYSBsb29wIGFuZFxuICAgIC8vICAgaWYgdGhlIHNsaWRlciBpc24ndCBtb3ZpbmcgcmlnaHQgbm93OlxuICAgIC8vICAgICBHbyB0byBuZXh0IHNsaWRlIGFuZFxuICAgIC8vICAgICBlbWl0IGEgc2Nyb2xsIGV2ZW50LlxuICAgIC8vIEVsc2UgKHRoZSB1c2VyIGlzIHNjcm9sbGluZyB0b3dhcmRzIHRoZSBiZWdpbm5pbmcpIGFuZFxuICAgIC8vIGlmIHRoZSBzbGlkZXIgaGFzbid0IGhpdCB0aGUgZmlyc3Qgc2xpZGUgb3JcbiAgICAvLyBpZiB0aGUgc2xpZGVyIGlzIGEgbG9vcCBhbmRcbiAgICAvLyBpZiB0aGUgc2xpZGVyIGlzbid0IG1vdmluZyByaWdodCBub3c6XG4gICAgLy8gICBHbyB0byBwcmV2IHNsaWRlIGFuZFxuICAgIC8vICAgZW1pdCBhIHNjcm9sbCBldmVudC5cbiAgICBpZiAobmV3RXZlbnQuZGlyZWN0aW9uIDwgMCkge1xuICAgICAgaWYgKCghc3dpcGVyLmlzRW5kIHx8IHN3aXBlci5wYXJhbXMubG9vcCkgJiYgIXN3aXBlci5hbmltYXRpbmcpIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlTmV4dCgpO1xuICAgICAgICBzd2lwZXIuZW1pdCgnc2Nyb2xsJywgbmV3RXZlbnQucmF3KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCghc3dpcGVyLmlzQmVnaW5uaW5nIHx8IHN3aXBlci5wYXJhbXMubG9vcCkgJiYgIXN3aXBlci5hbmltYXRpbmcpIHtcbiAgICAgIHN3aXBlci5zbGlkZVByZXYoKTtcbiAgICAgIHN3aXBlci5lbWl0KCdzY3JvbGwnLCBuZXdFdmVudC5yYXcpO1xuICAgIH1cbiAgICAvLyBJZiB5b3UgZ290IGhlcmUgaXMgYmVjYXVzZSBhbiBhbmltYXRpb24gaGFzIGJlZW4gdHJpZ2dlcmVkIHNvIHN0b3JlIHRoZSBjdXJyZW50IHRpbWVcbiAgICBzd2lwZXIubW91c2V3aGVlbC5sYXN0U2Nyb2xsVGltZSA9IChuZXcgd2luZG93LkRhdGUoKSkuZ2V0VGltZSgpO1xuICAgIC8vIFJldHVybiBmYWxzZSBhcyBhIGRlZmF1bHRcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIHJlbGVhc2VTY3JvbGwobmV3RXZlbnQpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXMubW91c2V3aGVlbDtcbiAgICBpZiAobmV3RXZlbnQuZGlyZWN0aW9uIDwgMCkge1xuICAgICAgaWYgKHN3aXBlci5pc0VuZCAmJiAhc3dpcGVyLnBhcmFtcy5sb29wICYmIHBhcmFtcy5yZWxlYXNlT25FZGdlcykge1xuICAgICAgICAvLyBSZXR1cm4gdHJ1ZSB0byBhbmltYXRlIHNjcm9sbCBvbiBlZGdlc1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN3aXBlci5pc0JlZ2lubmluZyAmJiAhc3dpcGVyLnBhcmFtcy5sb29wICYmIHBhcmFtcy5yZWxlYXNlT25FZGdlcykge1xuICAgICAgLy8gUmV0dXJuIHRydWUgdG8gYW5pbWF0ZSBzY3JvbGwgb24gZWRnZXNcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGVuYWJsZSgpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGNvbnN0IGV2ZW50ID0gTW91c2V3aGVlbC5ldmVudCgpO1xuICAgIGlmIChzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICAgIHN3aXBlci53cmFwcGVyRWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgc3dpcGVyLm1vdXNld2hlZWwuaGFuZGxlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoIWV2ZW50KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHN3aXBlci5tb3VzZXdoZWVsLmVuYWJsZWQpIHJldHVybiBmYWxzZTtcbiAgICBsZXQgdGFyZ2V0ID0gc3dpcGVyLiRlbDtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5tb3VzZXdoZWVsLmV2ZW50c1RhcmdlZCAhPT0gJ2NvbnRhaW5lcicpIHtcbiAgICAgIHRhcmdldCA9ICQoc3dpcGVyLnBhcmFtcy5tb3VzZXdoZWVsLmV2ZW50c1RhcmdlZCk7XG4gICAgfVxuICAgIHRhcmdldC5vbignbW91c2VlbnRlcicsIHN3aXBlci5tb3VzZXdoZWVsLmhhbmRsZU1vdXNlRW50ZXIpO1xuICAgIHRhcmdldC5vbignbW91c2VsZWF2ZScsIHN3aXBlci5tb3VzZXdoZWVsLmhhbmRsZU1vdXNlTGVhdmUpO1xuICAgIHRhcmdldC5vbihldmVudCwgc3dpcGVyLm1vdXNld2hlZWwuaGFuZGxlKTtcbiAgICBzd2lwZXIubW91c2V3aGVlbC5lbmFibGVkID0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgZGlzYWJsZSgpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGNvbnN0IGV2ZW50ID0gTW91c2V3aGVlbC5ldmVudCgpO1xuICAgIGlmIChzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICAgIHN3aXBlci53cmFwcGVyRWwuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgc3dpcGVyLm1vdXNld2hlZWwuaGFuZGxlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoIWV2ZW50KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCFzd2lwZXIubW91c2V3aGVlbC5lbmFibGVkKSByZXR1cm4gZmFsc2U7XG4gICAgbGV0IHRhcmdldCA9IHN3aXBlci4kZWw7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMubW91c2V3aGVlbC5ldmVudHNUYXJnZWQgIT09ICdjb250YWluZXInKSB7XG4gICAgICB0YXJnZXQgPSAkKHN3aXBlci5wYXJhbXMubW91c2V3aGVlbC5ldmVudHNUYXJnZWQpO1xuICAgIH1cbiAgICB0YXJnZXQub2ZmKGV2ZW50LCBzd2lwZXIubW91c2V3aGVlbC5oYW5kbGUpO1xuICAgIHN3aXBlci5tb3VzZXdoZWVsLmVuYWJsZWQgPSBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ21vdXNld2hlZWwnLFxuICBwYXJhbXM6IHtcbiAgICBtb3VzZXdoZWVsOiB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIHJlbGVhc2VPbkVkZ2VzOiBmYWxzZSxcbiAgICAgIGludmVydDogZmFsc2UsXG4gICAgICBmb3JjZVRvQXhpczogZmFsc2UsXG4gICAgICBzZW5zaXRpdml0eTogMSxcbiAgICAgIGV2ZW50c1RhcmdlZDogJ2NvbnRhaW5lcicsXG4gICAgfSxcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgbW91c2V3aGVlbDoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgZW5hYmxlOiBNb3VzZXdoZWVsLmVuYWJsZS5iaW5kKHN3aXBlciksXG4gICAgICAgIGRpc2FibGU6IE1vdXNld2hlZWwuZGlzYWJsZS5iaW5kKHN3aXBlciksXG4gICAgICAgIGhhbmRsZTogTW91c2V3aGVlbC5oYW5kbGUuYmluZChzd2lwZXIpLFxuICAgICAgICBoYW5kbGVNb3VzZUVudGVyOiBNb3VzZXdoZWVsLmhhbmRsZU1vdXNlRW50ZXIuYmluZChzd2lwZXIpLFxuICAgICAgICBoYW5kbGVNb3VzZUxlYXZlOiBNb3VzZXdoZWVsLmhhbmRsZU1vdXNlTGVhdmUuYmluZChzd2lwZXIpLFxuICAgICAgICBhbmltYXRlU2xpZGVyOiBNb3VzZXdoZWVsLmFuaW1hdGVTbGlkZXIuYmluZChzd2lwZXIpLFxuICAgICAgICByZWxlYXNlU2Nyb2xsOiBNb3VzZXdoZWVsLnJlbGVhc2VTY3JvbGwuYmluZChzd2lwZXIpLFxuICAgICAgICBsYXN0U2Nyb2xsVGltZTogVXRpbHMubm93KCksXG4gICAgICAgIGxhc3RFdmVudEJlZm9yZVNuYXA6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVjZW50V2hlZWxFdmVudHM6IFtdLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSxcbiAgb246IHtcbiAgICBpbml0KCkge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5tb3VzZXdoZWVsLmVuYWJsZWQgJiYgc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSB7XG4gICAgICAgIHN3aXBlci5tb3VzZXdoZWVsLmRpc2FibGUoKTtcbiAgICAgIH1cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLm1vdXNld2hlZWwuZW5hYmxlZCkgc3dpcGVyLm1vdXNld2hlZWwuZW5hYmxlKCk7XG4gICAgfSxcbiAgICBkZXN0cm95KCkge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICAgICAgc3dpcGVyLm1vdXNld2hlZWwuZW5hYmxlKCk7XG4gICAgICB9XG4gICAgICBpZiAoc3dpcGVyLm1vdXNld2hlZWwuZW5hYmxlZCkgc3dpcGVyLm1vdXNld2hlZWwuZGlzYWJsZSgpO1xuICAgIH0sXG4gIH0sXG59O1xuIiwiaW1wb3J0ICQgZnJvbSAnLi4vLi4vdXRpbHMvZG9tJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5cbmNvbnN0IE5hdmlnYXRpb24gPSB7XG4gIHVwZGF0ZSgpIHtcbiAgICAvLyBVcGRhdGUgTmF2aWdhdGlvbiBCdXR0b25zXG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLm5hdmlnYXRpb247XG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSByZXR1cm47XG4gICAgY29uc3QgeyAkbmV4dEVsLCAkcHJldkVsIH0gPSBzd2lwZXIubmF2aWdhdGlvbjtcblxuICAgIGlmICgkcHJldkVsICYmICRwcmV2RWwubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHN3aXBlci5pc0JlZ2lubmluZykge1xuICAgICAgICAkcHJldkVsLmFkZENsYXNzKHBhcmFtcy5kaXNhYmxlZENsYXNzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRwcmV2RWwucmVtb3ZlQ2xhc3MocGFyYW1zLmRpc2FibGVkQ2xhc3MpO1xuICAgICAgfVxuICAgICAgJHByZXZFbFtzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc3dpcGVyLmlzTG9ja2VkID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyddKHBhcmFtcy5sb2NrQ2xhc3MpO1xuICAgIH1cbiAgICBpZiAoJG5leHRFbCAmJiAkbmV4dEVsLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChzd2lwZXIuaXNFbmQpIHtcbiAgICAgICAgJG5leHRFbC5hZGRDbGFzcyhwYXJhbXMuZGlzYWJsZWRDbGFzcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkbmV4dEVsLnJlbW92ZUNsYXNzKHBhcmFtcy5kaXNhYmxlZENsYXNzKTtcbiAgICAgIH1cbiAgICAgICRuZXh0RWxbc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHN3aXBlci5pc0xvY2tlZCA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnXShwYXJhbXMubG9ja0NsYXNzKTtcbiAgICB9XG4gIH0sXG4gIG9uUHJldkNsaWNrKGUpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoc3dpcGVyLmlzQmVnaW5uaW5nICYmICFzd2lwZXIucGFyYW1zLmxvb3ApIHJldHVybjtcbiAgICBzd2lwZXIuc2xpZGVQcmV2KCk7XG4gIH0sXG4gIG9uTmV4dENsaWNrKGUpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoc3dpcGVyLmlzRW5kICYmICFzd2lwZXIucGFyYW1zLmxvb3ApIHJldHVybjtcbiAgICBzd2lwZXIuc2xpZGVOZXh0KCk7XG4gIH0sXG4gIGluaXQoKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLm5hdmlnYXRpb247XG4gICAgaWYgKCEocGFyYW1zLm5leHRFbCB8fCBwYXJhbXMucHJldkVsKSkgcmV0dXJuO1xuXG4gICAgbGV0ICRuZXh0RWw7XG4gICAgbGV0ICRwcmV2RWw7XG4gICAgaWYgKHBhcmFtcy5uZXh0RWwpIHtcbiAgICAgICRuZXh0RWwgPSAkKHBhcmFtcy5uZXh0RWwpO1xuICAgICAgaWYgKFxuICAgICAgICBzd2lwZXIucGFyYW1zLnVuaXF1ZU5hdkVsZW1lbnRzXG4gICAgICAgICYmIHR5cGVvZiBwYXJhbXMubmV4dEVsID09PSAnc3RyaW5nJ1xuICAgICAgICAmJiAkbmV4dEVsLmxlbmd0aCA+IDFcbiAgICAgICAgJiYgc3dpcGVyLiRlbC5maW5kKHBhcmFtcy5uZXh0RWwpLmxlbmd0aCA9PT0gMVxuICAgICAgKSB7XG4gICAgICAgICRuZXh0RWwgPSBzd2lwZXIuJGVsLmZpbmQocGFyYW1zLm5leHRFbCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwYXJhbXMucHJldkVsKSB7XG4gICAgICAkcHJldkVsID0gJChwYXJhbXMucHJldkVsKTtcbiAgICAgIGlmIChcbiAgICAgICAgc3dpcGVyLnBhcmFtcy51bmlxdWVOYXZFbGVtZW50c1xuICAgICAgICAmJiB0eXBlb2YgcGFyYW1zLnByZXZFbCA9PT0gJ3N0cmluZydcbiAgICAgICAgJiYgJHByZXZFbC5sZW5ndGggPiAxXG4gICAgICAgICYmIHN3aXBlci4kZWwuZmluZChwYXJhbXMucHJldkVsKS5sZW5ndGggPT09IDFcbiAgICAgICkge1xuICAgICAgICAkcHJldkVsID0gc3dpcGVyLiRlbC5maW5kKHBhcmFtcy5wcmV2RWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICgkbmV4dEVsICYmICRuZXh0RWwubGVuZ3RoID4gMCkge1xuICAgICAgJG5leHRFbC5vbignY2xpY2snLCBzd2lwZXIubmF2aWdhdGlvbi5vbk5leHRDbGljayk7XG4gICAgfVxuICAgIGlmICgkcHJldkVsICYmICRwcmV2RWwubGVuZ3RoID4gMCkge1xuICAgICAgJHByZXZFbC5vbignY2xpY2snLCBzd2lwZXIubmF2aWdhdGlvbi5vblByZXZDbGljayk7XG4gICAgfVxuXG4gICAgVXRpbHMuZXh0ZW5kKHN3aXBlci5uYXZpZ2F0aW9uLCB7XG4gICAgICAkbmV4dEVsLFxuICAgICAgbmV4dEVsOiAkbmV4dEVsICYmICRuZXh0RWxbMF0sXG4gICAgICAkcHJldkVsLFxuICAgICAgcHJldkVsOiAkcHJldkVsICYmICRwcmV2RWxbMF0sXG4gICAgfSk7XG4gIH0sXG4gIGRlc3Ryb3koKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBjb25zdCB7ICRuZXh0RWwsICRwcmV2RWwgfSA9IHN3aXBlci5uYXZpZ2F0aW9uO1xuICAgIGlmICgkbmV4dEVsICYmICRuZXh0RWwubGVuZ3RoKSB7XG4gICAgICAkbmV4dEVsLm9mZignY2xpY2snLCBzd2lwZXIubmF2aWdhdGlvbi5vbk5leHRDbGljayk7XG4gICAgICAkbmV4dEVsLnJlbW92ZUNsYXNzKHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5kaXNhYmxlZENsYXNzKTtcbiAgICB9XG4gICAgaWYgKCRwcmV2RWwgJiYgJHByZXZFbC5sZW5ndGgpIHtcbiAgICAgICRwcmV2RWwub2ZmKCdjbGljaycsIHN3aXBlci5uYXZpZ2F0aW9uLm9uUHJldkNsaWNrKTtcbiAgICAgICRwcmV2RWwucmVtb3ZlQ2xhc3Moc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmRpc2FibGVkQ2xhc3MpO1xuICAgIH1cbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ25hdmlnYXRpb24nLFxuICBwYXJhbXM6IHtcbiAgICBuYXZpZ2F0aW9uOiB7XG4gICAgICBuZXh0RWw6IG51bGwsXG4gICAgICBwcmV2RWw6IG51bGwsXG5cbiAgICAgIGhpZGVPbkNsaWNrOiBmYWxzZSxcbiAgICAgIGRpc2FibGVkQ2xhc3M6ICdzd2lwZXItYnV0dG9uLWRpc2FibGVkJyxcbiAgICAgIGhpZGRlbkNsYXNzOiAnc3dpcGVyLWJ1dHRvbi1oaWRkZW4nLFxuICAgICAgbG9ja0NsYXNzOiAnc3dpcGVyLWJ1dHRvbi1sb2NrJyxcbiAgICB9LFxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICBuYXZpZ2F0aW9uOiB7XG4gICAgICAgIGluaXQ6IE5hdmlnYXRpb24uaW5pdC5iaW5kKHN3aXBlciksXG4gICAgICAgIHVwZGF0ZTogTmF2aWdhdGlvbi51cGRhdGUuYmluZChzd2lwZXIpLFxuICAgICAgICBkZXN0cm95OiBOYXZpZ2F0aW9uLmRlc3Ryb3kuYmluZChzd2lwZXIpLFxuICAgICAgICBvbk5leHRDbGljazogTmF2aWdhdGlvbi5vbk5leHRDbGljay5iaW5kKHN3aXBlciksXG4gICAgICAgIG9uUHJldkNsaWNrOiBOYXZpZ2F0aW9uLm9uUHJldkNsaWNrLmJpbmQoc3dpcGVyKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0sXG4gIG9uOiB7XG4gICAgaW5pdCgpIHtcbiAgICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgICBzd2lwZXIubmF2aWdhdGlvbi5pbml0KCk7XG4gICAgICBzd2lwZXIubmF2aWdhdGlvbi51cGRhdGUoKTtcbiAgICB9LFxuICAgIHRvRWRnZSgpIHtcbiAgICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgICBzd2lwZXIubmF2aWdhdGlvbi51cGRhdGUoKTtcbiAgICB9LFxuICAgIGZyb21FZGdlKCkge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIHN3aXBlci5uYXZpZ2F0aW9uLnVwZGF0ZSgpO1xuICAgIH0sXG4gICAgZGVzdHJveSgpIHtcbiAgICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgICBzd2lwZXIubmF2aWdhdGlvbi5kZXN0cm95KCk7XG4gICAgfSxcbiAgICBjbGljayhlKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgY29uc3QgeyAkbmV4dEVsLCAkcHJldkVsIH0gPSBzd2lwZXIubmF2aWdhdGlvbjtcbiAgICAgIGlmIChcbiAgICAgICAgc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmhpZGVPbkNsaWNrXG4gICAgICAgICYmICEkKGUudGFyZ2V0KS5pcygkcHJldkVsKVxuICAgICAgICAmJiAhJChlLnRhcmdldCkuaXMoJG5leHRFbClcbiAgICAgICkge1xuICAgICAgICBsZXQgaXNIaWRkZW47XG4gICAgICAgIGlmICgkbmV4dEVsKSB7XG4gICAgICAgICAgaXNIaWRkZW4gPSAkbmV4dEVsLmhhc0NsYXNzKHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5oaWRkZW5DbGFzcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoJHByZXZFbCkge1xuICAgICAgICAgIGlzSGlkZGVuID0gJHByZXZFbC5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLm5hdmlnYXRpb24uaGlkZGVuQ2xhc3MpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0hpZGRlbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHN3aXBlci5lbWl0KCduYXZpZ2F0aW9uU2hvdycsIHN3aXBlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3dpcGVyLmVtaXQoJ25hdmlnYXRpb25IaWRlJywgc3dpcGVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJG5leHRFbCkge1xuICAgICAgICAgICRuZXh0RWwudG9nZ2xlQ2xhc3Moc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmhpZGRlbkNsYXNzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJHByZXZFbCkge1xuICAgICAgICAgICRwcmV2RWwudG9nZ2xlQ2xhc3Moc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmhpZGRlbkNsYXNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIH0sXG59O1xuIiwiaW1wb3J0ICQgZnJvbSAnLi4vLi4vdXRpbHMvZG9tJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5cbmNvbnN0IFBhZ2luYXRpb24gPSB7XG4gIHVwZGF0ZSgpIHtcbiAgICAvLyBSZW5kZXIgfHwgVXBkYXRlIFBhZ2luYXRpb24gYnVsbGV0cy9pdGVtc1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgY29uc3QgcnRsID0gc3dpcGVyLnJ0bDtcbiAgICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb247XG4gICAgaWYgKCFwYXJhbXMuZWwgfHwgIXN3aXBlci5wYWdpbmF0aW9uLmVsIHx8ICFzd2lwZXIucGFnaW5hdGlvbi4kZWwgfHwgc3dpcGVyLnBhZ2luYXRpb24uJGVsLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IHNsaWRlc0xlbmd0aCA9IHN3aXBlci52aXJ0dWFsICYmIHN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkID8gc3dpcGVyLnZpcnR1YWwuc2xpZGVzLmxlbmd0aCA6IHN3aXBlci5zbGlkZXMubGVuZ3RoO1xuICAgIGNvbnN0ICRlbCA9IHN3aXBlci5wYWdpbmF0aW9uLiRlbDtcbiAgICAvLyBDdXJyZW50L1RvdGFsXG4gICAgbGV0IGN1cnJlbnQ7XG4gICAgY29uc3QgdG90YWwgPSBzd2lwZXIucGFyYW1zLmxvb3AgPyBNYXRoLmNlaWwoKHNsaWRlc0xlbmd0aCAtIChzd2lwZXIubG9vcGVkU2xpZGVzICogMikpIC8gc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cCkgOiBzd2lwZXIuc25hcEdyaWQubGVuZ3RoO1xuICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgIGN1cnJlbnQgPSBNYXRoLmNlaWwoKHN3aXBlci5hY3RpdmVJbmRleCAtIHN3aXBlci5sb29wZWRTbGlkZXMpIC8gc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cCk7XG4gICAgICBpZiAoY3VycmVudCA+IHNsaWRlc0xlbmd0aCAtIDEgLSAoc3dpcGVyLmxvb3BlZFNsaWRlcyAqIDIpKSB7XG4gICAgICAgIGN1cnJlbnQgLT0gKHNsaWRlc0xlbmd0aCAtIChzd2lwZXIubG9vcGVkU2xpZGVzICogMikpO1xuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnQgPiB0b3RhbCAtIDEpIGN1cnJlbnQgLT0gdG90YWw7XG4gICAgICBpZiAoY3VycmVudCA8IDAgJiYgc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uVHlwZSAhPT0gJ2J1bGxldHMnKSBjdXJyZW50ID0gdG90YWwgKyBjdXJyZW50O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHN3aXBlci5zbmFwSW5kZXggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjdXJyZW50ID0gc3dpcGVyLnNuYXBJbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudCA9IHN3aXBlci5hY3RpdmVJbmRleCB8fCAwO1xuICAgIH1cbiAgICAvLyBUeXBlc1xuICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ2J1bGxldHMnICYmIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMgJiYgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBidWxsZXRzID0gc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cztcbiAgICAgIGxldCBmaXJzdEluZGV4O1xuICAgICAgbGV0IGxhc3RJbmRleDtcbiAgICAgIGxldCBtaWRJbmRleDtcbiAgICAgIGlmIChwYXJhbXMuZHluYW1pY0J1bGxldHMpIHtcbiAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0U2l6ZSA9IGJ1bGxldHMuZXEoMClbc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ291dGVyV2lkdGgnIDogJ291dGVySGVpZ2h0J10odHJ1ZSk7XG4gICAgICAgICRlbC5jc3Moc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ3dpZHRoJyA6ICdoZWlnaHQnLCBgJHtzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRTaXplICogKHBhcmFtcy5keW5hbWljTWFpbkJ1bGxldHMgKyA0KX1weGApO1xuICAgICAgICBpZiAocGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyA+IDEgJiYgc3dpcGVyLnByZXZpb3VzSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLmR5bmFtaWNCdWxsZXRJbmRleCArPSAoY3VycmVudCAtIHN3aXBlci5wcmV2aW91c0luZGV4KTtcbiAgICAgICAgICBpZiAoc3dpcGVyLnBhZ2luYXRpb24uZHluYW1pY0J1bGxldEluZGV4ID4gKHBhcmFtcy5keW5hbWljTWFpbkJ1bGxldHMgLSAxKSkge1xuICAgICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uZHluYW1pY0J1bGxldEluZGV4ID0gcGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyAtIDE7XG4gICAgICAgICAgfSBlbHNlIGlmIChzd2lwZXIucGFnaW5hdGlvbi5keW5hbWljQnVsbGV0SW5kZXggPCAwKSB7XG4gICAgICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi5keW5hbWljQnVsbGV0SW5kZXggPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaXJzdEluZGV4ID0gY3VycmVudCAtIHN3aXBlci5wYWdpbmF0aW9uLmR5bmFtaWNCdWxsZXRJbmRleDtcbiAgICAgICAgbGFzdEluZGV4ID0gZmlyc3RJbmRleCArIChNYXRoLm1pbihidWxsZXRzLmxlbmd0aCwgcGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cykgLSAxKTtcbiAgICAgICAgbWlkSW5kZXggPSAobGFzdEluZGV4ICsgZmlyc3RJbmRleCkgLyAyO1xuICAgICAgfVxuICAgICAgYnVsbGV0cy5yZW1vdmVDbGFzcyhgJHtwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3N9ICR7cGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzfS1uZXh0ICR7cGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzfS1uZXh0LW5leHQgJHtwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3N9LXByZXYgJHtwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3N9LXByZXYtcHJldiAke3BhcmFtcy5idWxsZXRBY3RpdmVDbGFzc30tbWFpbmApO1xuICAgICAgaWYgKCRlbC5sZW5ndGggPiAxKSB7XG4gICAgICAgIGJ1bGxldHMuZWFjaCgoaW5kZXgsIGJ1bGxldCkgPT4ge1xuICAgICAgICAgIGNvbnN0ICRidWxsZXQgPSAkKGJ1bGxldCk7XG4gICAgICAgICAgY29uc3QgYnVsbGV0SW5kZXggPSAkYnVsbGV0LmluZGV4KCk7XG4gICAgICAgICAgaWYgKGJ1bGxldEluZGV4ID09PSBjdXJyZW50KSB7XG4gICAgICAgICAgICAkYnVsbGV0LmFkZENsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwYXJhbXMuZHluYW1pY0J1bGxldHMpIHtcbiAgICAgICAgICAgIGlmIChidWxsZXRJbmRleCA+PSBmaXJzdEluZGV4ICYmIGJ1bGxldEluZGV4IDw9IGxhc3RJbmRleCkge1xuICAgICAgICAgICAgICAkYnVsbGV0LmFkZENsYXNzKGAke3BhcmFtcy5idWxsZXRBY3RpdmVDbGFzc30tbWFpbmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJ1bGxldEluZGV4ID09PSBmaXJzdEluZGV4KSB7XG4gICAgICAgICAgICAgICRidWxsZXRcbiAgICAgICAgICAgICAgICAucHJldigpXG4gICAgICAgICAgICAgICAgLmFkZENsYXNzKGAke3BhcmFtcy5idWxsZXRBY3RpdmVDbGFzc30tcHJldmApXG4gICAgICAgICAgICAgICAgLnByZXYoKVxuICAgICAgICAgICAgICAgIC5hZGRDbGFzcyhgJHtwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3N9LXByZXYtcHJldmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJ1bGxldEluZGV4ID09PSBsYXN0SW5kZXgpIHtcbiAgICAgICAgICAgICAgJGJ1bGxldFxuICAgICAgICAgICAgICAgIC5uZXh0KClcbiAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoYCR7cGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzfS1uZXh0YClcbiAgICAgICAgICAgICAgICAubmV4dCgpXG4gICAgICAgICAgICAgICAgLmFkZENsYXNzKGAke3BhcmFtcy5idWxsZXRBY3RpdmVDbGFzc30tbmV4dC1uZXh0YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0ICRidWxsZXQgPSBidWxsZXRzLmVxKGN1cnJlbnQpO1xuICAgICAgICBjb25zdCBidWxsZXRJbmRleCA9ICRidWxsZXQuaW5kZXgoKTtcbiAgICAgICAgJGJ1bGxldC5hZGRDbGFzcyhwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MpO1xuICAgICAgICBpZiAocGFyYW1zLmR5bmFtaWNCdWxsZXRzKSB7XG4gICAgICAgICAgY29uc3QgJGZpcnN0RGlzcGxheWVkQnVsbGV0ID0gYnVsbGV0cy5lcShmaXJzdEluZGV4KTtcbiAgICAgICAgICBjb25zdCAkbGFzdERpc3BsYXllZEJ1bGxldCA9IGJ1bGxldHMuZXEobGFzdEluZGV4KTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gZmlyc3RJbmRleDsgaSA8PSBsYXN0SW5kZXg7IGkgKz0gMSkge1xuICAgICAgICAgICAgYnVsbGV0cy5lcShpKS5hZGRDbGFzcyhgJHtwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3N9LW1haW5gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICAgICAgaWYgKGJ1bGxldEluZGV4ID49IGJ1bGxldHMubGVuZ3RoIC0gcGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cykge1xuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gcGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0czsgaSA+PSAwOyBpIC09IDEpIHtcbiAgICAgICAgICAgICAgICBidWxsZXRzLmVxKGJ1bGxldHMubGVuZ3RoIC0gaSkuYWRkQ2xhc3MoYCR7cGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzfS1tYWluYCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnVsbGV0cy5lcShidWxsZXRzLmxlbmd0aCAtIHBhcmFtcy5keW5hbWljTWFpbkJ1bGxldHMgLSAxKS5hZGRDbGFzcyhgJHtwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3N9LXByZXZgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICRmaXJzdERpc3BsYXllZEJ1bGxldFxuICAgICAgICAgICAgICAgIC5wcmV2KClcbiAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoYCR7cGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzfS1wcmV2YClcbiAgICAgICAgICAgICAgICAucHJldigpXG4gICAgICAgICAgICAgICAgLmFkZENsYXNzKGAke3BhcmFtcy5idWxsZXRBY3RpdmVDbGFzc30tcHJldi1wcmV2YCk7XG4gICAgICAgICAgICAgICRsYXN0RGlzcGxheWVkQnVsbGV0XG4gICAgICAgICAgICAgICAgLm5leHQoKVxuICAgICAgICAgICAgICAgIC5hZGRDbGFzcyhgJHtwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3N9LW5leHRgKVxuICAgICAgICAgICAgICAgIC5uZXh0KClcbiAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoYCR7cGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzfS1uZXh0LW5leHRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGZpcnN0RGlzcGxheWVkQnVsbGV0XG4gICAgICAgICAgICAgIC5wcmV2KClcbiAgICAgICAgICAgICAgLmFkZENsYXNzKGAke3BhcmFtcy5idWxsZXRBY3RpdmVDbGFzc30tcHJldmApXG4gICAgICAgICAgICAgIC5wcmV2KClcbiAgICAgICAgICAgICAgLmFkZENsYXNzKGAke3BhcmFtcy5idWxsZXRBY3RpdmVDbGFzc30tcHJldi1wcmV2YCk7XG4gICAgICAgICAgICAkbGFzdERpc3BsYXllZEJ1bGxldFxuICAgICAgICAgICAgICAubmV4dCgpXG4gICAgICAgICAgICAgIC5hZGRDbGFzcyhgJHtwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3N9LW5leHRgKVxuICAgICAgICAgICAgICAubmV4dCgpXG4gICAgICAgICAgICAgIC5hZGRDbGFzcyhgJHtwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3N9LW5leHQtbmV4dGApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcy5keW5hbWljQnVsbGV0cykge1xuICAgICAgICBjb25zdCBkeW5hbWljQnVsbGV0c0xlbmd0aCA9IE1hdGgubWluKGJ1bGxldHMubGVuZ3RoLCBwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzICsgNCk7XG4gICAgICAgIGNvbnN0IGJ1bGxldHNPZmZzZXQgPSAoKChzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRTaXplICogZHluYW1pY0J1bGxldHNMZW5ndGgpIC0gKHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldFNpemUpKSAvIDIpIC0gKG1pZEluZGV4ICogc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0U2l6ZSk7XG4gICAgICAgIGNvbnN0IG9mZnNldFByb3AgPSBydGwgPyAncmlnaHQnIDogJ2xlZnQnO1xuICAgICAgICBidWxsZXRzLmNzcyhzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyBvZmZzZXRQcm9wIDogJ3RvcCcsIGAke2J1bGxldHNPZmZzZXR9cHhgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHBhcmFtcy50eXBlID09PSAnZnJhY3Rpb24nKSB7XG4gICAgICAkZWwuZmluZChgLiR7cGFyYW1zLmN1cnJlbnRDbGFzc31gKS50ZXh0KHBhcmFtcy5mb3JtYXRGcmFjdGlvbkN1cnJlbnQoY3VycmVudCArIDEpKTtcbiAgICAgICRlbC5maW5kKGAuJHtwYXJhbXMudG90YWxDbGFzc31gKS50ZXh0KHBhcmFtcy5mb3JtYXRGcmFjdGlvblRvdGFsKHRvdGFsKSk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ3Byb2dyZXNzYmFyJykge1xuICAgICAgbGV0IHByb2dyZXNzYmFyRGlyZWN0aW9uO1xuICAgICAgaWYgKHBhcmFtcy5wcm9ncmVzc2Jhck9wcG9zaXRlKSB7XG4gICAgICAgIHByb2dyZXNzYmFyRGlyZWN0aW9uID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ3ZlcnRpY2FsJyA6ICdob3Jpem9udGFsJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2dyZXNzYmFyRGlyZWN0aW9uID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ2hvcml6b250YWwnIDogJ3ZlcnRpY2FsJztcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNjYWxlID0gKGN1cnJlbnQgKyAxKSAvIHRvdGFsO1xuICAgICAgbGV0IHNjYWxlWCA9IDE7XG4gICAgICBsZXQgc2NhbGVZID0gMTtcbiAgICAgIGlmIChwcm9ncmVzc2JhckRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgIHNjYWxlWCA9IHNjYWxlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2NhbGVZID0gc2NhbGU7XG4gICAgICB9XG4gICAgICAkZWwuZmluZChgLiR7cGFyYW1zLnByb2dyZXNzYmFyRmlsbENsYXNzfWApLnRyYW5zZm9ybShgdHJhbnNsYXRlM2QoMCwwLDApIHNjYWxlWCgke3NjYWxlWH0pIHNjYWxlWSgke3NjYWxlWX0pYCkudHJhbnNpdGlvbihzd2lwZXIucGFyYW1zLnNwZWVkKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy50eXBlID09PSAnY3VzdG9tJyAmJiBwYXJhbXMucmVuZGVyQ3VzdG9tKSB7XG4gICAgICAkZWwuaHRtbChwYXJhbXMucmVuZGVyQ3VzdG9tKHN3aXBlciwgY3VycmVudCArIDEsIHRvdGFsKSk7XG4gICAgICBzd2lwZXIuZW1pdCgncGFnaW5hdGlvblJlbmRlcicsIHN3aXBlciwgJGVsWzBdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpcGVyLmVtaXQoJ3BhZ2luYXRpb25VcGRhdGUnLCBzd2lwZXIsICRlbFswXSk7XG4gICAgfVxuICAgICRlbFtzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc3dpcGVyLmlzTG9ja2VkID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyddKHBhcmFtcy5sb2NrQ2xhc3MpO1xuICB9LFxuICByZW5kZXIoKSB7XG4gICAgLy8gUmVuZGVyIENvbnRhaW5lclxuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uO1xuICAgIGlmICghcGFyYW1zLmVsIHx8ICFzd2lwZXIucGFnaW5hdGlvbi5lbCB8fCAhc3dpcGVyLnBhZ2luYXRpb24uJGVsIHx8IHN3aXBlci5wYWdpbmF0aW9uLiRlbC5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBzbGlkZXNMZW5ndGggPSBzd2lwZXIudmlydHVhbCAmJiBzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCA/IHN3aXBlci52aXJ0dWFsLnNsaWRlcy5sZW5ndGggOiBzd2lwZXIuc2xpZGVzLmxlbmd0aDtcblxuICAgIGNvbnN0ICRlbCA9IHN3aXBlci5wYWdpbmF0aW9uLiRlbDtcbiAgICBsZXQgcGFnaW5hdGlvbkhUTUwgPSAnJztcbiAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdidWxsZXRzJykge1xuICAgICAgY29uc3QgbnVtYmVyT2ZCdWxsZXRzID0gc3dpcGVyLnBhcmFtcy5sb29wID8gTWF0aC5jZWlsKChzbGlkZXNMZW5ndGggLSAoc3dpcGVyLmxvb3BlZFNsaWRlcyAqIDIpKSAvIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXApIDogc3dpcGVyLnNuYXBHcmlkLmxlbmd0aDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZCdWxsZXRzOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKHBhcmFtcy5yZW5kZXJCdWxsZXQpIHtcbiAgICAgICAgICBwYWdpbmF0aW9uSFRNTCArPSBwYXJhbXMucmVuZGVyQnVsbGV0LmNhbGwoc3dpcGVyLCBpLCBwYXJhbXMuYnVsbGV0Q2xhc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhZ2luYXRpb25IVE1MICs9IGA8JHtwYXJhbXMuYnVsbGV0RWxlbWVudH0gY2xhc3M9XCIke3BhcmFtcy5idWxsZXRDbGFzc31cIj48LyR7cGFyYW1zLmJ1bGxldEVsZW1lbnR9PmA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICRlbC5odG1sKHBhZ2luYXRpb25IVE1MKTtcbiAgICAgIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMgPSAkZWwuZmluZChgLiR7cGFyYW1zLmJ1bGxldENsYXNzfWApO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdmcmFjdGlvbicpIHtcbiAgICAgIGlmIChwYXJhbXMucmVuZGVyRnJhY3Rpb24pIHtcbiAgICAgICAgcGFnaW5hdGlvbkhUTUwgPSBwYXJhbXMucmVuZGVyRnJhY3Rpb24uY2FsbChzd2lwZXIsIHBhcmFtcy5jdXJyZW50Q2xhc3MsIHBhcmFtcy50b3RhbENsYXNzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhZ2luYXRpb25IVE1MID0gYDxzcGFuIGNsYXNzPVwiJHtwYXJhbXMuY3VycmVudENsYXNzfVwiPjwvc3Bhbj5gXG4gICAgICAgICsgJyAvICdcbiAgICAgICAgKyBgPHNwYW4gY2xhc3M9XCIke3BhcmFtcy50b3RhbENsYXNzfVwiPjwvc3Bhbj5gO1xuICAgICAgfVxuICAgICAgJGVsLmh0bWwocGFnaW5hdGlvbkhUTUwpO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdwcm9ncmVzc2JhcicpIHtcbiAgICAgIGlmIChwYXJhbXMucmVuZGVyUHJvZ3Jlc3NiYXIpIHtcbiAgICAgICAgcGFnaW5hdGlvbkhUTUwgPSBwYXJhbXMucmVuZGVyUHJvZ3Jlc3NiYXIuY2FsbChzd2lwZXIsIHBhcmFtcy5wcm9ncmVzc2JhckZpbGxDbGFzcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYWdpbmF0aW9uSFRNTCA9IGA8c3BhbiBjbGFzcz1cIiR7cGFyYW1zLnByb2dyZXNzYmFyRmlsbENsYXNzfVwiPjwvc3Bhbj5gO1xuICAgICAgfVxuICAgICAgJGVsLmh0bWwocGFnaW5hdGlvbkhUTUwpO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLnR5cGUgIT09ICdjdXN0b20nKSB7XG4gICAgICBzd2lwZXIuZW1pdCgncGFnaW5hdGlvblJlbmRlcicsIHN3aXBlci5wYWdpbmF0aW9uLiRlbFswXSk7XG4gICAgfVxuICB9LFxuICBpbml0KCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uO1xuICAgIGlmICghcGFyYW1zLmVsKSByZXR1cm47XG5cbiAgICBsZXQgJGVsID0gJChwYXJhbXMuZWwpO1xuICAgIGlmICgkZWwubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICBpZiAoXG4gICAgICBzd2lwZXIucGFyYW1zLnVuaXF1ZU5hdkVsZW1lbnRzXG4gICAgICAmJiB0eXBlb2YgcGFyYW1zLmVsID09PSAnc3RyaW5nJ1xuICAgICAgJiYgJGVsLmxlbmd0aCA+IDFcbiAgICApIHtcbiAgICAgICRlbCA9IHN3aXBlci4kZWwuZmluZChwYXJhbXMuZWwpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ2J1bGxldHMnICYmIHBhcmFtcy5jbGlja2FibGUpIHtcbiAgICAgICRlbC5hZGRDbGFzcyhwYXJhbXMuY2xpY2thYmxlQ2xhc3MpO1xuICAgIH1cblxuICAgICRlbC5hZGRDbGFzcyhwYXJhbXMubW9kaWZpZXJDbGFzcyArIHBhcmFtcy50eXBlKTtcblxuICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ2J1bGxldHMnICYmIHBhcmFtcy5keW5hbWljQnVsbGV0cykge1xuICAgICAgJGVsLmFkZENsYXNzKGAke3BhcmFtcy5tb2RpZmllckNsYXNzfSR7cGFyYW1zLnR5cGV9LWR5bmFtaWNgKTtcbiAgICAgIHN3aXBlci5wYWdpbmF0aW9uLmR5bmFtaWNCdWxsZXRJbmRleCA9IDA7XG4gICAgICBpZiAocGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyA8IDEpIHtcbiAgICAgICAgcGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyA9IDE7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ3Byb2dyZXNzYmFyJyAmJiBwYXJhbXMucHJvZ3Jlc3NiYXJPcHBvc2l0ZSkge1xuICAgICAgJGVsLmFkZENsYXNzKHBhcmFtcy5wcm9ncmVzc2Jhck9wcG9zaXRlQ2xhc3MpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMuY2xpY2thYmxlKSB7XG4gICAgICAkZWwub24oJ2NsaWNrJywgYC4ke3BhcmFtcy5idWxsZXRDbGFzc31gLCBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBsZXQgaW5kZXggPSAkKHRoaXMpLmluZGV4KCkgKiBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSBpbmRleCArPSBzd2lwZXIubG9vcGVkU2xpZGVzO1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhpbmRleCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBVdGlscy5leHRlbmQoc3dpcGVyLnBhZ2luYXRpb24sIHtcbiAgICAgICRlbCxcbiAgICAgIGVsOiAkZWxbMF0sXG4gICAgfSk7XG4gIH0sXG4gIGRlc3Ryb3koKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb247XG4gICAgaWYgKCFwYXJhbXMuZWwgfHwgIXN3aXBlci5wYWdpbmF0aW9uLmVsIHx8ICFzd2lwZXIucGFnaW5hdGlvbi4kZWwgfHwgc3dpcGVyLnBhZ2luYXRpb24uJGVsLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0ICRlbCA9IHN3aXBlci5wYWdpbmF0aW9uLiRlbDtcblxuICAgICRlbC5yZW1vdmVDbGFzcyhwYXJhbXMuaGlkZGVuQ2xhc3MpO1xuICAgICRlbC5yZW1vdmVDbGFzcyhwYXJhbXMubW9kaWZpZXJDbGFzcyArIHBhcmFtcy50eXBlKTtcbiAgICBpZiAoc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cykgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cy5yZW1vdmVDbGFzcyhwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MpO1xuICAgIGlmIChwYXJhbXMuY2xpY2thYmxlKSB7XG4gICAgICAkZWwub2ZmKCdjbGljaycsIGAuJHtwYXJhbXMuYnVsbGV0Q2xhc3N9YCk7XG4gICAgfVxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAncGFnaW5hdGlvbicsXG4gIHBhcmFtczoge1xuICAgIHBhZ2luYXRpb246IHtcbiAgICAgIGVsOiBudWxsLFxuICAgICAgYnVsbGV0RWxlbWVudDogJ3NwYW4nLFxuICAgICAgY2xpY2thYmxlOiBmYWxzZSxcbiAgICAgIGhpZGVPbkNsaWNrOiBmYWxzZSxcbiAgICAgIHJlbmRlckJ1bGxldDogbnVsbCxcbiAgICAgIHJlbmRlclByb2dyZXNzYmFyOiBudWxsLFxuICAgICAgcmVuZGVyRnJhY3Rpb246IG51bGwsXG4gICAgICByZW5kZXJDdXN0b206IG51bGwsXG4gICAgICBwcm9ncmVzc2Jhck9wcG9zaXRlOiBmYWxzZSxcbiAgICAgIHR5cGU6ICdidWxsZXRzJywgLy8gJ2J1bGxldHMnIG9yICdwcm9ncmVzc2Jhcicgb3IgJ2ZyYWN0aW9uJyBvciAnY3VzdG9tJ1xuICAgICAgZHluYW1pY0J1bGxldHM6IGZhbHNlLFxuICAgICAgZHluYW1pY01haW5CdWxsZXRzOiAxLFxuICAgICAgZm9ybWF0RnJhY3Rpb25DdXJyZW50OiAobnVtYmVyKSA9PiBudW1iZXIsXG4gICAgICBmb3JtYXRGcmFjdGlvblRvdGFsOiAobnVtYmVyKSA9PiBudW1iZXIsXG4gICAgICBidWxsZXRDbGFzczogJ3N3aXBlci1wYWdpbmF0aW9uLWJ1bGxldCcsXG4gICAgICBidWxsZXRBY3RpdmVDbGFzczogJ3N3aXBlci1wYWdpbmF0aW9uLWJ1bGxldC1hY3RpdmUnLFxuICAgICAgbW9kaWZpZXJDbGFzczogJ3N3aXBlci1wYWdpbmF0aW9uLScsIC8vIE5FV1xuICAgICAgY3VycmVudENsYXNzOiAnc3dpcGVyLXBhZ2luYXRpb24tY3VycmVudCcsXG4gICAgICB0b3RhbENsYXNzOiAnc3dpcGVyLXBhZ2luYXRpb24tdG90YWwnLFxuICAgICAgaGlkZGVuQ2xhc3M6ICdzd2lwZXItcGFnaW5hdGlvbi1oaWRkZW4nLFxuICAgICAgcHJvZ3Jlc3NiYXJGaWxsQ2xhc3M6ICdzd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2Jhci1maWxsJyxcbiAgICAgIHByb2dyZXNzYmFyT3Bwb3NpdGVDbGFzczogJ3N3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFyLW9wcG9zaXRlJyxcbiAgICAgIGNsaWNrYWJsZUNsYXNzOiAnc3dpcGVyLXBhZ2luYXRpb24tY2xpY2thYmxlJywgLy8gTkVXXG4gICAgICBsb2NrQ2xhc3M6ICdzd2lwZXItcGFnaW5hdGlvbi1sb2NrJyxcbiAgICB9LFxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgIGluaXQ6IFBhZ2luYXRpb24uaW5pdC5iaW5kKHN3aXBlciksXG4gICAgICAgIHJlbmRlcjogUGFnaW5hdGlvbi5yZW5kZXIuYmluZChzd2lwZXIpLFxuICAgICAgICB1cGRhdGU6IFBhZ2luYXRpb24udXBkYXRlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgZGVzdHJveTogUGFnaW5hdGlvbi5kZXN0cm95LmJpbmQoc3dpcGVyKSxcbiAgICAgICAgZHluYW1pY0J1bGxldEluZGV4OiAwLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSxcbiAgb246IHtcbiAgICBpbml0KCkge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIHN3aXBlci5wYWdpbmF0aW9uLmluaXQoKTtcbiAgICAgIHN3aXBlci5wYWdpbmF0aW9uLnJlbmRlcigpO1xuICAgICAgc3dpcGVyLnBhZ2luYXRpb24udXBkYXRlKCk7XG4gICAgfSxcbiAgICBhY3RpdmVJbmRleENoYW5nZSgpIHtcbiAgICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLnVwZGF0ZSgpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3dpcGVyLnNuYXBJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24udXBkYXRlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzbmFwSW5kZXhDaGFuZ2UoKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24udXBkYXRlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzbGlkZXNMZW5ndGhDaGFuZ2UoKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi5yZW5kZXIoKTtcbiAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24udXBkYXRlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzbmFwR3JpZExlbmd0aENoYW5nZSgpIHtcbiAgICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi5yZW5kZXIoKTtcbiAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24udXBkYXRlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkZXN0cm95KCkge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIHN3aXBlci5wYWdpbmF0aW9uLmRlc3Ryb3koKTtcbiAgICB9LFxuICAgIGNsaWNrKGUpIHtcbiAgICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoXG4gICAgICAgIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5lbFxuICAgICAgICAmJiBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uaGlkZU9uQ2xpY2tcbiAgICAgICAgJiYgc3dpcGVyLnBhZ2luYXRpb24uJGVsLmxlbmd0aCA+IDBcbiAgICAgICAgJiYgISQoZS50YXJnZXQpLmhhc0NsYXNzKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5idWxsZXRDbGFzcylcbiAgICAgICkge1xuICAgICAgICBjb25zdCBpc0hpZGRlbiA9IHN3aXBlci5wYWdpbmF0aW9uLiRlbC5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uaGlkZGVuQ2xhc3MpO1xuICAgICAgICBpZiAoaXNIaWRkZW4gPT09IHRydWUpIHtcbiAgICAgICAgICBzd2lwZXIuZW1pdCgncGFnaW5hdGlvblNob3cnLCBzd2lwZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN3aXBlci5lbWl0KCdwYWdpbmF0aW9uSGlkZScsIHN3aXBlcik7XG4gICAgICAgIH1cbiAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uJGVsLnRvZ2dsZUNsYXNzKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5oaWRkZW5DbGFzcyk7XG4gICAgICB9XG4gICAgfSxcbiAgfSxcbn07XG4iLCJpbXBvcnQgeyBkb2N1bWVudCB9IGZyb20gJ3Nzci13aW5kb3cnO1xuaW1wb3J0ICQgZnJvbSAnLi4vLi4vdXRpbHMvZG9tJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5pbXBvcnQgU3VwcG9ydCBmcm9tICcuLi8uLi91dGlscy9zdXBwb3J0JztcblxuY29uc3QgU2Nyb2xsYmFyID0ge1xuICBzZXRUcmFuc2xhdGUoKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBpZiAoIXN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmVsIHx8ICFzd2lwZXIuc2Nyb2xsYmFyLmVsKSByZXR1cm47XG4gICAgY29uc3QgeyBzY3JvbGxiYXIsIHJ0bFRyYW5zbGF0ZTogcnRsLCBwcm9ncmVzcyB9ID0gc3dpcGVyO1xuICAgIGNvbnN0IHtcbiAgICAgIGRyYWdTaXplLCB0cmFja1NpemUsICRkcmFnRWwsICRlbCxcbiAgICB9ID0gc2Nyb2xsYmFyO1xuICAgIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyO1xuXG4gICAgbGV0IG5ld1NpemUgPSBkcmFnU2l6ZTtcbiAgICBsZXQgbmV3UG9zID0gKHRyYWNrU2l6ZSAtIGRyYWdTaXplKSAqIHByb2dyZXNzO1xuICAgIGlmIChydGwpIHtcbiAgICAgIG5ld1BvcyA9IC1uZXdQb3M7XG4gICAgICBpZiAobmV3UG9zID4gMCkge1xuICAgICAgICBuZXdTaXplID0gZHJhZ1NpemUgLSBuZXdQb3M7XG4gICAgICAgIG5ld1BvcyA9IDA7XG4gICAgICB9IGVsc2UgaWYgKC1uZXdQb3MgKyBkcmFnU2l6ZSA+IHRyYWNrU2l6ZSkge1xuICAgICAgICBuZXdTaXplID0gdHJhY2tTaXplICsgbmV3UG9zO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV3UG9zIDwgMCkge1xuICAgICAgbmV3U2l6ZSA9IGRyYWdTaXplICsgbmV3UG9zO1xuICAgICAgbmV3UG9zID0gMDtcbiAgICB9IGVsc2UgaWYgKG5ld1BvcyArIGRyYWdTaXplID4gdHJhY2tTaXplKSB7XG4gICAgICBuZXdTaXplID0gdHJhY2tTaXplIC0gbmV3UG9zO1xuICAgIH1cbiAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAkZHJhZ0VsLnRyYW5zZm9ybShgdHJhbnNsYXRlM2QoJHtuZXdQb3N9cHgsIDAsIDApYCk7XG4gICAgICAkZHJhZ0VsWzBdLnN0eWxlLndpZHRoID0gYCR7bmV3U2l6ZX1weGA7XG4gICAgfSBlbHNlIHtcbiAgICAgICRkcmFnRWwudHJhbnNmb3JtKGB0cmFuc2xhdGUzZCgwcHgsICR7bmV3UG9zfXB4LCAwKWApO1xuICAgICAgJGRyYWdFbFswXS5zdHlsZS5oZWlnaHQgPSBgJHtuZXdTaXplfXB4YDtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5oaWRlKSB7XG4gICAgICBjbGVhclRpbWVvdXQoc3dpcGVyLnNjcm9sbGJhci50aW1lb3V0KTtcbiAgICAgICRlbFswXS5zdHlsZS5vcGFjaXR5ID0gMTtcbiAgICAgIHN3aXBlci5zY3JvbGxiYXIudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAkZWxbMF0uc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgICAgICRlbC50cmFuc2l0aW9uKDQwMCk7XG4gICAgICB9LCAxMDAwKTtcbiAgICB9XG4gIH0sXG4gIHNldFRyYW5zaXRpb24oZHVyYXRpb24pIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGlmICghc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuZWwgfHwgIXN3aXBlci5zY3JvbGxiYXIuZWwpIHJldHVybjtcbiAgICBzd2lwZXIuc2Nyb2xsYmFyLiRkcmFnRWwudHJhbnNpdGlvbihkdXJhdGlvbik7XG4gIH0sXG4gIHVwZGF0ZVNpemUoKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBpZiAoIXN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmVsIHx8ICFzd2lwZXIuc2Nyb2xsYmFyLmVsKSByZXR1cm47XG5cbiAgICBjb25zdCB7IHNjcm9sbGJhciB9ID0gc3dpcGVyO1xuICAgIGNvbnN0IHsgJGRyYWdFbCwgJGVsIH0gPSBzY3JvbGxiYXI7XG5cbiAgICAkZHJhZ0VsWzBdLnN0eWxlLndpZHRoID0gJyc7XG4gICAgJGRyYWdFbFswXS5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICBjb25zdCB0cmFja1NpemUgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAkZWxbMF0ub2Zmc2V0V2lkdGggOiAkZWxbMF0ub2Zmc2V0SGVpZ2h0O1xuXG4gICAgY29uc3QgZGl2aWRlciA9IHN3aXBlci5zaXplIC8gc3dpcGVyLnZpcnR1YWxTaXplO1xuICAgIGNvbnN0IG1vdmVEaXZpZGVyID0gZGl2aWRlciAqICh0cmFja1NpemUgLyBzd2lwZXIuc2l6ZSk7XG4gICAgbGV0IGRyYWdTaXplO1xuICAgIGlmIChzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5kcmFnU2l6ZSA9PT0gJ2F1dG8nKSB7XG4gICAgICBkcmFnU2l6ZSA9IHRyYWNrU2l6ZSAqIGRpdmlkZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRyYWdTaXplID0gcGFyc2VJbnQoc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuZHJhZ1NpemUsIDEwKTtcbiAgICB9XG5cbiAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAkZHJhZ0VsWzBdLnN0eWxlLndpZHRoID0gYCR7ZHJhZ1NpemV9cHhgO1xuICAgIH0gZWxzZSB7XG4gICAgICAkZHJhZ0VsWzBdLnN0eWxlLmhlaWdodCA9IGAke2RyYWdTaXplfXB4YDtcbiAgICB9XG5cbiAgICBpZiAoZGl2aWRlciA+PSAxKSB7XG4gICAgICAkZWxbMF0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9IGVsc2Uge1xuICAgICAgJGVsWzBdLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICB9XG4gICAgaWYgKHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmhpZGUpIHtcbiAgICAgICRlbFswXS5zdHlsZS5vcGFjaXR5ID0gMDtcbiAgICB9XG4gICAgVXRpbHMuZXh0ZW5kKHNjcm9sbGJhciwge1xuICAgICAgdHJhY2tTaXplLFxuICAgICAgZGl2aWRlcixcbiAgICAgIG1vdmVEaXZpZGVyLFxuICAgICAgZHJhZ1NpemUsXG4gICAgfSk7XG4gICAgc2Nyb2xsYmFyLiRlbFtzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc3dpcGVyLmlzTG9ja2VkID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyddKHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmxvY2tDbGFzcyk7XG4gIH0sXG4gIGdldFBvaW50ZXJQb3NpdGlvbihlKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICByZXR1cm4gKChlLnR5cGUgPT09ICd0b3VjaHN0YXJ0JyB8fCBlLnR5cGUgPT09ICd0b3VjaG1vdmUnKSA/IGUudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRYIDogZS5jbGllbnRYKTtcbiAgICB9XG4gICAgcmV0dXJuICgoZS50eXBlID09PSAndG91Y2hzdGFydCcgfHwgZS50eXBlID09PSAndG91Y2htb3ZlJykgPyBlLnRhcmdldFRvdWNoZXNbMF0uY2xpZW50WSA6IGUuY2xpZW50WSk7XG4gIH0sXG4gIHNldERyYWdQb3NpdGlvbihlKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBjb25zdCB7IHNjcm9sbGJhciwgcnRsVHJhbnNsYXRlOiBydGwgfSA9IHN3aXBlcjtcbiAgICBjb25zdCB7XG4gICAgICAkZWwsXG4gICAgICBkcmFnU2l6ZSxcbiAgICAgIHRyYWNrU2l6ZSxcbiAgICAgIGRyYWdTdGFydFBvcyxcbiAgICB9ID0gc2Nyb2xsYmFyO1xuXG4gICAgbGV0IHBvc2l0aW9uUmF0aW87XG4gICAgcG9zaXRpb25SYXRpbyA9ICgoc2Nyb2xsYmFyLmdldFBvaW50ZXJQb3NpdGlvbihlKSkgLSAkZWwub2Zmc2V0KClbc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ2xlZnQnIDogJ3RvcCddXG4gICAgICAtIChkcmFnU3RhcnRQb3MgIT09IG51bGwgPyBkcmFnU3RhcnRQb3MgOiBkcmFnU2l6ZSAvIDIpKSAvICh0cmFja1NpemUgLSBkcmFnU2l6ZSk7XG4gICAgcG9zaXRpb25SYXRpbyA9IE1hdGgubWF4KE1hdGgubWluKHBvc2l0aW9uUmF0aW8sIDEpLCAwKTtcbiAgICBpZiAocnRsKSB7XG4gICAgICBwb3NpdGlvblJhdGlvID0gMSAtIHBvc2l0aW9uUmF0aW87XG4gICAgfVxuXG4gICAgY29uc3QgcG9zaXRpb24gPSBzd2lwZXIubWluVHJhbnNsYXRlKCkgKyAoKHN3aXBlci5tYXhUcmFuc2xhdGUoKSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKSkgKiBwb3NpdGlvblJhdGlvKTtcblxuICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcyhwb3NpdGlvbik7XG4gICAgc3dpcGVyLnNldFRyYW5zbGF0ZShwb3NpdGlvbik7XG4gICAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KCk7XG4gICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgfSxcbiAgb25EcmFnU3RhcnQoZSkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXI7XG4gICAgY29uc3QgeyBzY3JvbGxiYXIsICR3cmFwcGVyRWwgfSA9IHN3aXBlcjtcbiAgICBjb25zdCB7ICRlbCwgJGRyYWdFbCB9ID0gc2Nyb2xsYmFyO1xuICAgIHN3aXBlci5zY3JvbGxiYXIuaXNUb3VjaGVkID0gdHJ1ZTtcbiAgICBzd2lwZXIuc2Nyb2xsYmFyLmRyYWdTdGFydFBvcyA9IChlLnRhcmdldCA9PT0gJGRyYWdFbFswXSB8fCBlLnRhcmdldCA9PT0gJGRyYWdFbClcbiAgICAgID8gc2Nyb2xsYmFyLmdldFBvaW50ZXJQb3NpdGlvbihlKSAtIGUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3N3aXBlci5pc0hvcml6b250YWwoKSA/ICdsZWZ0JyA6ICd0b3AnXSA6IG51bGw7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAkd3JhcHBlckVsLnRyYW5zaXRpb24oMTAwKTtcbiAgICAkZHJhZ0VsLnRyYW5zaXRpb24oMTAwKTtcbiAgICBzY3JvbGxiYXIuc2V0RHJhZ1Bvc2l0aW9uKGUpO1xuXG4gICAgY2xlYXJUaW1lb3V0KHN3aXBlci5zY3JvbGxiYXIuZHJhZ1RpbWVvdXQpO1xuXG4gICAgJGVsLnRyYW5zaXRpb24oMCk7XG4gICAgaWYgKHBhcmFtcy5oaWRlKSB7XG4gICAgICAkZWwuY3NzKCdvcGFjaXR5JywgMSk7XG4gICAgfVxuICAgIGlmIChzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICAgIHN3aXBlci4kd3JhcHBlckVsLmNzcygnc2Nyb2xsLXNuYXAtdHlwZScsICdub25lJyk7XG4gICAgfVxuICAgIHN3aXBlci5lbWl0KCdzY3JvbGxiYXJEcmFnU3RhcnQnLCBlKTtcbiAgfSxcbiAgb25EcmFnTW92ZShlKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBjb25zdCB7IHNjcm9sbGJhciwgJHdyYXBwZXJFbCB9ID0gc3dpcGVyO1xuICAgIGNvbnN0IHsgJGVsLCAkZHJhZ0VsIH0gPSBzY3JvbGxiYXI7XG5cbiAgICBpZiAoIXN3aXBlci5zY3JvbGxiYXIuaXNUb3VjaGVkKSByZXR1cm47XG4gICAgaWYgKGUucHJldmVudERlZmF1bHQpIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBlbHNlIGUucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICBzY3JvbGxiYXIuc2V0RHJhZ1Bvc2l0aW9uKGUpO1xuICAgICR3cmFwcGVyRWwudHJhbnNpdGlvbigwKTtcbiAgICAkZWwudHJhbnNpdGlvbigwKTtcbiAgICAkZHJhZ0VsLnRyYW5zaXRpb24oMCk7XG4gICAgc3dpcGVyLmVtaXQoJ3Njcm9sbGJhckRyYWdNb3ZlJywgZSk7XG4gIH0sXG4gIG9uRHJhZ0VuZChlKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcblxuICAgIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyO1xuICAgIGNvbnN0IHsgc2Nyb2xsYmFyLCAkd3JhcHBlckVsIH0gPSBzd2lwZXI7XG4gICAgY29uc3QgeyAkZWwgfSA9IHNjcm9sbGJhcjtcblxuICAgIGlmICghc3dpcGVyLnNjcm9sbGJhci5pc1RvdWNoZWQpIHJldHVybjtcbiAgICBzd2lwZXIuc2Nyb2xsYmFyLmlzVG91Y2hlZCA9IGZhbHNlO1xuICAgIGlmIChzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICAgIHN3aXBlci4kd3JhcHBlckVsLmNzcygnc2Nyb2xsLXNuYXAtdHlwZScsICcnKTtcbiAgICAgICR3cmFwcGVyRWwudHJhbnNpdGlvbignJyk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuaGlkZSkge1xuICAgICAgY2xlYXJUaW1lb3V0KHN3aXBlci5zY3JvbGxiYXIuZHJhZ1RpbWVvdXQpO1xuICAgICAgc3dpcGVyLnNjcm9sbGJhci5kcmFnVGltZW91dCA9IFV0aWxzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgJGVsLmNzcygnb3BhY2l0eScsIDApO1xuICAgICAgICAkZWwudHJhbnNpdGlvbig0MDApO1xuICAgICAgfSwgMTAwMCk7XG4gICAgfVxuICAgIHN3aXBlci5lbWl0KCdzY3JvbGxiYXJEcmFnRW5kJywgZSk7XG4gICAgaWYgKHBhcmFtcy5zbmFwT25SZWxlYXNlKSB7XG4gICAgICBzd2lwZXIuc2xpZGVUb0Nsb3Nlc3QoKTtcbiAgICB9XG4gIH0sXG4gIGVuYWJsZURyYWdnYWJsZSgpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGlmICghc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuZWwpIHJldHVybjtcbiAgICBjb25zdCB7XG4gICAgICBzY3JvbGxiYXIsIHRvdWNoRXZlbnRzVG91Y2gsIHRvdWNoRXZlbnRzRGVza3RvcCwgcGFyYW1zLFxuICAgIH0gPSBzd2lwZXI7XG4gICAgY29uc3QgJGVsID0gc2Nyb2xsYmFyLiRlbDtcbiAgICBjb25zdCB0YXJnZXQgPSAkZWxbMF07XG4gICAgY29uc3QgYWN0aXZlTGlzdGVuZXIgPSBTdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciAmJiBwYXJhbXMucGFzc2l2ZUxpc3RlbmVycyA/IHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IGZhbHNlIH0gOiBmYWxzZTtcbiAgICBjb25zdCBwYXNzaXZlTGlzdGVuZXIgPSBTdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciAmJiBwYXJhbXMucGFzc2l2ZUxpc3RlbmVycyA/IHsgcGFzc2l2ZTogdHJ1ZSwgY2FwdHVyZTogZmFsc2UgfSA6IGZhbHNlO1xuICAgIGlmICghU3VwcG9ydC50b3VjaCkge1xuICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHNEZXNrdG9wLnN0YXJ0LCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ1N0YXJ0LCBhY3RpdmVMaXN0ZW5lcik7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzRGVza3RvcC5tb3ZlLCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ01vdmUsIGFjdGl2ZUxpc3RlbmVyKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHNEZXNrdG9wLmVuZCwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzVG91Y2guc3RhcnQsIHN3aXBlci5zY3JvbGxiYXIub25EcmFnU3RhcnQsIGFjdGl2ZUxpc3RlbmVyKTtcbiAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzVG91Y2gubW92ZSwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdNb3ZlLCBhY3RpdmVMaXN0ZW5lcik7XG4gICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c1RvdWNoLmVuZCwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgfVxuICB9LFxuICBkaXNhYmxlRHJhZ2dhYmxlKCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKCFzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5lbCkgcmV0dXJuO1xuICAgIGNvbnN0IHtcbiAgICAgIHNjcm9sbGJhciwgdG91Y2hFdmVudHNUb3VjaCwgdG91Y2hFdmVudHNEZXNrdG9wLCBwYXJhbXMsXG4gICAgfSA9IHN3aXBlcjtcbiAgICBjb25zdCAkZWwgPSBzY3JvbGxiYXIuJGVsO1xuICAgIGNvbnN0IHRhcmdldCA9ICRlbFswXTtcbiAgICBjb25zdCBhY3RpdmVMaXN0ZW5lciA9IFN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyICYmIHBhcmFtcy5wYXNzaXZlTGlzdGVuZXJzID8geyBwYXNzaXZlOiBmYWxzZSwgY2FwdHVyZTogZmFsc2UgfSA6IGZhbHNlO1xuICAgIGNvbnN0IHBhc3NpdmVMaXN0ZW5lciA9IFN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyICYmIHBhcmFtcy5wYXNzaXZlTGlzdGVuZXJzID8geyBwYXNzaXZlOiB0cnVlLCBjYXB0dXJlOiBmYWxzZSB9IDogZmFsc2U7XG4gICAgaWYgKCFTdXBwb3J0LnRvdWNoKSB7XG4gICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c0Rlc2t0b3Auc3RhcnQsIHN3aXBlci5zY3JvbGxiYXIub25EcmFnU3RhcnQsIGFjdGl2ZUxpc3RlbmVyKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHNEZXNrdG9wLm1vdmUsIHN3aXBlci5zY3JvbGxiYXIub25EcmFnTW92ZSwgYWN0aXZlTGlzdGVuZXIpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c0Rlc2t0b3AuZW5kLCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ0VuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHNUb3VjaC5zdGFydCwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdTdGFydCwgYWN0aXZlTGlzdGVuZXIpO1xuICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHNUb3VjaC5tb3ZlLCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ01vdmUsIGFjdGl2ZUxpc3RlbmVyKTtcbiAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzVG91Y2guZW5kLCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ0VuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICB9XG4gIH0sXG4gIGluaXQoKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBpZiAoIXN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmVsKSByZXR1cm47XG4gICAgY29uc3QgeyBzY3JvbGxiYXIsICRlbDogJHN3aXBlckVsIH0gPSBzd2lwZXI7XG4gICAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXI7XG5cbiAgICBsZXQgJGVsID0gJChwYXJhbXMuZWwpO1xuICAgIGlmIChzd2lwZXIucGFyYW1zLnVuaXF1ZU5hdkVsZW1lbnRzICYmIHR5cGVvZiBwYXJhbXMuZWwgPT09ICdzdHJpbmcnICYmICRlbC5sZW5ndGggPiAxICYmICRzd2lwZXJFbC5maW5kKHBhcmFtcy5lbCkubGVuZ3RoID09PSAxKSB7XG4gICAgICAkZWwgPSAkc3dpcGVyRWwuZmluZChwYXJhbXMuZWwpO1xuICAgIH1cblxuICAgIGxldCAkZHJhZ0VsID0gJGVsLmZpbmQoYC4ke3N3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmRyYWdDbGFzc31gKTtcbiAgICBpZiAoJGRyYWdFbC5sZW5ndGggPT09IDApIHtcbiAgICAgICRkcmFnRWwgPSAkKGA8ZGl2IGNsYXNzPVwiJHtzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5kcmFnQ2xhc3N9XCI+PC9kaXY+YCk7XG4gICAgICAkZWwuYXBwZW5kKCRkcmFnRWwpO1xuICAgIH1cblxuICAgIFV0aWxzLmV4dGVuZChzY3JvbGxiYXIsIHtcbiAgICAgICRlbCxcbiAgICAgIGVsOiAkZWxbMF0sXG4gICAgICAkZHJhZ0VsLFxuICAgICAgZHJhZ0VsOiAkZHJhZ0VsWzBdLFxuICAgIH0pO1xuXG4gICAgaWYgKHBhcmFtcy5kcmFnZ2FibGUpIHtcbiAgICAgIHNjcm9sbGJhci5lbmFibGVEcmFnZ2FibGUoKTtcbiAgICB9XG4gIH0sXG4gIGRlc3Ryb3koKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBzd2lwZXIuc2Nyb2xsYmFyLmRpc2FibGVEcmFnZ2FibGUoKTtcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3Njcm9sbGJhcicsXG4gIHBhcmFtczoge1xuICAgIHNjcm9sbGJhcjoge1xuICAgICAgZWw6IG51bGwsXG4gICAgICBkcmFnU2l6ZTogJ2F1dG8nLFxuICAgICAgaGlkZTogZmFsc2UsXG4gICAgICBkcmFnZ2FibGU6IGZhbHNlLFxuICAgICAgc25hcE9uUmVsZWFzZTogdHJ1ZSxcbiAgICAgIGxvY2tDbGFzczogJ3N3aXBlci1zY3JvbGxiYXItbG9jaycsXG4gICAgICBkcmFnQ2xhc3M6ICdzd2lwZXItc2Nyb2xsYmFyLWRyYWcnLFxuICAgIH0sXG4gIH0sXG4gIGNyZWF0ZSgpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgIHNjcm9sbGJhcjoge1xuICAgICAgICBpbml0OiBTY3JvbGxiYXIuaW5pdC5iaW5kKHN3aXBlciksXG4gICAgICAgIGRlc3Ryb3k6IFNjcm9sbGJhci5kZXN0cm95LmJpbmQoc3dpcGVyKSxcbiAgICAgICAgdXBkYXRlU2l6ZTogU2Nyb2xsYmFyLnVwZGF0ZVNpemUuYmluZChzd2lwZXIpLFxuICAgICAgICBzZXRUcmFuc2xhdGU6IFNjcm9sbGJhci5zZXRUcmFuc2xhdGUuYmluZChzd2lwZXIpLFxuICAgICAgICBzZXRUcmFuc2l0aW9uOiBTY3JvbGxiYXIuc2V0VHJhbnNpdGlvbi5iaW5kKHN3aXBlciksXG4gICAgICAgIGVuYWJsZURyYWdnYWJsZTogU2Nyb2xsYmFyLmVuYWJsZURyYWdnYWJsZS5iaW5kKHN3aXBlciksXG4gICAgICAgIGRpc2FibGVEcmFnZ2FibGU6IFNjcm9sbGJhci5kaXNhYmxlRHJhZ2dhYmxlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgc2V0RHJhZ1Bvc2l0aW9uOiBTY3JvbGxiYXIuc2V0RHJhZ1Bvc2l0aW9uLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgZ2V0UG9pbnRlclBvc2l0aW9uOiBTY3JvbGxiYXIuZ2V0UG9pbnRlclBvc2l0aW9uLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgb25EcmFnU3RhcnQ6IFNjcm9sbGJhci5vbkRyYWdTdGFydC5iaW5kKHN3aXBlciksXG4gICAgICAgIG9uRHJhZ01vdmU6IFNjcm9sbGJhci5vbkRyYWdNb3ZlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgb25EcmFnRW5kOiBTY3JvbGxiYXIub25EcmFnRW5kLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgaXNUb3VjaGVkOiBmYWxzZSxcbiAgICAgICAgdGltZW91dDogbnVsbCxcbiAgICAgICAgZHJhZ1RpbWVvdXQ6IG51bGwsXG4gICAgICB9LFxuICAgIH0pO1xuICB9LFxuICBvbjoge1xuICAgIGluaXQoKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgc3dpcGVyLnNjcm9sbGJhci5pbml0KCk7XG4gICAgICBzd2lwZXIuc2Nyb2xsYmFyLnVwZGF0ZVNpemUoKTtcbiAgICAgIHN3aXBlci5zY3JvbGxiYXIuc2V0VHJhbnNsYXRlKCk7XG4gICAgfSxcbiAgICB1cGRhdGUoKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgc3dpcGVyLnNjcm9sbGJhci51cGRhdGVTaXplKCk7XG4gICAgfSxcbiAgICByZXNpemUoKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgc3dpcGVyLnNjcm9sbGJhci51cGRhdGVTaXplKCk7XG4gICAgfSxcbiAgICBvYnNlcnZlclVwZGF0ZSgpIHtcbiAgICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgICBzd2lwZXIuc2Nyb2xsYmFyLnVwZGF0ZVNpemUoKTtcbiAgICB9LFxuICAgIHNldFRyYW5zbGF0ZSgpIHtcbiAgICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgICBzd2lwZXIuc2Nyb2xsYmFyLnNldFRyYW5zbGF0ZSgpO1xuICAgIH0sXG4gICAgc2V0VHJhbnNpdGlvbihkdXJhdGlvbikge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIHN3aXBlci5zY3JvbGxiYXIuc2V0VHJhbnNpdGlvbihkdXJhdGlvbik7XG4gICAgfSxcbiAgICBkZXN0cm95KCkge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIHN3aXBlci5zY3JvbGxiYXIuZGVzdHJveSgpO1xuICAgIH0sXG4gIH0sXG59O1xuIiwiaW1wb3J0ICQgZnJvbSAnLi4vLi4vdXRpbHMvZG9tJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5cbmNvbnN0IFBhcmFsbGF4ID0ge1xuICBzZXRUcmFuc2Zvcm0oZWwsIHByb2dyZXNzKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBjb25zdCB7IHJ0bCB9ID0gc3dpcGVyO1xuXG4gICAgY29uc3QgJGVsID0gJChlbCk7XG4gICAgY29uc3QgcnRsRmFjdG9yID0gcnRsID8gLTEgOiAxO1xuXG4gICAgY29uc3QgcCA9ICRlbC5hdHRyKCdkYXRhLXN3aXBlci1wYXJhbGxheCcpIHx8ICcwJztcbiAgICBsZXQgeCA9ICRlbC5hdHRyKCdkYXRhLXN3aXBlci1wYXJhbGxheC14Jyk7XG4gICAgbGV0IHkgPSAkZWwuYXR0cignZGF0YS1zd2lwZXItcGFyYWxsYXgteScpO1xuICAgIGNvbnN0IHNjYWxlID0gJGVsLmF0dHIoJ2RhdGEtc3dpcGVyLXBhcmFsbGF4LXNjYWxlJyk7XG4gICAgY29uc3Qgb3BhY2l0eSA9ICRlbC5hdHRyKCdkYXRhLXN3aXBlci1wYXJhbGxheC1vcGFjaXR5Jyk7XG5cbiAgICBpZiAoeCB8fCB5KSB7XG4gICAgICB4ID0geCB8fCAnMCc7XG4gICAgICB5ID0geSB8fCAnMCc7XG4gICAgfSBlbHNlIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgIHggPSBwO1xuICAgICAgeSA9ICcwJztcbiAgICB9IGVsc2Uge1xuICAgICAgeSA9IHA7XG4gICAgICB4ID0gJzAnO1xuICAgIH1cblxuICAgIGlmICgoeCkuaW5kZXhPZignJScpID49IDApIHtcbiAgICAgIHggPSBgJHtwYXJzZUludCh4LCAxMCkgKiBwcm9ncmVzcyAqIHJ0bEZhY3Rvcn0lYDtcbiAgICB9IGVsc2Uge1xuICAgICAgeCA9IGAke3ggKiBwcm9ncmVzcyAqIHJ0bEZhY3Rvcn1weGA7XG4gICAgfVxuICAgIGlmICgoeSkuaW5kZXhPZignJScpID49IDApIHtcbiAgICAgIHkgPSBgJHtwYXJzZUludCh5LCAxMCkgKiBwcm9ncmVzc30lYDtcbiAgICB9IGVsc2Uge1xuICAgICAgeSA9IGAke3kgKiBwcm9ncmVzc31weGA7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcGFjaXR5ICE9PSAndW5kZWZpbmVkJyAmJiBvcGFjaXR5ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBjdXJyZW50T3BhY2l0eSA9IG9wYWNpdHkgLSAoKG9wYWNpdHkgLSAxKSAqICgxIC0gTWF0aC5hYnMocHJvZ3Jlc3MpKSk7XG4gICAgICAkZWxbMF0uc3R5bGUub3BhY2l0eSA9IGN1cnJlbnRPcGFjaXR5O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHNjYWxlID09PSAndW5kZWZpbmVkJyB8fCBzY2FsZSA9PT0gbnVsbCkge1xuICAgICAgJGVsLnRyYW5zZm9ybShgdHJhbnNsYXRlM2QoJHt4fSwgJHt5fSwgMHB4KWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjdXJyZW50U2NhbGUgPSBzY2FsZSAtICgoc2NhbGUgLSAxKSAqICgxIC0gTWF0aC5hYnMocHJvZ3Jlc3MpKSk7XG4gICAgICAkZWwudHJhbnNmb3JtKGB0cmFuc2xhdGUzZCgke3h9LCAke3l9LCAwcHgpIHNjYWxlKCR7Y3VycmVudFNjYWxlfSlgKTtcbiAgICB9XG4gIH0sXG4gIHNldFRyYW5zbGF0ZSgpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGNvbnN0IHtcbiAgICAgICRlbCwgc2xpZGVzLCBwcm9ncmVzcywgc25hcEdyaWQsXG4gICAgfSA9IHN3aXBlcjtcbiAgICAkZWwuY2hpbGRyZW4oJ1tkYXRhLXN3aXBlci1wYXJhbGxheF0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC14XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LXldLCBbZGF0YS1zd2lwZXItcGFyYWxsYXgtb3BhY2l0eV0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC1zY2FsZV0nKVxuICAgICAgLmVhY2goKGluZGV4LCBlbCkgPT4ge1xuICAgICAgICBzd2lwZXIucGFyYWxsYXguc2V0VHJhbnNmb3JtKGVsLCBwcm9ncmVzcyk7XG4gICAgICB9KTtcbiAgICBzbGlkZXMuZWFjaCgoc2xpZGVJbmRleCwgc2xpZGVFbCkgPT4ge1xuICAgICAgbGV0IHNsaWRlUHJvZ3Jlc3MgPSBzbGlkZUVsLnByb2dyZXNzO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXAgPiAxICYmIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldyAhPT0gJ2F1dG8nKSB7XG4gICAgICAgIHNsaWRlUHJvZ3Jlc3MgKz0gTWF0aC5jZWlsKHNsaWRlSW5kZXggLyAyKSAtIChwcm9ncmVzcyAqIChzbmFwR3JpZC5sZW5ndGggLSAxKSk7XG4gICAgICB9XG4gICAgICBzbGlkZVByb2dyZXNzID0gTWF0aC5taW4oTWF0aC5tYXgoc2xpZGVQcm9ncmVzcywgLTEpLCAxKTtcbiAgICAgICQoc2xpZGVFbCkuZmluZCgnW2RhdGEtc3dpcGVyLXBhcmFsbGF4XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LXhdLCBbZGF0YS1zd2lwZXItcGFyYWxsYXgteV0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC1vcGFjaXR5XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LXNjYWxlXScpXG4gICAgICAgIC5lYWNoKChpbmRleCwgZWwpID0+IHtcbiAgICAgICAgICBzd2lwZXIucGFyYWxsYXguc2V0VHJhbnNmb3JtKGVsLCBzbGlkZVByb2dyZXNzKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH0sXG4gIHNldFRyYW5zaXRpb24oZHVyYXRpb24gPSB0aGlzLnBhcmFtcy5zcGVlZCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgY29uc3QgeyAkZWwgfSA9IHN3aXBlcjtcbiAgICAkZWwuZmluZCgnW2RhdGEtc3dpcGVyLXBhcmFsbGF4XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LXhdLCBbZGF0YS1zd2lwZXItcGFyYWxsYXgteV0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC1vcGFjaXR5XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LXNjYWxlXScpXG4gICAgICAuZWFjaCgoaW5kZXgsIHBhcmFsbGF4RWwpID0+IHtcbiAgICAgICAgY29uc3QgJHBhcmFsbGF4RWwgPSAkKHBhcmFsbGF4RWwpO1xuICAgICAgICBsZXQgcGFyYWxsYXhEdXJhdGlvbiA9IHBhcnNlSW50KCRwYXJhbGxheEVsLmF0dHIoJ2RhdGEtc3dpcGVyLXBhcmFsbGF4LWR1cmF0aW9uJyksIDEwKSB8fCBkdXJhdGlvbjtcbiAgICAgICAgaWYgKGR1cmF0aW9uID09PSAwKSBwYXJhbGxheER1cmF0aW9uID0gMDtcbiAgICAgICAgJHBhcmFsbGF4RWwudHJhbnNpdGlvbihwYXJhbGxheER1cmF0aW9uKTtcbiAgICAgIH0pO1xuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAncGFyYWxsYXgnLFxuICBwYXJhbXM6IHtcbiAgICBwYXJhbGxheDoge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgfSxcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgcGFyYWxsYXg6IHtcbiAgICAgICAgc2V0VHJhbnNmb3JtOiBQYXJhbGxheC5zZXRUcmFuc2Zvcm0uYmluZChzd2lwZXIpLFxuICAgICAgICBzZXRUcmFuc2xhdGU6IFBhcmFsbGF4LnNldFRyYW5zbGF0ZS5iaW5kKHN3aXBlciksXG4gICAgICAgIHNldFRyYW5zaXRpb246IFBhcmFsbGF4LnNldFRyYW5zaXRpb24uYmluZChzd2lwZXIpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSxcbiAgb246IHtcbiAgICBiZWZvcmVJbml0KCkge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5wYXJhbGxheC5lbmFibGVkKSByZXR1cm47XG4gICAgICBzd2lwZXIucGFyYW1zLndhdGNoU2xpZGVzUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgc3dpcGVyLm9yaWdpbmFsUGFyYW1zLndhdGNoU2xpZGVzUHJvZ3Jlc3MgPSB0cnVlO1xuICAgIH0sXG4gICAgaW5pdCgpIHtcbiAgICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5wYXJhbXMucGFyYWxsYXguZW5hYmxlZCkgcmV0dXJuO1xuICAgICAgc3dpcGVyLnBhcmFsbGF4LnNldFRyYW5zbGF0ZSgpO1xuICAgIH0sXG4gICAgc2V0VHJhbnNsYXRlKCkge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5wYXJhbGxheC5lbmFibGVkKSByZXR1cm47XG4gICAgICBzd2lwZXIucGFyYWxsYXguc2V0VHJhbnNsYXRlKCk7XG4gICAgfSxcbiAgICBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnBhcmFsbGF4LmVuYWJsZWQpIHJldHVybjtcbiAgICAgIHN3aXBlci5wYXJhbGxheC5zZXRUcmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgICB9LFxuICB9LFxufTtcbiIsImltcG9ydCAkIGZyb20gJy4uLy4uL3V0aWxzL2RvbSc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnO1xuaW1wb3J0IERldmljZSBmcm9tICcuLi8uLi91dGlscy9kZXZpY2UnO1xuaW1wb3J0IFN1cHBvcnQgZnJvbSAnLi4vLi4vdXRpbHMvc3VwcG9ydCc7XG5cbmNvbnN0IFpvb20gPSB7XG4gIC8vIENhbGMgU2NhbGUgRnJvbSBNdWx0aS10b3VjaGVzXG4gIGdldERpc3RhbmNlQmV0d2VlblRvdWNoZXMoZSkge1xuICAgIGlmIChlLnRhcmdldFRvdWNoZXMubGVuZ3RoIDwgMikgcmV0dXJuIDE7XG4gICAgY29uc3QgeDEgPSBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVg7XG4gICAgY29uc3QgeTEgPSBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVk7XG4gICAgY29uc3QgeDIgPSBlLnRhcmdldFRvdWNoZXNbMV0ucGFnZVg7XG4gICAgY29uc3QgeTIgPSBlLnRhcmdldFRvdWNoZXNbMV0ucGFnZVk7XG4gICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLnNxcnQoKCh4MiAtIHgxKSAqKiAyKSArICgoeTIgLSB5MSkgKiogMikpO1xuICAgIHJldHVybiBkaXN0YW5jZTtcbiAgfSxcbiAgLy8gRXZlbnRzXG4gIG9uR2VzdHVyZVN0YXJ0KGUpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuem9vbTtcbiAgICBjb25zdCB6b29tID0gc3dpcGVyLnpvb207XG4gICAgY29uc3QgeyBnZXN0dXJlIH0gPSB6b29tO1xuICAgIHpvb20uZmFrZUdlc3R1cmVUb3VjaGVkID0gZmFsc2U7XG4gICAgem9vbS5mYWtlR2VzdHVyZU1vdmVkID0gZmFsc2U7XG4gICAgaWYgKCFTdXBwb3J0Lmdlc3R1cmVzKSB7XG4gICAgICBpZiAoZS50eXBlICE9PSAndG91Y2hzdGFydCcgfHwgKGUudHlwZSA9PT0gJ3RvdWNoc3RhcnQnICYmIGUudGFyZ2V0VG91Y2hlcy5sZW5ndGggPCAyKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB6b29tLmZha2VHZXN0dXJlVG91Y2hlZCA9IHRydWU7XG4gICAgICBnZXN0dXJlLnNjYWxlU3RhcnQgPSBab29tLmdldERpc3RhbmNlQmV0d2VlblRvdWNoZXMoZSk7XG4gICAgfVxuICAgIGlmICghZ2VzdHVyZS4kc2xpZGVFbCB8fCAhZ2VzdHVyZS4kc2xpZGVFbC5sZW5ndGgpIHtcbiAgICAgIGdlc3R1cmUuJHNsaWRlRWwgPSAkKGUudGFyZ2V0KS5jbG9zZXN0KGAuJHtzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3N9YCk7XG4gICAgICBpZiAoZ2VzdHVyZS4kc2xpZGVFbC5sZW5ndGggPT09IDApIGdlc3R1cmUuJHNsaWRlRWwgPSBzd2lwZXIuc2xpZGVzLmVxKHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICBnZXN0dXJlLiRpbWFnZUVsID0gZ2VzdHVyZS4kc2xpZGVFbC5maW5kKCdpbWcsIHN2ZywgY2FudmFzLCBwaWN0dXJlLCAuc3dpcGVyLXpvb20tdGFyZ2V0Jyk7XG4gICAgICBnZXN0dXJlLiRpbWFnZVdyYXBFbCA9IGdlc3R1cmUuJGltYWdlRWwucGFyZW50KGAuJHtwYXJhbXMuY29udGFpbmVyQ2xhc3N9YCk7XG4gICAgICBnZXN0dXJlLm1heFJhdGlvID0gZ2VzdHVyZS4kaW1hZ2VXcmFwRWwuYXR0cignZGF0YS1zd2lwZXItem9vbScpIHx8IHBhcmFtcy5tYXhSYXRpbztcbiAgICAgIGlmIChnZXN0dXJlLiRpbWFnZVdyYXBFbC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZ2VzdHVyZS4kaW1hZ2VFbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZ2VzdHVyZS4kaW1hZ2VFbCkge1xuICAgICAgZ2VzdHVyZS4kaW1hZ2VFbC50cmFuc2l0aW9uKDApO1xuICAgIH1cbiAgICBzd2lwZXIuem9vbS5pc1NjYWxpbmcgPSB0cnVlO1xuICB9LFxuICBvbkdlc3R1cmVDaGFuZ2UoZSkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy56b29tO1xuICAgIGNvbnN0IHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICBjb25zdCB7IGdlc3R1cmUgfSA9IHpvb207XG4gICAgaWYgKCFTdXBwb3J0Lmdlc3R1cmVzKSB7XG4gICAgICBpZiAoZS50eXBlICE9PSAndG91Y2htb3ZlJyB8fCAoZS50eXBlID09PSAndG91Y2htb3ZlJyAmJiBlLnRhcmdldFRvdWNoZXMubGVuZ3RoIDwgMikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgem9vbS5mYWtlR2VzdHVyZU1vdmVkID0gdHJ1ZTtcbiAgICAgIGdlc3R1cmUuc2NhbGVNb3ZlID0gWm9vbS5nZXREaXN0YW5jZUJldHdlZW5Ub3VjaGVzKGUpO1xuICAgIH1cbiAgICBpZiAoIWdlc3R1cmUuJGltYWdlRWwgfHwgZ2VzdHVyZS4kaW1hZ2VFbC5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBpZiAoU3VwcG9ydC5nZXN0dXJlcykge1xuICAgICAgem9vbS5zY2FsZSA9IGUuc2NhbGUgKiB6b29tLmN1cnJlbnRTY2FsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgem9vbS5zY2FsZSA9IChnZXN0dXJlLnNjYWxlTW92ZSAvIGdlc3R1cmUuc2NhbGVTdGFydCkgKiB6b29tLmN1cnJlbnRTY2FsZTtcbiAgICB9XG4gICAgaWYgKHpvb20uc2NhbGUgPiBnZXN0dXJlLm1heFJhdGlvKSB7XG4gICAgICB6b29tLnNjYWxlID0gKGdlc3R1cmUubWF4UmF0aW8gLSAxKSArICgoKHpvb20uc2NhbGUgLSBnZXN0dXJlLm1heFJhdGlvKSArIDEpICoqIDAuNSk7XG4gICAgfVxuICAgIGlmICh6b29tLnNjYWxlIDwgcGFyYW1zLm1pblJhdGlvKSB7XG4gICAgICB6b29tLnNjYWxlID0gKHBhcmFtcy5taW5SYXRpbyArIDEpIC0gKCgocGFyYW1zLm1pblJhdGlvIC0gem9vbS5zY2FsZSkgKyAxKSAqKiAwLjUpO1xuICAgIH1cbiAgICBnZXN0dXJlLiRpbWFnZUVsLnRyYW5zZm9ybShgdHJhbnNsYXRlM2QoMCwwLDApIHNjYWxlKCR7em9vbS5zY2FsZX0pYCk7XG4gIH0sXG4gIG9uR2VzdHVyZUVuZChlKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnpvb207XG4gICAgY29uc3Qgem9vbSA9IHN3aXBlci56b29tO1xuICAgIGNvbnN0IHsgZ2VzdHVyZSB9ID0gem9vbTtcbiAgICBpZiAoIVN1cHBvcnQuZ2VzdHVyZXMpIHtcbiAgICAgIGlmICghem9vbS5mYWtlR2VzdHVyZVRvdWNoZWQgfHwgIXpvb20uZmFrZUdlc3R1cmVNb3ZlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZS50eXBlICE9PSAndG91Y2hlbmQnIHx8IChlLnR5cGUgPT09ICd0b3VjaGVuZCcgJiYgZS5jaGFuZ2VkVG91Y2hlcy5sZW5ndGggPCAyICYmICFEZXZpY2UuYW5kcm9pZCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgem9vbS5mYWtlR2VzdHVyZVRvdWNoZWQgPSBmYWxzZTtcbiAgICAgIHpvb20uZmFrZUdlc3R1cmVNb3ZlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIWdlc3R1cmUuJGltYWdlRWwgfHwgZ2VzdHVyZS4kaW1hZ2VFbC5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICB6b29tLnNjYWxlID0gTWF0aC5tYXgoTWF0aC5taW4oem9vbS5zY2FsZSwgZ2VzdHVyZS5tYXhSYXRpbyksIHBhcmFtcy5taW5SYXRpbyk7XG4gICAgZ2VzdHVyZS4kaW1hZ2VFbC50cmFuc2l0aW9uKHN3aXBlci5wYXJhbXMuc3BlZWQpLnRyYW5zZm9ybShgdHJhbnNsYXRlM2QoMCwwLDApIHNjYWxlKCR7em9vbS5zY2FsZX0pYCk7XG4gICAgem9vbS5jdXJyZW50U2NhbGUgPSB6b29tLnNjYWxlO1xuICAgIHpvb20uaXNTY2FsaW5nID0gZmFsc2U7XG4gICAgaWYgKHpvb20uc2NhbGUgPT09IDEpIGdlc3R1cmUuJHNsaWRlRWwgPSB1bmRlZmluZWQ7XG4gIH0sXG4gIG9uVG91Y2hTdGFydChlKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBjb25zdCB6b29tID0gc3dpcGVyLnpvb207XG4gICAgY29uc3QgeyBnZXN0dXJlLCBpbWFnZSB9ID0gem9vbTtcbiAgICBpZiAoIWdlc3R1cmUuJGltYWdlRWwgfHwgZ2VzdHVyZS4kaW1hZ2VFbC5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBpZiAoaW1hZ2UuaXNUb3VjaGVkKSByZXR1cm47XG4gICAgaWYgKERldmljZS5hbmRyb2lkICYmIGUuY2FuY2VsYWJsZSkgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGltYWdlLmlzVG91Y2hlZCA9IHRydWU7XG4gICAgaW1hZ2UudG91Y2hlc1N0YXJ0LnggPSBlLnR5cGUgPT09ICd0b3VjaHN0YXJ0JyA/IGUudGFyZ2V0VG91Y2hlc1swXS5wYWdlWCA6IGUucGFnZVg7XG4gICAgaW1hZ2UudG91Y2hlc1N0YXJ0LnkgPSBlLnR5cGUgPT09ICd0b3VjaHN0YXJ0JyA/IGUudGFyZ2V0VG91Y2hlc1swXS5wYWdlWSA6IGUucGFnZVk7XG4gIH0sXG4gIG9uVG91Y2hNb3ZlKGUpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGNvbnN0IHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICBjb25zdCB7IGdlc3R1cmUsIGltYWdlLCB2ZWxvY2l0eSB9ID0gem9vbTtcbiAgICBpZiAoIWdlc3R1cmUuJGltYWdlRWwgfHwgZ2VzdHVyZS4kaW1hZ2VFbC5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBzd2lwZXIuYWxsb3dDbGljayA9IGZhbHNlO1xuICAgIGlmICghaW1hZ2UuaXNUb3VjaGVkIHx8ICFnZXN0dXJlLiRzbGlkZUVsKSByZXR1cm47XG5cbiAgICBpZiAoIWltYWdlLmlzTW92ZWQpIHtcbiAgICAgIGltYWdlLndpZHRoID0gZ2VzdHVyZS4kaW1hZ2VFbFswXS5vZmZzZXRXaWR0aDtcbiAgICAgIGltYWdlLmhlaWdodCA9IGdlc3R1cmUuJGltYWdlRWxbMF0ub2Zmc2V0SGVpZ2h0O1xuICAgICAgaW1hZ2Uuc3RhcnRYID0gVXRpbHMuZ2V0VHJhbnNsYXRlKGdlc3R1cmUuJGltYWdlV3JhcEVsWzBdLCAneCcpIHx8IDA7XG4gICAgICBpbWFnZS5zdGFydFkgPSBVdGlscy5nZXRUcmFuc2xhdGUoZ2VzdHVyZS4kaW1hZ2VXcmFwRWxbMF0sICd5JykgfHwgMDtcbiAgICAgIGdlc3R1cmUuc2xpZGVXaWR0aCA9IGdlc3R1cmUuJHNsaWRlRWxbMF0ub2Zmc2V0V2lkdGg7XG4gICAgICBnZXN0dXJlLnNsaWRlSGVpZ2h0ID0gZ2VzdHVyZS4kc2xpZGVFbFswXS5vZmZzZXRIZWlnaHQ7XG4gICAgICBnZXN0dXJlLiRpbWFnZVdyYXBFbC50cmFuc2l0aW9uKDApO1xuICAgICAgaWYgKHN3aXBlci5ydGwpIHtcbiAgICAgICAgaW1hZ2Uuc3RhcnRYID0gLWltYWdlLnN0YXJ0WDtcbiAgICAgICAgaW1hZ2Uuc3RhcnRZID0gLWltYWdlLnN0YXJ0WTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRGVmaW5lIGlmIHdlIG5lZWQgaW1hZ2UgZHJhZ1xuICAgIGNvbnN0IHNjYWxlZFdpZHRoID0gaW1hZ2Uud2lkdGggKiB6b29tLnNjYWxlO1xuICAgIGNvbnN0IHNjYWxlZEhlaWdodCA9IGltYWdlLmhlaWdodCAqIHpvb20uc2NhbGU7XG5cbiAgICBpZiAoc2NhbGVkV2lkdGggPCBnZXN0dXJlLnNsaWRlV2lkdGggJiYgc2NhbGVkSGVpZ2h0IDwgZ2VzdHVyZS5zbGlkZUhlaWdodCkgcmV0dXJuO1xuXG4gICAgaW1hZ2UubWluWCA9IE1hdGgubWluKCgoZ2VzdHVyZS5zbGlkZVdpZHRoIC8gMikgLSAoc2NhbGVkV2lkdGggLyAyKSksIDApO1xuICAgIGltYWdlLm1heFggPSAtaW1hZ2UubWluWDtcbiAgICBpbWFnZS5taW5ZID0gTWF0aC5taW4oKChnZXN0dXJlLnNsaWRlSGVpZ2h0IC8gMikgLSAoc2NhbGVkSGVpZ2h0IC8gMikpLCAwKTtcbiAgICBpbWFnZS5tYXhZID0gLWltYWdlLm1pblk7XG5cbiAgICBpbWFnZS50b3VjaGVzQ3VycmVudC54ID0gZS50eXBlID09PSAndG91Y2htb3ZlJyA/IGUudGFyZ2V0VG91Y2hlc1swXS5wYWdlWCA6IGUucGFnZVg7XG4gICAgaW1hZ2UudG91Y2hlc0N1cnJlbnQueSA9IGUudHlwZSA9PT0gJ3RvdWNobW92ZScgPyBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVkgOiBlLnBhZ2VZO1xuXG4gICAgaWYgKCFpbWFnZS5pc01vdmVkICYmICF6b29tLmlzU2NhbGluZykge1xuICAgICAgaWYgKFxuICAgICAgICBzd2lwZXIuaXNIb3Jpem9udGFsKClcbiAgICAgICAgJiYgKFxuICAgICAgICAgIChNYXRoLmZsb29yKGltYWdlLm1pblgpID09PSBNYXRoLmZsb29yKGltYWdlLnN0YXJ0WCkgJiYgaW1hZ2UudG91Y2hlc0N1cnJlbnQueCA8IGltYWdlLnRvdWNoZXNTdGFydC54KVxuICAgICAgICAgIHx8IChNYXRoLmZsb29yKGltYWdlLm1heFgpID09PSBNYXRoLmZsb29yKGltYWdlLnN0YXJ0WCkgJiYgaW1hZ2UudG91Y2hlc0N1cnJlbnQueCA+IGltYWdlLnRvdWNoZXNTdGFydC54KVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgaW1hZ2UuaXNUb3VjaGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gaWYgKFxuICAgICAgICAhc3dpcGVyLmlzSG9yaXpvbnRhbCgpXG4gICAgICAgICYmIChcbiAgICAgICAgICAoTWF0aC5mbG9vcihpbWFnZS5taW5ZKSA9PT0gTWF0aC5mbG9vcihpbWFnZS5zdGFydFkpICYmIGltYWdlLnRvdWNoZXNDdXJyZW50LnkgPCBpbWFnZS50b3VjaGVzU3RhcnQueSlcbiAgICAgICAgICB8fCAoTWF0aC5mbG9vcihpbWFnZS5tYXhZKSA9PT0gTWF0aC5mbG9vcihpbWFnZS5zdGFydFkpICYmIGltYWdlLnRvdWNoZXNDdXJyZW50LnkgPiBpbWFnZS50b3VjaGVzU3RhcnQueSlcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGltYWdlLmlzVG91Y2hlZCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlLmNhbmNlbGFibGUpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGltYWdlLmlzTW92ZWQgPSB0cnVlO1xuICAgIGltYWdlLmN1cnJlbnRYID0gKGltYWdlLnRvdWNoZXNDdXJyZW50LnggLSBpbWFnZS50b3VjaGVzU3RhcnQueCkgKyBpbWFnZS5zdGFydFg7XG4gICAgaW1hZ2UuY3VycmVudFkgPSAoaW1hZ2UudG91Y2hlc0N1cnJlbnQueSAtIGltYWdlLnRvdWNoZXNTdGFydC55KSArIGltYWdlLnN0YXJ0WTtcblxuICAgIGlmIChpbWFnZS5jdXJyZW50WCA8IGltYWdlLm1pblgpIHtcbiAgICAgIGltYWdlLmN1cnJlbnRYID0gKGltYWdlLm1pblggKyAxKSAtICgoKGltYWdlLm1pblggLSBpbWFnZS5jdXJyZW50WCkgKyAxKSAqKiAwLjgpO1xuICAgIH1cbiAgICBpZiAoaW1hZ2UuY3VycmVudFggPiBpbWFnZS5tYXhYKSB7XG4gICAgICBpbWFnZS5jdXJyZW50WCA9IChpbWFnZS5tYXhYIC0gMSkgKyAoKChpbWFnZS5jdXJyZW50WCAtIGltYWdlLm1heFgpICsgMSkgKiogMC44KTtcbiAgICB9XG5cbiAgICBpZiAoaW1hZ2UuY3VycmVudFkgPCBpbWFnZS5taW5ZKSB7XG4gICAgICBpbWFnZS5jdXJyZW50WSA9IChpbWFnZS5taW5ZICsgMSkgLSAoKChpbWFnZS5taW5ZIC0gaW1hZ2UuY3VycmVudFkpICsgMSkgKiogMC44KTtcbiAgICB9XG4gICAgaWYgKGltYWdlLmN1cnJlbnRZID4gaW1hZ2UubWF4WSkge1xuICAgICAgaW1hZ2UuY3VycmVudFkgPSAoaW1hZ2UubWF4WSAtIDEpICsgKCgoaW1hZ2UuY3VycmVudFkgLSBpbWFnZS5tYXhZKSArIDEpICoqIDAuOCk7XG4gICAgfVxuXG4gICAgLy8gVmVsb2NpdHlcbiAgICBpZiAoIXZlbG9jaXR5LnByZXZQb3NpdGlvblgpIHZlbG9jaXR5LnByZXZQb3NpdGlvblggPSBpbWFnZS50b3VjaGVzQ3VycmVudC54O1xuICAgIGlmICghdmVsb2NpdHkucHJldlBvc2l0aW9uWSkgdmVsb2NpdHkucHJldlBvc2l0aW9uWSA9IGltYWdlLnRvdWNoZXNDdXJyZW50Lnk7XG4gICAgaWYgKCF2ZWxvY2l0eS5wcmV2VGltZSkgdmVsb2NpdHkucHJldlRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHZlbG9jaXR5LnggPSAoaW1hZ2UudG91Y2hlc0N1cnJlbnQueCAtIHZlbG9jaXR5LnByZXZQb3NpdGlvblgpIC8gKERhdGUubm93KCkgLSB2ZWxvY2l0eS5wcmV2VGltZSkgLyAyO1xuICAgIHZlbG9jaXR5LnkgPSAoaW1hZ2UudG91Y2hlc0N1cnJlbnQueSAtIHZlbG9jaXR5LnByZXZQb3NpdGlvblkpIC8gKERhdGUubm93KCkgLSB2ZWxvY2l0eS5wcmV2VGltZSkgLyAyO1xuICAgIGlmIChNYXRoLmFicyhpbWFnZS50b3VjaGVzQ3VycmVudC54IC0gdmVsb2NpdHkucHJldlBvc2l0aW9uWCkgPCAyKSB2ZWxvY2l0eS54ID0gMDtcbiAgICBpZiAoTWF0aC5hYnMoaW1hZ2UudG91Y2hlc0N1cnJlbnQueSAtIHZlbG9jaXR5LnByZXZQb3NpdGlvblkpIDwgMikgdmVsb2NpdHkueSA9IDA7XG4gICAgdmVsb2NpdHkucHJldlBvc2l0aW9uWCA9IGltYWdlLnRvdWNoZXNDdXJyZW50Lng7XG4gICAgdmVsb2NpdHkucHJldlBvc2l0aW9uWSA9IGltYWdlLnRvdWNoZXNDdXJyZW50Lnk7XG4gICAgdmVsb2NpdHkucHJldlRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgZ2VzdHVyZS4kaW1hZ2VXcmFwRWwudHJhbnNmb3JtKGB0cmFuc2xhdGUzZCgke2ltYWdlLmN1cnJlbnRYfXB4LCAke2ltYWdlLmN1cnJlbnRZfXB4LDApYCk7XG4gIH0sXG4gIG9uVG91Y2hFbmQoKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBjb25zdCB6b29tID0gc3dpcGVyLnpvb207XG4gICAgY29uc3QgeyBnZXN0dXJlLCBpbWFnZSwgdmVsb2NpdHkgfSA9IHpvb207XG4gICAgaWYgKCFnZXN0dXJlLiRpbWFnZUVsIHx8IGdlc3R1cmUuJGltYWdlRWwubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgaWYgKCFpbWFnZS5pc1RvdWNoZWQgfHwgIWltYWdlLmlzTW92ZWQpIHtcbiAgICAgIGltYWdlLmlzVG91Y2hlZCA9IGZhbHNlO1xuICAgICAgaW1hZ2UuaXNNb3ZlZCA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpbWFnZS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgICBpbWFnZS5pc01vdmVkID0gZmFsc2U7XG4gICAgbGV0IG1vbWVudHVtRHVyYXRpb25YID0gMzAwO1xuICAgIGxldCBtb21lbnR1bUR1cmF0aW9uWSA9IDMwMDtcbiAgICBjb25zdCBtb21lbnR1bURpc3RhbmNlWCA9IHZlbG9jaXR5LnggKiBtb21lbnR1bUR1cmF0aW9uWDtcbiAgICBjb25zdCBuZXdQb3NpdGlvblggPSBpbWFnZS5jdXJyZW50WCArIG1vbWVudHVtRGlzdGFuY2VYO1xuICAgIGNvbnN0IG1vbWVudHVtRGlzdGFuY2VZID0gdmVsb2NpdHkueSAqIG1vbWVudHVtRHVyYXRpb25ZO1xuICAgIGNvbnN0IG5ld1Bvc2l0aW9uWSA9IGltYWdlLmN1cnJlbnRZICsgbW9tZW50dW1EaXN0YW5jZVk7XG5cbiAgICAvLyBGaXggZHVyYXRpb25cbiAgICBpZiAodmVsb2NpdHkueCAhPT0gMCkgbW9tZW50dW1EdXJhdGlvblggPSBNYXRoLmFicygobmV3UG9zaXRpb25YIC0gaW1hZ2UuY3VycmVudFgpIC8gdmVsb2NpdHkueCk7XG4gICAgaWYgKHZlbG9jaXR5LnkgIT09IDApIG1vbWVudHVtRHVyYXRpb25ZID0gTWF0aC5hYnMoKG5ld1Bvc2l0aW9uWSAtIGltYWdlLmN1cnJlbnRZKSAvIHZlbG9jaXR5LnkpO1xuICAgIGNvbnN0IG1vbWVudHVtRHVyYXRpb24gPSBNYXRoLm1heChtb21lbnR1bUR1cmF0aW9uWCwgbW9tZW50dW1EdXJhdGlvblkpO1xuXG4gICAgaW1hZ2UuY3VycmVudFggPSBuZXdQb3NpdGlvblg7XG4gICAgaW1hZ2UuY3VycmVudFkgPSBuZXdQb3NpdGlvblk7XG5cbiAgICAvLyBEZWZpbmUgaWYgd2UgbmVlZCBpbWFnZSBkcmFnXG4gICAgY29uc3Qgc2NhbGVkV2lkdGggPSBpbWFnZS53aWR0aCAqIHpvb20uc2NhbGU7XG4gICAgY29uc3Qgc2NhbGVkSGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0ICogem9vbS5zY2FsZTtcbiAgICBpbWFnZS5taW5YID0gTWF0aC5taW4oKChnZXN0dXJlLnNsaWRlV2lkdGggLyAyKSAtIChzY2FsZWRXaWR0aCAvIDIpKSwgMCk7XG4gICAgaW1hZ2UubWF4WCA9IC1pbWFnZS5taW5YO1xuICAgIGltYWdlLm1pblkgPSBNYXRoLm1pbigoKGdlc3R1cmUuc2xpZGVIZWlnaHQgLyAyKSAtIChzY2FsZWRIZWlnaHQgLyAyKSksIDApO1xuICAgIGltYWdlLm1heFkgPSAtaW1hZ2UubWluWTtcbiAgICBpbWFnZS5jdXJyZW50WCA9IE1hdGgubWF4KE1hdGgubWluKGltYWdlLmN1cnJlbnRYLCBpbWFnZS5tYXhYKSwgaW1hZ2UubWluWCk7XG4gICAgaW1hZ2UuY3VycmVudFkgPSBNYXRoLm1heChNYXRoLm1pbihpbWFnZS5jdXJyZW50WSwgaW1hZ2UubWF4WSksIGltYWdlLm1pblkpO1xuXG4gICAgZ2VzdHVyZS4kaW1hZ2VXcmFwRWwudHJhbnNpdGlvbihtb21lbnR1bUR1cmF0aW9uKS50cmFuc2Zvcm0oYHRyYW5zbGF0ZTNkKCR7aW1hZ2UuY3VycmVudFh9cHgsICR7aW1hZ2UuY3VycmVudFl9cHgsMClgKTtcbiAgfSxcbiAgb25UcmFuc2l0aW9uRW5kKCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgY29uc3Qgem9vbSA9IHN3aXBlci56b29tO1xuICAgIGNvbnN0IHsgZ2VzdHVyZSB9ID0gem9vbTtcbiAgICBpZiAoZ2VzdHVyZS4kc2xpZGVFbCAmJiBzd2lwZXIucHJldmlvdXNJbmRleCAhPT0gc3dpcGVyLmFjdGl2ZUluZGV4KSB7XG4gICAgICBpZiAoZ2VzdHVyZS4kaW1hZ2VFbCkge1xuICAgICAgICBnZXN0dXJlLiRpbWFnZUVsLnRyYW5zZm9ybSgndHJhbnNsYXRlM2QoMCwwLDApIHNjYWxlKDEpJyk7XG4gICAgICB9XG4gICAgICBpZiAoZ2VzdHVyZS4kaW1hZ2VXcmFwRWwpIHtcbiAgICAgICAgZ2VzdHVyZS4kaW1hZ2VXcmFwRWwudHJhbnNmb3JtKCd0cmFuc2xhdGUzZCgwLDAsMCknKTtcbiAgICAgIH1cblxuICAgICAgem9vbS5zY2FsZSA9IDE7XG4gICAgICB6b29tLmN1cnJlbnRTY2FsZSA9IDE7XG5cbiAgICAgIGdlc3R1cmUuJHNsaWRlRWwgPSB1bmRlZmluZWQ7XG4gICAgICBnZXN0dXJlLiRpbWFnZUVsID0gdW5kZWZpbmVkO1xuICAgICAgZ2VzdHVyZS4kaW1hZ2VXcmFwRWwgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9LFxuICAvLyBUb2dnbGUgWm9vbVxuICB0b2dnbGUoZSkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgY29uc3Qgem9vbSA9IHN3aXBlci56b29tO1xuXG4gICAgaWYgKHpvb20uc2NhbGUgJiYgem9vbS5zY2FsZSAhPT0gMSkge1xuICAgICAgLy8gWm9vbSBPdXRcbiAgICAgIHpvb20ub3V0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFpvb20gSW5cbiAgICAgIHpvb20uaW4oZSk7XG4gICAgfVxuICB9LFxuICBpbihlKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcblxuICAgIGNvbnN0IHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnpvb207XG4gICAgY29uc3QgeyBnZXN0dXJlLCBpbWFnZSB9ID0gem9vbTtcblxuICAgIGlmICghZ2VzdHVyZS4kc2xpZGVFbCkge1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMudmlydHVhbCAmJiBzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCAmJiBzd2lwZXIudmlydHVhbCkge1xuICAgICAgICBnZXN0dXJlLiRzbGlkZUVsID0gc3dpcGVyLiR3cmFwcGVyRWwuY2hpbGRyZW4oYC4ke3N3aXBlci5wYXJhbXMuc2xpZGVBY3RpdmVDbGFzc31gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdlc3R1cmUuJHNsaWRlRWwgPSBzd2lwZXIuc2xpZGVzLmVxKHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICB9XG4gICAgICBnZXN0dXJlLiRpbWFnZUVsID0gZ2VzdHVyZS4kc2xpZGVFbC5maW5kKCdpbWcsIHN2ZywgY2FudmFzLCBwaWN0dXJlLCAuc3dpcGVyLXpvb20tdGFyZ2V0Jyk7XG4gICAgICBnZXN0dXJlLiRpbWFnZVdyYXBFbCA9IGdlc3R1cmUuJGltYWdlRWwucGFyZW50KGAuJHtwYXJhbXMuY29udGFpbmVyQ2xhc3N9YCk7XG4gICAgfVxuICAgIGlmICghZ2VzdHVyZS4kaW1hZ2VFbCB8fCBnZXN0dXJlLiRpbWFnZUVsLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgZ2VzdHVyZS4kc2xpZGVFbC5hZGRDbGFzcyhgJHtwYXJhbXMuem9vbWVkU2xpZGVDbGFzc31gKTtcblxuICAgIGxldCB0b3VjaFg7XG4gICAgbGV0IHRvdWNoWTtcbiAgICBsZXQgb2Zmc2V0WDtcbiAgICBsZXQgb2Zmc2V0WTtcbiAgICBsZXQgZGlmZlg7XG4gICAgbGV0IGRpZmZZO1xuICAgIGxldCB0cmFuc2xhdGVYO1xuICAgIGxldCB0cmFuc2xhdGVZO1xuICAgIGxldCBpbWFnZVdpZHRoO1xuICAgIGxldCBpbWFnZUhlaWdodDtcbiAgICBsZXQgc2NhbGVkV2lkdGg7XG4gICAgbGV0IHNjYWxlZEhlaWdodDtcbiAgICBsZXQgdHJhbnNsYXRlTWluWDtcbiAgICBsZXQgdHJhbnNsYXRlTWluWTtcbiAgICBsZXQgdHJhbnNsYXRlTWF4WDtcbiAgICBsZXQgdHJhbnNsYXRlTWF4WTtcbiAgICBsZXQgc2xpZGVXaWR0aDtcbiAgICBsZXQgc2xpZGVIZWlnaHQ7XG5cbiAgICBpZiAodHlwZW9mIGltYWdlLnRvdWNoZXNTdGFydC54ID09PSAndW5kZWZpbmVkJyAmJiBlKSB7XG4gICAgICB0b3VjaFggPSBlLnR5cGUgPT09ICd0b3VjaGVuZCcgPyBlLmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VYIDogZS5wYWdlWDtcbiAgICAgIHRvdWNoWSA9IGUudHlwZSA9PT0gJ3RvdWNoZW5kJyA/IGUuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVkgOiBlLnBhZ2VZO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b3VjaFggPSBpbWFnZS50b3VjaGVzU3RhcnQueDtcbiAgICAgIHRvdWNoWSA9IGltYWdlLnRvdWNoZXNTdGFydC55O1xuICAgIH1cblxuICAgIHpvb20uc2NhbGUgPSBnZXN0dXJlLiRpbWFnZVdyYXBFbC5hdHRyKCdkYXRhLXN3aXBlci16b29tJykgfHwgcGFyYW1zLm1heFJhdGlvO1xuICAgIHpvb20uY3VycmVudFNjYWxlID0gZ2VzdHVyZS4kaW1hZ2VXcmFwRWwuYXR0cignZGF0YS1zd2lwZXItem9vbScpIHx8IHBhcmFtcy5tYXhSYXRpbztcbiAgICBpZiAoZSkge1xuICAgICAgc2xpZGVXaWR0aCA9IGdlc3R1cmUuJHNsaWRlRWxbMF0ub2Zmc2V0V2lkdGg7XG4gICAgICBzbGlkZUhlaWdodCA9IGdlc3R1cmUuJHNsaWRlRWxbMF0ub2Zmc2V0SGVpZ2h0O1xuICAgICAgb2Zmc2V0WCA9IGdlc3R1cmUuJHNsaWRlRWwub2Zmc2V0KCkubGVmdDtcbiAgICAgIG9mZnNldFkgPSBnZXN0dXJlLiRzbGlkZUVsLm9mZnNldCgpLnRvcDtcbiAgICAgIGRpZmZYID0gKG9mZnNldFggKyAoc2xpZGVXaWR0aCAvIDIpKSAtIHRvdWNoWDtcbiAgICAgIGRpZmZZID0gKG9mZnNldFkgKyAoc2xpZGVIZWlnaHQgLyAyKSkgLSB0b3VjaFk7XG5cbiAgICAgIGltYWdlV2lkdGggPSBnZXN0dXJlLiRpbWFnZUVsWzBdLm9mZnNldFdpZHRoO1xuICAgICAgaW1hZ2VIZWlnaHQgPSBnZXN0dXJlLiRpbWFnZUVsWzBdLm9mZnNldEhlaWdodDtcbiAgICAgIHNjYWxlZFdpZHRoID0gaW1hZ2VXaWR0aCAqIHpvb20uc2NhbGU7XG4gICAgICBzY2FsZWRIZWlnaHQgPSBpbWFnZUhlaWdodCAqIHpvb20uc2NhbGU7XG5cbiAgICAgIHRyYW5zbGF0ZU1pblggPSBNYXRoLm1pbigoKHNsaWRlV2lkdGggLyAyKSAtIChzY2FsZWRXaWR0aCAvIDIpKSwgMCk7XG4gICAgICB0cmFuc2xhdGVNaW5ZID0gTWF0aC5taW4oKChzbGlkZUhlaWdodCAvIDIpIC0gKHNjYWxlZEhlaWdodCAvIDIpKSwgMCk7XG4gICAgICB0cmFuc2xhdGVNYXhYID0gLXRyYW5zbGF0ZU1pblg7XG4gICAgICB0cmFuc2xhdGVNYXhZID0gLXRyYW5zbGF0ZU1pblk7XG5cbiAgICAgIHRyYW5zbGF0ZVggPSBkaWZmWCAqIHpvb20uc2NhbGU7XG4gICAgICB0cmFuc2xhdGVZID0gZGlmZlkgKiB6b29tLnNjYWxlO1xuXG4gICAgICBpZiAodHJhbnNsYXRlWCA8IHRyYW5zbGF0ZU1pblgpIHtcbiAgICAgICAgdHJhbnNsYXRlWCA9IHRyYW5zbGF0ZU1pblg7XG4gICAgICB9XG4gICAgICBpZiAodHJhbnNsYXRlWCA+IHRyYW5zbGF0ZU1heFgpIHtcbiAgICAgICAgdHJhbnNsYXRlWCA9IHRyYW5zbGF0ZU1heFg7XG4gICAgICB9XG5cbiAgICAgIGlmICh0cmFuc2xhdGVZIDwgdHJhbnNsYXRlTWluWSkge1xuICAgICAgICB0cmFuc2xhdGVZID0gdHJhbnNsYXRlTWluWTtcbiAgICAgIH1cbiAgICAgIGlmICh0cmFuc2xhdGVZID4gdHJhbnNsYXRlTWF4WSkge1xuICAgICAgICB0cmFuc2xhdGVZID0gdHJhbnNsYXRlTWF4WTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHJhbnNsYXRlWCA9IDA7XG4gICAgICB0cmFuc2xhdGVZID0gMDtcbiAgICB9XG4gICAgZ2VzdHVyZS4kaW1hZ2VXcmFwRWwudHJhbnNpdGlvbigzMDApLnRyYW5zZm9ybShgdHJhbnNsYXRlM2QoJHt0cmFuc2xhdGVYfXB4LCAke3RyYW5zbGF0ZVl9cHgsMClgKTtcbiAgICBnZXN0dXJlLiRpbWFnZUVsLnRyYW5zaXRpb24oMzAwKS50cmFuc2Zvcm0oYHRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZSgke3pvb20uc2NhbGV9KWApO1xuICB9LFxuICBvdXQoKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcblxuICAgIGNvbnN0IHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnpvb207XG4gICAgY29uc3QgeyBnZXN0dXJlIH0gPSB6b29tO1xuXG4gICAgaWYgKCFnZXN0dXJlLiRzbGlkZUVsKSB7XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy52aXJ0dWFsICYmIHN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkICYmIHN3aXBlci52aXJ0dWFsKSB7XG4gICAgICAgIGdlc3R1cmUuJHNsaWRlRWwgPSBzd2lwZXIuJHdyYXBwZXJFbC5jaGlsZHJlbihgLiR7c3dpcGVyLnBhcmFtcy5zbGlkZUFjdGl2ZUNsYXNzfWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ2VzdHVyZS4kc2xpZGVFbCA9IHN3aXBlci5zbGlkZXMuZXEoc3dpcGVyLmFjdGl2ZUluZGV4KTtcbiAgICAgIH1cbiAgICAgIGdlc3R1cmUuJGltYWdlRWwgPSBnZXN0dXJlLiRzbGlkZUVsLmZpbmQoJ2ltZywgc3ZnLCBjYW52YXMsIHBpY3R1cmUsIC5zd2lwZXItem9vbS10YXJnZXQnKTtcbiAgICAgIGdlc3R1cmUuJGltYWdlV3JhcEVsID0gZ2VzdHVyZS4kaW1hZ2VFbC5wYXJlbnQoYC4ke3BhcmFtcy5jb250YWluZXJDbGFzc31gKTtcbiAgICB9XG4gICAgaWYgKCFnZXN0dXJlLiRpbWFnZUVsIHx8IGdlc3R1cmUuJGltYWdlRWwubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICB6b29tLnNjYWxlID0gMTtcbiAgICB6b29tLmN1cnJlbnRTY2FsZSA9IDE7XG4gICAgZ2VzdHVyZS4kaW1hZ2VXcmFwRWwudHJhbnNpdGlvbigzMDApLnRyYW5zZm9ybSgndHJhbnNsYXRlM2QoMCwwLDApJyk7XG4gICAgZ2VzdHVyZS4kaW1hZ2VFbC50cmFuc2l0aW9uKDMwMCkudHJhbnNmb3JtKCd0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGUoMSknKTtcbiAgICBnZXN0dXJlLiRzbGlkZUVsLnJlbW92ZUNsYXNzKGAke3BhcmFtcy56b29tZWRTbGlkZUNsYXNzfWApO1xuICAgIGdlc3R1cmUuJHNsaWRlRWwgPSB1bmRlZmluZWQ7XG4gIH0sXG4gIC8vIEF0dGFjaC9EZXRhY2ggRXZlbnRzXG4gIGVuYWJsZSgpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGNvbnN0IHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICBpZiAoem9vbS5lbmFibGVkKSByZXR1cm47XG4gICAgem9vbS5lbmFibGVkID0gdHJ1ZTtcblxuICAgIGNvbnN0IHBhc3NpdmVMaXN0ZW5lciA9IHN3aXBlci50b3VjaEV2ZW50cy5zdGFydCA9PT0gJ3RvdWNoc3RhcnQnICYmIFN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyICYmIHN3aXBlci5wYXJhbXMucGFzc2l2ZUxpc3RlbmVycyA/IHsgcGFzc2l2ZTogdHJ1ZSwgY2FwdHVyZTogZmFsc2UgfSA6IGZhbHNlO1xuICAgIGNvbnN0IGFjdGl2ZUxpc3RlbmVyV2l0aENhcHR1cmUgPSBTdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciA/IHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IHRydWUgfSA6IHRydWU7XG5cbiAgICBjb25zdCBzbGlkZVNlbGVjdG9yID0gYC4ke3N3aXBlci5wYXJhbXMuc2xpZGVDbGFzc31gO1xuXG4gICAgLy8gU2NhbGUgaW1hZ2VcbiAgICBpZiAoU3VwcG9ydC5nZXN0dXJlcykge1xuICAgICAgc3dpcGVyLiR3cmFwcGVyRWwub24oJ2dlc3R1cmVzdGFydCcsIHNsaWRlU2VsZWN0b3IsIHpvb20ub25HZXN0dXJlU3RhcnQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vbignZ2VzdHVyZWNoYW5nZScsIHNsaWRlU2VsZWN0b3IsIHpvb20ub25HZXN0dXJlQ2hhbmdlLCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgc3dpcGVyLiR3cmFwcGVyRWwub24oJ2dlc3R1cmVlbmQnLCBzbGlkZVNlbGVjdG9yLCB6b29tLm9uR2VzdHVyZUVuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICB9IGVsc2UgaWYgKHN3aXBlci50b3VjaEV2ZW50cy5zdGFydCA9PT0gJ3RvdWNoc3RhcnQnKSB7XG4gICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vbihzd2lwZXIudG91Y2hFdmVudHMuc3RhcnQsIHNsaWRlU2VsZWN0b3IsIHpvb20ub25HZXN0dXJlU3RhcnQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vbihzd2lwZXIudG91Y2hFdmVudHMubW92ZSwgc2xpZGVTZWxlY3Rvciwgem9vbS5vbkdlc3R1cmVDaGFuZ2UsIGFjdGl2ZUxpc3RlbmVyV2l0aENhcHR1cmUpO1xuICAgICAgc3dpcGVyLiR3cmFwcGVyRWwub24oc3dpcGVyLnRvdWNoRXZlbnRzLmVuZCwgc2xpZGVTZWxlY3Rvciwgem9vbS5vbkdlc3R1cmVFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICBpZiAoc3dpcGVyLnRvdWNoRXZlbnRzLmNhbmNlbCkge1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vbihzd2lwZXIudG91Y2hFdmVudHMuY2FuY2VsLCBzbGlkZVNlbGVjdG9yLCB6b29tLm9uR2VzdHVyZUVuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNb3ZlIGltYWdlXG4gICAgc3dpcGVyLiR3cmFwcGVyRWwub24oc3dpcGVyLnRvdWNoRXZlbnRzLm1vdmUsIGAuJHtzd2lwZXIucGFyYW1zLnpvb20uY29udGFpbmVyQ2xhc3N9YCwgem9vbS5vblRvdWNoTW92ZSwgYWN0aXZlTGlzdGVuZXJXaXRoQ2FwdHVyZSk7XG4gIH0sXG4gIGRpc2FibGUoKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBjb25zdCB6b29tID0gc3dpcGVyLnpvb207XG4gICAgaWYgKCF6b29tLmVuYWJsZWQpIHJldHVybjtcblxuICAgIHN3aXBlci56b29tLmVuYWJsZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHBhc3NpdmVMaXN0ZW5lciA9IHN3aXBlci50b3VjaEV2ZW50cy5zdGFydCA9PT0gJ3RvdWNoc3RhcnQnICYmIFN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyICYmIHN3aXBlci5wYXJhbXMucGFzc2l2ZUxpc3RlbmVycyA/IHsgcGFzc2l2ZTogdHJ1ZSwgY2FwdHVyZTogZmFsc2UgfSA6IGZhbHNlO1xuICAgIGNvbnN0IGFjdGl2ZUxpc3RlbmVyV2l0aENhcHR1cmUgPSBTdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciA/IHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IHRydWUgfSA6IHRydWU7XG5cbiAgICBjb25zdCBzbGlkZVNlbGVjdG9yID0gYC4ke3N3aXBlci5wYXJhbXMuc2xpZGVDbGFzc31gO1xuXG4gICAgLy8gU2NhbGUgaW1hZ2VcbiAgICBpZiAoU3VwcG9ydC5nZXN0dXJlcykge1xuICAgICAgc3dpcGVyLiR3cmFwcGVyRWwub2ZmKCdnZXN0dXJlc3RhcnQnLCBzbGlkZVNlbGVjdG9yLCB6b29tLm9uR2VzdHVyZVN0YXJ0LCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgc3dpcGVyLiR3cmFwcGVyRWwub2ZmKCdnZXN0dXJlY2hhbmdlJywgc2xpZGVTZWxlY3Rvciwgem9vbS5vbkdlc3R1cmVDaGFuZ2UsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vZmYoJ2dlc3R1cmVlbmQnLCBzbGlkZVNlbGVjdG9yLCB6b29tLm9uR2VzdHVyZUVuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICB9IGVsc2UgaWYgKHN3aXBlci50b3VjaEV2ZW50cy5zdGFydCA9PT0gJ3RvdWNoc3RhcnQnKSB7XG4gICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vZmYoc3dpcGVyLnRvdWNoRXZlbnRzLnN0YXJ0LCBzbGlkZVNlbGVjdG9yLCB6b29tLm9uR2VzdHVyZVN0YXJ0LCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgc3dpcGVyLiR3cmFwcGVyRWwub2ZmKHN3aXBlci50b3VjaEV2ZW50cy5tb3ZlLCBzbGlkZVNlbGVjdG9yLCB6b29tLm9uR2VzdHVyZUNoYW5nZSwgYWN0aXZlTGlzdGVuZXJXaXRoQ2FwdHVyZSk7XG4gICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vZmYoc3dpcGVyLnRvdWNoRXZlbnRzLmVuZCwgc2xpZGVTZWxlY3Rvciwgem9vbS5vbkdlc3R1cmVFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICBpZiAoc3dpcGVyLnRvdWNoRXZlbnRzLmNhbmNlbCkge1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vZmYoc3dpcGVyLnRvdWNoRXZlbnRzLmNhbmNlbCwgc2xpZGVTZWxlY3Rvciwgem9vbS5vbkdlc3R1cmVFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTW92ZSBpbWFnZVxuICAgIHN3aXBlci4kd3JhcHBlckVsLm9mZihzd2lwZXIudG91Y2hFdmVudHMubW92ZSwgYC4ke3N3aXBlci5wYXJhbXMuem9vbS5jb250YWluZXJDbGFzc31gLCB6b29tLm9uVG91Y2hNb3ZlLCBhY3RpdmVMaXN0ZW5lcldpdGhDYXB0dXJlKTtcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3pvb20nLFxuICBwYXJhbXM6IHtcbiAgICB6b29tOiB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIG1heFJhdGlvOiAzLFxuICAgICAgbWluUmF0aW86IDEsXG4gICAgICB0b2dnbGU6IHRydWUsXG4gICAgICBjb250YWluZXJDbGFzczogJ3N3aXBlci16b29tLWNvbnRhaW5lcicsXG4gICAgICB6b29tZWRTbGlkZUNsYXNzOiAnc3dpcGVyLXNsaWRlLXpvb21lZCcsXG4gICAgfSxcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgY29uc3Qgem9vbSA9IHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgc2NhbGU6IDEsXG4gICAgICBjdXJyZW50U2NhbGU6IDEsXG4gICAgICBpc1NjYWxpbmc6IGZhbHNlLFxuICAgICAgZ2VzdHVyZToge1xuICAgICAgICAkc2xpZGVFbDogdW5kZWZpbmVkLFxuICAgICAgICBzbGlkZVdpZHRoOiB1bmRlZmluZWQsXG4gICAgICAgIHNsaWRlSGVpZ2h0OiB1bmRlZmluZWQsXG4gICAgICAgICRpbWFnZUVsOiB1bmRlZmluZWQsXG4gICAgICAgICRpbWFnZVdyYXBFbDogdW5kZWZpbmVkLFxuICAgICAgICBtYXhSYXRpbzogMyxcbiAgICAgIH0sXG4gICAgICBpbWFnZToge1xuICAgICAgICBpc1RvdWNoZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgaXNNb3ZlZDogdW5kZWZpbmVkLFxuICAgICAgICBjdXJyZW50WDogdW5kZWZpbmVkLFxuICAgICAgICBjdXJyZW50WTogdW5kZWZpbmVkLFxuICAgICAgICBtaW5YOiB1bmRlZmluZWQsXG4gICAgICAgIG1pblk6IHVuZGVmaW5lZCxcbiAgICAgICAgbWF4WDogdW5kZWZpbmVkLFxuICAgICAgICBtYXhZOiB1bmRlZmluZWQsXG4gICAgICAgIHdpZHRoOiB1bmRlZmluZWQsXG4gICAgICAgIGhlaWdodDogdW5kZWZpbmVkLFxuICAgICAgICBzdGFydFg6IHVuZGVmaW5lZCxcbiAgICAgICAgc3RhcnRZOiB1bmRlZmluZWQsXG4gICAgICAgIHRvdWNoZXNTdGFydDoge30sXG4gICAgICAgIHRvdWNoZXNDdXJyZW50OiB7fSxcbiAgICAgIH0sXG4gICAgICB2ZWxvY2l0eToge1xuICAgICAgICB4OiB1bmRlZmluZWQsXG4gICAgICAgIHk6IHVuZGVmaW5lZCxcbiAgICAgICAgcHJldlBvc2l0aW9uWDogdW5kZWZpbmVkLFxuICAgICAgICBwcmV2UG9zaXRpb25ZOiB1bmRlZmluZWQsXG4gICAgICAgIHByZXZUaW1lOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICAoJ29uR2VzdHVyZVN0YXJ0IG9uR2VzdHVyZUNoYW5nZSBvbkdlc3R1cmVFbmQgb25Ub3VjaFN0YXJ0IG9uVG91Y2hNb3ZlIG9uVG91Y2hFbmQgb25UcmFuc2l0aW9uRW5kIHRvZ2dsZSBlbmFibGUgZGlzYWJsZSBpbiBvdXQnKS5zcGxpdCgnICcpLmZvckVhY2goKG1ldGhvZE5hbWUpID0+IHtcbiAgICAgIHpvb21bbWV0aG9kTmFtZV0gPSBab29tW21ldGhvZE5hbWVdLmJpbmQoc3dpcGVyKTtcbiAgICB9KTtcbiAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICB6b29tLFxuICAgIH0pO1xuXG4gICAgbGV0IHNjYWxlID0gMTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3dpcGVyLnpvb20sICdzY2FsZScsIHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHNjYWxlO1xuICAgICAgfSxcbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBpZiAoc2NhbGUgIT09IHZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgaW1hZ2VFbCA9IHN3aXBlci56b29tLmdlc3R1cmUuJGltYWdlRWwgPyBzd2lwZXIuem9vbS5nZXN0dXJlLiRpbWFnZUVsWzBdIDogdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnN0IHNsaWRlRWwgPSBzd2lwZXIuem9vbS5nZXN0dXJlLiRzbGlkZUVsID8gc3dpcGVyLnpvb20uZ2VzdHVyZS4kc2xpZGVFbFswXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICBzd2lwZXIuZW1pdCgnem9vbUNoYW5nZScsIHZhbHVlLCBpbWFnZUVsLCBzbGlkZUVsKTtcbiAgICAgICAgfVxuICAgICAgICBzY2FsZSA9IHZhbHVlO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfSxcbiAgb246IHtcbiAgICBpbml0KCkge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLnpvb20uZW5hYmxlZCkge1xuICAgICAgICBzd2lwZXIuem9vbS5lbmFibGUoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlc3Ryb3koKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgc3dpcGVyLnpvb20uZGlzYWJsZSgpO1xuICAgIH0sXG4gICAgdG91Y2hTdGFydChlKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIuem9vbS5lbmFibGVkKSByZXR1cm47XG4gICAgICBzd2lwZXIuem9vbS5vblRvdWNoU3RhcnQoZSk7XG4gICAgfSxcbiAgICB0b3VjaEVuZChlKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIuem9vbS5lbmFibGVkKSByZXR1cm47XG4gICAgICBzd2lwZXIuem9vbS5vblRvdWNoRW5kKGUpO1xuICAgIH0sXG4gICAgZG91YmxlVGFwKGUpIHtcbiAgICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy56b29tLmVuYWJsZWQgJiYgc3dpcGVyLnpvb20uZW5hYmxlZCAmJiBzd2lwZXIucGFyYW1zLnpvb20udG9nZ2xlKSB7XG4gICAgICAgIHN3aXBlci56b29tLnRvZ2dsZShlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHRyYW5zaXRpb25FbmQoKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHN3aXBlci56b29tLmVuYWJsZWQgJiYgc3dpcGVyLnBhcmFtcy56b29tLmVuYWJsZWQpIHtcbiAgICAgICAgc3dpcGVyLnpvb20ub25UcmFuc2l0aW9uRW5kKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzbGlkZUNoYW5nZSgpIHtcbiAgICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoc3dpcGVyLnpvb20uZW5hYmxlZCAmJiBzd2lwZXIucGFyYW1zLnpvb20uZW5hYmxlZCAmJiBzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICAgICAgc3dpcGVyLnpvb20ub25UcmFuc2l0aW9uRW5kKCk7XG4gICAgICB9XG4gICAgfSxcbiAgfSxcbn07XG4iLCJpbXBvcnQgJCBmcm9tICcuLi8uLi91dGlscy9kb20nO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uL3V0aWxzL3V0aWxzJztcblxuY29uc3QgTGF6eSA9IHtcbiAgbG9hZEluU2xpZGUoaW5kZXgsIGxvYWRJbkR1cGxpY2F0ZSA9IHRydWUpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXMubGF6eTtcbiAgICBpZiAodHlwZW9mIGluZGV4ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuICAgIGlmIChzd2lwZXIuc2xpZGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGlzVmlydHVhbCA9IHN3aXBlci52aXJ0dWFsICYmIHN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkO1xuXG4gICAgY29uc3QgJHNsaWRlRWwgPSBpc1ZpcnR1YWxcbiAgICAgID8gc3dpcGVyLiR3cmFwcGVyRWwuY2hpbGRyZW4oYC4ke3N3aXBlci5wYXJhbXMuc2xpZGVDbGFzc31bZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XCIke2luZGV4fVwiXWApXG4gICAgICA6IHN3aXBlci5zbGlkZXMuZXEoaW5kZXgpO1xuXG4gICAgbGV0ICRpbWFnZXMgPSAkc2xpZGVFbC5maW5kKGAuJHtwYXJhbXMuZWxlbWVudENsYXNzfTpub3QoLiR7cGFyYW1zLmxvYWRlZENsYXNzfSk6bm90KC4ke3BhcmFtcy5sb2FkaW5nQ2xhc3N9KWApO1xuICAgIGlmICgkc2xpZGVFbC5oYXNDbGFzcyhwYXJhbXMuZWxlbWVudENsYXNzKSAmJiAhJHNsaWRlRWwuaGFzQ2xhc3MocGFyYW1zLmxvYWRlZENsYXNzKSAmJiAhJHNsaWRlRWwuaGFzQ2xhc3MocGFyYW1zLmxvYWRpbmdDbGFzcykpIHtcbiAgICAgICRpbWFnZXMgPSAkaW1hZ2VzLmFkZCgkc2xpZGVFbFswXSk7XG4gICAgfVxuICAgIGlmICgkaW1hZ2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgJGltYWdlcy5lYWNoKChpbWFnZUluZGV4LCBpbWFnZUVsKSA9PiB7XG4gICAgICBjb25zdCAkaW1hZ2VFbCA9ICQoaW1hZ2VFbCk7XG4gICAgICAkaW1hZ2VFbC5hZGRDbGFzcyhwYXJhbXMubG9hZGluZ0NsYXNzKTtcblxuICAgICAgY29uc3QgYmFja2dyb3VuZCA9ICRpbWFnZUVsLmF0dHIoJ2RhdGEtYmFja2dyb3VuZCcpO1xuICAgICAgY29uc3Qgc3JjID0gJGltYWdlRWwuYXR0cignZGF0YS1zcmMnKTtcbiAgICAgIGNvbnN0IHNyY3NldCA9ICRpbWFnZUVsLmF0dHIoJ2RhdGEtc3Jjc2V0Jyk7XG4gICAgICBjb25zdCBzaXplcyA9ICRpbWFnZUVsLmF0dHIoJ2RhdGEtc2l6ZXMnKTtcbiAgICAgIGNvbnN0ICRwaWN0dXJlRWwgPSAkaW1hZ2VFbC5wYXJlbnQoJ3BpY3R1cmUnKTtcblxuICAgICAgc3dpcGVyLmxvYWRJbWFnZSgkaW1hZ2VFbFswXSwgKHNyYyB8fCBiYWNrZ3JvdW5kKSwgc3Jjc2V0LCBzaXplcywgZmFsc2UsICgpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzd2lwZXIgPT09ICd1bmRlZmluZWQnIHx8IHN3aXBlciA9PT0gbnVsbCB8fCAhc3dpcGVyIHx8IChzd2lwZXIgJiYgIXN3aXBlci5wYXJhbXMpIHx8IHN3aXBlci5kZXN0cm95ZWQpIHJldHVybjtcbiAgICAgICAgaWYgKGJhY2tncm91bmQpIHtcbiAgICAgICAgICAkaW1hZ2VFbC5jc3MoJ2JhY2tncm91bmQtaW1hZ2UnLCBgdXJsKFwiJHtiYWNrZ3JvdW5kfVwiKWApO1xuICAgICAgICAgICRpbWFnZUVsLnJlbW92ZUF0dHIoJ2RhdGEtYmFja2dyb3VuZCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzcmNzZXQpIHtcbiAgICAgICAgICAgICRpbWFnZUVsLmF0dHIoJ3NyY3NldCcsIHNyY3NldCk7XG4gICAgICAgICAgICAkaW1hZ2VFbC5yZW1vdmVBdHRyKCdkYXRhLXNyY3NldCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2l6ZXMpIHtcbiAgICAgICAgICAgICRpbWFnZUVsLmF0dHIoJ3NpemVzJywgc2l6ZXMpO1xuICAgICAgICAgICAgJGltYWdlRWwucmVtb3ZlQXR0cignZGF0YS1zaXplcycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJHBpY3R1cmVFbC5sZW5ndGgpIHtcbiAgICAgICAgICAgICRwaWN0dXJlRWwuY2hpbGRyZW4oJ3NvdXJjZScpLmVhY2goKHNvdXJjZUluZGV4LCBzb3VyY2VFbCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCAkc291cmNlID0gJChzb3VyY2VFbCk7XG5cbiAgICAgICAgICAgICAgaWYgKCRzb3VyY2UuYXR0cignZGF0YS1zcmNzZXQnKSkge1xuICAgICAgICAgICAgICAgICRzb3VyY2UuYXR0cignc3Jjc2V0JywgJHNvdXJjZS5hdHRyKCdkYXRhLXNyY3NldCcpKTtcbiAgICAgICAgICAgICAgICAkc291cmNlLnJlbW92ZUF0dHIoJ2RhdGEtc3Jjc2V0Jyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3JjKSB7XG4gICAgICAgICAgICAkaW1hZ2VFbC5hdHRyKCdzcmMnLCBzcmMpO1xuICAgICAgICAgICAgJGltYWdlRWwucmVtb3ZlQXR0cignZGF0YS1zcmMnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAkaW1hZ2VFbC5hZGRDbGFzcyhwYXJhbXMubG9hZGVkQ2xhc3MpLnJlbW92ZUNsYXNzKHBhcmFtcy5sb2FkaW5nQ2xhc3MpO1xuICAgICAgICAkc2xpZGVFbC5maW5kKGAuJHtwYXJhbXMucHJlbG9hZGVyQ2xhc3N9YCkucmVtb3ZlKCk7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3AgJiYgbG9hZEluRHVwbGljYXRlKSB7XG4gICAgICAgICAgY29uc3Qgc2xpZGVPcmlnaW5hbEluZGV4ID0gJHNsaWRlRWwuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKTtcbiAgICAgICAgICBpZiAoJHNsaWRlRWwuaGFzQ2xhc3Moc3dpcGVyLnBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSkge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxTbGlkZSA9IHN3aXBlci4kd3JhcHBlckVsLmNoaWxkcmVuKGBbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XCIke3NsaWRlT3JpZ2luYWxJbmRleH1cIl06bm90KC4ke3N3aXBlci5wYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzc30pYCk7XG4gICAgICAgICAgICBzd2lwZXIubGF6eS5sb2FkSW5TbGlkZShvcmlnaW5hbFNsaWRlLmluZGV4KCksIGZhbHNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZHVwbGljYXRlZFNsaWRlID0gc3dpcGVyLiR3cmFwcGVyRWwuY2hpbGRyZW4oYC4ke3N3aXBlci5wYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzc31bZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XCIke3NsaWRlT3JpZ2luYWxJbmRleH1cIl1gKTtcbiAgICAgICAgICAgIHN3aXBlci5sYXp5LmxvYWRJblNsaWRlKGR1cGxpY2F0ZWRTbGlkZS5pbmRleCgpLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN3aXBlci5lbWl0KCdsYXp5SW1hZ2VSZWFkeScsICRzbGlkZUVsWzBdLCAkaW1hZ2VFbFswXSk7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9IZWlnaHQpIHtcbiAgICAgICAgICBzd2lwZXIudXBkYXRlQXV0b0hlaWdodCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgc3dpcGVyLmVtaXQoJ2xhenlJbWFnZUxvYWQnLCAkc2xpZGVFbFswXSwgJGltYWdlRWxbMF0pO1xuICAgIH0pO1xuICB9LFxuICBsb2FkKCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgY29uc3Qge1xuICAgICAgJHdyYXBwZXJFbCwgcGFyYW1zOiBzd2lwZXJQYXJhbXMsIHNsaWRlcywgYWN0aXZlSW5kZXgsXG4gICAgfSA9IHN3aXBlcjtcbiAgICBjb25zdCBpc1ZpcnR1YWwgPSBzd2lwZXIudmlydHVhbCAmJiBzd2lwZXJQYXJhbXMudmlydHVhbC5lbmFibGVkO1xuICAgIGNvbnN0IHBhcmFtcyA9IHN3aXBlclBhcmFtcy5sYXp5O1xuXG4gICAgbGV0IHNsaWRlc1BlclZpZXcgPSBzd2lwZXJQYXJhbXMuc2xpZGVzUGVyVmlldztcbiAgICBpZiAoc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nKSB7XG4gICAgICBzbGlkZXNQZXJWaWV3ID0gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzbGlkZUV4aXN0KGluZGV4KSB7XG4gICAgICBpZiAoaXNWaXJ0dWFsKSB7XG4gICAgICAgIGlmICgkd3JhcHBlckVsLmNoaWxkcmVuKGAuJHtzd2lwZXJQYXJhbXMuc2xpZGVDbGFzc31bZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XCIke2luZGV4fVwiXWApLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNsaWRlc1tpbmRleF0pIHJldHVybiB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNsaWRlSW5kZXgoc2xpZGVFbCkge1xuICAgICAgaWYgKGlzVmlydHVhbCkge1xuICAgICAgICByZXR1cm4gJChzbGlkZUVsKS5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuICQoc2xpZGVFbCkuaW5kZXgoKTtcbiAgICB9XG5cbiAgICBpZiAoIXN3aXBlci5sYXp5LmluaXRpYWxJbWFnZUxvYWRlZCkgc3dpcGVyLmxhenkuaW5pdGlhbEltYWdlTG9hZGVkID0gdHJ1ZTtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy53YXRjaFNsaWRlc1Zpc2liaWxpdHkpIHtcbiAgICAgICR3cmFwcGVyRWwuY2hpbGRyZW4oYC4ke3N3aXBlclBhcmFtcy5zbGlkZVZpc2libGVDbGFzc31gKS5lYWNoKChlbEluZGV4LCBzbGlkZUVsKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gaXNWaXJ0dWFsID8gJChzbGlkZUVsKS5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpIDogJChzbGlkZUVsKS5pbmRleCgpO1xuICAgICAgICBzd2lwZXIubGF6eS5sb2FkSW5TbGlkZShpbmRleCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHNsaWRlc1BlclZpZXcgPiAxKSB7XG4gICAgICBmb3IgKGxldCBpID0gYWN0aXZlSW5kZXg7IGkgPCBhY3RpdmVJbmRleCArIHNsaWRlc1BlclZpZXc7IGkgKz0gMSkge1xuICAgICAgICBpZiAoc2xpZGVFeGlzdChpKSkgc3dpcGVyLmxhenkubG9hZEluU2xpZGUoaSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5sYXp5LmxvYWRJblNsaWRlKGFjdGl2ZUluZGV4KTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5sb2FkUHJldk5leHQpIHtcbiAgICAgIGlmIChzbGlkZXNQZXJWaWV3ID4gMSB8fCAocGFyYW1zLmxvYWRQcmV2TmV4dEFtb3VudCAmJiBwYXJhbXMubG9hZFByZXZOZXh0QW1vdW50ID4gMSkpIHtcbiAgICAgICAgY29uc3QgYW1vdW50ID0gcGFyYW1zLmxvYWRQcmV2TmV4dEFtb3VudDtcbiAgICAgICAgY29uc3Qgc3B2ID0gc2xpZGVzUGVyVmlldztcbiAgICAgICAgY29uc3QgbWF4SW5kZXggPSBNYXRoLm1pbihhY3RpdmVJbmRleCArIHNwdiArIE1hdGgubWF4KGFtb3VudCwgc3B2KSwgc2xpZGVzLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IG1pbkluZGV4ID0gTWF0aC5tYXgoYWN0aXZlSW5kZXggLSBNYXRoLm1heChzcHYsIGFtb3VudCksIDApO1xuICAgICAgICAvLyBOZXh0IFNsaWRlc1xuICAgICAgICBmb3IgKGxldCBpID0gYWN0aXZlSW5kZXggKyBzbGlkZXNQZXJWaWV3OyBpIDwgbWF4SW5kZXg7IGkgKz0gMSkge1xuICAgICAgICAgIGlmIChzbGlkZUV4aXN0KGkpKSBzd2lwZXIubGF6eS5sb2FkSW5TbGlkZShpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQcmV2IFNsaWRlc1xuICAgICAgICBmb3IgKGxldCBpID0gbWluSW5kZXg7IGkgPCBhY3RpdmVJbmRleDsgaSArPSAxKSB7XG4gICAgICAgICAgaWYgKHNsaWRlRXhpc3QoaSkpIHN3aXBlci5sYXp5LmxvYWRJblNsaWRlKGkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuZXh0U2xpZGUgPSAkd3JhcHBlckVsLmNoaWxkcmVuKGAuJHtzd2lwZXJQYXJhbXMuc2xpZGVOZXh0Q2xhc3N9YCk7XG4gICAgICAgIGlmIChuZXh0U2xpZGUubGVuZ3RoID4gMCkgc3dpcGVyLmxhenkubG9hZEluU2xpZGUoc2xpZGVJbmRleChuZXh0U2xpZGUpKTtcblxuICAgICAgICBjb25zdCBwcmV2U2xpZGUgPSAkd3JhcHBlckVsLmNoaWxkcmVuKGAuJHtzd2lwZXJQYXJhbXMuc2xpZGVQcmV2Q2xhc3N9YCk7XG4gICAgICAgIGlmIChwcmV2U2xpZGUubGVuZ3RoID4gMCkgc3dpcGVyLmxhenkubG9hZEluU2xpZGUoc2xpZGVJbmRleChwcmV2U2xpZGUpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdsYXp5JyxcbiAgcGFyYW1zOiB7XG4gICAgbGF6eToge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBsb2FkUHJldk5leHQ6IGZhbHNlLFxuICAgICAgbG9hZFByZXZOZXh0QW1vdW50OiAxLFxuICAgICAgbG9hZE9uVHJhbnNpdGlvblN0YXJ0OiBmYWxzZSxcblxuICAgICAgZWxlbWVudENsYXNzOiAnc3dpcGVyLWxhenknLFxuICAgICAgbG9hZGluZ0NsYXNzOiAnc3dpcGVyLWxhenktbG9hZGluZycsXG4gICAgICBsb2FkZWRDbGFzczogJ3N3aXBlci1sYXp5LWxvYWRlZCcsXG4gICAgICBwcmVsb2FkZXJDbGFzczogJ3N3aXBlci1sYXp5LXByZWxvYWRlcicsXG4gICAgfSxcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgbGF6eToge1xuICAgICAgICBpbml0aWFsSW1hZ2VMb2FkZWQ6IGZhbHNlLFxuICAgICAgICBsb2FkOiBMYXp5LmxvYWQuYmluZChzd2lwZXIpLFxuICAgICAgICBsb2FkSW5TbGlkZTogTGF6eS5sb2FkSW5TbGlkZS5iaW5kKHN3aXBlciksXG4gICAgICB9LFxuICAgIH0pO1xuICB9LFxuICBvbjoge1xuICAgIGJlZm9yZUluaXQoKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMubGF6eS5lbmFibGVkICYmIHN3aXBlci5wYXJhbXMucHJlbG9hZEltYWdlcykge1xuICAgICAgICBzd2lwZXIucGFyYW1zLnByZWxvYWRJbWFnZXMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGluaXQoKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMubGF6eS5lbmFibGVkICYmICFzd2lwZXIucGFyYW1zLmxvb3AgJiYgc3dpcGVyLnBhcmFtcy5pbml0aWFsU2xpZGUgPT09IDApIHtcbiAgICAgICAgc3dpcGVyLmxhenkubG9hZCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2Nyb2xsKCkge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmZyZWVNb2RlICYmICFzd2lwZXIucGFyYW1zLmZyZWVNb2RlU3RpY2t5KSB7XG4gICAgICAgIHN3aXBlci5sYXp5LmxvYWQoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlc2l6ZSgpIHtcbiAgICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sYXp5LmVuYWJsZWQpIHtcbiAgICAgICAgc3dpcGVyLmxhenkubG9hZCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2Nyb2xsYmFyRHJhZ01vdmUoKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMubGF6eS5lbmFibGVkKSB7XG4gICAgICAgIHN3aXBlci5sYXp5LmxvYWQoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHRyYW5zaXRpb25TdGFydCgpIHtcbiAgICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sYXp5LmVuYWJsZWQpIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubGF6eS5sb2FkT25UcmFuc2l0aW9uU3RhcnQgfHwgKCFzd2lwZXIucGFyYW1zLmxhenkubG9hZE9uVHJhbnNpdGlvblN0YXJ0ICYmICFzd2lwZXIubGF6eS5pbml0aWFsSW1hZ2VMb2FkZWQpKSB7XG4gICAgICAgICAgc3dpcGVyLmxhenkubG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICB0cmFuc2l0aW9uRW5kKCkge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxhenkuZW5hYmxlZCAmJiAhc3dpcGVyLnBhcmFtcy5sYXp5LmxvYWRPblRyYW5zaXRpb25TdGFydCkge1xuICAgICAgICBzd2lwZXIubGF6eS5sb2FkKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzbGlkZUNoYW5nZSgpIHtcbiAgICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sYXp5LmVuYWJsZWQgJiYgc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSB7XG4gICAgICAgIHN3aXBlci5sYXp5LmxvYWQoKTtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxufTtcbiIsIi8qIGVzbGludCBuby1iaXR3aXNlOiBbXCJlcnJvclwiLCB7IFwiYWxsb3dcIjogW1wiPj5cIl0gfV0gKi9cbmltcG9ydCBTd2lwZXIgZnJvbSAnLi4vY29yZS9jb3JlLWNsYXNzJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5cbmNvbnN0IENvbnRyb2xsZXIgPSB7XG4gIExpbmVhclNwbGluZTogZnVuY3Rpb24gTGluZWFyU3BsaW5lKHgsIHkpIHtcbiAgICBjb25zdCBiaW5hcnlTZWFyY2ggPSAoZnVuY3Rpb24gc2VhcmNoKCkge1xuICAgICAgbGV0IG1heEluZGV4O1xuICAgICAgbGV0IG1pbkluZGV4O1xuICAgICAgbGV0IGd1ZXNzO1xuICAgICAgcmV0dXJuIChhcnJheSwgdmFsKSA9PiB7XG4gICAgICAgIG1pbkluZGV4ID0gLTE7XG4gICAgICAgIG1heEluZGV4ID0gYXJyYXkubGVuZ3RoO1xuICAgICAgICB3aGlsZSAobWF4SW5kZXggLSBtaW5JbmRleCA+IDEpIHtcbiAgICAgICAgICBndWVzcyA9IG1heEluZGV4ICsgbWluSW5kZXggPj4gMTtcbiAgICAgICAgICBpZiAoYXJyYXlbZ3Vlc3NdIDw9IHZhbCkge1xuICAgICAgICAgICAgbWluSW5kZXggPSBndWVzcztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWF4SW5kZXggPSBndWVzcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heEluZGV4O1xuICAgICAgfTtcbiAgICB9KCkpO1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcbiAgICB0aGlzLmxhc3RJbmRleCA9IHgubGVuZ3RoIC0gMTtcbiAgICAvLyBHaXZlbiBhbiB4IHZhbHVlICh4MiksIHJldHVybiB0aGUgZXhwZWN0ZWQgeTIgdmFsdWU6XG4gICAgLy8gKHgxLHkxKSBpcyB0aGUga25vd24gcG9pbnQgYmVmb3JlIGdpdmVuIHZhbHVlLFxuICAgIC8vICh4Myx5MykgaXMgdGhlIGtub3duIHBvaW50IGFmdGVyIGdpdmVuIHZhbHVlLlxuICAgIGxldCBpMTtcbiAgICBsZXQgaTM7XG5cbiAgICB0aGlzLmludGVycG9sYXRlID0gZnVuY3Rpb24gaW50ZXJwb2xhdGUoeDIpIHtcbiAgICAgIGlmICgheDIpIHJldHVybiAwO1xuXG4gICAgICAvLyBHZXQgdGhlIGluZGV4ZXMgb2YgeDEgYW5kIHgzICh0aGUgYXJyYXkgaW5kZXhlcyBiZWZvcmUgYW5kIGFmdGVyIGdpdmVuIHgyKTpcbiAgICAgIGkzID0gYmluYXJ5U2VhcmNoKHRoaXMueCwgeDIpO1xuICAgICAgaTEgPSBpMyAtIDE7XG5cbiAgICAgIC8vIFdlIGhhdmUgb3VyIGluZGV4ZXMgaTEgJiBpMywgc28gd2UgY2FuIGNhbGN1bGF0ZSBhbHJlYWR5OlxuICAgICAgLy8geTIgOj0gKCh4MuKIkngxKSDDlyAoeTPiiJJ5MSkpIMO3ICh4M+KIkngxKSArIHkxXG4gICAgICByZXR1cm4gKCgoeDIgLSB0aGlzLnhbaTFdKSAqICh0aGlzLnlbaTNdIC0gdGhpcy55W2kxXSkpIC8gKHRoaXMueFtpM10gLSB0aGlzLnhbaTFdKSkgKyB0aGlzLnlbaTFdO1xuICAgIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIC8vIHh4eDogZm9yIG5vdyBpIHdpbGwganVzdCBzYXZlIG9uZSBzcGxpbmUgZnVuY3Rpb24gdG8gdG9cbiAgZ2V0SW50ZXJwb2xhdGVGdW5jdGlvbihjKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBpZiAoIXN3aXBlci5jb250cm9sbGVyLnNwbGluZSkge1xuICAgICAgc3dpcGVyLmNvbnRyb2xsZXIuc3BsaW5lID0gc3dpcGVyLnBhcmFtcy5sb29wXG4gICAgICAgID8gbmV3IENvbnRyb2xsZXIuTGluZWFyU3BsaW5lKHN3aXBlci5zbGlkZXNHcmlkLCBjLnNsaWRlc0dyaWQpXG4gICAgICAgIDogbmV3IENvbnRyb2xsZXIuTGluZWFyU3BsaW5lKHN3aXBlci5zbmFwR3JpZCwgYy5zbmFwR3JpZCk7XG4gICAgfVxuICB9LFxuICBzZXRUcmFuc2xhdGUoc2V0VHJhbnNsYXRlLCBieUNvbnRyb2xsZXIpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGNvbnN0IGNvbnRyb2xsZWQgPSBzd2lwZXIuY29udHJvbGxlci5jb250cm9sO1xuICAgIGxldCBtdWx0aXBsaWVyO1xuICAgIGxldCBjb250cm9sbGVkVHJhbnNsYXRlO1xuICAgIGZ1bmN0aW9uIHNldENvbnRyb2xsZWRUcmFuc2xhdGUoYykge1xuICAgICAgLy8gdGhpcyB3aWxsIGNyZWF0ZSBhbiBJbnRlcnBvbGF0ZSBmdW5jdGlvbiBiYXNlZCBvbiB0aGUgc25hcEdyaWRzXG4gICAgICAvLyB4IGlzIHRoZSBHcmlkIG9mIHRoZSBzY3JvbGxlZCBzY3JvbGxlciBhbmQgeSB3aWxsIGJlIHRoZSBjb250cm9sbGVkIHNjcm9sbGVyXG4gICAgICAvLyBpdCBtYWtlcyBzZW5zZSB0byBjcmVhdGUgdGhpcyBvbmx5IG9uY2UgYW5kIHJlY2FsbCBpdCBmb3IgdGhlIGludGVycG9sYXRpb25cbiAgICAgIC8vIHRoZSBmdW5jdGlvbiBkb2VzIGEgbG90IG9mIHZhbHVlIGNhY2hpbmcgZm9yIHBlcmZvcm1hbmNlXG4gICAgICBjb25zdCB0cmFuc2xhdGUgPSBzd2lwZXIucnRsVHJhbnNsYXRlID8gLXN3aXBlci50cmFuc2xhdGUgOiBzd2lwZXIudHJhbnNsYXRlO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuY29udHJvbGxlci5ieSA9PT0gJ3NsaWRlJykge1xuICAgICAgICBzd2lwZXIuY29udHJvbGxlci5nZXRJbnRlcnBvbGF0ZUZ1bmN0aW9uKGMpO1xuICAgICAgICAvLyBpIGFtIG5vdCBzdXJlIHdoeSB0aGUgdmFsdWVzIGhhdmUgdG8gYmUgbXVsdGlwbGljYXRlZCB0aGlzIHdheSwgdHJpZWQgdG8gaW52ZXJ0IHRoZSBzbmFwR3JpZFxuICAgICAgICAvLyBidXQgaXQgZGlkIG5vdCB3b3JrIG91dFxuICAgICAgICBjb250cm9sbGVkVHJhbnNsYXRlID0gLXN3aXBlci5jb250cm9sbGVyLnNwbGluZS5pbnRlcnBvbGF0ZSgtdHJhbnNsYXRlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFjb250cm9sbGVkVHJhbnNsYXRlIHx8IHN3aXBlci5wYXJhbXMuY29udHJvbGxlci5ieSA9PT0gJ2NvbnRhaW5lcicpIHtcbiAgICAgICAgbXVsdGlwbGllciA9IChjLm1heFRyYW5zbGF0ZSgpIC0gYy5taW5UcmFuc2xhdGUoKSkgLyAoc3dpcGVyLm1heFRyYW5zbGF0ZSgpIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKTtcbiAgICAgICAgY29udHJvbGxlZFRyYW5zbGF0ZSA9ICgodHJhbnNsYXRlIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSAqIG11bHRpcGxpZXIpICsgYy5taW5UcmFuc2xhdGUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuY29udHJvbGxlci5pbnZlcnNlKSB7XG4gICAgICAgIGNvbnRyb2xsZWRUcmFuc2xhdGUgPSBjLm1heFRyYW5zbGF0ZSgpIC0gY29udHJvbGxlZFRyYW5zbGF0ZTtcbiAgICAgIH1cbiAgICAgIGMudXBkYXRlUHJvZ3Jlc3MoY29udHJvbGxlZFRyYW5zbGF0ZSk7XG4gICAgICBjLnNldFRyYW5zbGF0ZShjb250cm9sbGVkVHJhbnNsYXRlLCBzd2lwZXIpO1xuICAgICAgYy51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgICAgYy51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbnRyb2xsZWQpKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRyb2xsZWQubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKGNvbnRyb2xsZWRbaV0gIT09IGJ5Q29udHJvbGxlciAmJiBjb250cm9sbGVkW2ldIGluc3RhbmNlb2YgU3dpcGVyKSB7XG4gICAgICAgICAgc2V0Q29udHJvbGxlZFRyYW5zbGF0ZShjb250cm9sbGVkW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29udHJvbGxlZCBpbnN0YW5jZW9mIFN3aXBlciAmJiBieUNvbnRyb2xsZXIgIT09IGNvbnRyb2xsZWQpIHtcbiAgICAgIHNldENvbnRyb2xsZWRUcmFuc2xhdGUoY29udHJvbGxlZCk7XG4gICAgfVxuICB9LFxuICBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uLCBieUNvbnRyb2xsZXIpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGNvbnN0IGNvbnRyb2xsZWQgPSBzd2lwZXIuY29udHJvbGxlci5jb250cm9sO1xuICAgIGxldCBpO1xuICAgIGZ1bmN0aW9uIHNldENvbnRyb2xsZWRUcmFuc2l0aW9uKGMpIHtcbiAgICAgIGMuc2V0VHJhbnNpdGlvbihkdXJhdGlvbiwgc3dpcGVyKTtcbiAgICAgIGlmIChkdXJhdGlvbiAhPT0gMCkge1xuICAgICAgICBjLnRyYW5zaXRpb25TdGFydCgpO1xuICAgICAgICBpZiAoYy5wYXJhbXMuYXV0b0hlaWdodCkge1xuICAgICAgICAgIFV0aWxzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgIGMudXBkYXRlQXV0b0hlaWdodCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGMuJHdyYXBwZXJFbC50cmFuc2l0aW9uRW5kKCgpID0+IHtcbiAgICAgICAgICBpZiAoIWNvbnRyb2xsZWQpIHJldHVybjtcbiAgICAgICAgICBpZiAoYy5wYXJhbXMubG9vcCAmJiBzd2lwZXIucGFyYW1zLmNvbnRyb2xsZXIuYnkgPT09ICdzbGlkZScpIHtcbiAgICAgICAgICAgIGMubG9vcEZpeCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjLnRyYW5zaXRpb25FbmQoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbnRyb2xsZWQpKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY29udHJvbGxlZC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoY29udHJvbGxlZFtpXSAhPT0gYnlDb250cm9sbGVyICYmIGNvbnRyb2xsZWRbaV0gaW5zdGFuY2VvZiBTd2lwZXIpIHtcbiAgICAgICAgICBzZXRDb250cm9sbGVkVHJhbnNpdGlvbihjb250cm9sbGVkW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29udHJvbGxlZCBpbnN0YW5jZW9mIFN3aXBlciAmJiBieUNvbnRyb2xsZXIgIT09IGNvbnRyb2xsZWQpIHtcbiAgICAgIHNldENvbnRyb2xsZWRUcmFuc2l0aW9uKGNvbnRyb2xsZWQpO1xuICAgIH1cbiAgfSxcbn07XG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdjb250cm9sbGVyJyxcbiAgcGFyYW1zOiB7XG4gICAgY29udHJvbGxlcjoge1xuICAgICAgY29udHJvbDogdW5kZWZpbmVkLFxuICAgICAgaW52ZXJzZTogZmFsc2UsXG4gICAgICBieTogJ3NsaWRlJywgLy8gb3IgJ2NvbnRhaW5lcidcbiAgICB9LFxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICBjb250cm9sbGVyOiB7XG4gICAgICAgIGNvbnRyb2w6IHN3aXBlci5wYXJhbXMuY29udHJvbGxlci5jb250cm9sLFxuICAgICAgICBnZXRJbnRlcnBvbGF0ZUZ1bmN0aW9uOiBDb250cm9sbGVyLmdldEludGVycG9sYXRlRnVuY3Rpb24uYmluZChzd2lwZXIpLFxuICAgICAgICBzZXRUcmFuc2xhdGU6IENvbnRyb2xsZXIuc2V0VHJhbnNsYXRlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgc2V0VHJhbnNpdGlvbjogQ29udHJvbGxlci5zZXRUcmFuc2l0aW9uLmJpbmQoc3dpcGVyKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0sXG4gIG9uOiB7XG4gICAgdXBkYXRlKCkge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLmNvbnRyb2xsZXIuY29udHJvbCkgcmV0dXJuO1xuICAgICAgaWYgKHN3aXBlci5jb250cm9sbGVyLnNwbGluZSkge1xuICAgICAgICBzd2lwZXIuY29udHJvbGxlci5zcGxpbmUgPSB1bmRlZmluZWQ7XG4gICAgICAgIGRlbGV0ZSBzd2lwZXIuY29udHJvbGxlci5zcGxpbmU7XG4gICAgICB9XG4gICAgfSxcbiAgICByZXNpemUoKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIuY29udHJvbGxlci5jb250cm9sKSByZXR1cm47XG4gICAgICBpZiAoc3dpcGVyLmNvbnRyb2xsZXIuc3BsaW5lKSB7XG4gICAgICAgIHN3aXBlci5jb250cm9sbGVyLnNwbGluZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgZGVsZXRlIHN3aXBlci5jb250cm9sbGVyLnNwbGluZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9ic2VydmVyVXBkYXRlKCkge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLmNvbnRyb2xsZXIuY29udHJvbCkgcmV0dXJuO1xuICAgICAgaWYgKHN3aXBlci5jb250cm9sbGVyLnNwbGluZSkge1xuICAgICAgICBzd2lwZXIuY29udHJvbGxlci5zcGxpbmUgPSB1bmRlZmluZWQ7XG4gICAgICAgIGRlbGV0ZSBzd2lwZXIuY29udHJvbGxlci5zcGxpbmU7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXRUcmFuc2xhdGUodHJhbnNsYXRlLCBieUNvbnRyb2xsZXIpIHtcbiAgICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5jb250cm9sbGVyLmNvbnRyb2wpIHJldHVybjtcbiAgICAgIHN3aXBlci5jb250cm9sbGVyLnNldFRyYW5zbGF0ZSh0cmFuc2xhdGUsIGJ5Q29udHJvbGxlcik7XG4gICAgfSxcbiAgICBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uLCBieUNvbnRyb2xsZXIpIHtcbiAgICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5jb250cm9sbGVyLmNvbnRyb2wpIHJldHVybjtcbiAgICAgIHN3aXBlci5jb250cm9sbGVyLnNldFRyYW5zaXRpb24oZHVyYXRpb24sIGJ5Q29udHJvbGxlcik7XG4gICAgfSxcbiAgfSxcbn07XG4iLCJpbXBvcnQgJCBmcm9tICcuLi8uLi91dGlscy9kb20nO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uL3V0aWxzL3V0aWxzJztcblxuY29uc3QgYTExeSA9IHtcbiAgbWFrZUVsRm9jdXNhYmxlKCRlbCkge1xuICAgICRlbC5hdHRyKCd0YWJJbmRleCcsICcwJyk7XG4gICAgcmV0dXJuICRlbDtcbiAgfSxcbiAgbWFrZUVsTm90Rm9jdXNhYmxlKCRlbCkge1xuICAgICRlbC5hdHRyKCd0YWJJbmRleCcsICctMScpO1xuICAgIHJldHVybiAkZWw7XG4gIH0sXG4gIGFkZEVsUm9sZSgkZWwsIHJvbGUpIHtcbiAgICAkZWwuYXR0cigncm9sZScsIHJvbGUpO1xuICAgIHJldHVybiAkZWw7XG4gIH0sXG4gIGFkZEVsTGFiZWwoJGVsLCBsYWJlbCkge1xuICAgICRlbC5hdHRyKCdhcmlhLWxhYmVsJywgbGFiZWwpO1xuICAgIHJldHVybiAkZWw7XG4gIH0sXG4gIGRpc2FibGVFbCgkZWwpIHtcbiAgICAkZWwuYXR0cignYXJpYS1kaXNhYmxlZCcsIHRydWUpO1xuICAgIHJldHVybiAkZWw7XG4gIH0sXG4gIGVuYWJsZUVsKCRlbCkge1xuICAgICRlbC5hdHRyKCdhcmlhLWRpc2FibGVkJywgZmFsc2UpO1xuICAgIHJldHVybiAkZWw7XG4gIH0sXG4gIG9uRW50ZXJLZXkoZSkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5hMTF5O1xuICAgIGlmIChlLmtleUNvZGUgIT09IDEzKSByZXR1cm47XG4gICAgY29uc3QgJHRhcmdldEVsID0gJChlLnRhcmdldCk7XG4gICAgaWYgKHN3aXBlci5uYXZpZ2F0aW9uICYmIHN3aXBlci5uYXZpZ2F0aW9uLiRuZXh0RWwgJiYgJHRhcmdldEVsLmlzKHN3aXBlci5uYXZpZ2F0aW9uLiRuZXh0RWwpKSB7XG4gICAgICBpZiAoIShzd2lwZXIuaXNFbmQgJiYgIXN3aXBlci5wYXJhbXMubG9vcCkpIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlTmV4dCgpO1xuICAgICAgfVxuICAgICAgaWYgKHN3aXBlci5pc0VuZCkge1xuICAgICAgICBzd2lwZXIuYTExeS5ub3RpZnkocGFyYW1zLmxhc3RTbGlkZU1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLmExMXkubm90aWZ5KHBhcmFtcy5uZXh0U2xpZGVNZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN3aXBlci5uYXZpZ2F0aW9uICYmIHN3aXBlci5uYXZpZ2F0aW9uLiRwcmV2RWwgJiYgJHRhcmdldEVsLmlzKHN3aXBlci5uYXZpZ2F0aW9uLiRwcmV2RWwpKSB7XG4gICAgICBpZiAoIShzd2lwZXIuaXNCZWdpbm5pbmcgJiYgIXN3aXBlci5wYXJhbXMubG9vcCkpIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlUHJldigpO1xuICAgICAgfVxuICAgICAgaWYgKHN3aXBlci5pc0JlZ2lubmluZykge1xuICAgICAgICBzd2lwZXIuYTExeS5ub3RpZnkocGFyYW1zLmZpcnN0U2xpZGVNZXNzYWdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXBlci5hMTF5Lm5vdGlmeShwYXJhbXMucHJldlNsaWRlTWVzc2FnZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzd2lwZXIucGFnaW5hdGlvbiAmJiAkdGFyZ2V0RWwuaXMoYC4ke3N3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5idWxsZXRDbGFzc31gKSkge1xuICAgICAgJHRhcmdldEVsWzBdLmNsaWNrKCk7XG4gICAgfVxuICB9LFxuICBub3RpZnkobWVzc2FnZSkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uID0gc3dpcGVyLmExMXkubGl2ZVJlZ2lvbjtcbiAgICBpZiAobm90aWZpY2F0aW9uLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIG5vdGlmaWNhdGlvbi5odG1sKCcnKTtcbiAgICBub3RpZmljYXRpb24uaHRtbChtZXNzYWdlKTtcbiAgfSxcbiAgdXBkYXRlTmF2aWdhdGlvbigpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuXG4gICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCB8fCAhc3dpcGVyLm5hdmlnYXRpb24pIHJldHVybjtcbiAgICBjb25zdCB7ICRuZXh0RWwsICRwcmV2RWwgfSA9IHN3aXBlci5uYXZpZ2F0aW9uO1xuXG4gICAgaWYgKCRwcmV2RWwgJiYgJHByZXZFbC5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoc3dpcGVyLmlzQmVnaW5uaW5nKSB7XG4gICAgICAgIHN3aXBlci5hMTF5LmRpc2FibGVFbCgkcHJldkVsKTtcbiAgICAgICAgc3dpcGVyLmExMXkubWFrZUVsTm90Rm9jdXNhYmxlKCRwcmV2RWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLmExMXkuZW5hYmxlRWwoJHByZXZFbCk7XG4gICAgICAgIHN3aXBlci5hMTF5Lm1ha2VFbEZvY3VzYWJsZSgkcHJldkVsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCRuZXh0RWwgJiYgJG5leHRFbC5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoc3dpcGVyLmlzRW5kKSB7XG4gICAgICAgIHN3aXBlci5hMTF5LmRpc2FibGVFbCgkbmV4dEVsKTtcbiAgICAgICAgc3dpcGVyLmExMXkubWFrZUVsTm90Rm9jdXNhYmxlKCRuZXh0RWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLmExMXkuZW5hYmxlRWwoJG5leHRFbCk7XG4gICAgICAgIHN3aXBlci5hMTF5Lm1ha2VFbEZvY3VzYWJsZSgkbmV4dEVsKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHVwZGF0ZVBhZ2luYXRpb24oKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLmExMXk7XG4gICAgaWYgKHN3aXBlci5wYWdpbmF0aW9uICYmIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5jbGlja2FibGUgJiYgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cyAmJiBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzLmxlbmd0aCkge1xuICAgICAgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cy5lYWNoKChidWxsZXRJbmRleCwgYnVsbGV0RWwpID0+IHtcbiAgICAgICAgY29uc3QgJGJ1bGxldEVsID0gJChidWxsZXRFbCk7XG4gICAgICAgIHN3aXBlci5hMTF5Lm1ha2VFbEZvY3VzYWJsZSgkYnVsbGV0RWwpO1xuICAgICAgICBzd2lwZXIuYTExeS5hZGRFbFJvbGUoJGJ1bGxldEVsLCAnYnV0dG9uJyk7XG4gICAgICAgIHN3aXBlci5hMTF5LmFkZEVsTGFiZWwoJGJ1bGxldEVsLCBwYXJhbXMucGFnaW5hdGlvbkJ1bGxldE1lc3NhZ2UucmVwbGFjZSgvXFx7XFx7aW5kZXhcXH1cXH0vLCAkYnVsbGV0RWwuaW5kZXgoKSArIDEpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgaW5pdCgpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuXG4gICAgc3dpcGVyLiRlbC5hcHBlbmQoc3dpcGVyLmExMXkubGl2ZVJlZ2lvbik7XG5cbiAgICAvLyBOYXZpZ2F0aW9uXG4gICAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5hMTF5O1xuICAgIGxldCAkbmV4dEVsO1xuICAgIGxldCAkcHJldkVsO1xuICAgIGlmIChzd2lwZXIubmF2aWdhdGlvbiAmJiBzd2lwZXIubmF2aWdhdGlvbi4kbmV4dEVsKSB7XG4gICAgICAkbmV4dEVsID0gc3dpcGVyLm5hdmlnYXRpb24uJG5leHRFbDtcbiAgICB9XG4gICAgaWYgKHN3aXBlci5uYXZpZ2F0aW9uICYmIHN3aXBlci5uYXZpZ2F0aW9uLiRwcmV2RWwpIHtcbiAgICAgICRwcmV2RWwgPSBzd2lwZXIubmF2aWdhdGlvbi4kcHJldkVsO1xuICAgIH1cbiAgICBpZiAoJG5leHRFbCkge1xuICAgICAgc3dpcGVyLmExMXkubWFrZUVsRm9jdXNhYmxlKCRuZXh0RWwpO1xuICAgICAgc3dpcGVyLmExMXkuYWRkRWxSb2xlKCRuZXh0RWwsICdidXR0b24nKTtcbiAgICAgIHN3aXBlci5hMTF5LmFkZEVsTGFiZWwoJG5leHRFbCwgcGFyYW1zLm5leHRTbGlkZU1lc3NhZ2UpO1xuICAgICAgJG5leHRFbC5vbigna2V5ZG93bicsIHN3aXBlci5hMTF5Lm9uRW50ZXJLZXkpO1xuICAgIH1cbiAgICBpZiAoJHByZXZFbCkge1xuICAgICAgc3dpcGVyLmExMXkubWFrZUVsRm9jdXNhYmxlKCRwcmV2RWwpO1xuICAgICAgc3dpcGVyLmExMXkuYWRkRWxSb2xlKCRwcmV2RWwsICdidXR0b24nKTtcbiAgICAgIHN3aXBlci5hMTF5LmFkZEVsTGFiZWwoJHByZXZFbCwgcGFyYW1zLnByZXZTbGlkZU1lc3NhZ2UpO1xuICAgICAgJHByZXZFbC5vbigna2V5ZG93bicsIHN3aXBlci5hMTF5Lm9uRW50ZXJLZXkpO1xuICAgIH1cblxuICAgIC8vIFBhZ2luYXRpb25cbiAgICBpZiAoc3dpcGVyLnBhZ2luYXRpb24gJiYgc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmNsaWNrYWJsZSAmJiBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzICYmIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMubGVuZ3RoKSB7XG4gICAgICBzd2lwZXIucGFnaW5hdGlvbi4kZWwub24oJ2tleWRvd24nLCBgLiR7c3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmJ1bGxldENsYXNzfWAsIHN3aXBlci5hMTF5Lm9uRW50ZXJLZXkpO1xuICAgIH1cbiAgfSxcbiAgZGVzdHJveSgpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGlmIChzd2lwZXIuYTExeS5saXZlUmVnaW9uICYmIHN3aXBlci5hMTF5LmxpdmVSZWdpb24ubGVuZ3RoID4gMCkgc3dpcGVyLmExMXkubGl2ZVJlZ2lvbi5yZW1vdmUoKTtcblxuICAgIGxldCAkbmV4dEVsO1xuICAgIGxldCAkcHJldkVsO1xuICAgIGlmIChzd2lwZXIubmF2aWdhdGlvbiAmJiBzd2lwZXIubmF2aWdhdGlvbi4kbmV4dEVsKSB7XG4gICAgICAkbmV4dEVsID0gc3dpcGVyLm5hdmlnYXRpb24uJG5leHRFbDtcbiAgICB9XG4gICAgaWYgKHN3aXBlci5uYXZpZ2F0aW9uICYmIHN3aXBlci5uYXZpZ2F0aW9uLiRwcmV2RWwpIHtcbiAgICAgICRwcmV2RWwgPSBzd2lwZXIubmF2aWdhdGlvbi4kcHJldkVsO1xuICAgIH1cbiAgICBpZiAoJG5leHRFbCkge1xuICAgICAgJG5leHRFbC5vZmYoJ2tleWRvd24nLCBzd2lwZXIuYTExeS5vbkVudGVyS2V5KTtcbiAgICB9XG4gICAgaWYgKCRwcmV2RWwpIHtcbiAgICAgICRwcmV2RWwub2ZmKCdrZXlkb3duJywgc3dpcGVyLmExMXkub25FbnRlcktleSk7XG4gICAgfVxuXG4gICAgLy8gUGFnaW5hdGlvblxuICAgIGlmIChzd2lwZXIucGFnaW5hdGlvbiAmJiBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uY2xpY2thYmxlICYmIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMgJiYgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cy5sZW5ndGgpIHtcbiAgICAgIHN3aXBlci5wYWdpbmF0aW9uLiRlbC5vZmYoJ2tleWRvd24nLCBgLiR7c3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmJ1bGxldENsYXNzfWAsIHN3aXBlci5hMTF5Lm9uRW50ZXJLZXkpO1xuICAgIH1cbiAgfSxcbn07XG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhMTF5JyxcbiAgcGFyYW1zOiB7XG4gICAgYTExeToge1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIG5vdGlmaWNhdGlvbkNsYXNzOiAnc3dpcGVyLW5vdGlmaWNhdGlvbicsXG4gICAgICBwcmV2U2xpZGVNZXNzYWdlOiAnUHJldmlvdXMgc2xpZGUnLFxuICAgICAgbmV4dFNsaWRlTWVzc2FnZTogJ05leHQgc2xpZGUnLFxuICAgICAgZmlyc3RTbGlkZU1lc3NhZ2U6ICdUaGlzIGlzIHRoZSBmaXJzdCBzbGlkZScsXG4gICAgICBsYXN0U2xpZGVNZXNzYWdlOiAnVGhpcyBpcyB0aGUgbGFzdCBzbGlkZScsXG4gICAgICBwYWdpbmF0aW9uQnVsbGV0TWVzc2FnZTogJ0dvIHRvIHNsaWRlIHt7aW5kZXh9fScsXG4gICAgfSxcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgYTExeToge1xuICAgICAgICBsaXZlUmVnaW9uOiAkKGA8c3BhbiBjbGFzcz1cIiR7c3dpcGVyLnBhcmFtcy5hMTF5Lm5vdGlmaWNhdGlvbkNsYXNzfVwiIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiIGFyaWEtYXRvbWljPVwidHJ1ZVwiPjwvc3Bhbj5gKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgT2JqZWN0LmtleXMoYTExeSkuZm9yRWFjaCgobWV0aG9kTmFtZSkgPT4ge1xuICAgICAgc3dpcGVyLmExMXlbbWV0aG9kTmFtZV0gPSBhMTF5W21ldGhvZE5hbWVdLmJpbmQoc3dpcGVyKTtcbiAgICB9KTtcbiAgfSxcbiAgb246IHtcbiAgICBpbml0KCkge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5hMTF5LmVuYWJsZWQpIHJldHVybjtcbiAgICAgIHN3aXBlci5hMTF5LmluaXQoKTtcbiAgICAgIHN3aXBlci5hMTF5LnVwZGF0ZU5hdmlnYXRpb24oKTtcbiAgICB9LFxuICAgIHRvRWRnZSgpIHtcbiAgICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5wYXJhbXMuYTExeS5lbmFibGVkKSByZXR1cm47XG4gICAgICBzd2lwZXIuYTExeS51cGRhdGVOYXZpZ2F0aW9uKCk7XG4gICAgfSxcbiAgICBmcm9tRWRnZSgpIHtcbiAgICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5wYXJhbXMuYTExeS5lbmFibGVkKSByZXR1cm47XG4gICAgICBzd2lwZXIuYTExeS51cGRhdGVOYXZpZ2F0aW9uKCk7XG4gICAgfSxcbiAgICBwYWdpbmF0aW9uVXBkYXRlKCkge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5hMTF5LmVuYWJsZWQpIHJldHVybjtcbiAgICAgIHN3aXBlci5hMTF5LnVwZGF0ZVBhZ2luYXRpb24oKTtcbiAgICB9LFxuICAgIGRlc3Ryb3koKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLmExMXkuZW5hYmxlZCkgcmV0dXJuO1xuICAgICAgc3dpcGVyLmExMXkuZGVzdHJveSgpO1xuICAgIH0sXG4gIH0sXG59O1xuIiwiaW1wb3J0IHsgd2luZG93IH0gZnJvbSAnc3NyLXdpbmRvdyc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnO1xuXG5jb25zdCBIaXN0b3J5ID0ge1xuICBpbml0KCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKCFzd2lwZXIucGFyYW1zLmhpc3RvcnkpIHJldHVybjtcbiAgICBpZiAoIXdpbmRvdy5oaXN0b3J5IHx8ICF3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUpIHtcbiAgICAgIHN3aXBlci5wYXJhbXMuaGlzdG9yeS5lbmFibGVkID0gZmFsc2U7XG4gICAgICBzd2lwZXIucGFyYW1zLmhhc2hOYXZpZ2F0aW9uLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBoaXN0b3J5ID0gc3dpcGVyLmhpc3Rvcnk7XG4gICAgaGlzdG9yeS5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgaGlzdG9yeS5wYXRocyA9IEhpc3RvcnkuZ2V0UGF0aFZhbHVlcygpO1xuICAgIGlmICghaGlzdG9yeS5wYXRocy5rZXkgJiYgIWhpc3RvcnkucGF0aHMudmFsdWUpIHJldHVybjtcbiAgICBoaXN0b3J5LnNjcm9sbFRvU2xpZGUoMCwgaGlzdG9yeS5wYXRocy52YWx1ZSwgc3dpcGVyLnBhcmFtcy5ydW5DYWxsYmFja3NPbkluaXQpO1xuICAgIGlmICghc3dpcGVyLnBhcmFtcy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSkge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgc3dpcGVyLmhpc3Rvcnkuc2V0SGlzdG9yeVBvcFN0YXRlKTtcbiAgICB9XG4gIH0sXG4gIGRlc3Ryb3koKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBpZiAoIXN3aXBlci5wYXJhbXMuaGlzdG9yeS5yZXBsYWNlU3RhdGUpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsIHN3aXBlci5oaXN0b3J5LnNldEhpc3RvcnlQb3BTdGF0ZSk7XG4gICAgfVxuICB9LFxuICBzZXRIaXN0b3J5UG9wU3RhdGUoKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBzd2lwZXIuaGlzdG9yeS5wYXRocyA9IEhpc3RvcnkuZ2V0UGF0aFZhbHVlcygpO1xuICAgIHN3aXBlci5oaXN0b3J5LnNjcm9sbFRvU2xpZGUoc3dpcGVyLnBhcmFtcy5zcGVlZCwgc3dpcGVyLmhpc3RvcnkucGF0aHMudmFsdWUsIGZhbHNlKTtcbiAgfSxcbiAgZ2V0UGF0aFZhbHVlcygpIHtcbiAgICBjb25zdCBwYXRoQXJyYXkgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc2xpY2UoMSkuc3BsaXQoJy8nKS5maWx0ZXIoKHBhcnQpID0+IHBhcnQgIT09ICcnKTtcbiAgICBjb25zdCB0b3RhbCA9IHBhdGhBcnJheS5sZW5ndGg7XG4gICAgY29uc3Qga2V5ID0gcGF0aEFycmF5W3RvdGFsIC0gMl07XG4gICAgY29uc3QgdmFsdWUgPSBwYXRoQXJyYXlbdG90YWwgLSAxXTtcbiAgICByZXR1cm4geyBrZXksIHZhbHVlIH07XG4gIH0sXG4gIHNldEhpc3Rvcnkoa2V5LCBpbmRleCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKCFzd2lwZXIuaGlzdG9yeS5pbml0aWFsaXplZCB8fCAhc3dpcGVyLnBhcmFtcy5oaXN0b3J5LmVuYWJsZWQpIHJldHVybjtcbiAgICBjb25zdCBzbGlkZSA9IHN3aXBlci5zbGlkZXMuZXEoaW5kZXgpO1xuICAgIGxldCB2YWx1ZSA9IEhpc3Rvcnkuc2x1Z2lmeShzbGlkZS5hdHRyKCdkYXRhLWhpc3RvcnknKSk7XG4gICAgaWYgKCF3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgdmFsdWUgPSBgJHtrZXl9LyR7dmFsdWV9YDtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudFN0YXRlID0gd2luZG93Lmhpc3Rvcnkuc3RhdGU7XG4gICAgaWYgKGN1cnJlbnRTdGF0ZSAmJiBjdXJyZW50U3RhdGUudmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChzd2lwZXIucGFyYW1zLmhpc3RvcnkucmVwbGFjZVN0YXRlKSB7XG4gICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoeyB2YWx1ZSB9LCBudWxsLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSh7IHZhbHVlIH0sIG51bGwsIHZhbHVlKTtcbiAgICB9XG4gIH0sXG4gIHNsdWdpZnkodGV4dCkge1xuICAgIHJldHVybiB0ZXh0LnRvU3RyaW5nKClcbiAgICAgIC5yZXBsYWNlKC9cXHMrL2csICctJylcbiAgICAgIC5yZXBsYWNlKC9bXlxcdy1dKy9nLCAnJylcbiAgICAgIC5yZXBsYWNlKC8tLSsvZywgJy0nKVxuICAgICAgLnJlcGxhY2UoL14tKy8sICcnKVxuICAgICAgLnJlcGxhY2UoLy0rJC8sICcnKTtcbiAgfSxcbiAgc2Nyb2xsVG9TbGlkZShzcGVlZCwgdmFsdWUsIHJ1bkNhbGxiYWNrcykge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuZ3RoID0gc3dpcGVyLnNsaWRlcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBjb25zdCBzbGlkZSA9IHN3aXBlci5zbGlkZXMuZXEoaSk7XG4gICAgICAgIGNvbnN0IHNsaWRlSGlzdG9yeSA9IEhpc3Rvcnkuc2x1Z2lmeShzbGlkZS5hdHRyKCdkYXRhLWhpc3RvcnknKSk7XG4gICAgICAgIGlmIChzbGlkZUhpc3RvcnkgPT09IHZhbHVlICYmICFzbGlkZS5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKSB7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSBzbGlkZS5pbmRleCgpO1xuICAgICAgICAgIHN3aXBlci5zbGlkZVRvKGluZGV4LCBzcGVlZCwgcnVuQ2FsbGJhY2tzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbygwLCBzcGVlZCwgcnVuQ2FsbGJhY2tzKTtcbiAgICB9XG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdoaXN0b3J5JyxcbiAgcGFyYW1zOiB7XG4gICAgaGlzdG9yeToge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICByZXBsYWNlU3RhdGU6IGZhbHNlLFxuICAgICAga2V5OiAnc2xpZGVzJyxcbiAgICB9LFxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICBoaXN0b3J5OiB7XG4gICAgICAgIGluaXQ6IEhpc3RvcnkuaW5pdC5iaW5kKHN3aXBlciksXG4gICAgICAgIHNldEhpc3Rvcnk6IEhpc3Rvcnkuc2V0SGlzdG9yeS5iaW5kKHN3aXBlciksXG4gICAgICAgIHNldEhpc3RvcnlQb3BTdGF0ZTogSGlzdG9yeS5zZXRIaXN0b3J5UG9wU3RhdGUuYmluZChzd2lwZXIpLFxuICAgICAgICBzY3JvbGxUb1NsaWRlOiBIaXN0b3J5LnNjcm9sbFRvU2xpZGUuYmluZChzd2lwZXIpLFxuICAgICAgICBkZXN0cm95OiBIaXN0b3J5LmRlc3Ryb3kuYmluZChzd2lwZXIpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSxcbiAgb246IHtcbiAgICBpbml0KCkge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmhpc3RvcnkuZW5hYmxlZCkge1xuICAgICAgICBzd2lwZXIuaGlzdG9yeS5pbml0KCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkZXN0cm95KCkge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmhpc3RvcnkuZW5hYmxlZCkge1xuICAgICAgICBzd2lwZXIuaGlzdG9yeS5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB0cmFuc2l0aW9uRW5kKCkge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmIChzd2lwZXIuaGlzdG9yeS5pbml0aWFsaXplZCkge1xuICAgICAgICBzd2lwZXIuaGlzdG9yeS5zZXRIaXN0b3J5KHN3aXBlci5wYXJhbXMuaGlzdG9yeS5rZXksIHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzbGlkZUNoYW5nZSgpIHtcbiAgICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoc3dpcGVyLmhpc3RvcnkuaW5pdGlhbGl6ZWQgJiYgc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSB7XG4gICAgICAgIHN3aXBlci5oaXN0b3J5LnNldEhpc3Rvcnkoc3dpcGVyLnBhcmFtcy5oaXN0b3J5LmtleSwgc3dpcGVyLmFjdGl2ZUluZGV4KTtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxufTtcbiIsImltcG9ydCB7IHdpbmRvdywgZG9jdW1lbnQgfSBmcm9tICdzc3Itd2luZG93JztcbmltcG9ydCAkIGZyb20gJy4uLy4uL3V0aWxzL2RvbSc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnO1xuXG5jb25zdCBIYXNoTmF2aWdhdGlvbiA9IHtcbiAgb25IYXNoQ2FuZ2UoKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBzd2lwZXIuZW1pdCgnaGFzaENoYW5nZScpO1xuICAgIGNvbnN0IG5ld0hhc2ggPSBkb2N1bWVudC5sb2NhdGlvbi5oYXNoLnJlcGxhY2UoJyMnLCAnJyk7XG4gICAgY29uc3QgYWN0aXZlU2xpZGVIYXNoID0gc3dpcGVyLnNsaWRlcy5lcShzd2lwZXIuYWN0aXZlSW5kZXgpLmF0dHIoJ2RhdGEtaGFzaCcpO1xuICAgIGlmIChuZXdIYXNoICE9PSBhY3RpdmVTbGlkZUhhc2gpIHtcbiAgICAgIGNvbnN0IG5ld0luZGV4ID0gc3dpcGVyLiR3cmFwcGVyRWwuY2hpbGRyZW4oYC4ke3N3aXBlci5wYXJhbXMuc2xpZGVDbGFzc31bZGF0YS1oYXNoPVwiJHtuZXdIYXNofVwiXWApLmluZGV4KCk7XG4gICAgICBpZiAodHlwZW9mIG5ld0luZGV4ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuICAgICAgc3dpcGVyLnNsaWRlVG8obmV3SW5kZXgpO1xuICAgIH1cbiAgfSxcbiAgc2V0SGFzaCgpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGlmICghc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLmluaXRpYWxpemVkIHx8ICFzd2lwZXIucGFyYW1zLmhhc2hOYXZpZ2F0aW9uLmVuYWJsZWQpIHJldHVybjtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5oYXNoTmF2aWdhdGlvbi5yZXBsYWNlU3RhdGUgJiYgd2luZG93Lmhpc3RvcnkgJiYgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKSB7XG4gICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgbnVsbCwgKGAjJHtzd2lwZXIuc2xpZGVzLmVxKHN3aXBlci5hY3RpdmVJbmRleCkuYXR0cignZGF0YS1oYXNoJyl9YCB8fCAnJykpO1xuICAgICAgc3dpcGVyLmVtaXQoJ2hhc2hTZXQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2xpZGUgPSBzd2lwZXIuc2xpZGVzLmVxKHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICBjb25zdCBoYXNoID0gc2xpZGUuYXR0cignZGF0YS1oYXNoJykgfHwgc2xpZGUuYXR0cignZGF0YS1oaXN0b3J5Jyk7XG4gICAgICBkb2N1bWVudC5sb2NhdGlvbi5oYXNoID0gaGFzaCB8fCAnJztcbiAgICAgIHN3aXBlci5lbWl0KCdoYXNoU2V0Jyk7XG4gICAgfVxuICB9LFxuICBpbml0KCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKCFzd2lwZXIucGFyYW1zLmhhc2hOYXZpZ2F0aW9uLmVuYWJsZWQgfHwgKHN3aXBlci5wYXJhbXMuaGlzdG9yeSAmJiBzd2lwZXIucGFyYW1zLmhpc3RvcnkuZW5hYmxlZCkpIHJldHVybjtcbiAgICBzd2lwZXIuaGFzaE5hdmlnYXRpb24uaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIGNvbnN0IGhhc2ggPSBkb2N1bWVudC5sb2NhdGlvbi5oYXNoLnJlcGxhY2UoJyMnLCAnJyk7XG4gICAgaWYgKGhhc2gpIHtcbiAgICAgIGNvbnN0IHNwZWVkID0gMDtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW5ndGggPSBzd2lwZXIuc2xpZGVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGNvbnN0IHNsaWRlID0gc3dpcGVyLnNsaWRlcy5lcShpKTtcbiAgICAgICAgY29uc3Qgc2xpZGVIYXNoID0gc2xpZGUuYXR0cignZGF0YS1oYXNoJykgfHwgc2xpZGUuYXR0cignZGF0YS1oaXN0b3J5Jyk7XG4gICAgICAgIGlmIChzbGlkZUhhc2ggPT09IGhhc2ggJiYgIXNsaWRlLmhhc0NsYXNzKHN3aXBlci5wYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykpIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHNsaWRlLmluZGV4KCk7XG4gICAgICAgICAgc3dpcGVyLnNsaWRlVG8oaW5kZXgsIHNwZWVkLCBzd2lwZXIucGFyYW1zLnJ1bkNhbGxiYWNrc09uSW5pdCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN3aXBlci5wYXJhbXMuaGFzaE5hdmlnYXRpb24ud2F0Y2hTdGF0ZSkge1xuICAgICAgJCh3aW5kb3cpLm9uKCdoYXNoY2hhbmdlJywgc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLm9uSGFzaENhbmdlKTtcbiAgICB9XG4gIH0sXG4gIGRlc3Ryb3koKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5oYXNoTmF2aWdhdGlvbi53YXRjaFN0YXRlKSB7XG4gICAgICAkKHdpbmRvdykub2ZmKCdoYXNoY2hhbmdlJywgc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLm9uSGFzaENhbmdlKTtcbiAgICB9XG4gIH0sXG59O1xuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnaGFzaC1uYXZpZ2F0aW9uJyxcbiAgcGFyYW1zOiB7XG4gICAgaGFzaE5hdmlnYXRpb246IHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgcmVwbGFjZVN0YXRlOiBmYWxzZSxcbiAgICAgIHdhdGNoU3RhdGU6IGZhbHNlLFxuICAgIH0sXG4gIH0sXG4gIGNyZWF0ZSgpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgIGhhc2hOYXZpZ2F0aW9uOiB7XG4gICAgICAgIGluaXRpYWxpemVkOiBmYWxzZSxcbiAgICAgICAgaW5pdDogSGFzaE5hdmlnYXRpb24uaW5pdC5iaW5kKHN3aXBlciksXG4gICAgICAgIGRlc3Ryb3k6IEhhc2hOYXZpZ2F0aW9uLmRlc3Ryb3kuYmluZChzd2lwZXIpLFxuICAgICAgICBzZXRIYXNoOiBIYXNoTmF2aWdhdGlvbi5zZXRIYXNoLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgb25IYXNoQ2FuZ2U6IEhhc2hOYXZpZ2F0aW9uLm9uSGFzaENhbmdlLmJpbmQoc3dpcGVyKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0sXG4gIG9uOiB7XG4gICAgaW5pdCgpIHtcbiAgICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5oYXNoTmF2aWdhdGlvbi5lbmFibGVkKSB7XG4gICAgICAgIHN3aXBlci5oYXNoTmF2aWdhdGlvbi5pbml0KCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkZXN0cm95KCkge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmhhc2hOYXZpZ2F0aW9uLmVuYWJsZWQpIHtcbiAgICAgICAgc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHRyYW5zaXRpb25FbmQoKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHN3aXBlci5oYXNoTmF2aWdhdGlvbi5pbml0aWFsaXplZCkge1xuICAgICAgICBzd2lwZXIuaGFzaE5hdmlnYXRpb24uc2V0SGFzaCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2xpZGVDaGFuZ2UoKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHN3aXBlci5oYXNoTmF2aWdhdGlvbi5pbml0aWFsaXplZCAmJiBzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICAgICAgc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLnNldEhhc2goKTtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxufTtcbiIsIi8qIGVzbGludCBuby11bmRlcnNjb3JlLWRhbmdsZTogXCJvZmZcIiAqL1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uL3V0aWxzL3V0aWxzJztcblxuY29uc3QgQXV0b3BsYXkgPSB7XG4gIHJ1bigpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGNvbnN0ICRhY3RpdmVTbGlkZUVsID0gc3dpcGVyLnNsaWRlcy5lcShzd2lwZXIuYWN0aXZlSW5kZXgpO1xuICAgIGxldCBkZWxheSA9IHN3aXBlci5wYXJhbXMuYXV0b3BsYXkuZGVsYXk7XG4gICAgaWYgKCRhY3RpdmVTbGlkZUVsLmF0dHIoJ2RhdGEtc3dpcGVyLWF1dG9wbGF5JykpIHtcbiAgICAgIGRlbGF5ID0gJGFjdGl2ZVNsaWRlRWwuYXR0cignZGF0YS1zd2lwZXItYXV0b3BsYXknKSB8fCBzd2lwZXIucGFyYW1zLmF1dG9wbGF5LmRlbGF5O1xuICAgIH1cbiAgICBjbGVhclRpbWVvdXQoc3dpcGVyLmF1dG9wbGF5LnRpbWVvdXQpO1xuICAgIHN3aXBlci5hdXRvcGxheS50aW1lb3V0ID0gVXRpbHMubmV4dFRpY2soKCkgPT4ge1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuYXV0b3BsYXkucmV2ZXJzZURpcmVjdGlvbikge1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVQcmV2KHN3aXBlci5wYXJhbXMuc3BlZWQsIHRydWUsIHRydWUpO1xuICAgICAgICAgIHN3aXBlci5lbWl0KCdhdXRvcGxheScpO1xuICAgICAgICB9IGVsc2UgaWYgKCFzd2lwZXIuaXNCZWdpbm5pbmcpIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVQcmV2KHN3aXBlci5wYXJhbXMuc3BlZWQsIHRydWUsIHRydWUpO1xuICAgICAgICAgIHN3aXBlci5lbWl0KCdhdXRvcGxheScpO1xuICAgICAgICB9IGVsc2UgaWYgKCFzd2lwZXIucGFyYW1zLmF1dG9wbGF5LnN0b3BPbkxhc3RTbGlkZSkge1xuICAgICAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gMSwgc3dpcGVyLnBhcmFtcy5zcGVlZCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgc3dpcGVyLmVtaXQoJ2F1dG9wbGF5Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgICAgICAgc3dpcGVyLnNsaWRlTmV4dChzd2lwZXIucGFyYW1zLnNwZWVkLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ2F1dG9wbGF5Jyk7XG4gICAgICB9IGVsc2UgaWYgKCFzd2lwZXIuaXNFbmQpIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlTmV4dChzd2lwZXIucGFyYW1zLnNwZWVkLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ2F1dG9wbGF5Jyk7XG4gICAgICB9IGVsc2UgaWYgKCFzd2lwZXIucGFyYW1zLmF1dG9wbGF5LnN0b3BPbkxhc3RTbGlkZSkge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbygwLCBzd2lwZXIucGFyYW1zLnNwZWVkLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ2F1dG9wbGF5Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIuYXV0b3BsYXkuc3RvcCgpO1xuICAgICAgfVxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuY3NzTW9kZSAmJiBzd2lwZXIuYXV0b3BsYXkucnVubmluZykgc3dpcGVyLmF1dG9wbGF5LnJ1bigpO1xuICAgIH0sIGRlbGF5KTtcbiAgfSxcbiAgc3RhcnQoKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHN3aXBlci5hdXRvcGxheS50aW1lb3V0ICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChzd2lwZXIuYXV0b3BsYXkucnVubmluZykgcmV0dXJuIGZhbHNlO1xuICAgIHN3aXBlci5hdXRvcGxheS5ydW5uaW5nID0gdHJ1ZTtcbiAgICBzd2lwZXIuZW1pdCgnYXV0b3BsYXlTdGFydCcpO1xuICAgIHN3aXBlci5hdXRvcGxheS5ydW4oKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgc3RvcCgpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGlmICghc3dpcGVyLmF1dG9wbGF5LnJ1bm5pbmcpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIHN3aXBlci5hdXRvcGxheS50aW1lb3V0ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKHN3aXBlci5hdXRvcGxheS50aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQoc3dpcGVyLmF1dG9wbGF5LnRpbWVvdXQpO1xuICAgICAgc3dpcGVyLmF1dG9wbGF5LnRpbWVvdXQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN3aXBlci5hdXRvcGxheS5ydW5uaW5nID0gZmFsc2U7XG4gICAgc3dpcGVyLmVtaXQoJ2F1dG9wbGF5U3RvcCcpO1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBwYXVzZShzcGVlZCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKCFzd2lwZXIuYXV0b3BsYXkucnVubmluZykgcmV0dXJuO1xuICAgIGlmIChzd2lwZXIuYXV0b3BsYXkucGF1c2VkKSByZXR1cm47XG4gICAgaWYgKHN3aXBlci5hdXRvcGxheS50aW1lb3V0KSBjbGVhclRpbWVvdXQoc3dpcGVyLmF1dG9wbGF5LnRpbWVvdXQpO1xuICAgIHN3aXBlci5hdXRvcGxheS5wYXVzZWQgPSB0cnVlO1xuICAgIGlmIChzcGVlZCA9PT0gMCB8fCAhc3dpcGVyLnBhcmFtcy5hdXRvcGxheS53YWl0Rm9yVHJhbnNpdGlvbikge1xuICAgICAgc3dpcGVyLmF1dG9wbGF5LnBhdXNlZCA9IGZhbHNlO1xuICAgICAgc3dpcGVyLmF1dG9wbGF5LnJ1bigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgc3dpcGVyLmF1dG9wbGF5Lm9uVHJhbnNpdGlvbkVuZCk7XG4gICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5hZGRFdmVudExpc3RlbmVyKCd3ZWJraXRUcmFuc2l0aW9uRW5kJywgc3dpcGVyLmF1dG9wbGF5Lm9uVHJhbnNpdGlvbkVuZCk7XG4gICAgfVxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXV0b3BsYXknLFxuICBwYXJhbXM6IHtcbiAgICBhdXRvcGxheToge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBkZWxheTogMzAwMCxcbiAgICAgIHdhaXRGb3JUcmFuc2l0aW9uOiB0cnVlLFxuICAgICAgZGlzYWJsZU9uSW50ZXJhY3Rpb246IHRydWUsXG4gICAgICBzdG9wT25MYXN0U2xpZGU6IGZhbHNlLFxuICAgICAgcmV2ZXJzZURpcmVjdGlvbjogZmFsc2UsXG4gICAgfSxcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgYXV0b3BsYXk6IHtcbiAgICAgICAgcnVubmluZzogZmFsc2UsXG4gICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgIHJ1bjogQXV0b3BsYXkucnVuLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgc3RhcnQ6IEF1dG9wbGF5LnN0YXJ0LmJpbmQoc3dpcGVyKSxcbiAgICAgICAgc3RvcDogQXV0b3BsYXkuc3RvcC5iaW5kKHN3aXBlciksXG4gICAgICAgIHBhdXNlOiBBdXRvcGxheS5wYXVzZS5iaW5kKHN3aXBlciksXG4gICAgICAgIG9uVmlzaWJpbGl0eUNoYW5nZSgpIHtcbiAgICAgICAgICBpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAnaGlkZGVuJyAmJiBzd2lwZXIuYXV0b3BsYXkucnVubmluZykge1xuICAgICAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnBhdXNlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICd2aXNpYmxlJyAmJiBzd2lwZXIuYXV0b3BsYXkucGF1c2VkKSB7XG4gICAgICAgICAgICBzd2lwZXIuYXV0b3BsYXkucnVuKCk7XG4gICAgICAgICAgICBzd2lwZXIuYXV0b3BsYXkucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvblRyYW5zaXRpb25FbmQoZSkge1xuICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQgfHwgIXN3aXBlci4kd3JhcHBlckVsKSByZXR1cm47XG4gICAgICAgICAgaWYgKGUudGFyZ2V0ICE9PSB0aGlzKSByZXR1cm47XG4gICAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIHN3aXBlci5hdXRvcGxheS5vblRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmtpdFRyYW5zaXRpb25FbmQnLCBzd2lwZXIuYXV0b3BsYXkub25UcmFuc2l0aW9uRW5kKTtcbiAgICAgICAgICBzd2lwZXIuYXV0b3BsYXkucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgaWYgKCFzd2lwZXIuYXV0b3BsYXkucnVubmluZykge1xuICAgICAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnN0b3AoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnJ1bigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0sXG4gIG9uOiB7XG4gICAgaW5pdCgpIHtcbiAgICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5lbmFibGVkKSB7XG4gICAgICAgIHN3aXBlci5hdXRvcGxheS5zdGFydCgpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgc3dpcGVyLmF1dG9wbGF5Lm9uVmlzaWJpbGl0eUNoYW5nZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBiZWZvcmVUcmFuc2l0aW9uU3RhcnQoc3BlZWQsIGludGVybmFsKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHN3aXBlci5hdXRvcGxheS5ydW5uaW5nKSB7XG4gICAgICAgIGlmIChpbnRlcm5hbCB8fCAhc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5kaXNhYmxlT25JbnRlcmFjdGlvbikge1xuICAgICAgICAgIHN3aXBlci5hdXRvcGxheS5wYXVzZShzcGVlZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgc2xpZGVyRmlyc3RNb3ZlKCkge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmIChzd2lwZXIuYXV0b3BsYXkucnVubmluZykge1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5kaXNhYmxlT25JbnRlcmFjdGlvbikge1xuICAgICAgICAgIHN3aXBlci5hdXRvcGxheS5zdG9wKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnBhdXNlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHRvdWNoRW5kKCkge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmNzc01vZGUgJiYgc3dpcGVyLmF1dG9wbGF5LnBhdXNlZCAmJiAhc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5kaXNhYmxlT25JbnRlcmFjdGlvbikge1xuICAgICAgICBzd2lwZXIuYXV0b3BsYXkucnVuKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkZXN0cm95KCkge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmIChzd2lwZXIuYXV0b3BsYXkucnVubmluZykge1xuICAgICAgICBzd2lwZXIuYXV0b3BsYXkuc3RvcCgpO1xuICAgICAgfVxuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIHN3aXBlci5hdXRvcGxheS5vblZpc2liaWxpdHlDaGFuZ2UpO1xuICAgIH0sXG4gIH0sXG59O1xuIiwiaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uL3V0aWxzL3V0aWxzJztcblxuY29uc3QgRmFkZSA9IHtcbiAgc2V0VHJhbnNsYXRlKCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgY29uc3QgeyBzbGlkZXMgfSA9IHN3aXBlcjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgY29uc3QgJHNsaWRlRWwgPSBzd2lwZXIuc2xpZGVzLmVxKGkpO1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gJHNsaWRlRWxbMF0uc3dpcGVyU2xpZGVPZmZzZXQ7XG4gICAgICBsZXQgdHggPSAtb2Zmc2V0O1xuICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnZpcnR1YWxUcmFuc2xhdGUpIHR4IC09IHN3aXBlci50cmFuc2xhdGU7XG4gICAgICBsZXQgdHkgPSAwO1xuICAgICAgaWYgKCFzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgdHkgPSB0eDtcbiAgICAgICAgdHggPSAwO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2xpZGVPcGFjaXR5ID0gc3dpcGVyLnBhcmFtcy5mYWRlRWZmZWN0LmNyb3NzRmFkZVxuICAgICAgICA/IE1hdGgubWF4KDEgLSBNYXRoLmFicygkc2xpZGVFbFswXS5wcm9ncmVzcyksIDApXG4gICAgICAgIDogMSArIE1hdGgubWluKE1hdGgubWF4KCRzbGlkZUVsWzBdLnByb2dyZXNzLCAtMSksIDApO1xuICAgICAgJHNsaWRlRWxcbiAgICAgICAgLmNzcyh7XG4gICAgICAgICAgb3BhY2l0eTogc2xpZGVPcGFjaXR5LFxuICAgICAgICB9KVxuICAgICAgICAudHJhbnNmb3JtKGB0cmFuc2xhdGUzZCgke3R4fXB4LCAke3R5fXB4LCAwcHgpYCk7XG4gICAgfVxuICB9LFxuICBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBjb25zdCB7IHNsaWRlcywgJHdyYXBwZXJFbCB9ID0gc3dpcGVyO1xuICAgIHNsaWRlcy50cmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy52aXJ0dWFsVHJhbnNsYXRlICYmIGR1cmF0aW9uICE9PSAwKSB7XG4gICAgICBsZXQgZXZlbnRUcmlnZ2VyZWQgPSBmYWxzZTtcbiAgICAgIHNsaWRlcy50cmFuc2l0aW9uRW5kKCgpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50VHJpZ2dlcmVkKSByZXR1cm47XG4gICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHJldHVybjtcbiAgICAgICAgZXZlbnRUcmlnZ2VyZWQgPSB0cnVlO1xuICAgICAgICBzd2lwZXIuYW5pbWF0aW5nID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBbJ3dlYmtpdFRyYW5zaXRpb25FbmQnLCAndHJhbnNpdGlvbmVuZCddO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRyaWdnZXJFdmVudHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAkd3JhcHBlckVsLnRyaWdnZXIodHJpZ2dlckV2ZW50c1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2VmZmVjdC1mYWRlJyxcbiAgcGFyYW1zOiB7XG4gICAgZmFkZUVmZmVjdDoge1xuICAgICAgY3Jvc3NGYWRlOiBmYWxzZSxcbiAgICB9LFxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICBmYWRlRWZmZWN0OiB7XG4gICAgICAgIHNldFRyYW5zbGF0ZTogRmFkZS5zZXRUcmFuc2xhdGUuYmluZChzd2lwZXIpLFxuICAgICAgICBzZXRUcmFuc2l0aW9uOiBGYWRlLnNldFRyYW5zaXRpb24uYmluZChzd2lwZXIpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSxcbiAgb246IHtcbiAgICBiZWZvcmVJbml0KCkge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2ZhZGUnKSByZXR1cm47XG4gICAgICBzd2lwZXIuY2xhc3NOYW1lcy5wdXNoKGAke3N3aXBlci5wYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzc31mYWRlYCk7XG4gICAgICBjb25zdCBvdmVyd3JpdGVQYXJhbXMgPSB7XG4gICAgICAgIHNsaWRlc1BlclZpZXc6IDEsXG4gICAgICAgIHNsaWRlc1BlckNvbHVtbjogMSxcbiAgICAgICAgc2xpZGVzUGVyR3JvdXA6IDEsXG4gICAgICAgIHdhdGNoU2xpZGVzUHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgIHNwYWNlQmV0d2VlbjogMCxcbiAgICAgICAgdmlydHVhbFRyYW5zbGF0ZTogdHJ1ZSxcbiAgICAgIH07XG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLnBhcmFtcywgb3ZlcndyaXRlUGFyYW1zKTtcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIub3JpZ2luYWxQYXJhbXMsIG92ZXJ3cml0ZVBhcmFtcyk7XG4gICAgfSxcbiAgICBzZXRUcmFuc2xhdGUoKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZWZmZWN0ICE9PSAnZmFkZScpIHJldHVybjtcbiAgICAgIHN3aXBlci5mYWRlRWZmZWN0LnNldFRyYW5zbGF0ZSgpO1xuICAgIH0sXG4gICAgc2V0VHJhbnNpdGlvbihkdXJhdGlvbikge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2ZhZGUnKSByZXR1cm47XG4gICAgICBzd2lwZXIuZmFkZUVmZmVjdC5zZXRUcmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgICB9LFxuICB9LFxufTtcbiIsImltcG9ydCAkIGZyb20gJy4uLy4uL3V0aWxzL2RvbSc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnO1xuaW1wb3J0IEJyb3dzZXIgZnJvbSAnLi4vLi4vdXRpbHMvYnJvd3Nlcic7XG5cbmNvbnN0IEN1YmUgPSB7XG4gIHNldFRyYW5zbGF0ZSgpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGNvbnN0IHtcbiAgICAgICRlbCwgJHdyYXBwZXJFbCwgc2xpZGVzLCB3aWR0aDogc3dpcGVyV2lkdGgsIGhlaWdodDogc3dpcGVySGVpZ2h0LCBydGxUcmFuc2xhdGU6IHJ0bCwgc2l6ZTogc3dpcGVyU2l6ZSxcbiAgICB9ID0gc3dpcGVyO1xuICAgIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuY3ViZUVmZmVjdDtcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCk7XG4gICAgY29uc3QgaXNWaXJ0dWFsID0gc3dpcGVyLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQ7XG4gICAgbGV0IHdyYXBwZXJSb3RhdGUgPSAwO1xuICAgIGxldCAkY3ViZVNoYWRvd0VsO1xuICAgIGlmIChwYXJhbXMuc2hhZG93KSB7XG4gICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICRjdWJlU2hhZG93RWwgPSAkd3JhcHBlckVsLmZpbmQoJy5zd2lwZXItY3ViZS1zaGFkb3cnKTtcbiAgICAgICAgaWYgKCRjdWJlU2hhZG93RWwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgJGN1YmVTaGFkb3dFbCA9ICQoJzxkaXYgY2xhc3M9XCJzd2lwZXItY3ViZS1zaGFkb3dcIj48L2Rpdj4nKTtcbiAgICAgICAgICAkd3JhcHBlckVsLmFwcGVuZCgkY3ViZVNoYWRvd0VsKTtcbiAgICAgICAgfVxuICAgICAgICAkY3ViZVNoYWRvd0VsLmNzcyh7IGhlaWdodDogYCR7c3dpcGVyV2lkdGh9cHhgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJGN1YmVTaGFkb3dFbCA9ICRlbC5maW5kKCcuc3dpcGVyLWN1YmUtc2hhZG93Jyk7XG4gICAgICAgIGlmICgkY3ViZVNoYWRvd0VsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICRjdWJlU2hhZG93RWwgPSAkKCc8ZGl2IGNsYXNzPVwic3dpcGVyLWN1YmUtc2hhZG93XCI+PC9kaXY+Jyk7XG4gICAgICAgICAgJGVsLmFwcGVuZCgkY3ViZVNoYWRvd0VsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgY29uc3QgJHNsaWRlRWwgPSBzbGlkZXMuZXEoaSk7XG4gICAgICBsZXQgc2xpZGVJbmRleCA9IGk7XG4gICAgICBpZiAoaXNWaXJ0dWFsKSB7XG4gICAgICAgIHNsaWRlSW5kZXggPSBwYXJzZUludCgkc2xpZGVFbC5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpLCAxMCk7XG4gICAgICB9XG4gICAgICBsZXQgc2xpZGVBbmdsZSA9IHNsaWRlSW5kZXggKiA5MDtcbiAgICAgIGxldCByb3VuZCA9IE1hdGguZmxvb3Ioc2xpZGVBbmdsZSAvIDM2MCk7XG4gICAgICBpZiAocnRsKSB7XG4gICAgICAgIHNsaWRlQW5nbGUgPSAtc2xpZGVBbmdsZTtcbiAgICAgICAgcm91bmQgPSBNYXRoLmZsb29yKC1zbGlkZUFuZ2xlIC8gMzYwKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHByb2dyZXNzID0gTWF0aC5tYXgoTWF0aC5taW4oJHNsaWRlRWxbMF0ucHJvZ3Jlc3MsIDEpLCAtMSk7XG4gICAgICBsZXQgdHggPSAwO1xuICAgICAgbGV0IHR5ID0gMDtcbiAgICAgIGxldCB0eiA9IDA7XG4gICAgICBpZiAoc2xpZGVJbmRleCAlIDQgPT09IDApIHtcbiAgICAgICAgdHggPSAtcm91bmQgKiA0ICogc3dpcGVyU2l6ZTtcbiAgICAgICAgdHogPSAwO1xuICAgICAgfSBlbHNlIGlmICgoc2xpZGVJbmRleCAtIDEpICUgNCA9PT0gMCkge1xuICAgICAgICB0eCA9IDA7XG4gICAgICAgIHR6ID0gLXJvdW5kICogNCAqIHN3aXBlclNpemU7XG4gICAgICB9IGVsc2UgaWYgKChzbGlkZUluZGV4IC0gMikgJSA0ID09PSAwKSB7XG4gICAgICAgIHR4ID0gc3dpcGVyU2l6ZSArIChyb3VuZCAqIDQgKiBzd2lwZXJTaXplKTtcbiAgICAgICAgdHogPSBzd2lwZXJTaXplO1xuICAgICAgfSBlbHNlIGlmICgoc2xpZGVJbmRleCAtIDMpICUgNCA9PT0gMCkge1xuICAgICAgICB0eCA9IC1zd2lwZXJTaXplO1xuICAgICAgICB0eiA9ICgzICogc3dpcGVyU2l6ZSkgKyAoc3dpcGVyU2l6ZSAqIDQgKiByb3VuZCk7XG4gICAgICB9XG4gICAgICBpZiAocnRsKSB7XG4gICAgICAgIHR4ID0gLXR4O1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzSG9yaXpvbnRhbCkge1xuICAgICAgICB0eSA9IHR4O1xuICAgICAgICB0eCA9IDA7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IGByb3RhdGVYKCR7aXNIb3Jpem9udGFsID8gMCA6IC1zbGlkZUFuZ2xlfWRlZykgcm90YXRlWSgke2lzSG9yaXpvbnRhbCA/IHNsaWRlQW5nbGUgOiAwfWRlZykgdHJhbnNsYXRlM2QoJHt0eH1weCwgJHt0eX1weCwgJHt0en1weClgO1xuICAgICAgaWYgKHByb2dyZXNzIDw9IDEgJiYgcHJvZ3Jlc3MgPiAtMSkge1xuICAgICAgICB3cmFwcGVyUm90YXRlID0gKHNsaWRlSW5kZXggKiA5MCkgKyAocHJvZ3Jlc3MgKiA5MCk7XG4gICAgICAgIGlmIChydGwpIHdyYXBwZXJSb3RhdGUgPSAoLXNsaWRlSW5kZXggKiA5MCkgLSAocHJvZ3Jlc3MgKiA5MCk7XG4gICAgICB9XG4gICAgICAkc2xpZGVFbC50cmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgICAgIGlmIChwYXJhbXMuc2xpZGVTaGFkb3dzKSB7XG4gICAgICAgIC8vIFNldCBzaGFkb3dzXG4gICAgICAgIGxldCBzaGFkb3dCZWZvcmUgPSBpc0hvcml6b250YWwgPyAkc2xpZGVFbC5maW5kKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy1sZWZ0JykgOiAkc2xpZGVFbC5maW5kKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3AnKTtcbiAgICAgICAgbGV0IHNoYWRvd0FmdGVyID0gaXNIb3Jpem9udGFsID8gJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQnKSA6ICRzbGlkZUVsLmZpbmQoJy5zd2lwZXItc2xpZGUtc2hhZG93LWJvdHRvbScpO1xuICAgICAgICBpZiAoc2hhZG93QmVmb3JlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHNoYWRvd0JlZm9yZSA9ICQoYDxkaXYgY2xhc3M9XCJzd2lwZXItc2xpZGUtc2hhZG93LSR7aXNIb3Jpem9udGFsID8gJ2xlZnQnIDogJ3RvcCd9XCI+PC9kaXY+YCk7XG4gICAgICAgICAgJHNsaWRlRWwuYXBwZW5kKHNoYWRvd0JlZm9yZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNoYWRvd0FmdGVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHNoYWRvd0FmdGVyID0gJChgPGRpdiBjbGFzcz1cInN3aXBlci1zbGlkZS1zaGFkb3ctJHtpc0hvcml6b250YWwgPyAncmlnaHQnIDogJ2JvdHRvbSd9XCI+PC9kaXY+YCk7XG4gICAgICAgICAgJHNsaWRlRWwuYXBwZW5kKHNoYWRvd0FmdGVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hhZG93QmVmb3JlLmxlbmd0aCkgc2hhZG93QmVmb3JlWzBdLnN0eWxlLm9wYWNpdHkgPSBNYXRoLm1heCgtcHJvZ3Jlc3MsIDApO1xuICAgICAgICBpZiAoc2hhZG93QWZ0ZXIubGVuZ3RoKSBzaGFkb3dBZnRlclswXS5zdHlsZS5vcGFjaXR5ID0gTWF0aC5tYXgocHJvZ3Jlc3MsIDApO1xuICAgICAgfVxuICAgIH1cbiAgICAkd3JhcHBlckVsLmNzcyh7XG4gICAgICAnLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luJzogYDUwJSA1MCUgLSR7c3dpcGVyU2l6ZSAvIDJ9cHhgLFxuICAgICAgJy1tb3otdHJhbnNmb3JtLW9yaWdpbic6IGA1MCUgNTAlIC0ke3N3aXBlclNpemUgLyAyfXB4YCxcbiAgICAgICctbXMtdHJhbnNmb3JtLW9yaWdpbic6IGA1MCUgNTAlIC0ke3N3aXBlclNpemUgLyAyfXB4YCxcbiAgICAgICd0cmFuc2Zvcm0tb3JpZ2luJzogYDUwJSA1MCUgLSR7c3dpcGVyU2l6ZSAvIDJ9cHhgLFxuICAgIH0pO1xuXG4gICAgaWYgKHBhcmFtcy5zaGFkb3cpIHtcbiAgICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgJGN1YmVTaGFkb3dFbC50cmFuc2Zvcm0oYHRyYW5zbGF0ZTNkKDBweCwgJHsoc3dpcGVyV2lkdGggLyAyKSArIHBhcmFtcy5zaGFkb3dPZmZzZXR9cHgsICR7LXN3aXBlcldpZHRoIC8gMn1weCkgcm90YXRlWCg5MGRlZykgcm90YXRlWigwZGVnKSBzY2FsZSgke3BhcmFtcy5zaGFkb3dTY2FsZX0pYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzaGFkb3dBbmdsZSA9IE1hdGguYWJzKHdyYXBwZXJSb3RhdGUpIC0gKE1hdGguZmxvb3IoTWF0aC5hYnMod3JhcHBlclJvdGF0ZSkgLyA5MCkgKiA5MCk7XG4gICAgICAgIGNvbnN0IG11bHRpcGxpZXIgPSAxLjUgLSAoXG4gICAgICAgICAgKE1hdGguc2luKChzaGFkb3dBbmdsZSAqIDIgKiBNYXRoLlBJKSAvIDM2MCkgLyAyKVxuICAgICAgICAgICsgKE1hdGguY29zKChzaGFkb3dBbmdsZSAqIDIgKiBNYXRoLlBJKSAvIDM2MCkgLyAyKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBzY2FsZTEgPSBwYXJhbXMuc2hhZG93U2NhbGU7XG4gICAgICAgIGNvbnN0IHNjYWxlMiA9IHBhcmFtcy5zaGFkb3dTY2FsZSAvIG11bHRpcGxpZXI7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHBhcmFtcy5zaGFkb3dPZmZzZXQ7XG4gICAgICAgICRjdWJlU2hhZG93RWwudHJhbnNmb3JtKGBzY2FsZTNkKCR7c2NhbGUxfSwgMSwgJHtzY2FsZTJ9KSB0cmFuc2xhdGUzZCgwcHgsICR7KHN3aXBlckhlaWdodCAvIDIpICsgb2Zmc2V0fXB4LCAkey1zd2lwZXJIZWlnaHQgLyAyIC8gc2NhbGUyfXB4KSByb3RhdGVYKC05MGRlZylgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgekZhY3RvciA9IChCcm93c2VyLmlzU2FmYXJpIHx8IEJyb3dzZXIuaXNXZWJWaWV3KSA/ICgtc3dpcGVyU2l6ZSAvIDIpIDogMDtcbiAgICAkd3JhcHBlckVsXG4gICAgICAudHJhbnNmb3JtKGB0cmFuc2xhdGUzZCgwcHgsMCwke3pGYWN0b3J9cHgpIHJvdGF0ZVgoJHtzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAwIDogd3JhcHBlclJvdGF0ZX1kZWcpIHJvdGF0ZVkoJHtzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAtd3JhcHBlclJvdGF0ZSA6IDB9ZGVnKWApO1xuICB9LFxuICBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBjb25zdCB7ICRlbCwgc2xpZGVzIH0gPSBzd2lwZXI7XG4gICAgc2xpZGVzXG4gICAgICAudHJhbnNpdGlvbihkdXJhdGlvbilcbiAgICAgIC5maW5kKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3AsIC5zd2lwZXItc2xpZGUtc2hhZG93LXJpZ2h0LCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1ib3R0b20sIC5zd2lwZXItc2xpZGUtc2hhZG93LWxlZnQnKVxuICAgICAgLnRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgIGlmIChzd2lwZXIucGFyYW1zLmN1YmVFZmZlY3Quc2hhZG93ICYmICFzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICRlbC5maW5kKCcuc3dpcGVyLWN1YmUtc2hhZG93JykudHJhbnNpdGlvbihkdXJhdGlvbik7XG4gICAgfVxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZWZmZWN0LWN1YmUnLFxuICBwYXJhbXM6IHtcbiAgICBjdWJlRWZmZWN0OiB7XG4gICAgICBzbGlkZVNoYWRvd3M6IHRydWUsXG4gICAgICBzaGFkb3c6IHRydWUsXG4gICAgICBzaGFkb3dPZmZzZXQ6IDIwLFxuICAgICAgc2hhZG93U2NhbGU6IDAuOTQsXG4gICAgfSxcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgY3ViZUVmZmVjdDoge1xuICAgICAgICBzZXRUcmFuc2xhdGU6IEN1YmUuc2V0VHJhbnNsYXRlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgc2V0VHJhbnNpdGlvbjogQ3ViZS5zZXRUcmFuc2l0aW9uLmJpbmQoc3dpcGVyKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0sXG4gIG9uOiB7XG4gICAgYmVmb3JlSW5pdCgpIHtcbiAgICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5lZmZlY3QgIT09ICdjdWJlJykgcmV0dXJuO1xuICAgICAgc3dpcGVyLmNsYXNzTmFtZXMucHVzaChgJHtzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3N9Y3ViZWApO1xuICAgICAgc3dpcGVyLmNsYXNzTmFtZXMucHVzaChgJHtzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3N9M2RgKTtcbiAgICAgIGNvbnN0IG92ZXJ3cml0ZVBhcmFtcyA9IHtcbiAgICAgICAgc2xpZGVzUGVyVmlldzogMSxcbiAgICAgICAgc2xpZGVzUGVyQ29sdW1uOiAxLFxuICAgICAgICBzbGlkZXNQZXJHcm91cDogMSxcbiAgICAgICAgd2F0Y2hTbGlkZXNQcm9ncmVzczogdHJ1ZSxcbiAgICAgICAgcmVzaXN0YW5jZVJhdGlvOiAwLFxuICAgICAgICBzcGFjZUJldHdlZW46IDAsXG4gICAgICAgIGNlbnRlcmVkU2xpZGVzOiBmYWxzZSxcbiAgICAgICAgdmlydHVhbFRyYW5zbGF0ZTogdHJ1ZSxcbiAgICAgIH07XG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLnBhcmFtcywgb3ZlcndyaXRlUGFyYW1zKTtcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIub3JpZ2luYWxQYXJhbXMsIG92ZXJ3cml0ZVBhcmFtcyk7XG4gICAgfSxcbiAgICBzZXRUcmFuc2xhdGUoKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZWZmZWN0ICE9PSAnY3ViZScpIHJldHVybjtcbiAgICAgIHN3aXBlci5jdWJlRWZmZWN0LnNldFRyYW5zbGF0ZSgpO1xuICAgIH0sXG4gICAgc2V0VHJhbnNpdGlvbihkdXJhdGlvbikge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2N1YmUnKSByZXR1cm47XG4gICAgICBzd2lwZXIuY3ViZUVmZmVjdC5zZXRUcmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgICB9LFxuICB9LFxufTtcbiIsImltcG9ydCAkIGZyb20gJy4uLy4uL3V0aWxzL2RvbSc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnO1xuXG5jb25zdCBGbGlwID0ge1xuICBzZXRUcmFuc2xhdGUoKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBjb25zdCB7IHNsaWRlcywgcnRsVHJhbnNsYXRlOiBydGwgfSA9IHN3aXBlcjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgY29uc3QgJHNsaWRlRWwgPSBzbGlkZXMuZXEoaSk7XG4gICAgICBsZXQgcHJvZ3Jlc3MgPSAkc2xpZGVFbFswXS5wcm9ncmVzcztcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmZsaXBFZmZlY3QubGltaXRSb3RhdGlvbikge1xuICAgICAgICBwcm9ncmVzcyA9IE1hdGgubWF4KE1hdGgubWluKCRzbGlkZUVsWzBdLnByb2dyZXNzLCAxKSwgLTEpO1xuICAgICAgfVxuICAgICAgY29uc3Qgb2Zmc2V0ID0gJHNsaWRlRWxbMF0uc3dpcGVyU2xpZGVPZmZzZXQ7XG4gICAgICBjb25zdCByb3RhdGUgPSAtMTgwICogcHJvZ3Jlc3M7XG4gICAgICBsZXQgcm90YXRlWSA9IHJvdGF0ZTtcbiAgICAgIGxldCByb3RhdGVYID0gMDtcbiAgICAgIGxldCB0eCA9IC1vZmZzZXQ7XG4gICAgICBsZXQgdHkgPSAwO1xuICAgICAgaWYgKCFzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgdHkgPSB0eDtcbiAgICAgICAgdHggPSAwO1xuICAgICAgICByb3RhdGVYID0gLXJvdGF0ZVk7XG4gICAgICAgIHJvdGF0ZVkgPSAwO1xuICAgICAgfSBlbHNlIGlmIChydGwpIHtcbiAgICAgICAgcm90YXRlWSA9IC1yb3RhdGVZO1xuICAgICAgfVxuXG4gICAgICAkc2xpZGVFbFswXS5zdHlsZS56SW5kZXggPSAtTWF0aC5hYnMoTWF0aC5yb3VuZChwcm9ncmVzcykpICsgc2xpZGVzLmxlbmd0aDtcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZmxpcEVmZmVjdC5zbGlkZVNoYWRvd3MpIHtcbiAgICAgICAgLy8gU2V0IHNoYWRvd3NcbiAgICAgICAgbGV0IHNoYWRvd0JlZm9yZSA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/ICRzbGlkZUVsLmZpbmQoJy5zd2lwZXItc2xpZGUtc2hhZG93LWxlZnQnKSA6ICRzbGlkZUVsLmZpbmQoJy5zd2lwZXItc2xpZGUtc2hhZG93LXRvcCcpO1xuICAgICAgICBsZXQgc2hhZG93QWZ0ZXIgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAkc2xpZGVFbC5maW5kKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy1yaWdodCcpIDogJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctYm90dG9tJyk7XG4gICAgICAgIGlmIChzaGFkb3dCZWZvcmUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgc2hhZG93QmVmb3JlID0gJChgPGRpdiBjbGFzcz1cInN3aXBlci1zbGlkZS1zaGFkb3ctJHtzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAnbGVmdCcgOiAndG9wJ31cIj48L2Rpdj5gKTtcbiAgICAgICAgICAkc2xpZGVFbC5hcHBlbmQoc2hhZG93QmVmb3JlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hhZG93QWZ0ZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgc2hhZG93QWZ0ZXIgPSAkKGA8ZGl2IGNsYXNzPVwic3dpcGVyLXNsaWRlLXNoYWRvdy0ke3N3aXBlci5pc0hvcml6b250YWwoKSA/ICdyaWdodCcgOiAnYm90dG9tJ31cIj48L2Rpdj5gKTtcbiAgICAgICAgICAkc2xpZGVFbC5hcHBlbmQoc2hhZG93QWZ0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaGFkb3dCZWZvcmUubGVuZ3RoKSBzaGFkb3dCZWZvcmVbMF0uc3R5bGUub3BhY2l0eSA9IE1hdGgubWF4KC1wcm9ncmVzcywgMCk7XG4gICAgICAgIGlmIChzaGFkb3dBZnRlci5sZW5ndGgpIHNoYWRvd0FmdGVyWzBdLnN0eWxlLm9wYWNpdHkgPSBNYXRoLm1heChwcm9ncmVzcywgMCk7XG4gICAgICB9XG4gICAgICAkc2xpZGVFbFxuICAgICAgICAudHJhbnNmb3JtKGB0cmFuc2xhdGUzZCgke3R4fXB4LCAke3R5fXB4LCAwcHgpIHJvdGF0ZVgoJHtyb3RhdGVYfWRlZykgcm90YXRlWSgke3JvdGF0ZVl9ZGVnKWApO1xuICAgIH1cbiAgfSxcbiAgc2V0VHJhbnNpdGlvbihkdXJhdGlvbikge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgY29uc3QgeyBzbGlkZXMsIGFjdGl2ZUluZGV4LCAkd3JhcHBlckVsIH0gPSBzd2lwZXI7XG4gICAgc2xpZGVzXG4gICAgICAudHJhbnNpdGlvbihkdXJhdGlvbilcbiAgICAgIC5maW5kKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3AsIC5zd2lwZXItc2xpZGUtc2hhZG93LXJpZ2h0LCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1ib3R0b20sIC5zd2lwZXItc2xpZGUtc2hhZG93LWxlZnQnKVxuICAgICAgLnRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgIGlmIChzd2lwZXIucGFyYW1zLnZpcnR1YWxUcmFuc2xhdGUgJiYgZHVyYXRpb24gIT09IDApIHtcbiAgICAgIGxldCBldmVudFRyaWdnZXJlZCA9IGZhbHNlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICBzbGlkZXMuZXEoYWN0aXZlSW5kZXgpLnRyYW5zaXRpb25FbmQoZnVuY3Rpb24gb25UcmFuc2l0aW9uRW5kKCkge1xuICAgICAgICBpZiAoZXZlbnRUcmlnZ2VyZWQpIHJldHVybjtcbiAgICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgICAvLyBpZiAoISQodGhpcykuaGFzQ2xhc3Moc3dpcGVyLnBhcmFtcy5zbGlkZUFjdGl2ZUNsYXNzKSkgcmV0dXJuO1xuICAgICAgICBldmVudFRyaWdnZXJlZCA9IHRydWU7XG4gICAgICAgIHN3aXBlci5hbmltYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IFsnd2Via2l0VHJhbnNpdGlvbkVuZCcsICd0cmFuc2l0aW9uZW5kJ107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJpZ2dlckV2ZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICR3cmFwcGVyRWwudHJpZ2dlcih0cmlnZ2VyRXZlbnRzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZWZmZWN0LWZsaXAnLFxuICBwYXJhbXM6IHtcbiAgICBmbGlwRWZmZWN0OiB7XG4gICAgICBzbGlkZVNoYWRvd3M6IHRydWUsXG4gICAgICBsaW1pdFJvdGF0aW9uOiB0cnVlLFxuICAgIH0sXG4gIH0sXG4gIGNyZWF0ZSgpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgIGZsaXBFZmZlY3Q6IHtcbiAgICAgICAgc2V0VHJhbnNsYXRlOiBGbGlwLnNldFRyYW5zbGF0ZS5iaW5kKHN3aXBlciksXG4gICAgICAgIHNldFRyYW5zaXRpb246IEZsaXAuc2V0VHJhbnNpdGlvbi5iaW5kKHN3aXBlciksXG4gICAgICB9LFxuICAgIH0pO1xuICB9LFxuICBvbjoge1xuICAgIGJlZm9yZUluaXQoKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZWZmZWN0ICE9PSAnZmxpcCcpIHJldHVybjtcbiAgICAgIHN3aXBlci5jbGFzc05hbWVzLnB1c2goYCR7c3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzfWZsaXBgKTtcbiAgICAgIHN3aXBlci5jbGFzc05hbWVzLnB1c2goYCR7c3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzfTNkYCk7XG4gICAgICBjb25zdCBvdmVyd3JpdGVQYXJhbXMgPSB7XG4gICAgICAgIHNsaWRlc1BlclZpZXc6IDEsXG4gICAgICAgIHNsaWRlc1BlckNvbHVtbjogMSxcbiAgICAgICAgc2xpZGVzUGVyR3JvdXA6IDEsXG4gICAgICAgIHdhdGNoU2xpZGVzUHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgIHNwYWNlQmV0d2VlbjogMCxcbiAgICAgICAgdmlydHVhbFRyYW5zbGF0ZTogdHJ1ZSxcbiAgICAgIH07XG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLnBhcmFtcywgb3ZlcndyaXRlUGFyYW1zKTtcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIub3JpZ2luYWxQYXJhbXMsIG92ZXJ3cml0ZVBhcmFtcyk7XG4gICAgfSxcbiAgICBzZXRUcmFuc2xhdGUoKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZWZmZWN0ICE9PSAnZmxpcCcpIHJldHVybjtcbiAgICAgIHN3aXBlci5mbGlwRWZmZWN0LnNldFRyYW5zbGF0ZSgpO1xuICAgIH0sXG4gICAgc2V0VHJhbnNpdGlvbihkdXJhdGlvbikge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2ZsaXAnKSByZXR1cm47XG4gICAgICBzd2lwZXIuZmxpcEVmZmVjdC5zZXRUcmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgICB9LFxuICB9LFxufTtcbiIsImltcG9ydCAkIGZyb20gJy4uLy4uL3V0aWxzL2RvbSc7XG5pbXBvcnQgU3VwcG9ydCBmcm9tICcuLi8uLi91dGlscy9zdXBwb3J0JztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5cbmNvbnN0IENvdmVyZmxvdyA9IHtcbiAgc2V0VHJhbnNsYXRlKCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgY29uc3Qge1xuICAgICAgd2lkdGg6IHN3aXBlcldpZHRoLCBoZWlnaHQ6IHN3aXBlckhlaWdodCwgc2xpZGVzLCAkd3JhcHBlckVsLCBzbGlkZXNTaXplc0dyaWQsXG4gICAgfSA9IHN3aXBlcjtcbiAgICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLmNvdmVyZmxvd0VmZmVjdDtcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCk7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gc3dpcGVyLnRyYW5zbGF0ZTtcbiAgICBjb25zdCBjZW50ZXIgPSBpc0hvcml6b250YWwgPyAtdHJhbnNmb3JtICsgKHN3aXBlcldpZHRoIC8gMikgOiAtdHJhbnNmb3JtICsgKHN3aXBlckhlaWdodCAvIDIpO1xuICAgIGNvbnN0IHJvdGF0ZSA9IGlzSG9yaXpvbnRhbCA/IHBhcmFtcy5yb3RhdGUgOiAtcGFyYW1zLnJvdGF0ZTtcbiAgICBjb25zdCB0cmFuc2xhdGUgPSBwYXJhbXMuZGVwdGg7XG4gICAgLy8gRWFjaCBzbGlkZSBvZmZzZXQgZnJvbSBjZW50ZXJcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuZ3RoID0gc2xpZGVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBjb25zdCAkc2xpZGVFbCA9IHNsaWRlcy5lcShpKTtcbiAgICAgIGNvbnN0IHNsaWRlU2l6ZSA9IHNsaWRlc1NpemVzR3JpZFtpXTtcbiAgICAgIGNvbnN0IHNsaWRlT2Zmc2V0ID0gJHNsaWRlRWxbMF0uc3dpcGVyU2xpZGVPZmZzZXQ7XG4gICAgICBjb25zdCBvZmZzZXRNdWx0aXBsaWVyID0gKChjZW50ZXIgLSBzbGlkZU9mZnNldCAtIChzbGlkZVNpemUgLyAyKSkgLyBzbGlkZVNpemUpICogcGFyYW1zLm1vZGlmaWVyO1xuXG4gICAgICBsZXQgcm90YXRlWSA9IGlzSG9yaXpvbnRhbCA/IHJvdGF0ZSAqIG9mZnNldE11bHRpcGxpZXIgOiAwO1xuICAgICAgbGV0IHJvdGF0ZVggPSBpc0hvcml6b250YWwgPyAwIDogcm90YXRlICogb2Zmc2V0TXVsdGlwbGllcjtcbiAgICAgIC8vIHZhciByb3RhdGVaID0gMFxuICAgICAgbGV0IHRyYW5zbGF0ZVogPSAtdHJhbnNsYXRlICogTWF0aC5hYnMob2Zmc2V0TXVsdGlwbGllcik7XG5cbiAgICAgIGxldCBzdHJldGNoID0gcGFyYW1zLnN0cmV0Y2g7XG4gICAgICAvLyBBbGxvdyBwZXJjZW50YWdlIHRvIG1ha2UgYSByZWxhdGl2ZSBzdHJldGNoIGZvciByZXNwb25zaXZlIHNsaWRlcnNcbiAgICAgIGlmICh0eXBlb2Ygc3RyZXRjaCA9PT0gJ3N0cmluZycgJiYgc3RyZXRjaC5pbmRleE9mKCclJykgIT09IC0xKSB7XG4gICAgICAgIHN0cmV0Y2ggPSAoKHBhcnNlRmxvYXQocGFyYW1zLnN0cmV0Y2gpIC8gMTAwKSAqIHNsaWRlU2l6ZSk7XG4gICAgICB9XG4gICAgICBsZXQgdHJhbnNsYXRlWSA9IGlzSG9yaXpvbnRhbCA/IDAgOiBzdHJldGNoICogKG9mZnNldE11bHRpcGxpZXIpO1xuICAgICAgbGV0IHRyYW5zbGF0ZVggPSBpc0hvcml6b250YWwgPyBzdHJldGNoICogKG9mZnNldE11bHRpcGxpZXIpIDogMDtcblxuICAgICAgbGV0IHNjYWxlID0gMSAtICgxIC0gcGFyYW1zLnNjYWxlKSAqIE1hdGguYWJzKG9mZnNldE11bHRpcGxpZXIpO1xuXG4gICAgICAvLyBGaXggZm9yIHVsdHJhIHNtYWxsIHZhbHVlc1xuICAgICAgaWYgKE1hdGguYWJzKHRyYW5zbGF0ZVgpIDwgMC4wMDEpIHRyYW5zbGF0ZVggPSAwO1xuICAgICAgaWYgKE1hdGguYWJzKHRyYW5zbGF0ZVkpIDwgMC4wMDEpIHRyYW5zbGF0ZVkgPSAwO1xuICAgICAgaWYgKE1hdGguYWJzKHRyYW5zbGF0ZVopIDwgMC4wMDEpIHRyYW5zbGF0ZVogPSAwO1xuICAgICAgaWYgKE1hdGguYWJzKHJvdGF0ZVkpIDwgMC4wMDEpIHJvdGF0ZVkgPSAwO1xuICAgICAgaWYgKE1hdGguYWJzKHJvdGF0ZVgpIDwgMC4wMDEpIHJvdGF0ZVggPSAwO1xuICAgICAgaWYgKE1hdGguYWJzKHNjYWxlKSA8IDAuMDAxKSBzY2FsZSA9IDA7XG5cbiAgICAgIGNvbnN0IHNsaWRlVHJhbnNmb3JtID0gYHRyYW5zbGF0ZTNkKCR7dHJhbnNsYXRlWH1weCwke3RyYW5zbGF0ZVl9cHgsJHt0cmFuc2xhdGVafXB4KSAgcm90YXRlWCgke3JvdGF0ZVh9ZGVnKSByb3RhdGVZKCR7cm90YXRlWX1kZWcpIHNjYWxlKCR7c2NhbGV9KWA7XG5cbiAgICAgICRzbGlkZUVsLnRyYW5zZm9ybShzbGlkZVRyYW5zZm9ybSk7XG4gICAgICAkc2xpZGVFbFswXS5zdHlsZS56SW5kZXggPSAtTWF0aC5hYnMoTWF0aC5yb3VuZChvZmZzZXRNdWx0aXBsaWVyKSkgKyAxO1xuICAgICAgaWYgKHBhcmFtcy5zbGlkZVNoYWRvd3MpIHtcbiAgICAgICAgLy8gU2V0IHNoYWRvd3NcbiAgICAgICAgbGV0ICRzaGFkb3dCZWZvcmVFbCA9IGlzSG9yaXpvbnRhbCA/ICRzbGlkZUVsLmZpbmQoJy5zd2lwZXItc2xpZGUtc2hhZG93LWxlZnQnKSA6ICRzbGlkZUVsLmZpbmQoJy5zd2lwZXItc2xpZGUtc2hhZG93LXRvcCcpO1xuICAgICAgICBsZXQgJHNoYWRvd0FmdGVyRWwgPSBpc0hvcml6b250YWwgPyAkc2xpZGVFbC5maW5kKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy1yaWdodCcpIDogJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctYm90dG9tJyk7XG4gICAgICAgIGlmICgkc2hhZG93QmVmb3JlRWwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgJHNoYWRvd0JlZm9yZUVsID0gJChgPGRpdiBjbGFzcz1cInN3aXBlci1zbGlkZS1zaGFkb3ctJHtpc0hvcml6b250YWwgPyAnbGVmdCcgOiAndG9wJ31cIj48L2Rpdj5gKTtcbiAgICAgICAgICAkc2xpZGVFbC5hcHBlbmQoJHNoYWRvd0JlZm9yZUVsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJHNoYWRvd0FmdGVyRWwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgJHNoYWRvd0FmdGVyRWwgPSAkKGA8ZGl2IGNsYXNzPVwic3dpcGVyLXNsaWRlLXNoYWRvdy0ke2lzSG9yaXpvbnRhbCA/ICdyaWdodCcgOiAnYm90dG9tJ31cIj48L2Rpdj5gKTtcbiAgICAgICAgICAkc2xpZGVFbC5hcHBlbmQoJHNoYWRvd0FmdGVyRWwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkc2hhZG93QmVmb3JlRWwubGVuZ3RoKSAkc2hhZG93QmVmb3JlRWxbMF0uc3R5bGUub3BhY2l0eSA9IG9mZnNldE11bHRpcGxpZXIgPiAwID8gb2Zmc2V0TXVsdGlwbGllciA6IDA7XG4gICAgICAgIGlmICgkc2hhZG93QWZ0ZXJFbC5sZW5ndGgpICRzaGFkb3dBZnRlckVsWzBdLnN0eWxlLm9wYWNpdHkgPSAoLW9mZnNldE11bHRpcGxpZXIpID4gMCA/IC1vZmZzZXRNdWx0aXBsaWVyIDogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgY29ycmVjdCBwZXJzcGVjdGl2ZSBmb3IgSUUxMFxuICAgIGlmIChTdXBwb3J0LnBvaW50ZXJFdmVudHMgfHwgU3VwcG9ydC5wcmVmaXhlZFBvaW50ZXJFdmVudHMpIHtcbiAgICAgIGNvbnN0IHdzID0gJHdyYXBwZXJFbFswXS5zdHlsZTtcbiAgICAgIHdzLnBlcnNwZWN0aXZlT3JpZ2luID0gYCR7Y2VudGVyfXB4IDUwJWA7XG4gICAgfVxuICB9LFxuICBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBzd2lwZXIuc2xpZGVzXG4gICAgICAudHJhbnNpdGlvbihkdXJhdGlvbilcbiAgICAgIC5maW5kKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3AsIC5zd2lwZXItc2xpZGUtc2hhZG93LXJpZ2h0LCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1ib3R0b20sIC5zd2lwZXItc2xpZGUtc2hhZG93LWxlZnQnKVxuICAgICAgLnRyYW5zaXRpb24oZHVyYXRpb24pO1xuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZWZmZWN0LWNvdmVyZmxvdycsXG4gIHBhcmFtczoge1xuICAgIGNvdmVyZmxvd0VmZmVjdDoge1xuICAgICAgcm90YXRlOiA1MCxcbiAgICAgIHN0cmV0Y2g6IDAsXG4gICAgICBkZXB0aDogMTAwLFxuICAgICAgc2NhbGU6IDEsXG4gICAgICBtb2RpZmllcjogMSxcbiAgICAgIHNsaWRlU2hhZG93czogdHJ1ZSxcbiAgICB9LFxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICBjb3ZlcmZsb3dFZmZlY3Q6IHtcbiAgICAgICAgc2V0VHJhbnNsYXRlOiBDb3ZlcmZsb3cuc2V0VHJhbnNsYXRlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgc2V0VHJhbnNpdGlvbjogQ292ZXJmbG93LnNldFRyYW5zaXRpb24uYmluZChzd2lwZXIpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSxcbiAgb246IHtcbiAgICBiZWZvcmVJbml0KCkge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2NvdmVyZmxvdycpIHJldHVybjtcblxuICAgICAgc3dpcGVyLmNsYXNzTmFtZXMucHVzaChgJHtzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3N9Y292ZXJmbG93YCk7XG4gICAgICBzd2lwZXIuY2xhc3NOYW1lcy5wdXNoKGAke3N3aXBlci5wYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzc30zZGApO1xuXG4gICAgICBzd2lwZXIucGFyYW1zLndhdGNoU2xpZGVzUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgc3dpcGVyLm9yaWdpbmFsUGFyYW1zLndhdGNoU2xpZGVzUHJvZ3Jlc3MgPSB0cnVlO1xuICAgIH0sXG4gICAgc2V0VHJhbnNsYXRlKCkge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2NvdmVyZmxvdycpIHJldHVybjtcbiAgICAgIHN3aXBlci5jb3ZlcmZsb3dFZmZlY3Quc2V0VHJhbnNsYXRlKCk7XG4gICAgfSxcbiAgICBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZWZmZWN0ICE9PSAnY292ZXJmbG93JykgcmV0dXJuO1xuICAgICAgc3dpcGVyLmNvdmVyZmxvd0VmZmVjdC5zZXRUcmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgICB9LFxuICB9LFxufTtcbiIsImltcG9ydCBVdGlscyBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5pbXBvcnQgJCBmcm9tICcuLi8uLi91dGlscy9kb20nO1xuXG5jb25zdCBUaHVtYnMgPSB7XG4gIGluaXQoKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBjb25zdCB7IHRodW1iczogdGh1bWJzUGFyYW1zIH0gPSBzd2lwZXIucGFyYW1zO1xuICAgIGNvbnN0IFN3aXBlckNsYXNzID0gc3dpcGVyLmNvbnN0cnVjdG9yO1xuICAgIGlmICh0aHVtYnNQYXJhbXMuc3dpcGVyIGluc3RhbmNlb2YgU3dpcGVyQ2xhc3MpIHtcbiAgICAgIHN3aXBlci50aHVtYnMuc3dpcGVyID0gdGh1bWJzUGFyYW1zLnN3aXBlcjtcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIudGh1bWJzLnN3aXBlci5vcmlnaW5hbFBhcmFtcywge1xuICAgICAgICB3YXRjaFNsaWRlc1Byb2dyZXNzOiB0cnVlLFxuICAgICAgICBzbGlkZVRvQ2xpY2tlZFNsaWRlOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlci50aHVtYnMuc3dpcGVyLnBhcmFtcywge1xuICAgICAgICB3YXRjaFNsaWRlc1Byb2dyZXNzOiB0cnVlLFxuICAgICAgICBzbGlkZVRvQ2xpY2tlZFNsaWRlOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoVXRpbHMuaXNPYmplY3QodGh1bWJzUGFyYW1zLnN3aXBlcikpIHtcbiAgICAgIHN3aXBlci50aHVtYnMuc3dpcGVyID0gbmV3IFN3aXBlckNsYXNzKFV0aWxzLmV4dGVuZCh7fSwgdGh1bWJzUGFyYW1zLnN3aXBlciwge1xuICAgICAgICB3YXRjaFNsaWRlc1Zpc2liaWxpdHk6IHRydWUsXG4gICAgICAgIHdhdGNoU2xpZGVzUHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgIHNsaWRlVG9DbGlja2VkU2xpZGU6IGZhbHNlLFxuICAgICAgfSkpO1xuICAgICAgc3dpcGVyLnRodW1icy5zd2lwZXJDcmVhdGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgc3dpcGVyLnRodW1icy5zd2lwZXIuJGVsLmFkZENsYXNzKHN3aXBlci5wYXJhbXMudGh1bWJzLnRodW1ic0NvbnRhaW5lckNsYXNzKTtcbiAgICBzd2lwZXIudGh1bWJzLnN3aXBlci5vbigndGFwJywgc3dpcGVyLnRodW1icy5vblRodW1iQ2xpY2spO1xuICB9LFxuICBvblRodW1iQ2xpY2soKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBjb25zdCB0aHVtYnNTd2lwZXIgPSBzd2lwZXIudGh1bWJzLnN3aXBlcjtcbiAgICBpZiAoIXRodW1ic1N3aXBlcikgcmV0dXJuO1xuICAgIGNvbnN0IGNsaWNrZWRJbmRleCA9IHRodW1ic1N3aXBlci5jbGlja2VkSW5kZXg7XG4gICAgY29uc3QgY2xpY2tlZFNsaWRlID0gdGh1bWJzU3dpcGVyLmNsaWNrZWRTbGlkZTtcbiAgICBpZiAoY2xpY2tlZFNsaWRlICYmICQoY2xpY2tlZFNsaWRlKS5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLnRodW1icy5zbGlkZVRodW1iQWN0aXZlQ2xhc3MpKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBjbGlja2VkSW5kZXggPT09ICd1bmRlZmluZWQnIHx8IGNsaWNrZWRJbmRleCA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIGxldCBzbGlkZVRvSW5kZXg7XG4gICAgaWYgKHRodW1ic1N3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgc2xpZGVUb0luZGV4ID0gcGFyc2VJbnQoJCh0aHVtYnNTd2lwZXIuY2xpY2tlZFNsaWRlKS5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpLCAxMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNsaWRlVG9JbmRleCA9IGNsaWNrZWRJbmRleDtcbiAgICB9XG4gICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgbGV0IGN1cnJlbnRJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICAgIGlmIChzd2lwZXIuc2xpZGVzLmVxKGN1cnJlbnRJbmRleCkuaGFzQ2xhc3Moc3dpcGVyLnBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSkge1xuICAgICAgICBzd2lwZXIubG9vcEZpeCgpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgc3dpcGVyLl9jbGllbnRMZWZ0ID0gc3dpcGVyLiR3cmFwcGVyRWxbMF0uY2xpZW50TGVmdDtcbiAgICAgICAgY3VycmVudEluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgICAgfVxuICAgICAgY29uc3QgcHJldkluZGV4ID0gc3dpcGVyLnNsaWRlcy5lcShjdXJyZW50SW5kZXgpLnByZXZBbGwoYFtkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cIiR7c2xpZGVUb0luZGV4fVwiXWApLmVxKDApLmluZGV4KCk7XG4gICAgICBjb25zdCBuZXh0SW5kZXggPSBzd2lwZXIuc2xpZGVzLmVxKGN1cnJlbnRJbmRleCkubmV4dEFsbChgW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVwiJHtzbGlkZVRvSW5kZXh9XCJdYCkuZXEoMCkuaW5kZXgoKTtcbiAgICAgIGlmICh0eXBlb2YgcHJldkluZGV4ID09PSAndW5kZWZpbmVkJykgc2xpZGVUb0luZGV4ID0gbmV4dEluZGV4O1xuICAgICAgZWxzZSBpZiAodHlwZW9mIG5leHRJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHNsaWRlVG9JbmRleCA9IHByZXZJbmRleDtcbiAgICAgIGVsc2UgaWYgKG5leHRJbmRleCAtIGN1cnJlbnRJbmRleCA8IGN1cnJlbnRJbmRleCAtIHByZXZJbmRleCkgc2xpZGVUb0luZGV4ID0gbmV4dEluZGV4O1xuICAgICAgZWxzZSBzbGlkZVRvSW5kZXggPSBwcmV2SW5kZXg7XG4gICAgfVxuICAgIHN3aXBlci5zbGlkZVRvKHNsaWRlVG9JbmRleCk7XG4gIH0sXG4gIHVwZGF0ZShpbml0aWFsKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBjb25zdCB0aHVtYnNTd2lwZXIgPSBzd2lwZXIudGh1bWJzLnN3aXBlcjtcbiAgICBpZiAoIXRodW1ic1N3aXBlcikgcmV0dXJuO1xuXG4gICAgY29uc3Qgc2xpZGVzUGVyVmlldyA9IHRodW1ic1N3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nXG4gICAgICA/IHRodW1ic1N3aXBlci5zbGlkZXNQZXJWaWV3RHluYW1pYygpXG4gICAgICA6IHRodW1ic1N3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldztcblxuICAgIGNvbnN0IGF1dG9TY3JvbGxPZmZzZXQgPSBzd2lwZXIucGFyYW1zLnRodW1icy5hdXRvU2Nyb2xsT2Zmc2V0O1xuICAgIGNvbnN0IHVzZU9mZnNldCA9IGF1dG9TY3JvbGxPZmZzZXQgJiYgIXRodW1ic1N3aXBlci5wYXJhbXMubG9vcDtcbiAgICBpZiAoc3dpcGVyLnJlYWxJbmRleCAhPT0gdGh1bWJzU3dpcGVyLnJlYWxJbmRleCB8fCB1c2VPZmZzZXQpIHtcbiAgICAgIGxldCBjdXJyZW50VGh1bWJzSW5kZXggPSB0aHVtYnNTd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgICBsZXQgbmV3VGh1bWJzSW5kZXg7XG4gICAgICBsZXQgZGlyZWN0aW9uO1xuICAgICAgaWYgKHRodW1ic1N3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICBpZiAodGh1bWJzU3dpcGVyLnNsaWRlcy5lcShjdXJyZW50VGh1bWJzSW5kZXgpLmhhc0NsYXNzKHRodW1ic1N3aXBlci5wYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykpIHtcbiAgICAgICAgICB0aHVtYnNTd2lwZXIubG9vcEZpeCgpO1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgIHRodW1ic1N3aXBlci5fY2xpZW50TGVmdCA9IHRodW1ic1N3aXBlci4kd3JhcHBlckVsWzBdLmNsaWVudExlZnQ7XG4gICAgICAgICAgY3VycmVudFRodW1ic0luZGV4ID0gdGh1bWJzU3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgICAgICB9XG4gICAgICAgIC8vIEZpbmQgYWN0dWFsIHRodW1icyBpbmRleCB0byBzbGlkZSB0b1xuICAgICAgICBjb25zdCBwcmV2VGh1bWJzSW5kZXggPSB0aHVtYnNTd2lwZXIuc2xpZGVzXG4gICAgICAgICAgLmVxKGN1cnJlbnRUaHVtYnNJbmRleClcbiAgICAgICAgICAucHJldkFsbChgW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVwiJHtzd2lwZXIucmVhbEluZGV4fVwiXWApLmVxKDApXG4gICAgICAgICAgLmluZGV4KCk7XG4gICAgICAgIGNvbnN0IG5leHRUaHVtYnNJbmRleCA9IHRodW1ic1N3aXBlci5zbGlkZXNcbiAgICAgICAgICAuZXEoY3VycmVudFRodW1ic0luZGV4KVxuICAgICAgICAgIC5uZXh0QWxsKGBbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XCIke3N3aXBlci5yZWFsSW5kZXh9XCJdYCkuZXEoMClcbiAgICAgICAgICAuaW5kZXgoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBwcmV2VGh1bWJzSW5kZXggPT09ICd1bmRlZmluZWQnKSBuZXdUaHVtYnNJbmRleCA9IG5leHRUaHVtYnNJbmRleDtcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIG5leHRUaHVtYnNJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIG5ld1RodW1ic0luZGV4ID0gcHJldlRodW1ic0luZGV4O1xuICAgICAgICBlbHNlIGlmIChuZXh0VGh1bWJzSW5kZXggLSBjdXJyZW50VGh1bWJzSW5kZXggPT09IGN1cnJlbnRUaHVtYnNJbmRleCAtIHByZXZUaHVtYnNJbmRleCkgbmV3VGh1bWJzSW5kZXggPSBjdXJyZW50VGh1bWJzSW5kZXg7XG4gICAgICAgIGVsc2UgaWYgKG5leHRUaHVtYnNJbmRleCAtIGN1cnJlbnRUaHVtYnNJbmRleCA8IGN1cnJlbnRUaHVtYnNJbmRleCAtIHByZXZUaHVtYnNJbmRleCkgbmV3VGh1bWJzSW5kZXggPSBuZXh0VGh1bWJzSW5kZXg7XG4gICAgICAgIGVsc2UgbmV3VGh1bWJzSW5kZXggPSBwcmV2VGh1bWJzSW5kZXg7XG4gICAgICAgIGRpcmVjdGlvbiA9IHN3aXBlci5hY3RpdmVJbmRleCA+IHN3aXBlci5wcmV2aW91c0luZGV4ID8gJ25leHQnIDogJ3ByZXYnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3VGh1bWJzSW5kZXggPSBzd2lwZXIucmVhbEluZGV4O1xuICAgICAgICBkaXJlY3Rpb24gPSBuZXdUaHVtYnNJbmRleCA+IHN3aXBlci5wcmV2aW91c0luZGV4ID8gJ25leHQnIDogJ3ByZXYnO1xuICAgICAgfVxuICAgICAgaWYgKHVzZU9mZnNldCkge1xuICAgICAgICBuZXdUaHVtYnNJbmRleCArPSBkaXJlY3Rpb24gPT09ICduZXh0JyA/IGF1dG9TY3JvbGxPZmZzZXQgOiAtMSAqIGF1dG9TY3JvbGxPZmZzZXQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aHVtYnNTd2lwZXIudmlzaWJsZVNsaWRlc0luZGV4ZXMgJiYgdGh1bWJzU3dpcGVyLnZpc2libGVTbGlkZXNJbmRleGVzLmluZGV4T2YobmV3VGh1bWJzSW5kZXgpIDwgMCkge1xuICAgICAgICBpZiAodGh1bWJzU3dpcGVyLnBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgICAgIGlmIChuZXdUaHVtYnNJbmRleCA+IGN1cnJlbnRUaHVtYnNJbmRleCkge1xuICAgICAgICAgICAgbmV3VGh1bWJzSW5kZXggPSBuZXdUaHVtYnNJbmRleCAtIE1hdGguZmxvb3Ioc2xpZGVzUGVyVmlldyAvIDIpICsgMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3VGh1bWJzSW5kZXggPSBuZXdUaHVtYnNJbmRleCArIE1hdGguZmxvb3Ioc2xpZGVzUGVyVmlldyAvIDIpIC0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmV3VGh1bWJzSW5kZXggPiBjdXJyZW50VGh1bWJzSW5kZXgpIHtcbiAgICAgICAgICBuZXdUaHVtYnNJbmRleCA9IG5ld1RodW1ic0luZGV4IC0gc2xpZGVzUGVyVmlldyArIDE7XG4gICAgICAgIH1cbiAgICAgICAgdGh1bWJzU3dpcGVyLnNsaWRlVG8obmV3VGh1bWJzSW5kZXgsIGluaXRpYWwgPyAwIDogdW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBY3RpdmF0ZSB0aHVtYnNcbiAgICBsZXQgdGh1bWJzVG9BY3RpdmF0ZSA9IDE7XG4gICAgY29uc3QgdGh1bWJBY3RpdmVDbGFzcyA9IHN3aXBlci5wYXJhbXMudGh1bWJzLnNsaWRlVGh1bWJBY3RpdmVDbGFzcztcblxuICAgIGlmIChzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcgPiAxICYmICFzd2lwZXIucGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICB0aHVtYnNUb0FjdGl2YXRlID0gc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJWaWV3O1xuICAgIH1cblxuICAgIGlmICghc3dpcGVyLnBhcmFtcy50aHVtYnMubXVsdGlwbGVBY3RpdmVUaHVtYnMpIHtcbiAgICAgIHRodW1ic1RvQWN0aXZhdGUgPSAxO1xuICAgIH1cblxuICAgIHRodW1ic1RvQWN0aXZhdGUgPSBNYXRoLmZsb29yKHRodW1ic1RvQWN0aXZhdGUpO1xuXG4gICAgdGh1bWJzU3dpcGVyLnNsaWRlcy5yZW1vdmVDbGFzcyh0aHVtYkFjdGl2ZUNsYXNzKTtcbiAgICBpZiAodGh1bWJzU3dpcGVyLnBhcmFtcy5sb29wIHx8ICh0aHVtYnNTd2lwZXIucGFyYW1zLnZpcnR1YWwgJiYgdGh1bWJzU3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQpKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRodW1ic1RvQWN0aXZhdGU7IGkgKz0gMSkge1xuICAgICAgICB0aHVtYnNTd2lwZXIuJHdyYXBwZXJFbC5jaGlsZHJlbihgW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVwiJHtzd2lwZXIucmVhbEluZGV4ICsgaX1cIl1gKS5hZGRDbGFzcyh0aHVtYkFjdGl2ZUNsYXNzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aHVtYnNUb0FjdGl2YXRlOyBpICs9IDEpIHtcbiAgICAgICAgdGh1bWJzU3dpcGVyLnNsaWRlcy5lcShzd2lwZXIucmVhbEluZGV4ICsgaSkuYWRkQ2xhc3ModGh1bWJBY3RpdmVDbGFzcyk7XG4gICAgICB9XG4gICAgfVxuICB9LFxufTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3RodW1icycsXG4gIHBhcmFtczoge1xuICAgIHRodW1iczoge1xuICAgICAgc3dpcGVyOiBudWxsLFxuICAgICAgbXVsdGlwbGVBY3RpdmVUaHVtYnM6IHRydWUsXG4gICAgICBhdXRvU2Nyb2xsT2Zmc2V0OiAwLFxuICAgICAgc2xpZGVUaHVtYkFjdGl2ZUNsYXNzOiAnc3dpcGVyLXNsaWRlLXRodW1iLWFjdGl2ZScsXG4gICAgICB0aHVtYnNDb250YWluZXJDbGFzczogJ3N3aXBlci1jb250YWluZXItdGh1bWJzJyxcbiAgICB9LFxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICB0aHVtYnM6IHtcbiAgICAgICAgc3dpcGVyOiBudWxsLFxuICAgICAgICBpbml0OiBUaHVtYnMuaW5pdC5iaW5kKHN3aXBlciksXG4gICAgICAgIHVwZGF0ZTogVGh1bWJzLnVwZGF0ZS5iaW5kKHN3aXBlciksXG4gICAgICAgIG9uVGh1bWJDbGljazogVGh1bWJzLm9uVGh1bWJDbGljay5iaW5kKHN3aXBlciksXG4gICAgICB9LFxuICAgIH0pO1xuICB9LFxuICBvbjoge1xuICAgIGJlZm9yZUluaXQoKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgY29uc3QgeyB0aHVtYnMgfSA9IHN3aXBlci5wYXJhbXM7XG4gICAgICBpZiAoIXRodW1icyB8fCAhdGh1bWJzLnN3aXBlcikgcmV0dXJuO1xuICAgICAgc3dpcGVyLnRodW1icy5pbml0KCk7XG4gICAgICBzd2lwZXIudGh1bWJzLnVwZGF0ZSh0cnVlKTtcbiAgICB9LFxuICAgIHNsaWRlQ2hhbmdlKCkge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLnRodW1icy5zd2lwZXIpIHJldHVybjtcbiAgICAgIHN3aXBlci50aHVtYnMudXBkYXRlKCk7XG4gICAgfSxcbiAgICB1cGRhdGUoKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIudGh1bWJzLnN3aXBlcikgcmV0dXJuO1xuICAgICAgc3dpcGVyLnRodW1icy51cGRhdGUoKTtcbiAgICB9LFxuICAgIHJlc2l6ZSgpIHtcbiAgICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci50aHVtYnMuc3dpcGVyKSByZXR1cm47XG4gICAgICBzd2lwZXIudGh1bWJzLnVwZGF0ZSgpO1xuICAgIH0sXG4gICAgb2JzZXJ2ZXJVcGRhdGUoKSB7XG4gICAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIudGh1bWJzLnN3aXBlcikgcmV0dXJuO1xuICAgICAgc3dpcGVyLnRodW1icy51cGRhdGUoKTtcbiAgICB9LFxuICAgIHNldFRyYW5zaXRpb24oZHVyYXRpb24pIHtcbiAgICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgICBjb25zdCB0aHVtYnNTd2lwZXIgPSBzd2lwZXIudGh1bWJzLnN3aXBlcjtcbiAgICAgIGlmICghdGh1bWJzU3dpcGVyKSByZXR1cm47XG4gICAgICB0aHVtYnNTd2lwZXIuc2V0VHJhbnNpdGlvbihkdXJhdGlvbik7XG4gICAgfSxcbiAgICBiZWZvcmVEZXN0cm95KCkge1xuICAgICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICAgIGNvbnN0IHRodW1ic1N3aXBlciA9IHN3aXBlci50aHVtYnMuc3dpcGVyO1xuICAgICAgaWYgKCF0aHVtYnNTd2lwZXIpIHJldHVybjtcbiAgICAgIGlmIChzd2lwZXIudGh1bWJzLnN3aXBlckNyZWF0ZWQgJiYgdGh1bWJzU3dpcGVyKSB7XG4gICAgICAgIHRodW1ic1N3aXBlci5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgfSxcbiAgfSxcbn07XG4iLCIvLyBTd2lwZXIgQ2xhc3NcbmltcG9ydCBTd2lwZXIgZnJvbSAnLi9jb21wb25lbnRzL2NvcmUvY29yZS1jbGFzcyc7XG5cbi8vIENvcmUgTW9kdWxlc1xuaW1wb3J0IERldmljZSBmcm9tICcuL21vZHVsZXMvZGV2aWNlL2RldmljZSc7XG5pbXBvcnQgU3VwcG9ydCBmcm9tICcuL21vZHVsZXMvc3VwcG9ydC9zdXBwb3J0JztcbmltcG9ydCBCcm93c2VyIGZyb20gJy4vbW9kdWxlcy9icm93c2VyL2Jyb3dzZXInO1xuaW1wb3J0IFJlc2l6ZSBmcm9tICcuL21vZHVsZXMvcmVzaXplL3Jlc2l6ZSc7XG5pbXBvcnQgT2JzZXJ2ZXIgZnJvbSAnLi9tb2R1bGVzL29ic2VydmVyL29ic2VydmVyJztcblxuLy9JTVBPUlRfQ09NUE9ORU5UU1xuXG5jb25zdCBjb21wb25lbnRzID0gW1xuICBEZXZpY2UsXG4gIFN1cHBvcnQsXG4gIEJyb3dzZXIsXG4gIFJlc2l6ZSxcbiAgT2JzZXJ2ZXIsXG4gIC8vSU5TVEFMTF9DT01QT05FTlRTXG5dO1xuXG5pZiAodHlwZW9mIFN3aXBlci51c2UgPT09ICd1bmRlZmluZWQnKSB7XG4gIFN3aXBlci51c2UgPSBTd2lwZXIuQ2xhc3MudXNlO1xuICBTd2lwZXIuaW5zdGFsbE1vZHVsZSA9IFN3aXBlci5DbGFzcy5pbnN0YWxsTW9kdWxlO1xufVxuXG5Td2lwZXIudXNlKGNvbXBvbmVudHMpO1xuXG4vL0VYUE9SVFxuIiwiaW1wb3J0IENPTkZJRyBmcm9tIFwiLi9fY29uZmlnXCI7XG5cbmNvbnN0IGFjY29yZGlvbnMgICAgICAgICAgICAgICAgPSBbXTtcbmNvbnN0IEFDQ09SRElPTl9UQVJHRVRfQ0xBU1MgICAgPSAnanMtcGYtYWNjb3JkaW9uJztcbmNvbnN0IEFDQ09SRElPTl9UUklHR0VSX0NMQVNTICAgPSAnanMtcGYtYWNjb3JkaW9uX3RyaWdnZXInO1xuY29uc3QgQUNDT1JESU9OX0NPTlRFTlRfQ0xBU1MgICA9ICdqcy1wZi1hY2NvcmRpb25fY29udCc7XG5jb25zdCBBQ0NPUkRJT05fQ09NUExBVEVEX0NMQVNTID0gJ2pzLXBmLWFjY29yZGlvbi1jb21wbGV0ZWQnO1xuY29uc3QgQUNDT1JESU9OX1NUQVRFX0RBVEEgICAgICA9ICdkYXRhLWFjYy1zdGF0ZSc7XG5jb25zdCBBQ0NPUkRJT05fU1RBVEVfT1BFTiAgICAgID0gJ29wZW4nO1xuY29uc3QgQUNDT1JESU9OX1NUQVRFX0NMT1NFICAgICA9ICdjbG9zZSc7XG5cbmNvbnN0IEFDQ09SRElPTl9PTkxZX1BDX0RBVEEgICAgPSAnZGF0YS1hY2Mtb25seS1wYyc7XG5jb25zdCBBQ0NPUkRJT05fT05MWV9TUF9EQVRBICAgID0gJ2RhdGEtYWNjLW9ubHktc3AnO1xuXG4vKipcbiAqIOOCouOCs+ODvOODh+OCo+OCquODs+apn+iDveS7mOS4jlxuICpcbiAqIEBwYXJhbSB7IEhUTUxFbGVtZW50IH0gZWxlICAgICAgICAg5LuY5LiO5a++6LGh44Gu6KaB57SgXG4gKiBAcGFyYW0geyBCb29sZWFuIH0gICAgIGRlZmF1bHRPcGVuIOWIneacn+mWi+mWieeKtuaFi1xuICovXG5jb25zdCBBY2NvcmRpb24gPSAoZWxlLCBkZWZhdWx0T3BlbiA9IGZhbHNlKSA9PiB7XG4gIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBlbGU7XG5cbiAgY29uc3QgdHJpZ2dlckVsZW1lbnQgPSB0YXJnZXRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYC4ke0FDQ09SRElPTl9UUklHR0VSX0NMQVNTfWApO1xuICBjb25zdCBjb250ZW50RWxlbWVudCA9IHRhcmdldEVsZW1lbnQucXVlcnlTZWxlY3RvcihgLiR7QUNDT1JESU9OX0NPTlRFTlRfQ0xBU1N9YCk7XG5cbiAgaWYodHJpZ2dlckVsZW1lbnQgPT0gdW5kZWZpbmVkIHx8IGNvbnRlbnRFbGVtZW50ID09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXG4gIGNvbnN0IGlzT25seVBDID0gdGFyZ2V0RWxlbWVudC5nZXRBdHRyaWJ1dGUoQUNDT1JESU9OX09OTFlfUENfREFUQSkgIT09IG51bGw7XG4gIGNvbnN0IGlzT25seVNQID0gdGFyZ2V0RWxlbWVudC5nZXRBdHRyaWJ1dGUoQUNDT1JESU9OX09OTFlfU1BfREFUQSkgIT09IG51bGw7XG5cbiAgbGV0IGlzRGlzYWJsZTtcblxuICAvKipcbiAgICog54m55a6a44OH44OQ44Kk44K544Gu44G/44Ki44Kz44O844OH44Kj44Kq44Oz44GM5rS75oCn44Gr44Gq44KL5oyH5a6a44Gu5aC05ZCI44CB54++5Zyo44Gu44OH44OQ44Kk44K544KS5Yik5a6a44GX6Z2e5rS75oCn44GL44Gp44GG44GL44KS6L+U44GZXG4gICAqIEByZXR1cm4geyBCb29sZWFuIH0g5rS75oCn5oyH5a6a44Gu5YCk44Go44CB44OH44OQ44Kk44K544GM5LiA6Ie044GX44Gq44GE5aC05ZCI44GvdHJ1Ze+8iOOCouOCs+ODvOODh+OCo+OCquODs+OCkumdnua0u+aAp+OBqOOBmeOCi++8iVxuICAgKi9cbiAgY29uc3QgaXNEaXNhYmxlU3RhdGUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChpc09ubHlQQyAmJiBDT05GSUcuQ1VSUkVOVF9ERVZJQ0UgPT09IENPTkZJRy5ERVZJQ0UuU1ApXG4gICAgICB8fCAoaXNPbmx5U1AgJiYgQ09ORklHLkNVUlJFTlRfREVWSUNFID09PSBDT05GSUcuREVWSUNFLlBDKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDjgqrjg7zjg5fjg7NcbiAgICovXG4gIGNvbnN0IG9wZW4gPSAoZHVyYXRpb24gPSAzMDApID0+IHtcbiAgICB0YXJnZXRFbGVtZW50LnNldEF0dHJpYnV0ZShBQ0NPUkRJT05fU1RBVEVfREFUQSwgQUNDT1JESU9OX1NUQVRFX09QRU4pO1xuICAgIFxuICAgICQoY29udGVudEVsZW1lbnQpLnNsaWRlRG93bihkdXJhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICog44Kv44Ot44O844K6XG4gICAqL1xuICBjb25zdCBjbG9zZSA9IChkdXJhdGlvbiA9IDMwMCkgPT4ge1xuICAgIHRhcmdldEVsZW1lbnQuc2V0QXR0cmlidXRlKEFDQ09SRElPTl9TVEFURV9EQVRBLCBBQ0NPUkRJT05fU1RBVEVfQ0xPU0UpO1xuXG4gICAgJChjb250ZW50RWxlbWVudCkuc2xpZGVVcChkdXJhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICog44OH44OQ44Kk44K544GMUEPjgYvjgolTUOOAgeOBvuOBn+OBr1NQ44GL44KJUEPjgbjlpInmm7TjgZfjgZ/pmpvjgavlkbzjgbPlh7rjgZXjgozjgb7jgZk8YnI+XG4gICAqIOa0u+aAp+eKtuaFi+OBi+OCiemdnua0u+aAp+eKtuaFi+OBuOmBt+enu+OBmeOCi+mam+OBr+OCouOCs+ODvOODh+OCo+OCquODs+OCkuegtOajhOOBl+OBvuOBmTxicj5cbiAgICog6Z2e5rS75oCn54q25oWL44GL44KJ5rS75oCn54q25oWL44G46YG356e744GZ44KL6Zqb44Gv44Ki44Kz44O844OH44Kj44Kq44Oz44KS5Yid5pyf5YyW44GX44G+44GZXG4gICAqL1xuICBjb25zdCBvbkRldmljZUNoYW5nZSA9ICgpID0+IHtcbiAgICBpZighaXNEaXNhYmxlICYmIGlzRGlzYWJsZVN0YXRlKCkpIHtcbiAgICAgIG9wZW4oMCk7XG4gICAgICB0cmlnZ2VyRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRvZ2dsZVN0YXRlLCBmYWxzZSk7XG4gICAgfSBlbHNlIGlmIChpc0Rpc2FibGUgJiYgIWlzRGlzYWJsZVN0YXRlKCkpIHtcbiAgICAgIGlmKGRlZmF1bHRPcGVuKSB7XG4gICAgICAgIG9wZW4oMCk7XG4gICAgICAgIHRhcmdldEVsZW1lbnQuc2V0QXR0cmlidXRlKEFDQ09SRElPTl9TVEFURV9EQVRBLCBBQ0NPUkRJT05fU1RBVEVfT1BFTik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbG9zZSgwKTtcbiAgICAgICAgdGFyZ2V0RWxlbWVudC5zZXRBdHRyaWJ1dGUoQUNDT1JESU9OX1NUQVRFX0RBVEEsIEFDQ09SRElPTl9TVEFURV9DTE9TRSk7XG4gICAgICB9XG4gICAgICB0cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRvZ2dsZVN0YXRlLCBmYWxzZSk7XG4gICAgfVxuICAgIGlzRGlzYWJsZSA9IGlzRGlzYWJsZVN0YXRlKCk7XG4gIH1cblxuICAvKipcbiAgICog6ZaL6ZaJ54q25oWL44KS5YiH44KK5pu/44GIXG4gICAqL1xuICBjb25zdCB0b2dnbGVTdGF0ZSA9ICgpID0+IHtcbiAgICBzd2l0Y2ggKHRhcmdldEVsZW1lbnQuZ2V0QXR0cmlidXRlKEFDQ09SRElPTl9TVEFURV9EQVRBKSkge1xuICAgICAgY2FzZSBBQ0NPUkRJT05fU1RBVEVfT1BFTjpcbiAgICAgICAgdGFyZ2V0RWxlbWVudC5zZXRBdHRyaWJ1dGUoQUNDT1JESU9OX1NUQVRFX0RBVEEsIEFDQ09SRElPTl9TVEFURV9DTE9TRSk7XG4gICAgICAgIGNsb3NlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBBQ0NPUkRJT05fU1RBVEVfQ0xPU0U6XG4gICAgICAgIHRhcmdldEVsZW1lbnQuc2V0QXR0cmlidXRlKEFDQ09SRElPTl9TVEFURV9EQVRBLCBBQ0NPUkRJT05fU1RBVEVfT1BFTik7XG4gICAgICAgIG9wZW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgaW5pdGlhbGl6ZSA9ICgpID0+IHtcbiAgICBpc0Rpc2FibGUgPSBpc0Rpc2FibGVTdGF0ZSgpO1xuXG4gICAgaWYoIGlzRGlzYWJsZSA9PT0gZmFsc2UgKSB7XG4gICAgICBpZihkZWZhdWx0T3Blbikge1xuICAgICAgICB0YXJnZXRFbGVtZW50LnNldEF0dHJpYnV0ZShBQ0NPUkRJT05fU1RBVEVfREFUQSwgQUNDT1JESU9OX1NUQVRFX09QRU4pO1xuICAgICAgICBvcGVuKDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0RWxlbWVudC5zZXRBdHRyaWJ1dGUoQUNDT1JESU9OX1NUQVRFX0RBVEEsIEFDQ09SRElPTl9TVEFURV9DTE9TRSk7XG4gICAgICAgIGNsb3NlKDApO1xuICAgICAgfVxuXG4gICAgICB0cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRvZ2dsZVN0YXRlLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wZW4oMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOWIneacn+WMllxuICAgKi9cbiAgY29uc3QgaW5pdCA9ICgpID0+IHtcbiAgICBpbml0aWFsaXplKCk7XG5cbiAgICB0YXJnZXRFbGVtZW50LmNsYXNzTGlzdC5hZGQoQUNDT1JESU9OX0NPTVBMQVRFRF9DTEFTUyk7XG5cbiAgICBpZih3aW5kb3cucm0pIHtcbiAgICAgIHdpbmRvdy5ybS5zZXRPbkNoYW5nZURldmljZUNhbGxiYWNrKG9uRGV2aWNlQ2hhbmdlKTtcbiAgICB9XG4gIH1cbiAgaW5pdCgpO1xuXG4gIHJldHVybiB7XG4gIH1cbn1cblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbigpe1xuICBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0FDQ09SRElPTl9UQVJHRVRfQ0xBU1N9Om5vdCguJHtBQ0NPUkRJT05fQ09NUExBVEVEX0NMQVNTfSlgKSkuZm9yRWFjaChlbGUgPT4ge1xuICAgIGFjY29yZGlvbnMucHVzaChuZXcgQWNjb3JkaW9uKGVsZSkpO1xuICB9KTtcbn0pOyIsImltcG9ydCBTd2lwZXIgZnJvbSAnc3dpcGVyJztcbmltcG9ydCAnc3dpcGVyL2Nzcy9zd2lwZXIubWluLmNzcyc7XG5pbXBvcnQgQ09ORklHIGZyb20gJy4vX2NvbmZpZyc7XG5cbmNvbnN0IFNXSVBFUl9DT05UQUlORVJfQ0xBU1MgICAgPSAnc3dpcGVyLWNvbnRhaW5lcic7XG5jb25zdCBTV0lQRVJfV1JBUFBFUl9DTEFTUyAgICAgID0gJ3N3aXBlci13cmFwcGVyJztcbmNvbnN0IFNXSVBFUl9TTElERV9DTEFTUyAgICAgICAgPSAnc3dpcGVyLXNsaWRlJztcblxuY29uc3QgU1dJUEVSX1BBR0VOQVRJT05fQ0xBU1MgICA9ICdzd2lwZXItcGFnaW5hdGlvbic7XG5jb25zdCBDQVJPVVNFTF9QQUdFTkFUSU9OX0NMQVNTID0gJ3BmLWNhcm91c2VsX3BhZ2luYXRpb24nO1xuXG4vKipcbiAqIOOCq+ODq+ODvOOCu+ODq+ODnuODjeODvOOCuOODo1xuICogXG4gKiBAcHJvcGVydHkgeyBBcnJheTxTd2lwZXI+IH0gQ0FST1VTRUxTICAgICAgICAgICDjgqvjg6vjg7zjgrvjg6vjgajplqLpgKPmg4XloLHjgpLlhoXljIXjgZnjgovjgqrjg5bjgrjjgqfjgq/jg4jjga7jg6rjgrnjg4hcbiAqIEBwcm9wZXJ0eSB7IFN0cmluZyB9ICAgICAgICBUUklHR0VSX0NMQVNTICAgICAgIOOCq+ODq+ODvOOCu+ODq+Wun+ihjOWvvuixoeOBruOCu+ODrOOCr+OCv+WQjVxuICogQHByb3BlcnR5IHsgU3RyaW5nIH0gICAgICAgIENPTlRBSU5FUl9DTEFTUyAgICAg44Kr44Or44O844K744Or44Gu44Kz44Oz44OG44OK44O86KaB57Sg44Gu44K744Os44Kv44K/5ZCNXG4gKiBAcHJvcGVydHkgeyBTdHJpbmcgfSAgICAgICAgV1JBUFBFUl9DTEFTUyAgICAgICDjgqvjg6vjg7zjgrvjg6vjga7jg6njg4Pjg5Hjg7zopoHntKDjga7jgrvjg6zjgq/jgr/lkI1cbiAqIEBwcm9wZXJ0eSB7IFN0cmluZyB9ICAgICAgICBTTElERV9DTEFTUyAgICAgICAgIOOCq+ODq+ODvOOCu+ODq+OBruOCouOCpOODhuODoOimgee0oOOBruOCu+ODrOOCr+OCv+WQjVxuICogQHByb3BlcnR5IHsgU3RyaW5nIH0gICAgICAgIFBSRVZfQ0xBU1MgICAgICAgICAg5oi744KL44Oc44K/44Oz6KaB57Sg44Gu44K744Os44Kv44K/5ZCNXG4gKiBAcHJvcGVydHkgeyBTdHJpbmcgfSAgICAgICAgTkVYVF9DTEFTUyAgICAgICAgICDpgLLjgoDjg5zjgr/jg7PopoHntKDjga7jgrvjg6zjgq/jgr/lkI1cbiAqIEBwcm9wZXJ0eSB7IFN0cmluZyB9ICAgICAgICBQQUdJTkFUSU9OX0NMQVNTICAgIOODmuODvOOCuOODjeODvOOCt+ODp+ODs+imgee0oOOBruOCu+ODrOOCr+OCv+WQjVxuICogQHByb3BlcnR5IHsgU3RyaW5nIH0gICAgICAgIEFDVElWRV9DTEFTUyAgICAgICAg44Kr44Or44O844K744Or44Ki44Kk44OG44Og44GM44Ki44Kv44OG44Kj44OW5pmC44Gr5LuY5LiO44GV44KM44KL44Kv44Op44K55ZCNXG4gKiBAcHJvcGVydHkgeyBTdHJpbmcgfSAgICAgICAgQlVMTEVUX0NMQVNTICAgICAgICDjgqTjg7PjgrjjgrLjg7zjgr/jga7jg5Djg6zjg4Pjg4jopoHntKDjga7jgrvjg6zjgq/jgr/lkI1cbiAqIEBwcm9wZXJ0eSB7IFN0cmluZyB9ICAgICAgICBCVUxMRVRfQUNUSVZFX0NMQVNTIOODkOODrOODg+ODiOOBruOCouOCr+ODhuOCo+ODluaZguOBq+S7mOS4juOBleOCjOOCi+OCr+ODqeOCueWQjVxuICogQHByb3BlcnR5IHsgT2JqZWN0IH0gICAgICAgIEJBU0VfT1BUSU9OUyAgICAgICAg44Kr44Or44O844K744Or6Kit5a6a44Gu44OZ44O844K55YCkXG4gKlxuICovXG5jb25zdCBDYXJvdXNlbCA9ICgpID0+IHtcbiAgY29uc3QgVFJJR0dFUl9DTEFTUyAgICAgICAgICAgPSAnanMtcGYtY2Fyb3VzZWwnO1xuICBjb25zdCBDT05UQUlORVJfQ0xBU1MgICAgICAgICA9ICdqcy1wZi1jYXJvdXNlbC1jb250YWluZXInO1xuICBjb25zdCBXUkFQUEVSX0NMQVNTICAgICAgICAgICA9ICdqcy1wZi1jYXJvdXNlbC13cmFwJztcbiAgY29uc3QgU0xJREVfQ0xBU1MgICAgICAgICAgICAgPSAnanMtcGYtY2Fyb3VzZWwtc2xpZGUnO1xuICBjb25zdCBQUkVWX0NMQVNTICAgICAgICAgICAgICA9ICdqcy1wZi1jYXJvdXNlbC1wcmV2JztcbiAgY29uc3QgTkVYVF9DTEFTUyAgICAgICAgICAgICAgPSAnanMtcGYtY2Fyb3VzZWwtbmV4dCc7XG4gIGNvbnN0IFBBR0lOQVRJT05fQ0xBU1MgICAgICAgID0gJ2pzLXBmLWNhcm91c2VsLXBhZ2luYXRpb24nO1xuICBjb25zdCBBQ1RJVkVfQ0xBU1MgICAgICAgICAgICA9ICdqcy1wZi1jYXJvdXNlbC1hY3RpdmUnO1xuICBjb25zdCBCVUxMRVRfQ0xBU1MgICAgICAgICAgICA9ICdwZi1jYXJvdXNlbF9wYWdpbmF0aW9uX2J1bGxldCc7XG4gIGNvbnN0IEJVTExFVF9BQ1RJVkVfQ0xBU1MgICAgID0gJ3BmLWNhcm91c2VsX3BhZ2luYXRpb25fYnVsbGV0LS1hY3RpdmUnO1xuICBjb25zdCBTSE9XX0NPVU5UX1NQX0RBVEEgICAgICA9ICdkYXRhLXNob3ctY291bnQtc3AnO1xuICBjb25zdCBTSE9XX0NPVU5UX1BDX0RBVEEgICAgICA9ICdkYXRhLXNob3ctY291bnQtcGMnO1xuICBjb25zdCBDRU5URVJfREFUQSAgICAgICAgICAgICA9ICdkYXRhLWNhcm91c2VsLWNlbnRlcic7XG4gIGNvbnN0IENFTlRFUl9TUF9EQVRBICAgICAgICAgID0gJ2RhdGEtY2Fyb3VzZWwtY2VudGVyLXNwJztcbiAgY29uc3QgQ0VOVEVSX1BDX0RBVEEgICAgICAgICAgPSAnZGF0YS1jYXJvdXNlbC1jZW50ZXItcGMnO1xuICBjb25zdCBOT19MT09QX0RBVEEgICAgICAgICAgICA9ICdkYXRhLWNhcm91c2VsLW5vLWxvb3AnO1xuICBjb25zdCBDQVJPVVNFTF9PTkxZX1BDX0RBVEEgICA9ICdkYXRhLWNhcm91c2VsLW9ubHktcGMnO1xuICBjb25zdCBDQVJPVVNFTF9PTkxZX1NQX0RBVEEgICA9ICdkYXRhLWNhcm91c2VsLW9ubHktc3AnO1xuICBjb25zdCBGT0xMT1dFRF9EQVRBICAgICAgICAgICA9ICdkYXRhLWNhcm91c2VsLWZvbGxvd2VkJztcbiAgY29uc3QgRk9MTE9XX1RBUkdFVF9JRF9EQVRBICAgPSAnZGF0YS1jYXJvdXNlbC1mb2xsb3ctdGFyZ2V0LWlkJztcblxuICBjb25zdCBCQVNFX09QVElPTlMgICAgICAgICAgICA9IHtcbiAgICB3cmFwcGVyQ2xhc3M6IFdSQVBQRVJfQ0xBU1MsXG4gICAgc2xpZGVDbGFzczogU0xJREVfQ0xBU1MsXG4gICAgc2xpZGVBY3RpdmVDbGFzczogQUNUSVZFX0NMQVNTLFxuICAgIHNsaWRlc1BlclZpZXc6IDEsXG4gICAgdG91Y2hSYXRpbzogMSxcbiAgICBicmVha3BvaW50czoge1xuICAgICAgNzY4OiB7fVxuICAgIH1cbiAgfVxuXG4gIGxldCBDQVJPVVNFTFMgPSBbXTtcblxuICAvKipcbiAgICog54m55a6a44OH44OQ44Kk44K544Gu44G/44Kr44Or44O844K744Or44GM5rS75oCn44Gr44Gq44KL5oyH5a6a44Gu5aC05ZCI44CB54++5Zyo44Gu44OH44OQ44Kk44K544KS5Yik5a6a44GX6Z2e5rS75oCn44GL44Gp44GG44GL44KS6L+U44GZXG4gICAqIEBwYXJhbSAgeyBIVE1MRWxlbWVudCB9ICBlbGUg44Kr44Or44O844K744Or44Kq44OW44K444KnXG4gICAqIEByZXR1cm4geyBCb29sZWFuIH0gICAgICAgICAg5rS75oCn5oyH5a6a44Gu5YCk44Go44CB44OH44OQ44Kk44K544GM5LiA6Ie044GX44Gq44GE5aC05ZCI44GvdHJ1Ze+8iOOCq+ODq+ODvOOCu+ODq+OCkumdnua0u+aAp+OBqOOBmeOCi++8iVxuICAgKi9cbiAgY29uc3QgaXNEaXNhYmxlU3RhdGUgPSAoZWxlKSA9PiB7XG4gICAgcmV0dXJuIChlbGUuZ2V0QXR0cmlidXRlKENBUk9VU0VMX09OTFlfUENfREFUQSkgIT09IG51bGwgJiYgQ09ORklHLkNVUlJFTlRfREVWSUNFID09PSBDT05GSUcuREVWSUNFLlNQKVxuICAgICAgfHwgKGVsZS5nZXRBdHRyaWJ1dGUoQ0FST1VTRUxfT05MWV9TUF9EQVRBKSAhPT0gbnVsbCAmJiBDT05GSUcuQ1VSUkVOVF9ERVZJQ0UgPT09IENPTkZJRy5ERVZJQ0UuUEMpO1xuICB9XG5cbiAgLyoqXG4gICAqIOODh+ODkOOCpOOCueOBjFBD44GL44KJU1DjgIHjgb7jgZ/jga9TUOOBi+OCiVBD44G45aSJ5pu044GX44Gf6Zqb44Gr5ZG844Gz5Ye644GV44KM44G+44GZPGJyPlxuICAgKiDmtLvmgKfnirbmhYvjgYvjgonpnZ7mtLvmgKfnirbmhYvjgbjpgbfnp7vjgZnjgovpmpvjga/jgqLjgrPjg7zjg4fjgqPjgqrjg7PjgpLnoLTmo4TjgZfjgb7jgZk8YnI+XG4gICAqIOmdnua0u+aAp+eKtuaFi+OBi+OCiea0u+aAp+eKtuaFi+OBuOmBt+enu+OBmeOCi+mam+OBr+OCouOCs+ODvOODh+OCo+OCquODs+OCkuWIneacn+WMluOBl+OBvuOBmVxuICAgKi9cbiAgY29uc3Qgb25EZXZpY2VDaGFuZ2UgPSAoKSA9PiB7XG4gICAgQ0FST1VTRUxTLmZvckVhY2goY2Fyb3VzZWwgPT4ge1xuICAgICAgY2Fyb3VzZWwuY2Fyb3VzZWwuZGVzdHJveShmYWxzZSx0cnVlKTtcbiAgICAgIGNhcm91c2VsLmNvbnRhaW5lckVsZS5jbGFzc0xpc3QucmVtb3ZlKFNXSVBFUl9DT05UQUlORVJfQ0xBU1MpO1xuICAgICAgY2Fyb3VzZWwud3JhcHBlckVsZS5jbGFzc0xpc3QucmVtb3ZlKFNXSVBFUl9XUkFQUEVSX0NMQVNTKTtcbiAgICAgIGNhcm91c2VsLnNsaWRlRWxlcy5mb3JFYWNoKHNsaWRlRWxlID0+IHNsaWRlRWxlLmNsYXNzTGlzdC5yZW1vdmUoU1dJUEVSX1NMSURFX0NMQVNTKSk7XG4gICAgICBjYXJvdXNlbC5vcHRpb25zLnBhZ2luYXRpb24gJiYgY2Fyb3VzZWwub3B0aW9ucy5wYWdpbmF0aW9uLmVsICYmIGNhcm91c2VsLm9wdGlvbnMucGFnaW5hdGlvbi5lbC5jbGFzc0xpc3QucmVtb3ZlKFNXSVBFUl9QQUdFTkFUSU9OX0NMQVNTKTtcbiAgICAgIGNhcm91c2VsLm9wdGlvbnMucGFnaW5hdGlvbiAmJiBjYXJvdXNlbC5vcHRpb25zLnBhZ2luYXRpb24uZWwgJiYgY2Fyb3VzZWwub3B0aW9ucy5wYWdpbmF0aW9uLmVsLmNsYXNzTGlzdC5yZW1vdmUoQ0FST1VTRUxfUEFHRU5BVElPTl9DTEFTUyk7XG4gICAgfSk7XG4gICAgQ0FST1VTRUxTID0gbmV3IEFycmF5KCk7XG5cbiAgICBjb25zdCBjYXJvdXNlbFRhcmdldHMgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke1RSSUdHRVJfQ0xBU1N9YCkpO1xuICAgIGNhcm91c2VsVGFyZ2V0cy5mb3JFYWNoKHRhcmdldCA9PiB7XG4gICAgICBpZighaXNEaXNhYmxlU3RhdGUodGFyZ2V0KSkgbWFrZVN3aXBlcih0YXJnZXQpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIOOCq+ODq+ODvOOCu+ODq+eUn+aIkFxuICAgKiBAcGFyYW0gIHsgSFRNTEVsZW1lbnRzPiB9IGVsZSDjgqvjg6vjg7zjgrvjg6vnlJ/miJDjga7lr77osaHopoHntKBcbiAgICovXG4gIGNvbnN0IG1ha2VTd2lwZXIgPSAoZWxlKSA9PiB7XG4gICAgY29uc3QgY29udGFpbmVyRWxlICA9IGVsZS5xdWVyeVNlbGVjdG9yKGAuJHtDT05UQUlORVJfQ0xBU1N9YCk7XG4gICAgY29uc3Qgd3JhcHBlckVsZSAgICA9IGVsZS5xdWVyeVNlbGVjdG9yKGAuJHtXUkFQUEVSX0NMQVNTfWApO1xuICAgIGNvbnN0IHNsaWRlRWxlcyAgICAgPSBbXS5zbGljZS5jYWxsKGVsZS5xdWVyeVNlbGVjdG9yQWxsKGAuJHtTTElERV9DTEFTU31gKSk7XG4gICAgXG4gICAgaWYgKHNsaWRlRWxlcyA9PT0gbnVsbCB8fCBzbGlkZUVsZXMubGVuZ3RoIDw9IDEgfHwgY29udGFpbmVyRWxlID09PSBudWxsKSByZXR1cm47XG5cbiAgICBjb25zdCBvcHRpb25zICAgICAgID0gT2JqZWN0LmFzc2lnbih7fSxcbiAgICAgIEJBU0VfT1BUSU9OUywge1xuICAgICAgc2xpZGVzUGVyVmlldzogIGVsZS5nZXRBdHRyaWJ1dGUoU0hPV19DT1VOVF9TUF9EQVRBKSA/IGVsZS5nZXRBdHRyaWJ1dGUoU0hPV19DT1VOVF9TUF9EQVRBKSA6IDEsXG4gICAgICBjZW50ZXJlZFNsaWRlczogZWxlLmdldEF0dHJpYnV0ZShDRU5URVJfREFUQSkgIT09IG51bGwgfHwgZWxlLmdldEF0dHJpYnV0ZShDRU5URVJfU1BfREFUQSkgIT09IG51bGwsXG4gICAgICBsb29wOiAgICAgICAgICAgZWxlLmdldEF0dHJpYnV0ZShOT19MT09QX0RBVEEpICE9PSBudWxsID8gZmFsc2UgOiB0cnVlLFxuICAgICAgYnJlYWtwb2ludHM6IHtcbiAgICAgICAgNzY4OiB7XG4gICAgICAgICAgc2xpZGVzUGVyVmlldzogZWxlLmdldEF0dHJpYnV0ZShTSE9XX0NPVU5UX1BDX0RBVEEpID8gZWxlLmdldEF0dHJpYnV0ZShTSE9XX0NPVU5UX1BDX0RBVEEpIDogMSxcbiAgICAgICAgICBjZW50ZXJlZFNsaWRlczogZWxlLmdldEF0dHJpYnV0ZShDRU5URVJfREFUQSkgIT09IG51bGwgfHwgZWxlLmdldEF0dHJpYnV0ZShDRU5URVJfUENfREFUQSkgIT09IG51bGwsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHNob3dTbGlkZUNvdW50ID0gQ09ORklHLkNVUlJFTlRfREVWSUNFID09PSBDT05GSUcuREVWSUNFLlNQXG4gICAgPyBlbGUuZ2V0QXR0cmlidXRlKFNIT1dfQ09VTlRfU1BfREFUQSkgPyBwYXJzZUludChlbGUuZ2V0QXR0cmlidXRlKFNIT1dfQ09VTlRfU1BfREFUQSkpIDogMVxuICAgIDogZWxlLmdldEF0dHJpYnV0ZShTSE9XX0NPVU5UX1BDX0RBVEEpID8gcGFyc2VJbnQoZWxlLmdldEF0dHJpYnV0ZShTSE9XX0NPVU5UX1BDX0RBVEEpKSA6IDE7XG5cblxuICAgIGNvbnN0IHByZXZFbGUgICAgICAgPSBlbGUucXVlcnlTZWxlY3RvcihgLiR7UFJFVl9DTEFTU31gKTtcbiAgICBjb25zdCBuZXh0RWxlICAgICAgID0gZWxlLnF1ZXJ5U2VsZWN0b3IoYC4ke05FWFRfQ0xBU1N9YCk7XG4gICAgY29uc3QgcGFnaW5hdGlvbkVsZSA9IGVsZS5xdWVyeVNlbGVjdG9yKGAuJHtQQUdJTkFUSU9OX0NMQVNTfWApO1xuXG4gICAgaWYoc2hvd1NsaWRlQ291bnQgPCBzbGlkZUVsZXMubGVuZ3RoKSB7XG4gICAgICBpZiAocHJldkVsZSAhPT0gbnVsbCAmJiBuZXh0RWxlICE9PSBudWxsKSB7XG4gICAgICAgIHByZXZFbGUuc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgICAgICBuZXh0RWxlLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICAgICAgXG4gICAgICAgIG9wdGlvbnMubmF2aWdhdGlvbiA9IHtcbiAgICAgICAgICBwcmV2RWw6IHByZXZFbGUsXG4gICAgICAgICAgbmV4dEVsOiBuZXh0RWxlLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9ucy5uYXZpZ2F0aW9uID0ge307XG4gICAgICB9XG4gIFxuICAgICAgaWYgKHBhZ2luYXRpb25FbGUgIT09IG51bGwpIHtcbiAgICAgICAgcGFnaW5hdGlvbkVsZS5jbGFzc0xpc3QuYWRkKFNXSVBFUl9QQUdFTkFUSU9OX0NMQVNTKTtcbiAgICAgICAgcGFnaW5hdGlvbkVsZS5jbGFzc0xpc3QuYWRkKENBUk9VU0VMX1BBR0VOQVRJT05fQ0xBU1MpO1xuICBcbiAgICAgICAgb3B0aW9ucy5wYWdpbmF0aW9uID0ge1xuICAgICAgICAgIGVsOiBwYWdpbmF0aW9uRWxlLFxuICAgICAgICAgIGNsaWNrYWJsZTogdHJ1ZSxcbiAgICAgICAgICBidWxsZXRDbGFzczogQlVMTEVUX0NMQVNTLFxuICAgICAgICAgIGJ1bGxldEFjdGl2ZUNsYXNzOiBCVUxMRVRfQUNUSVZFX0NMQVNTLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9ucy5wYWdpbmF0aW9uID0ge307XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcmV2RWxlICE9PSBudWxsICYmIG5leHRFbGUgIT09IG51bGwpIHtcbiAgICAgICAgcHJldkVsZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBuZXh0RWxlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB9XG5cbiAgICAgIG9wdGlvbnMubmF2aWdhdGlvbiA9IHt9O1xuICAgICAgb3B0aW9ucy5wYWdpbmF0aW9uID0ge307XG4gICAgfVxuXG4gICAgY29udGFpbmVyRWxlLmNsYXNzTGlzdC5hZGQoU1dJUEVSX0NPTlRBSU5FUl9DTEFTUyk7XG4gICAgd3JhcHBlckVsZS5jbGFzc0xpc3QuYWRkKFNXSVBFUl9XUkFQUEVSX0NMQVNTKTtcbiAgICBzbGlkZUVsZXMuZm9yRWFjaChzbGlkZUVsZSA9PiBzbGlkZUVsZS5jbGFzc0xpc3QuYWRkKFNXSVBFUl9TTElERV9DTEFTUykpO1xuXG4gICAgaWYoZWxlLmdldEF0dHJpYnV0ZShGT0xMT1dfVEFSR0VUX0lEX0RBVEEpKSB7XG4gICAgICAvLyDov73lvpPjgqvjg6vjg7zjgrvjg6tcbiAgICAgIG9wdGlvbnMuc2hvcnRTd2lwZXMgPSBmYWxzZTtcbiAgICAgIG9wdGlvbnMud2F0Y2hTbGlkZXNWaXNpYmlsaXR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBzd2lwZXIgPSBuZXcgU3dpcGVyKGNvbnRhaW5lckVsZSwgb3B0aW9ucyk7XG5cbiAgICBpZihlbGUuZ2V0QXR0cmlidXRlKEZPTExPV19UQVJHRVRfSURfREFUQSkpIHtcbiAgICAgIC8vIOi/veW+k+OCq+ODq+ODvOOCu+ODq1xuICAgICAgY29uc3QgZm9sbG93VGFyZ2V0SWQgPSBlbGUuZ2V0QXR0cmlidXRlKEZPTExPV19UQVJHRVRfSURfREFUQSk7XG4gICAgICBjb25zdCBmb2xsb3dUYXJnZXQgPSBDQVJPVVNFTFMuZmluZChjYXJvdXNlbCA9PiBjYXJvdXNlbC5jYXJvdXNlbEVsZW1lbnRJZCA9PT0gZm9sbG93VGFyZ2V0SWQpO1xuICAgICAgaWYoZm9sbG93VGFyZ2V0KSB7XG4gICAgICAgIHN3aXBlci5jb250cm9sbGVyLmNvbnRyb2wgPSBmb2xsb3dUYXJnZXQuY2Fyb3VzZWw7XG4gICAgICAgIGZvbGxvd1RhcmdldC5jYXJvdXNlbC5jb250cm9sbGVyLmNvbnRyb2wgPSBzd2lwZXI7XG5cbiAgICAgICAgY29uc3QgbGVmdExlbmd0aCA9IHdyYXBwZXJFbGUuc3R5bGUudHJhbnNmb3JtLm1hdGNoKC8zZFxcKCguKj8pLC8pO1xuICAgICAgICBpZihsZWZ0TGVuZ3RoLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB3cmFwcGVyRWxlLnN0eWxlLmxlZnQgPSBgLSR7bGVmdExlbmd0aFsxXX1gO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIOiHqui6q+OBruOCq+ODq+ODvOOCu+ODq+OCkuODmuODvOOCuOODjeODvOOCt+ODp+ODs+WMllxuICAgICAgc2xpZGVFbGVzLmZvckVhY2goKHNsaWRlLCBpbmRleCkgPT4ge1xuICAgICAgICBzbGlkZS5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XG4gICAgICAgIHNsaWRlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgc3dpcGVyLnNsaWRlVG8oaW5kZXgpO1xuICAgICAgICB9LCBmYWxzZSk7XG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IGNhcm91c2VsID0ge1xuICAgICAgY2Fyb3VzZWw6IHN3aXBlcixcbiAgICAgIGNhcm91c2VsRWxlbWVudDogZWxlLFxuICAgICAgY2Fyb3VzZWxFbGVtZW50SWQ6IGVsZS5nZXRBdHRyaWJ1dGUoJ2lkJyksXG4gICAgICBjb250YWluZXJFbGUsXG4gICAgICB3cmFwcGVyRWxlLFxuICAgICAgc2xpZGVFbGVzLFxuICAgICAgcHJldkVsZSxcbiAgICAgIG5leHRFbGUsXG4gICAgICBvcHRpb25zLFxuICAgIH07XG5cbiAgICBDQVJPVVNFTFMucHVzaChjYXJvdXNlbCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGluaXRpYWxpemU6ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhcm91c2VsVGFyZ2V0cyA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7VFJJR0dFUl9DTEFTU31gKSk7XG4gIFxuICAgICAgY2Fyb3VzZWxUYXJnZXRzLmZvckVhY2godGFyZ2V0ID0+IHtcbiAgICAgICAgaWYoIWlzRGlzYWJsZVN0YXRlKHRhcmdldCkpIG1ha2VTd2lwZXIodGFyZ2V0KTtcbiAgICAgIH0pO1xuXG4gICAgICBpZih3aW5kb3cucm0pIHtcbiAgICAgICAgd2luZG93LnJtLnNldE9uQ2hhbmdlRGV2aWNlQ2FsbGJhY2sob25EZXZpY2VDaGFuZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5sZXQgY2Fyb3VzZWw7XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24oKXtcbiAgY2Fyb3VzZWwgPSBuZXcgQ2Fyb3VzZWwoKTtcbiAgY2Fyb3VzZWwuaW5pdGlhbGl6ZSgpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNhcm91c2VsOyIsImltcG9ydCBDaGFydCBmcm9tICdjaGFydC5qcyc7XG5cbnZhciBiYXJDb2xvciA9ICdyZ2JhKDIxNiwgMjE2LCAyMTYsIDEpJztcbnZhciBiYXJNYXhDb2xvciA9ICdyZ2JhKDM1LCAxNDMsIDIzMiwgMSknO1xudmFyIGJnQ29sb3JzID0gW2JhckNvbG9yLCBiYXJDb2xvciwgYmFyQ29sb3IsIGJhckNvbG9yLCBiYXJDb2xvciwgYmFyQ29sb3IsIGJhckNvbG9yLCBiYXJDb2xvciwgXTtcblxuXG5pZiAoJCgnI2NoYXJ0QScpLmxlbmd0aCkge1xuXG5cbiAgLy/mraPnpL7lk6FcbiAgdmFyIGN0eEEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNoYXJ0QVwiKTtcbiAgdmFyIGRhdGFBID0gJCgnI2NoYXJ0QScpLmRhdGEoJ2dyYXBoLWRhdGEnKTtcbiAgdmFyIGxhYmVsQSA9ICQoJyNjaGFydEEnKS5kYXRhKCdncmFwaC1sYWJlbCcpO1xuICB2YXIgYm91bmRhcnlNaW5BID0gJCgnI2NoYXJ0QScpLmRhdGEoJ2dyYXBoLWJvdW5kYXJ5LW1pbicpO1xuICB2YXIgYm91bmRhcnlNYXhBID0gJCgnI2NoYXJ0QScpLmRhdGEoJ2dyYXBoLWJvdW5kYXJ5LW1heCcpO1xuXG4gIHZhciBtYXhBID0gMDtcbiAgdmFyIG1heFBvc2l0aW9uQSA9IG51bGw7XG4gIGZvciAodmFyIGkgaW4gZGF0YUEpIHtcbiAgICBpZiAobWF4QSA8IGRhdGFBW2ldKSB7XG4gICAgICBtYXhBID0gZGF0YUFbaV07XG4gICAgICBtYXhQb3NpdGlvbkEgPSBpO1xuICAgIH1cbiAgfVxuXG4gIGJnQ29sb3JzW21heFBvc2l0aW9uQV0gPSBiYXJNYXhDb2xvcjtcblxuICB2YXIgY2hhcnRBID0gbmV3IENoYXJ0KGN0eEEsIHtcbiAgICB0eXBlOiAnYmFyJyxcbiAgICBkYXRhOiB7XG4gICAgICBsYWJlbHM6IGxhYmVsQSxcbiAgICAgIGRhdGFzZXRzOiBbe1xuICAgICAgICBsYWJlbDogJ+e1puaWmeWIhuW4gycsXG4gICAgICAgIGRhdGE6IGRhdGFBLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGJnQ29sb3JzLFxuICAgICAgICBob3ZlckJhY2tncm91bmRDb2xvcjogYmdDb2xvcnMsXG4gICAgICAgIGJvcmRlcldpZHRoOiAwXG4gICAgICB9XVxuICAgIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAgdG9vbHRpcHM6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgIH0sXG4gICAgICBsZWdlbmQ6IHtcbiAgICAgICAgZGlzcGxheTogZmFsc2VcbiAgICAgIH0sXG4gICAgICBzY2FsZXM6IHtcbiAgICAgICAgeEF4ZXM6IFt7XG4gICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgY2F0ZWdvcnlQZXJjZW50YWdlOiAxLFxuICAgICAgICB9XSxcbiAgICAgICAgeUF4ZXM6IFt7XG4gICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgdGlja3M6IHtcbiAgICAgICAgICAgIGJlZ2luQXRaZXJvOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgfV1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gICQoJy5qcy1wZi1jaGFydC1taW4tYScpLnRleHQoYm91bmRhcnlNaW5BKTtcbiAgJCgnLmpzLXBmLWNoYXJ0LW1heC1hJykudGV4dChib3VuZGFyeU1heEEpO1xuXG59O1xuXG5pZiAoJCgnI2NoYXJ0QicpLmxlbmd0aCkge1xuXG5cbiAgLy/jg5Hjg7zjg4jjg7vjgqLjg6vjg5DjgqTjg4hcbiAgdmFyIGN0eEIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNoYXJ0QlwiKTtcbiAgdmFyIGRhdGFCID0gJCgnI2NoYXJ0QicpLmRhdGEoJ2dyYXBoLWRhdGEnKTtcbiAgdmFyIGxhYmVsQiA9ICQoJyNjaGFydEInKS5kYXRhKCdncmFwaC1sYWJlbCcpO1xuICB2YXIgYm91bmRhcnlNaW5CID0gJCgnI2NoYXJ0QicpLmRhdGEoJ2dyYXBoLWJvdW5kYXJ5LW1pbicpO1xuICB2YXIgYm91bmRhcnlNYXhCID0gJCgnI2NoYXJ0QicpLmRhdGEoJ2dyYXBoLWJvdW5kYXJ5LW1heCcpO1xuXG4gIHZhciBtYXhCID0gMDtcbiAgdmFyIG1heFBvc2l0aW9uQiA9IG51bGw7XG4gIGZvciAodmFyIGkgaW4gZGF0YUIpIHtcbiAgICBpZiAobWF4QiA8IGRhdGFCW2ldKSB7XG4gICAgICBtYXhCID0gZGF0YUJbaV07XG4gICAgICBtYXhQb3NpdGlvbkIgPSBpO1xuICAgIH1cbiAgfVxuXG4gIGJnQ29sb3JzW21heFBvc2l0aW9uQl0gPSBiYXJNYXhDb2xvcjtcblxuICB2YXIgY2hhcnRCID0gbmV3IENoYXJ0KGN0eEIsIHtcbiAgICB0eXBlOiAnYmFyJyxcbiAgICBkYXRhOiB7XG4gICAgICBsYWJlbHM6IGxhYmVsQixcbiAgICAgIGRhdGFzZXRzOiBbe1xuICAgICAgICBsYWJlbDogJ+e1puaWmeWIhuW4gycsXG4gICAgICAgIGRhdGE6IGRhdGFCLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGJnQ29sb3JzLFxuICAgICAgICBob3ZlckJhY2tncm91bmRDb2xvcjogYmdDb2xvcnMsXG4gICAgICAgIGJvcmRlcldpZHRoOiAwXG4gICAgICB9XVxuICAgIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAgdG9vbHRpcHM6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgIH0sXG4gICAgICBsZWdlbmQ6IHtcbiAgICAgICAgZGlzcGxheTogZmFsc2VcbiAgICAgIH0sXG4gICAgICBzY2FsZXM6IHtcbiAgICAgICAgeEF4ZXM6IFt7XG4gICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgY2F0ZWdvcnlQZXJjZW50YWdlOiAxLFxuICAgICAgICB9XSxcbiAgICAgICAgeUF4ZXM6IFt7XG4gICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgdGlja3M6IHtcbiAgICAgICAgICAgIGJlZ2luQXRaZXJvOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgfV1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gICQoJy5qcy1wZi1jaGFydC1taW4tYicpLnRleHQoYm91bmRhcnlNaW5CKTtcbiAgJCgnLmpzLXBmLWNoYXJ0LW1heC1iJykudGV4dChib3VuZGFyeU1heEIpO1xuXG59O1xuXG5pZiAoJCgnI2NoYXJ0QycpLmxlbmd0aCkge1xuXG5cbiAgLy/mtL7pgaPnpL7lk6FcbiAgdmFyIGN0eEMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNoYXJ0Q1wiKTtcbiAgdmFyIGRhdGFDID0gJCgnI2NoYXJ0QycpLmRhdGEoJ2dyYXBoLWRhdGEnKTtcbiAgdmFyIGxhYmVsQyA9ICQoJyNjaGFydEMnKS5kYXRhKCdncmFwaC1sYWJlbCcpO1xuICB2YXIgYm91bmRhcnlNaW5DID0gJCgnI2NoYXJ0QycpLmRhdGEoJ2dyYXBoLWJvdW5kYXJ5LW1pbicpO1xuICB2YXIgYm91bmRhcnlNYXhDID0gJCgnI2NoYXJ0QycpLmRhdGEoJ2dyYXBoLWJvdW5kYXJ5LW1heCcpO1xuXG4gIHZhciBtYXhDID0gMDtcbiAgdmFyIG1heFBvc2l0aW9uQyA9IG51bGw7XG4gIGZvciAodmFyIGkgaW4gZGF0YUMpIHtcbiAgICBpZiAobWF4QyA8IGRhdGFDW2ldKSB7XG4gICAgICBtYXhDID0gZGF0YUNbaV07XG4gICAgICBtYXhQb3NpdGlvbkMgPSBpO1xuICAgIH1cbiAgfVxuXG4gIGJnQ29sb3JzW21heFBvc2l0aW9uQ10gPSBiYXJNYXhDb2xvcjtcblxuICB2YXIgY2hhcnRDID0gbmV3IENoYXJ0KGN0eEMsIHtcbiAgICB0eXBlOiAnYmFyJyxcbiAgICBkYXRhOiB7XG4gICAgICBsYWJlbHM6IGxhYmVsQyxcbiAgICAgIGRhdGFzZXRzOiBbe1xuICAgICAgICBsYWJlbDogJ+e1puaWmeWIhuW4gycsXG4gICAgICAgIGRhdGE6IGRhdGFDLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGJnQ29sb3JzLFxuICAgICAgICBob3ZlckJhY2tncm91bmRDb2xvcjogYmdDb2xvcnMsXG4gICAgICAgIGJvcmRlcldpZHRoOiAwXG4gICAgICB9XVxuICAgIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAgdG9vbHRpcHM6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgIH0sXG4gICAgICBsZWdlbmQ6IHtcbiAgICAgICAgZGlzcGxheTogZmFsc2VcbiAgICAgIH0sXG4gICAgICBzY2FsZXM6IHtcbiAgICAgICAgeEF4ZXM6IFt7XG4gICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgY2F0ZWdvcnlQZXJjZW50YWdlOiAxLFxuICAgICAgICB9XSxcbiAgICAgICAgeUF4ZXM6IFt7XG4gICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgdGlja3M6IHtcbiAgICAgICAgICAgIGJlZ2luQXRaZXJvOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgfV1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gICQoJy5qcy1wZi1jaGFydC1taW4tYycpLnRleHQoYm91bmRhcnlNaW5DKTtcbiAgJCgnLmpzLXBmLWNoYXJ0LW1heC1jJykudGV4dChib3VuZGFyeU1heEMpO1xuXG59IiwiY29uc3QgVEFSR0VUX0NMQVNTID0gJ2pzLXBmLWNoZWNrYm94LWFsbCc7XG5jb25zdCBDT01QTEVURV9DTEFTUyA9ICdqcy1wZi1jaGVja2JveC1hbGwtY29tcGxldGVkJztcblxuY29uc3QgQ2hlY2tib3hBbGxTZWxlY3RhYmxlID0gKHRhcmdldEVsKSA9PiB7XG4gIGNvbnN0IGNoZWNrYm94TmFtZSAgICAgICAgID0gdGFyZ2V0RWwuZ2V0QXR0cmlidXRlKCduYW1lJyk7XG4gIGlmKCFjaGVja2JveE5hbWUpIHJldHVybjtcblxuICBjb25zdCBQQVJFTlRfRUxFICAgICAgICAgICA9IHRhcmdldEVsO1xuICBjb25zdCBDTElDS0FCTEVfRUxFICAgICAgICA9IHRhcmdldEVsLm5leHRFbGVtZW50U2libGluZztcblxuICBjb25zdCBncm91cENoaWxkQ2hlY2tib3hlcyA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdW25hbWU9XCIke2NoZWNrYm94TmFtZX1cIl1gKSkucmVkdWNlKChhY2N1bSwgY2IpID0+IHtcbiAgICBpZighY2IuaXNTYW1lTm9kZShQQVJFTlRfRUxFKSkgYWNjdW0ucHVzaChjYik7XG4gICAgcmV0dXJuIGFjY3VtO1xuICB9LCBbXSk7XG5cbiAgY29uc3Qgb25QYXJlbnRDbGljayA9IChldikgPT4ge1xuICAgIGlmKFBBUkVOVF9FTEUuY2hlY2tlZCkge1xuICAgICAgZ3JvdXBDaGlsZENoZWNrYm94ZXMuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgIGVsLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgICAgUEFSRU5UX0VMRS5jaGVja2VkID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdyb3VwQ2hpbGRDaGVja2JveGVzLmZvckVhY2goZWwgPT4ge1xuICAgICAgICBlbC5jaGVja2VkID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgUEFSRU5UX0VMRS5jaGVja2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgY29uc3Qgb25QYXJlbnRDaGFuZ2UgPSAoKSA9PiB7XG4gICAgaWYoZXYuY3VycmVudFRhcmdldC5jaGVja2VkKSB7XG4gICAgICBncm91cENoaWxkQ2hlY2tib3hlcy5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgZWwuY2hlY2tlZCA9IHRydWU7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JvdXBDaGlsZENoZWNrYm94ZXMuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgIGVsLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICog5a2Q6KaB57Sg44Gu6YG45oqe54q25oWL5aSJ5YyW5pmC44Gr55m654GrICBcbiAgICog5a2Q6KaB57Sg44Gu6YG45oqe54q25oWL44Gr5b+c44GY44Gm6Kaq6KaB57Sg44Gu6YG45oqe54q25oWL44KS5YiH44KK5pu/44GI44KLXG4gICAqL1xuICBjb25zdCBvbkNoaWxkQ2hhbmdlID0gKCkgPT4ge1xuICAgIC8vIOWtkOimgee0oOWFqOOBpuOBjOmBuOaKnuOBleOCjOOBpuOBhOOCi+WgtOWQiFxuICAgIGlmKGdyb3VwQ2hpbGRDaGVja2JveGVzLmV2ZXJ5KGNoaWxkID0+IGNoaWxkLmNoZWNrZWQpKSB7XG4gICAgICBQQVJFTlRfRUxFLmNoZWNrZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBQQVJFTlRfRUxFLmNoZWNrZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5Yid5pyf5YyWXG4gICAqL1xuICBjb25zdCBpbml0ID0gKCkgPT4ge1xuICAgIGlmKENMSUNLQUJMRV9FTEUpIHtcbiAgICAgIENMSUNLQUJMRV9FTEUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBvblBhcmVudENsaWNrLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFBBUkVOVF9FTEUuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGV2KSA9PiBvblBhcmVudENoYW5nZShldiksIGZhbHNlKTtcbiAgICB9XG4gICAgZ3JvdXBDaGlsZENoZWNrYm94ZXMuZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICBjaGlsZC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBvbkNoaWxkQ2hhbmdlLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBQQVJFTlRfRUxFLmNsYXNzTGlzdC5hZGQoQ09NUExFVEVfQ0xBU1MpO1xuICB9XG5cbiAgaW5pdCgpO1xufVxuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKCl7XG4gIFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7VEFSR0VUX0NMQVNTfTpub3QoLiR7Q09NUExFVEVfQ0xBU1N9KWApKS5mb3JFYWNoKHRhcmdldCA9PiB7XG4gICAgQ2hlY2tib3hBbGxTZWxlY3RhYmxlKHRhcmdldCk7XG4gIH0pO1xufSk7XG4iLCIvKipcbiAqIOODouOCuOODpeODvOODq+aoquaWreOBp+S9v+eUqOOBleOCjOOCi+OCteOCpOODiOOBruioreWumuWApFxuICogQHByb3BlcnR5IHsgT2JqZWN0LjxTdHJpbmcsIE51bWJlcj4gfSBCUkVBS19QT0lOVFMgICAgICAg44OW44Os44Kk44Kv44Od44Kk44Oz44OI44Gu44Oq44K544OI566h55CGXG4gKiBAcHJvcGVydHkgeyBTdHJpbmcgfSAgICAgICAgICAgICAgICAgIENVUlJFTlRfREVWSUNFICAgICDnj77lnKjjga7jg4fjg5DjgqTjgrnlkI3jgIHjg6rjgrXjgqTjgrrmmYLjgavmm7TmlrBcbiAqIEBwcm9wZXJ0eSB7IE9iamVjdC48U3RyaW5nLCBTdHJpbmc+IH0gREVWSUNFICAgICAgICAgICAgIOODh+ODkOOCpOOCueWQjeensOOBruWumuaVsOODquOCueODiFxuICovXG5jb25zdCBDT05GSUcgPSB7XG4gIEJSRUFLX1BPSU5UUzoge1xuICAgIFNQOiA3NjdcbiAgfSxcbiAgQ1VSUkVOVF9ERVZJQ0U6IG51bGwsXG4gIERFVklDRToge1xuICAgIFNQOiAnU1AnLFxuICAgIFBDOiAnUEMnLFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENPTkZJRzsiLCJ3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKCl7XHJcbiAgJChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBjaGFuZ2Vfd2FyZWtpKGRhdGUpIHtcclxuICAgICAgeWVhciA9IGRhdGUuc3Vic3RyaW5nKDAsNCk7XHJcbiAgICAgIG1tZGQgPSBkYXRlLnN1YnN0cmluZyg0LDExKTtcclxuICAgICAgbGV0IHJlc3VsdDtcclxuICAgICAgaWYoeWVhciA+IDIwMTgpIHtcclxuICAgICAgICByZXN1bHQgPSB5ZWFyIC0gMjAxODtcclxuICAgICAgICByZXN1bHQgPSAn5Luk5ZKMJyArIHJlc3VsdDtcclxuICAgICAgfSBlbHNlIGlmKHllYXIgPiAyMDE4KSB7XHJcbiAgICAgICAgICByZXN1bHQgPSB5ZWFyIC0gMTk4ODtcclxuICAgICAgICAgIHJlc3VsdCA9ICflubPmiJAnICsgcmVzdWx0O1xyXG4gICAgICB9IGVsc2UgaWYgKHllYXIgPiAxOTI1KSB7XHJcbiAgICAgICAgICByZXN1bHQgPSB5ZWFyIC0gMTkyNTtcclxuICAgICAgICAgIHJlc3VsdCA9ICfmmK3lkownICsgcmVzdWx0O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXN1bHQgKyBtbWRkO1xyXG4gICAgfVxyXG4gICAgLy95eXl55bm0bW3mnIhkZOaXpSDihpIg5ZKM5pqmeXnlubRtbeaciGRk5pel44Gr5aSJ5o+bXHJcbiAgICAkKCcuanMtcGYtZGF0ZXBpY2tlcl93YXJla2knKS5vbignY2hhbmdlJywgZnVuY3Rpb24oKXtcclxuICAgICAgdGhpcy52YWx1ZSA9IGNoYW5nZV93YXJla2kodGhpcy52YWx1ZSk7XHJcbiAgICB9KTtcclxuICBcclxuICAgICQoJy5qcy1wZi1kYXRlcGlja2VyJykuZGF0ZXBpY2tlcih7XHJcbiAgICAgIGRhdGVGb3JtYXQ6IFwieXnlubRtbeaciGRk5pelXCIsXHJcbiAgICAgIGNsb3NlVGV4dDogXCLplonjgZjjgotcIixcclxuICAgICAgcHJldlRleHQ6IFwiJiN4M0M75YmNXCIsXHJcbiAgICAgIG5leHRUZXh0OiBcIuasoSYjeDNFO1wiLFxyXG4gICAgICBjdXJyZW50VGV4dDogXCLku4rml6VcIixcclxuICAgICAgbW9udGhOYW1lczogW1xyXG4gICAgICAgIFwiMeaciFwiLFxyXG4gICAgICAgIFwiMuaciFwiLFxyXG4gICAgICAgIFwiM+aciFwiLFxyXG4gICAgICAgIFwiNOaciFwiLFxyXG4gICAgICAgIFwiNeaciFwiLFxyXG4gICAgICAgIFwiNuaciFwiLFxyXG4gICAgICAgIFwiN+aciFwiLFxyXG4gICAgICAgIFwiOOaciFwiLFxyXG4gICAgICAgIFwiOeaciFwiLFxyXG4gICAgICAgIFwiMTDmnIhcIixcclxuICAgICAgICBcIjEx5pyIXCIsXHJcbiAgICAgICAgXCIxMuaciFwiXHJcbiAgICAgIF0sXHJcbiAgICAgIG1vbnRoTmFtZXNTaG9ydDogW1xyXG4gICAgICAgIFwiMeaciFwiLFxyXG4gICAgICAgIFwiMuaciFwiLFxyXG4gICAgICAgIFwiM+aciFwiLFxyXG4gICAgICAgIFwiNOaciFwiLFxyXG4gICAgICAgIFwiNeaciFwiLFxyXG4gICAgICAgIFwiNuaciFwiLFxyXG4gICAgICAgIFwiN+aciFwiLFxyXG4gICAgICAgIFwiOOaciFwiLFxyXG4gICAgICAgIFwiOeaciFwiLFxyXG4gICAgICAgIFwiMTDmnIhcIixcclxuICAgICAgICBcIjEx5pyIXCIsXHJcbiAgICAgICAgXCIxMuaciFwiXHJcbiAgICAgIF0sXHJcbiAgICAgIGRheU5hbWVzOiBbXHJcbiAgICAgICAgXCLml6Xmm5zml6VcIixcclxuICAgICAgICBcIuaciOabnOaXpVwiLFxyXG4gICAgICAgIFwi54Gr5puc5pelXCIsXHJcbiAgICAgICAgXCLmsLTmm5zml6VcIixcclxuICAgICAgICBcIuacqOabnOaXpVwiLFxyXG4gICAgICAgIFwi6YeR5puc5pelXCIsXHJcbiAgICAgICAgXCLlnJ/mm5zml6VcIlxyXG4gICAgICBdLFxyXG4gICAgICBkYXlOYW1lc1Nob3J0OiBbXCLml6VcIiwgXCLmnIhcIiwgXCLngatcIiwgXCLmsLRcIiwgXCLmnKhcIiwgXCLph5FcIiwgXCLlnJ9cIl0sXHJcbiAgICAgIGRheU5hbWVzTWluOiBbXCLml6VcIiwgXCLmnIhcIiwgXCLngatcIiwgXCLmsLRcIiwgXCLmnKhcIiwgXCLph5FcIiwgXCLlnJ9cIl0sXHJcbiAgICAgIHdlZWtIZWFkZXI6IFwi6YCxXCIsXHJcbiAgICAgIGlzUlRMOiBmYWxzZSxcclxuICAgICAgc2hvd01vbnRoQWZ0ZXJZZWFyOiB0cnVlLFxyXG4gICAgICB5ZWFyU3VmZml4OiBcIuW5tFwiLFxyXG4gICAgICBmaXJzdERheTogMSwgLy8g6YCx44Gu5Yid44KB44Gv5pyI5pucXHJcbiAgICAgIHNob3dCdXR0b25QYW5lbDogdHJ1ZSAvLyBcIuS7iuaXpVwi44Oc44K/44OzLCBcIumWieOBmOOCi1wi44Oc44K/44Oz44KS6KGo56S644GZ44KLXHJcbiAgICB9KTtcclxuICB9KTtcclxufSk7XHJcbiIsImNvbnN0IGVlID0gcmVxdWlyZSgnZXZlbnRzJyk7XG5jb25zdCBlbWl0dGVyID0gbmV3IGVlLkV2ZW50RW1pdHRlcigpO1xuXG4vKipcbiAqIGVtaXR0b3Ljga/jgrfjg7PjgrDjg6vjg4jjg7PvvIjopIfmlbDjgqTjg7Pjgrnjgr/jg7Pjgrnjga7nlJ/miJDjga/npoHmraLvvIlcbiAqL1xuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0OiBlbWl0dGVyLmVtaXQsXG4gIG9mZjogZW1pdHRlci5vZmYsXG4gIG9uOiBlbWl0dGVyLm9uLFxuICBvbmNlOiBlbWl0dGVyLm9uY2UsXG59XG4iLCJ3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKCl7XG4gICQoZnVuY3Rpb24gKCkge1xuICAgICQoJy5qcy1mYXZvcml0ZScpLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCdpcy1hY3RpdmUnKSkge1xuICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdpcy1hY3RpdmUnKTsgICAgICBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2lzLWFjdGl2ZScpO1xuICAgICAgICAkKHRoaXMpLmZpbmQoJy5qcy1mYXZvcml0ZV9iYWxvb24nKS5hZGRDbGFzcygnaXMtYWN0aXZlJyk7XG4gICAgICAgIHNldFRpbWVvdXQoJC5wcm94eShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgJCh0aGlzKS5maW5kKCcuanMtZmF2b3JpdGVfYmFsb29uJykucmVtb3ZlQ2xhc3MoJ2lzLWFjdGl2ZScpO1xuICAgICAgICB9LCB0aGlzKSwgMjAwMCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iLCIvKipcbiAqIOODleODreODvOODiOODnOODg+OCr+OCueODnuODjeODvOOCuOODo1xuICovXG5jb25zdCBGbG9hdEJveE1hbmFnZXIgPSAoKSA9PiB7XG4gIGNvbnN0IFRBUkdFVF9DTEFTUyAgICA9ICdqcy1wZi1mbG9hdC1ib3gnO1xuICBjb25zdCBDT05UQUlORVJfQ0xBU1MgPSAnanMtcGYtZmxvYXQtYm94LWNvbnRhaW5lcic7XG4gIGNvbnN0IFRPR0dMRV9DTEFTUyAgICA9ICdqcy1wZi1mbG9hdC1ib3gtdG9nZ2xlJztcbiAgY29uc3QgU1RBVEVfREFUQSAgICAgID0gJ2RhdGEtZmxvYXQtYm94LXN0YXRlJztcbiAgY29uc3QgU1RBVEVfT1BFTiAgICAgID0gJ29wZW4nO1xuICBjb25zdCBTVEFURV9DTE9TRSAgICAgPSAnY2xvc2UnO1xuICBjb25zdCBCVE5fVFhUX09QRU4gICAgPSAn44Gy44KJ44GPJztcbiAgY29uc3QgQlROX1RYVF9DTE9TRSAgID0gJ+OBqOOBmOOCiyc7XG5cbiAgY29uc3QgRkxPQVRfQk9YRVMgICAgID0gW107XG5cbiAgY29uc3Qgb25DbG9zZSA9IChmbG9hdEJveCkgPT4ge1xuICAgIGZsb2F0Qm94LmVsLnNldEF0dHJpYnV0ZShTVEFURV9EQVRBLCBTVEFURV9DTE9TRSk7XG4gICAgZmxvYXRCb3gudG9nZ2xlQnRucy5mb3JFYWNoKGJ0biA9PiB7XG4gICAgICBidG4uaW5uZXJUZXh0ID0gQlROX1RYVF9PUEVOO1xuICAgIH0pXG4gIH1cblxuICBjb25zdCBvbk9wZW4gPSAoZmxvYXRCb3gpID0+IHtcbiAgICBmbG9hdEJveC5lbC5zZXRBdHRyaWJ1dGUoU1RBVEVfREFUQSwgU1RBVEVfT1BFTik7XG4gICAgZmxvYXRCb3gudG9nZ2xlQnRucy5mb3JFYWNoKGJ0biA9PiB7XG4gICAgICBidG4uaW5uZXJUZXh0ID0gQlROX1RYVF9DTE9TRTtcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIOOCr+ODquODg+OCr+aZguOBruWHpueQhlxuICAgKiBAcGFyYW0geyBPYmplY3QgfSBmbG9hdEJveCDlr77osaHjga5mbG9hdEJveOimgee0oFxuICAgKi9cbiAgY29uc3Qgb25DbGljayA9IChmbG9hdEJveCkgPT4ge1xuICAgIHN3aXRjaChmbG9hdEJveC5lbC5nZXRBdHRyaWJ1dGUoU1RBVEVfREFUQSkpIHtcbiAgICAgIGNhc2UgU1RBVEVfT1BFTjpcbiAgICAgICAgb25DbG9zZShmbG9hdEJveCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTVEFURV9DTE9TRTpcbiAgICAgICAgb25PcGVuKGZsb2F0Qm94KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBvbkNsb3NlKGZsb2F0Qm94KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog44Kk44OZ44Oz44OI5LuY5LiOXG4gICAqIEBwYXJhbSB7IE9iamVjdCB9IGZsb2F0Qm94IOWvvuixoeOBrmZsb2F0Qm9444Kq44OW44K444Kn44Kv44OIXG4gICAqL1xuICBjb25zdCBhZGRFdmVudCA9IChmbG9hdEJveCkgPT4ge1xuICAgIGZsb2F0Qm94LnRvZ2dsZUJ0bnMuZm9yRWFjaChidG4gPT4ge1xuICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICBvbkNsaWNrKGZsb2F0Qm94KTtcbiAgICAgIH0sIGZhbHNlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDliJ3mnJ/ljJZcbiAgICovXG4gIGNvbnN0IGluaXQgPSAoKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0cyA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7VEFSR0VUX0NMQVNTfWApKTtcbiAgICB0YXJnZXRzLmZvckVhY2godGFyZ2V0ID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lckVsID0gW10uc2xpY2UuY2FsbCh0YXJnZXQucXVlcnlTZWxlY3RvckFsbChgLiR7Q09OVEFJTkVSX0NMQVNTfWApKTtcbiAgICAgIGNvbnN0IHRvZ2dsZUJ0bnMgPSBbXS5zbGljZS5jYWxsKHRhcmdldC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtUT0dHTEVfQ0xBU1N9YCkpO1xuICAgICAgXG5cbiAgICAgIEZMT0FUX0JPWEVTLnB1c2goe1xuICAgICAgICBlbDogdGFyZ2V0LFxuICAgICAgICBjb250YWluZXJFbCxcbiAgICAgICAgdG9nZ2xlQnRucyxcbiAgICAgICAgb3JpZ2luSFRNTDogY29udGFpbmVyRWwuaW5uZXJIVE1MLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBGTE9BVF9CT1hFUy5mb3JFYWNoKGZsb2F0Ym94ID0+IHtcbiAgICAgIGFkZEV2ZW50KGZsb2F0Ym94KTtcbiAgICAgIG9uQ2xvc2UoZmxvYXRib3gpO1xuICAgIH0pO1xuICB9XG5cbiAgaW5pdCgpO1xuXG4gIHJldHVybiB7XG4gIH1cbn1cblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbigpe1xuICBGbG9hdEJveE1hbmFnZXIoKTtcbn0pOyIsImNvbnN0IFRSSUdHRVJfQ0xBU1MgPSAnanMtcGYtZm9sbG93LWNhcmQnO1xuY29uc3QgQ0xPU0VfQ0xBU1MgPSAnanMtcGYtZm9sbG93LWNhcmQtY2xvc2UnO1xuXG5cbi8qKlxuICog6L+95b6T44Kr44O844OJXG4gKiBAY29uc3RydWN0b3JcbiAqXG4gKiBAcGFyYW0gICAgeyBIVE1MRWxlbWVudCB9ICB0cmlnZ2VyRWxlbWVudCDnlJ/miJDjga7lr77osaHjgajjgarjgovopoHntKBcbiAqL1xuY29uc3QgRm9sbG93Q2FyZCA9ICh0cmlnZ2VyRWxlbWVudCkgPT4ge1xuICBjb25zdCBUQVJHRVRfRUxFID0gdHJpZ2dlckVsZW1lbnQ7XG4gIGNvbnN0IENMT1NFX0JOVHMgPSBbXS5zbGljZS5jYWxsKFRBUkdFVF9FTEUucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xPU0VfQ0xBU1N9YCkpO1xuXG4gIGNvbnN0IG9uQ2xvc2UgPSAoKSA9PiB7XG4gICAgVEFSR0VUX0VMRS5jbGFzc0xpc3QuYWRkKCdpcy1jbG9zZScpO1xuICB9XG5cbiAgY29uc3QgYWRkRXZlbnQgPSAoKSA9PiB7XG4gICAgQ0xPU0VfQk5Ucy5mb3JFYWNoKGNsb3NlQnRuID0+IHtcbiAgICAgIGNsb3NlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgb25DbG9zZSwgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8g5qSc57Si6L+95b6T6KGo56S644KS5Y+X44GR5Y+W44KKXG4gICAgZW1pdHRlci5vbignb25Gb2xsb3dQYWdlQm90dG9tVmlzaWJsZScsICgpID0+IHtcbiAgICAgIFRBUkdFVF9FTEUuY2xhc3NMaXN0LnJlbW92ZSgnaXMtaGlkZGVuLXBhZ2UtYm90dG9tJyk7XG4gICAgfSk7XG4gIFxuICAgIC8vIOaknOe0oui/veW+k+mdnuihqOekuuOCkuWPl+OBkeWPluOCilxuICAgIGVtaXR0ZXIub24oJ29uRm9sbG93UGFnZUJvdHRvbUhpZGRlbicsICgpID0+IHtcbiAgICAgIFRBUkdFVF9FTEUuY2xhc3NMaXN0LmFkZCgnaXMtaGlkZGVuLXBhZ2UtYm90dG9tJyk7XG4gICAgfSk7XG5cbiAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBUQVJHRVRfRUxFLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWNsb3NlJyk7XG4gICAgfSwgMTAwMDApO1xuICB9XG5cbiAgY29uc3QgaW5pdCA9ICgpID0+IHtcbiAgICBhZGRFdmVudCgpO1xuICB9XG5cbiAgaW5pdCgpO1xufVxuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKCl7XG4gIFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7VFJJR0dFUl9DTEFTU31gKSkuZm9yRWFjaCh0cmlnZ2VyID0+IHtcbiAgICBGb2xsb3dDYXJkKHRyaWdnZXIpO1xuICB9KVxufSk7IiwiLy8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbigpe1xuLy8gICBsZXQgZWxlbSA9ICQoJyNwZi1wYWdlbmF0aW9uJyk7XG5cbi8vICAgZWxlbS5lYWNoKGZ1bmN0aW9uICgpIHtcblxuLy8gICAgIGxldCBlbGVtT2Zmc2V0ID0gJCh0aGlzKS5vZmZzZXQoKS50b3A7XG4vLyAgICAgbGV0IHNjcm9sbFBvcyA9ICQod2luZG93KS5zY3JvbGxUb3AoKTtcbi8vICAgICBsZXQgd2ggPSAkKHdpbmRvdykuaGVpZ2h0KCk7XG5cbi8vICAgICBpZiAoc2Nyb2xsUG9zID4gZWxlbU9mZnNldCAtIHdoICsgKHdoIC8gMSkpIHtcbi8vICAgICAgICQoJyNwZi1wYWdlLWJvdHRvbScpLmZhZGVPdXQoKTtcbi8vICAgICB9IGVsc2Uge1xuLy8gICAgICAgJCgnI3BmLXBhZ2UtYm90dG9tJykuZmFkZUluKCk7XG4vLyAgICAgfVxuLy8gICB9KTtcbi8vIH0pO1xuXG5cbmNvbnN0IEZsbG93UGFnZUJvdHRvbSA9ICgpID0+IHtcbiAgY29uc3QgVEFSR0VUX0lEICA9ICdwZi1wYWdlLWJvdHRvbSc7XG4gIGNvbnN0IERJU1BMQVlfVFJJR0dFUl9EQVRBID0gJ2RhdGEtZGlzcGxheS10cmlnZ2VyLWlkJztcbiAgY29uc3QgSElEREVOX1RSSUdHRVJfREFUQSA9ICdkYXRhLXRyaWdnZXItaWQnO1xuXG4gIGNvbnN0IFRBUkdFVF9FTEUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChUQVJHRVRfSUQpO1xuXG4gIGlmKCFUQVJHRVRfRUxFKSByZXR1cm47XG4gIFxuICBjb25zdCBISURERU5fVFJJR0dFUl9JRCA9IFRBUkdFVF9FTEUuZ2V0QXR0cmlidXRlKEhJRERFTl9UUklHR0VSX0RBVEEpO1xuICBjb25zdCBISURERU5fVFJJR0dFUl9FTEUgPSBISURERU5fVFJJR0dFUl9JRCA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKEhJRERFTl9UUklHR0VSX0lEKSA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBESVNQTEFZX1RSSUdHRVJfSUQgPSBUQVJHRVRfRUxFLmdldEF0dHJpYnV0ZShESVNQTEFZX1RSSUdHRVJfREFUQSk7XG4gIGNvbnN0IERJU1BMQVlfVFJJR0dFUl9FTEUgPSBESVNQTEFZX1RSSUdHRVJfSUQgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChESVNQTEFZX1RSSUdHRVJfSUQpIDogdW5kZWZpbmVkO1xuXG4gIGlmKCFISURERU5fVFJJR0dFUl9FTEUpIHJldHVybjtcbiAgaWYoIURJU1BMQVlfVFJJR0dFUl9FTEUpIHJldHVybjtcblxuICBjb25zdCBvblZpc2libGUgPSAoKSA9PiB7XG4gICAgVEFSR0VUX0VMRS5jbGFzc0xpc3QucmVtb3ZlKCdpcy1oaWRkZW4nKTtcblxuICAgIC8vIOaknOe0oui/veW+k+ihqOekuuOCkueZuueBq1xuICAgIGVtaXR0ZXIuZW1pdCgnb25Gb2xsb3dQYWdlQm90dG9tVmlzaWJsZScpO1xuICB9XG4gIGNvbnN0IG9uSGlkZGVuID0gKCkgPT4ge1xuICAgIFRBUkdFVF9FTEUuY2xhc3NMaXN0LmFkZCgnaXMtaGlkZGVuJyk7XG5cbiAgICAvLyDmpJzntKLov73lvpPpnZ7ooajnpLrjgpLnmbrngatcbiAgICBlbWl0dGVyLmVtaXQoJ29uRm9sbG93UGFnZUJvdHRvbUhpZGRlbicpO1xuICB9XG5cbiAgY29uc3QgT0JTUlZFX09QVElPTiA9IHtcbiAgICByb290OiBudWxsLCAvLyDku4rlm57jga/jg5Pjg6Xjg7zjg53jg7zjg4jjgpLjg6vjg7zjg4jopoHntKDjgajjgZnjgotcbiAgICByb290TWFyZ2luOiBcIjBweCAwcHhcIiwgLy8g44OT44Ol44O844Od44O844OI44Gu5Lit5b+D44KS5Yik5a6a5Z+65rqW44Gr44GZ44KLXG4gICAgdGhyZXNob2xkOiAwIC8vIOmWvuWApOOBrzBcbiAgfTtcblxuICBjb25zdCB3aGVuSW50ZXJzZWN0ID0gKGVudHJpZXMpID0+IHtcbiAgICBlbnRyaWVzLmZvckVhY2goZW50cnkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0RGlzcGxheVkgPSBESVNQTEFZX1RSSUdHRVJfRUxFLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcbiAgICAgIGNvbnN0IHRhcmdldFkgPSBISURERU5fVFJJR0dFUl9FTEUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgICAgaWYoIWVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7XG4gICAgICAgIGlmKHRhcmdldFkgPCAwIHx8IHRhcmdldERpc3BsYXlZID4gMCkge1xuICAgICAgICAgIG9uSGlkZGVuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb25WaXNpYmxlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmKHRhcmdldFkgKyB3aW5kb3cuaW5uZXJIZWlnaHQgPCAwKSB7XG4gICAgICAgICAgb25IaWRkZW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvblZpc2libGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIod2hlbkludGVyc2VjdCwgT0JTUlZFX09QVElPTik7XG4gIG9ic2VydmVyLm9ic2VydmUoRElTUExBWV9UUklHR0VSX0VMRSk7XG4gIG9ic2VydmVyLm9ic2VydmUoSElEREVOX1RSSUdHRVJfRUxFKTtcblxufVxuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKCl7XG4gIEZsbG93UGFnZUJvdHRvbSgpO1xufSk7XG4iLCJjb25zdCBXUkFQUEVSX0NMQVNTX05BTUUgPSAnanMtcGYtbGljZW5zZS1zZWxlY3Rvcic7XG5jb25zdCBEQVRBX0ZJWEVEX0ZJRUxEX05BTUUgPSAnZml4ZWQtZmllbGQtbmFtZSc7XG5jb25zdCBEQVRBX0ZSRUVfRklFTERfTkFNRSA9ICdmcmVlLWZpZWxkLW5hbWUnO1xuY29uc3QgREFUQV9NT0RBTF9JRCA9ICdsaWNlbnNlLW1vZGFsLWlkJztcbmNvbnN0IEZSRUVfRklFTERfQ0xBU1NfTkFNRSA9ICdqcy1wZi1saWNlbnNlLXNlbGVjdG9yX2ZyZWUnO1xuY29uc3QgRlJFRV9CVVRUT05fQ0xBU1NfTkFNRSA9ICdqcy1wZi1saWNlbnNlLXNlbGVjdG9yX2ZyZWUtYnRuJztcbmNvbnN0IENIRUNLQk9YX0NMQVNTX05BTUUgPSAnanMtcGYtbGljZW5zZS1zZWxlY3Rvcl9jYW5kaWRhdGUnO1xuY29uc3QgREVMRVRFX0JVVFRPTl9DTEFTU19OQU1FID0gJ2pzLXBmLWxpY2Vuc2Utc2VsZWN0b3JfZGVsZXRlLWJ0bic7XG5jb25zdCBSRUdJU1RFUl9CVVRUT05fQ0xBU1NfTkFNRSA9ICdqcy1wZi1saWNlbnNlLXNlbGVjdG9yX3JlZ2lzdGVyLWJ0bic7XG5jb25zdCBTRUFSQ0hfRklFTERfQ0xBU1NfTkFNRSA9ICdqcy1wZi1saWNlbnNlLXNlbGVjdG9yX3NlYXJjaCc7XG5jb25zdCBTRUFSQ0hfTEFCRUxfQ0xBU1NfTkFNRSA9ICdqcy1wZi1saWNlbnNlLXNlbGVjdG9yX2xhYmVsJztcbmNvbnN0IE1PREFMX0NMT1NFX0JVVFRPTl9DTEFTU19OQU1FID0gJ2pzLXBmLW1vZGFsLWNsb3NlJztcbmNvbnN0IFRBR1NfQ0xBU1NfTkFNRSA9ICdqcy1wZi1saWNlbnNlLXNlbGVjdG9yX3RhZ3MnO1xuY29uc3QgVEFHX1RFTVBMQVRFID0gJzxkaXYgY2xhc3M9XCJwZi10YWcgcGYtdGFnX2RlbGV0ZVwiPiVuYW1lJTxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cIiVmb3JtRWxlbWVudE5hbWUlXCIgdmFsdWU9XCIldmFsdWUlXCI+PHNwYW4gY2xhc3M9XCJjbG9zZS1idG4ganMtcGYtdGFnLWRlbGV0ZS1idG4gJyArIERFTEVURV9CVVRUT05fQ0xBU1NfTkFNRSArICdcIj48L3NwYW4+PC9kaXY+Jztcblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbigpe1xuICAkKGZ1bmN0aW9uKCl7XG4gIFxuICAgIGNvbnN0IGFkZFRhZ3MgPSBmdW5jdGlvbigkd3JhcHBlciwgJG1vZGFsLCAkdGFncyl7XG4gICAgICBsZXQgJGNoZWNrZWQgPSAkbW9kYWwuZmluZCgnLicgKyBDSEVDS0JPWF9DTEFTU19OQU1FICsgJzpjaGVja2VkJyk7XG4gICAgICBsZXQgZml4ZWRGaWVsZE5hbWUgPSAkd3JhcHBlci5kYXRhKERBVEFfRklYRURfRklFTERfTkFNRSk7XG4gICAgICAkY2hlY2tlZC5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICAgICQodGhpcykucHJvcCgnY2hlY2tlZCcsZmFsc2UpO1xuICAgICAgICBsZXQgbmV3VGFnID0gVEFHX1RFTVBMQVRFICsgJyc7XG4gICAgICAgIGxldCBteU5hbWUgPSAkKHRoaXMpLm5leHQoKS50ZXh0KCk7XG4gICAgICAgIGxldCBteVZhbHVlID0gJCh0aGlzKS52YWwoKTtcbiAgICAgICAgLy/jgZnjgafjgavlkIzkuIBJROOBruimgee0oOOBjOOBguOCjOOBsOi/veWKoOOBl+OBquOBhOOAglxuICAgICAgICBpZiAoICR0YWdzLmZpbmQoJ2lucHV0W3ZhbHVlPVwiJysgbXlWYWx1ZSArJ1wiXScpLmxlbmd0aCA+IDAgKXtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbmV3VGFnID0gbmV3VGFnLnJlcGxhY2UoJyVuYW1lJScsbXlOYW1lKTtcbiAgICAgICAgbmV3VGFnID0gbmV3VGFnLnJlcGxhY2UoJyV2YWx1ZSUnLG15VmFsdWUpO1xuICAgICAgICBuZXdUYWcgPSBuZXdUYWcucmVwbGFjZSgnJWZvcm1FbGVtZW50TmFtZSUnLCBmaXhlZEZpZWxkTmFtZSk7XG4gICAgICAgICR0YWdzLmFwcGVuZChuZXdUYWcpO1xuICAgICAgfSk7XG4gICAgfVxuICBcbiAgICBjb25zdCBhZGRGcmVlVGFnID0gZnVuY3Rpb24oJHdyYXBwZXIsICR0YWdzLCB2YWx1ZSl7XG4gICAgICBsZXQgbmV3VGFnID0gVEFHX1RFTVBMQVRFICsgJyc7XG4gICAgICBsZXQgZnJlZUZpZWxkTmFtZSA9ICR3cmFwcGVyLmRhdGEoREFUQV9GUkVFX0ZJRUxEX05BTUUpO1xuICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC8mL2csXCImYW1wO1wiKVxuICAgICAgICAgICAgICAucmVwbGFjZSgvXCIvZyxcIiZxdW90O1wiKVxuICAgICAgICAgICAgICAucmVwbGFjZSgvJy9nLFwiJiMwMzk7XCIpXG4gICAgICAgICAgICAgIC5yZXBsYWNlKC88L2csXCImbHQ7XCIpXG4gICAgICAgICAgICAgIC5yZXBsYWNlKC8+L2csXCImZ3Q7XCIpO1xuICAgICAgbmV3VGFnID0gbmV3VGFnLnJlcGxhY2UoJyVuYW1lJScsdmFsdWUpO1xuICAgICAgbmV3VGFnID0gbmV3VGFnLnJlcGxhY2UoJyV2YWx1ZSUnLHZhbHVlKTtcbiAgICAgIG5ld1RhZyA9IG5ld1RhZy5yZXBsYWNlKCclZm9ybUVsZW1lbnROYW1lJScsIGZyZWVGaWVsZE5hbWUpO1xuICAgICAgJHRhZ3MuYXBwZW5kKG5ld1RhZyk7XG4gICAgfVxuICBcbiAgICBpZiAoJCgnLicgKyBXUkFQUEVSX0NMQVNTX05BTUUpLmxlbmd0aCA+IDApe1xuICAgICAgJCgnLicgKyBXUkFQUEVSX0NMQVNTX05BTUUpLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgICAgbGV0ICR3cmFwcGVyID0gJCh0aGlzKTtcbiAgICAgICAgbGV0IG1vZGFsSWQgPSAkd3JhcHBlci5kYXRhKERBVEFfTU9EQUxfSUQpO1xuICAgICAgICBsZXQgJG1vZGFsID0gJCgnIycgKyBtb2RhbElkKTtcbiAgICAgICAgaWYgKCAkbW9kYWwubGVuZ3RoIDwgMSApe1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+e0kOS7mOOBkeOBleOCjOOBn+ODouODvOODgOODq+OBjOOBguOCiuOBvuOBm+OCkycpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgJHRhZ3MgPSAkd3JhcHBlci5maW5kKCcuJytUQUdTX0NMQVNTX05BTUUpO1xuICAgICAgICAkbW9kYWwub24oJ2NsaWNrJywnLicgKyBSRUdJU1RFUl9CVVRUT05fQ0xBU1NfTkFNRSwgZnVuY3Rpb24oKXtcbiAgICAgICAgICBhZGRUYWdzKCR3cmFwcGVyLCAkbW9kYWwsICR0YWdzKTtcbiAgICAgICAgICAkbW9kYWwuZmluZCgnLicgKyBNT0RBTF9DTE9TRV9CVVRUT05fQ0xBU1NfTkFNRSkudHJpZ2dlcignY2xpY2snKTtcbiAgICAgICAgfSk7XG4gICAgICAgICR3cmFwcGVyLm9uKCdjbGljaycsICcuJyArIEZSRUVfQlVUVE9OX0NMQVNTX05BTUUsIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgbGV0ICRmcmVlRmllbGQgPSAkd3JhcHBlci5maW5kKCcuJyArIEZSRUVfRklFTERfQ0xBU1NfTkFNRSk7XG4gICAgICAgICAgbGV0IHZhbHVlID0gJGZyZWVGaWVsZC52YWwoKTtcbiAgICAgICAgICBpZiAodmFsdWUpe1xuICAgICAgICAgICAgYWRkRnJlZVRhZygkd3JhcHBlciwgJHRhZ3MsIHZhbHVlKTtcbiAgICAgICAgICAgICRmcmVlRmllbGQudmFsKCcnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAkd3JhcHBlci5vbignY2hhbmdlJywgJy4nICsgU0VBUkNIX0ZJRUxEX0NMQVNTX05BTUUsIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgJG1vZGFsLmZpbmQoJy4nICsgQ0hFQ0tCT1hfQ0xBU1NfTkFNRSApLnByb3AoJ2NoZWNrZWQnLGZhbHNlKTtcbiAgICAgICAgICBsZXQga2V5d29yZCA9ICAkKHRoaXMpLnZhbCgpO1xuICAgICAgICAgIGxldCBrZXl3b3JkcyA9IGtleXdvcmQudHJpbSgpLnNwbGl0KCcgJyk7XG4gICAgICAgICAgJG1vZGFsLmZpbmQoJy4nICsgU0VBUkNIX0xBQkVMX0NMQVNTX05BTUUpLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGxldCAkdGhpcyA9ICQodGhpcyk7XG4gICAgICAgICAgICBsZXQgbWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSBpbiBrZXl3b3Jkcyl7XG4gICAgICAgICAgICAgIGlmICggJCh0aGlzKS50ZXh0KCkuaW5kZXhPZihrZXl3b3Jkc1tpXSkgPT09IC0xICl7XG4gICAgICAgICAgICAgICAgbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCBrZXl3b3JkID09ICcnIHx8IG1hdGNoICl7XG4gICAgICAgICAgICAgICR0aGlzLnNob3coKTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAkdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn0pOyIsIndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24oKXtcbiAgJChmdW5jdGlvbigpe1xuICBcbiAgICBpZigkKCcuanMtcGYtbWFpbGFkZHJlc3MnKS5sZW5ndGgpe1xuICBcbiAgICAgIGNvbnN0IHBmTWFpbGFkZHJlc3NEb21haW5zID0gW1xuICAgICAgICAnZ21haWwuY29tJyxcbiAgICAgICAgJ3lhaG9vLmNvLmpwJyxcbiAgICAgICAgJ2RvY29tby5uZS5qcCcsXG4gICAgICAgICdlendlYi5uZS5qcCcsXG4gICAgICAgICdpLnNvZnRiYW5rLmpwJyxcbiAgICAgICAgJ2ljbG91ZC5jb20nLFxuICAgICAgICAnaG90bWFpbC5jby5qcCcsXG4gICAgICAgICdob3RtYWlsLmNvbScsXG4gICAgICAgICdvdXRsb29rLmpwJyxcbiAgICAgICAgJ2xpdmUuanAnLFxuICAgICAgICAnb3V0bG9vay5jb20nLFxuICAgICAgXTtcbiAgXG4gICAgICAkKCcuanMtcGYtbWFpbGFkZHJlc3MnKS5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICAgIGNvbnN0ICR0aGlzID0gJCh0aGlzKTtcbiAgICAgICAgY29uc3QgJHN1Z2dlc3QgPSAkdGhpcy5uZXh0KCk7XG4gICAgICAgICR0aGlzLm9uKCdrZXl1cCcsZnVuY3Rpb24oKXtcbiAgICAgICAgICBjb25zdCBhZGRyID0gJHRoaXMudmFsKCk7XG4gICAgICAgICAgJHN1Z2dlc3QuaHRtbCgnJykuaGlkZSgpO1xuICAgICAgICAgIGlmICggISBhZGRyLm1hdGNoKC9ALykgKXtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBhZGRyRWxlbWVudHMgPSBhZGRyLnNwbGl0KCdAJyk7XG4gICAgICAgICAgbGV0IHJlZ2V4RG9tYWluID0gKGFkZHJFbGVtZW50c1sxXSkgPyBhZGRyRWxlbWVudHNbMV0gOiAnLisnO1xuICAgICAgICAgIGxldCByZWdleCA9IG5ldyBSZWdFeHAoJ14nICsgcmVnZXhEb21haW4pO1xuICAgICAgICAgIGZvcihsZXQgaSBpbiBwZk1haWxhZGRyZXNzRG9tYWlucyl7XG4gICAgICAgICAgICBpZiggcGZNYWlsYWRkcmVzc0RvbWFpbnNbaV0ubWF0Y2gocmVnZXgpICl7XG4gICAgICAgICAgICAgIGxldCBzdWdnZXN0ZWRNYWlsQWRkciA9IGFkZHJFbGVtZW50c1swXSArICdAJyArIHBmTWFpbGFkZHJlc3NEb21haW5zW2ldO1xuICAgICAgICAgICAgICBpZiAoIHN1Z2dlc3RlZE1haWxBZGRyICE9ICR0aGlzLnZhbCgpICl7XG4gICAgICAgICAgICAgICAgJCgnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJqcy1wZi1tYWlsYWRkcmVzcy1jYW5kaWRhdGVcIiAvPicpLnRleHQoIHN1Z2dlc3RlZE1haWxBZGRyICkub24oJ2NsaWNrJyxmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgJHRoaXMudmFsKCQodGhpcykudGV4dCgpKTsgXG4gICAgICAgICAgICAgICAgICAkdGhpcy50cmlnZ2VyKCdrZXl1cCcpO1xuICAgICAgICAgICAgICAgICAgJHN1Z2dlc3QuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH0pLmFwcGVuZFRvKCRzdWdnZXN0KTtcbiAgICAgICAgICAgICAgICAkc3VnZ2VzdC5zaG93KCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn0pO1xuIiwiY29uc3QgTU9EQUxfT1BFTl9UUklHR0VSICA9ICdqcy1wZi1tb2RhbC1vcGVuJztcclxuY29uc3QgTU9EQUxfVklSVFVBTF9PUEVOX1RSSUdHRVIgPSAnanMtcGYtbW9kYWwtb3Blbi12JztcclxuY29uc3QgTU9EQUxfQ0xPU0VfVFJJR0dFUiA9ICdqcy1wZi1tb2RhbC1jbG9zZSc7XHJcblxyXG5jb25zdCBNT0RBTF9TVEFUVVMgICAgICAgID0gJ2RhdGEtbW9kYWwtc3RhdHVzJ1xyXG5jb25zdCBTVEFUVVNfT1BFTiAgICAgICAgID0gJ29wZW4nO1xyXG5jb25zdCBTVEFUVVNfQ0xPU0UgICAgICAgID0gJ2Nsb3NlJztcclxuY29uc3QgT1BFTl9SRUFEWV9DTEFTUyAgICA9ICdwZi1tb2RhbF9yZWFkeS1vcGVuJztcclxuY29uc3QgQ0xPU0VfUkVBRFlfQ0xBU1MgICA9ICdwZi1tb2RhbF9yZWFkeS1jbG9zZSc7XHJcblxyXG5jb25zdCBNT0RBTF9UQVJHRVRfREFUQSAgID0gJ2RhdGEtbW9kYWwtdGFyZ2V0JztcclxuXHJcbmNvbnN0IERBVEFfT05MWV9QQyAgICAgICAgPSAnZGF0YS1tb2RhbC1vbmx5LXBjJztcclxuY29uc3QgREFUQV9PTkxZX1NQICAgICAgICA9ICdkYXRhLW1vZGFsLW9ubHktc3AnO1xyXG5cclxuY29uc3QgTW9kYWxNYW5hZ2VyID0gKCkgPT4ge1xyXG5cclxuICBsZXQgb25Nb2RhbENMb3NlQ2FsbGJhY2tzID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIOOCr+ODreODvOOCuuWHpueQhlxyXG4gICAqL1xyXG4gIGNvbnN0IG9uQ2xvc2UgPSAoKSA9PiB7XHJcbiAgICBjb25zdCBvcGVuTW9kYWxzID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbJHtNT0RBTF9TVEFUVVN9PSR7U1RBVFVTX09QRU59XWApKTtcclxuICAgIG9wZW5Nb2RhbHMuZm9yRWFjaChtb2RhbCA9PiB7XHJcbiAgICAgIG1vZGFsLmNsYXNzTGlzdC5hZGQoQ0xPU0VfUkVBRFlfQ0xBU1MpO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBtb2RhbC5jbGFzc0xpc3QucmVtb3ZlKENMT1NFX1JFQURZX0NMQVNTKTtcclxuICAgICAgICBtb2RhbC5zZXRBdHRyaWJ1dGUoTU9EQUxfU1RBVFVTLCBTVEFUVVNfQ0xPU0UpO1xyXG5cclxuICAgICAgICAvLyDjgrPjg7zjg6vjg5Djg4Pjgq/lrp/ooYxcclxuICAgICAgICBjb25zdCBtb2RhbElkID0gbW9kYWwuZ2V0QXR0cmlidXRlKCdpZCcpO1xyXG4gICAgICAgIG9uTW9kYWxDTG9zZUNhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICAgIGIuYXBwbHkodGhpcywgW21vZGFsSWRdKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSwgMzAwKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIOiDjOaZr+OCueOCr+ODreODvOODq+OCkuino+mZpFxyXG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5oZWlnaHQgPSAnJztcclxuICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOOCquODvOODl+ODs+WHpueQhlxyXG4gICAqL1xyXG4gIGNvbnN0IG9uT3BlbiA9IChtb2RhbElkLCBlbCkgPT4ge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobW9kYWxJZCk7XHJcblxyXG4gICAgaWYodGFyZ2V0KSB7XHJcbiAgICAgIHRhcmdldC5zZXRBdHRyaWJ1dGUoTU9EQUxfU1RBVFVTLCBTVEFUVVNfT1BFTik7XHJcbiAgICAgIHRhcmdldC5jbGFzc0xpc3QuYWRkKE9QRU5fUkVBRFlfQ0xBU1MpO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0YXJnZXQuY2xhc3NMaXN0LnJlbW92ZShPUEVOX1JFQURZX0NMQVNTKTtcclxuICAgICAgfSwgNSk7XHJcblxyXG4gICAgICAvLyDog4zmma/jgrnjgq/jg63jg7zjg6vjgpLnpoHmraJcclxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5oZWlnaHQgPSAnMTAwdmgnO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XHJcblxyXG4gICAgICAvLyDjgqrjg7zjg5fjg7PjgqTjg5njg7Pjg4jjgpLnmbrngatcclxuICAgICAgd2luZG93LmVtaXR0ZXIuZW1pdCgnb25Nb2RhbE9wZW4nLCBtb2RhbElkLCBlbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdCBvbkNoYW5nZURldmljZVR5cGUgPSAoZGV2aWNlKSA9PiB7XHJcbiAgICBjb25zdCBvcGVuTW9kYWxzID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbJHtNT0RBTF9TVEFUVVN9PSR7U1RBVFVTX09QRU59XWApKTtcclxuXHJcbiAgICBzd2l0Y2ggKGRldmljZSkge1xyXG4gICAgICBjYXNlICdTUCc6XHJcbiAgICAgICAgaWYob3Blbk1vZGFscy5maW5kKG1vZGFsID0+IHtcclxuICAgICAgICAgIGlmKG1vZGFsLmhhc0F0dHJpYnV0ZShEQVRBX09OTFlfUEMpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pKSB7XHJcbiAgICAgICAgICBvbkNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdQQyc6XHJcbiAgICAgICAgaWYob3Blbk1vZGFscy5maW5kKG1vZGFsID0+IHtcclxuICAgICAgICAgIGlmKG1vZGFsLmhhc0F0dHJpYnV0ZShEQVRBX09OTFlfU1ApKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pKSB7XHJcbiAgICAgICAgICBvbkNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3QgaW5pdCA9ICgpID0+IHtcclxuICAgIGNvbnN0IG9wZW5CdG4gPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke01PREFMX09QRU5fVFJJR0dFUn1gKSk7XHJcbiAgICBvcGVuQnRuLmZvckVhY2goKGVsKSA9PiB7XHJcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2KSA9PiB7XHJcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgY29uc3QgdGFyZ2V0TW9kYWxJZCA9IGVsLmdldEF0dHJpYnV0ZShNT0RBTF9UQVJHRVRfREFUQSk7XHJcbiAgICAgICAgaWYodGFyZ2V0TW9kYWxJZCkge1xyXG4gICAgICAgICAgb25PcGVuKHRhcmdldE1vZGFsSWQsIGVsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIGZhbHNlKTtcclxuICAgIH0pO1xyXG5cclxuXHJcbiAgICAvLyBqUXVlcnnjgYvjgonjga7mk6zkvLznmoTjgq/jg6rjg4Pjgq/lh6bnkIbjga7ov73liqBcclxuICAgICQoJy4nICsgTU9EQUxfVklSVFVBTF9PUEVOX1RSSUdHRVIpLm9uKCd2LWNsaWNrJyxmdW5jdGlvbihldil7XHJcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgICAgbGV0IGVsID0gJCh0aGlzKS5nZXQoMCk7XHJcbiAgICAgIGNvbnN0IHRhcmdldE1vZGFsSWQgPSBlbC5nZXRBdHRyaWJ1dGUoTU9EQUxfVEFSR0VUX0RBVEEpO1xyXG4gICAgICBpZih0YXJnZXRNb2RhbElkKSB7XHJcbiAgICAgICAgb25PcGVuKHRhcmdldE1vZGFsSWQsIGVsKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgY2xvc2VCdG4gPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke01PREFMX0NMT1NFX1RSSUdHRVJ9YCkpO1xyXG4gICAgY2xvc2VCdG4uZm9yRWFjaCgoZWwpID0+IHtcclxuICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldiA9PiB7XHJcbiAgICAgICAgb25DbG9zZSgpO1xyXG4gICAgICB9LCBmYWxzZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZih3aW5kb3cucm0pIHtcclxuICAgICAgd2luZG93LnJtLnNldE9uQ2hhbmdlRGV2aWNlQ2FsbGJhY2sob25DaGFuZ2VEZXZpY2VUeXBlKTtcclxuICAgIH1cclxuICB9XHJcbiAgaW5pdCgpO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgLyoqXHJcbiAgICAgKiDjg6Ljg7zjg4Djg6vplonjgZjjgovpmpvjgavnmbrngavjgZXjgozjgotcclxuICAgICAqIEBwYXJhbSB7IEZ1bmN0aW9uIH0g5Yem55CGXHJcbiAgICAgKi9cclxuICAgIHNldE9uTW9kYWxDTG9zZUNhbGxiYWNrOiAoZnVuYykgPT4ge1xyXG4gICAgICBpZih0eXBlb2YgZnVuYyA9PT0gJ2Z1bmN0aW9uJykgb25Nb2RhbENMb3NlQ2FsbGJhY2tzLnB1c2goZnVuYyk7XHJcbiAgICB9LFxyXG5cclxuICAgIG9wZW46IChtb2RhbElkKSA9PiB7XHJcbiAgICAgIG9uT3Blbihtb2RhbElkLCB1bmRlZmluZWQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBjbG9zZTogKCkgPT4ge1xyXG4gICAgICBvbkNsb3NlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGFkZE1vZGFsOiAodHJpZ2dlckVsKSA9PiB7XHJcbiAgICAgIHRyaWdnZXJFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldikgPT4ge1xyXG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHRhcmdldE1vZGFsSWQgPSB0cmlnZ2VyRWwuZ2V0QXR0cmlidXRlKE1PREFMX1RBUkdFVF9EQVRBKTtcclxuICAgICAgICBpZih0YXJnZXRNb2RhbElkKSB7XHJcbiAgICAgICAgICBvbk9wZW4odGFyZ2V0TW9kYWxJZCwgdHJpZ2dlckVsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24oKXtcclxuICB3aW5kb3cuTW9kYWxNYW5hZ2VyID0gTW9kYWxNYW5hZ2VyKCk7XHJcbn0pO1xyXG4iLCIvKipcbiAqIOODqeOCuOOCquODnOOCv+ODs+OCkumBuOaKnuWkluOBm+OCi+S7leanmOOBq+WkieabtFxuICpcbiAqL1xuY29uc3QgVW5Gb2N1c2FibGVSYWRpbyA9ICgpID0+IHtcbiAgY29uc3QgQ0hFQ0tFRF9EQVRBID0gJ2RhdGEtY2hlY2tlZCc7XG5cbiAgLyoqXG4gICAqIOOCr+ODquODg+OCr+aZguOBruWHpueQhiAgXG4gICAqIOOBk+OBk+OBp+mBuOaKnueKtuaFi+OCkuWIh+OCiuabv+OBiOOCi1xuICAgKi9cbiAgY29uc3Qgb25DbGljayA9IChldikgPT4ge1xuICAgIGNvbnN0IHRhcmdldEVsID0gZXYuY3VycmVudFRhcmdldDtcbiAgICBjb25zdCBuYW1lID0gdGFyZ2V0RWwuZ2V0QXR0cmlidXRlKCduYW1lJyk7XG4gICAgW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBpbnB1dFt0eXBlPVwicmFkaW9cIl1bbmFtZT1cIiR7bmFtZX1cIl1gKSkuZm9yRWFjaChyYWRpbyA9PiB7XG4gICAgICBpZighcmFkaW8uaXNTYW1lTm9kZSh0YXJnZXRFbCkpIHtcbiAgICAgICAgcmFkaW8uc2V0QXR0cmlidXRlKENIRUNLRURfREFUQSwgJ2ZhbHNlJyk7XG4gICAgICB9XG4gICAgfSlcblxuICAgIGlmKHRhcmdldEVsLmdldEF0dHJpYnV0ZShDSEVDS0VEX0RBVEEpID09PSAndHJ1ZScpIHtcbiAgICAgIHRhcmdldEVsLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgIHRhcmdldEVsLnNldEF0dHJpYnV0ZShDSEVDS0VEX0RBVEEsICdmYWxzZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXRFbC5jaGVja2VkID0gdHJ1ZTtcbiAgICAgIHRhcmdldEVsLnNldEF0dHJpYnV0ZShDSEVDS0VEX0RBVEEsICd0cnVlJyk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICog5Yid5pyf5YyWXG4gICAqL1xuICBjb25zdCBpbml0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHJhZGlvcyA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXTpub3QoW2RhdGEtY2hlY2tlZF1gKSk7XG5cbiAgICByYWRpb3MuZm9yRWFjaChyYWRpbyA9PiB7XG4gICAgICByYWRpby5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgIG9uQ2xpY2soZXYpO1xuICAgICAgfSwgZmFsc2UpO1xuICAgICAgcmFkaW8uc2V0QXR0cmlidXRlKENIRUNLRURfREFUQSwgJ2ZhbHNlJyk7XG4gICAgfSk7XG4gIH1cbiAgaW5pdCgpO1xufVxuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKCl7XG4gIFVuRm9jdXNhYmxlUmFkaW8oKTtcbn0pO1xuIiwid2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgLy8g44KC44Gj44Go6KaL44KLIOODhuOCreOCueODiOOCr+ODquODg+OCr1xuICAkKCcucGYtcmVhZG1vcmVfYnRuJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgIGlmICgkKHRoaXMpLmNoaWxkcmVuKCkuaXMoJy5pcy1vcGVuJykpIHtcbiAgICAgICQodGhpcykuaHRtbCgnPHAgY2xhc3M9XCJpcy1jbG9zZVwiPumWieOBmOOCizwvcD4nKS5hZGRDbGFzcygncGYtcmVhZG1vcmVfYnRuLS1jbG9zZScpO1xuICAgICAgJCh0aGlzKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygncGYtcmVhZG1vcmVfc2xpZGUtLXVwJykuYWRkQ2xhc3MoJ3BmLXJlYWRtb3JlX3NsaWRlLS1kb3duJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICQodGhpcykuaHRtbCgnPHAgY2xhc3M9XCJpcy1vcGVuXCI+44KC44Gj44Go6KaL44KLPC9wPicpLnJlbW92ZUNsYXNzKCdwZi1yZWFkbW9yZV9idG4tLWNsb3NlJyk7XG4gICAgICAkKHRoaXMpLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdwZi1yZWFkbW9yZV9zbGlkZS0tZG93bicpLmFkZENsYXNzKCdwZi1yZWFkbW9yZV9zbGlkZS0tdXAnKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIOOCguOBo+OBqOimi+OCiyDjg5zjgr/jg7Pjgq/jg6rjg4Pjgq9cbiAgbGV0IGNvbnRlbnRzQ291bnQgPSAkKFwiLnBmLWpzLWFydGljbGVcIikuZmluZCgnLnBmLWpzLWFydGljbGVfaXRlbScpLmxlbmd0aDtcbiAgbGV0IGNvbnRlbnRzQ291bnRfbnVtID0gNDtcblxuICBpZiAoY29udGVudHNDb3VudCA8PSBjb250ZW50c0NvdW50X251bSkge1xuICAgICQoXCIucGYtanMtYXJ0aWNsZV9idG5cIikuaGlkZSgpO1xuICB9IGVsc2Uge1xuICAgICQoXCIucGYtanMtYXJ0aWNsZV9pdGVtXCIpLnNsaWNlKGNvbnRlbnRzQ291bnRfbnVtKS5oaWRlKCk7XG5cbiAgICAkKFwiLnBmLWpzLWFydGljbGVfYnRuXCIpLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICgkKFwiLnBmLWpzLWFydGljbGVfaXRlbVwiKS5zbGljZShjb250ZW50c0NvdW50X251bSkuaXMoJzpoaWRkZW4nKSkge1xuICAgICAgICAkKFwiLnBmLWpzLWFydGljbGVfaXRlbVwiKS5zbGljZShjb250ZW50c0NvdW50X251bSkuc2xpZGVEb3duKCk7XG4gICAgICAgICQodGhpcykudGV4dCgn6ZaJ44GY44KLJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkKFwiLnBmLWpzLWFydGljbGVfaXRlbVwiKS5zbGljZShjb250ZW50c0NvdW50X251bSkuc2xpZGVVcCgpO1xuICAgICAgICAkKHRoaXMpLmh0bWwoJ+mWoumAo+iomOS6i+OCkuOCguOBo+OBqOimi+OCiycgKyAnPGltZyBzcmM9XCIvY29tbW9uL2ltYWdlcy9pYy1hZGRpdGlvbi5zdmdcIiBhbHQ9XCJcIiBjbGFzcz1cInBmLWJ1dHRvbi0tYWRkaXRpb25faW1nXCI+Jyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0pO1xuIiwiaW1wb3J0IENPTkZJRyBmcm9tIFwiLi9fY29uZmlnXCI7XG5cbi8qKlxuICog44Oq44K144Kk44K644Oe44ON44O844K444OjXG4gKi9cbmNvbnN0IFJlc2l6ZU1hbmFnZXIgPSAoKSA9PiB7XG4gIGNvbnN0IFRIUk9UVExFX1RJTUUgPSAwO1xuXG4gIGxldCByZXNpemVDYWxsYmFja3MgPSBbXTtcbiAgbGV0IHJlc2l6ZVRpbWVyO1xuXG4gIGxldCBvbkNoYW5nZURldmljZUNhbGxiYWNrcyA9IFtdO1xuXG4gIC8qKlxuICAgKiDjg4fjg5DjgqTjgrnjgr/jgqTjg5fjgpLoqK3lrppcbiAgICovXG4gIGNvbnN0IGp1ZGdlRGV2aWNlID0gKCkgPT4ge1xuICAgIGxldCBkZXZpY2VcbiAgICBPYmplY3QuZW50cmllcyhDT05GSUcuQlJFQUtfUE9JTlRTKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGlmICh3aW5kb3cubWF0Y2hNZWRpYShgKG1heC13aWR0aDogJHt2YWx1ZX1weClgKS5tYXRjaGVzKSB7XG4gICAgICAgIGRldmljZSA9IGtleTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmKGRldmljZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRldmljZSA9IENPTkZJRy5ERVZJQ0UuUEM7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBkZXZpY2VcbiAgfVxuXG4gIFxuICAvKipcbiAgICog5Yid5pyf5YyWXG4gICAqL1xuICBjb25zdCBpbml0ID0gKCkgPT4ge1xuICAgIENPTkZJRy5DVVJSRU5UX0RFVklDRSA9IGp1ZGdlRGV2aWNlKCk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZnVuY3Rpb24oKSB7XG4gICAgICBjbGVhclRpbWVvdXQocmVzaXplVGltZXIpO1xuICAgICAgcmVzaXplVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgYSA9IGFyZ3VtZW50cztcbiAgICAgICAgcmVzaXplQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24oYikge1xuICAgICAgICAgIGIuYXBwbHkodGhpcywgYSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmKENPTkZJRy5DVVJSRU5UX0RFVklDRSAhPT0ganVkZ2VEZXZpY2UoKSkge1xuICAgICAgICAgIENPTkZJRy5DVVJSRU5UX0RFVklDRSA9IGp1ZGdlRGV2aWNlKCk7XG4gICAgICAgICAgb25DaGFuZ2VEZXZpY2VDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihiKSB7XG4gICAgICAgICAgICBiLmFwcGx5KHRoaXMsIFtDT05GSUcuQ1VSUkVOVF9ERVZJQ0VdKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwgVEhST1RUTEVfVElNRSk7XG4gICAgfSwgZmFsc2UgKTtcbiAgfVxuXG4gIGluaXQoKTtcbiAgcmV0dXJuIHtcbiAgICAvKipcbiAgICAgKiDjg6rjgrXjgqTjgrrmmYLjga7jgrPjg7zjg6vjg5Djg4Pjgq/jgpLnmbvpjLJcbiAgICAgKiBAcGFyYW0geyBGdW5jdGlvbiB9IGZ1bmMg44Oq44K144Kk44K65pmC44Gr5ZG844Gz5Ye644GZ5Yem55CGXG4gICAgICovXG4gICAgc2V0Q2FsbGJhY2s6IChmdW5jKSA9PiB7XG4gICAgICBpZih0eXBlb2YgZnVuYyA9PT0gJ2Z1bmN0aW9uJykgcmVzaXplQ2FsbGJhY2tzLnB1c2goZnVuYyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIOODh+ODkOOCpOOCueWkieabtOaZguOBruOCs+ODvOODq+ODkOODg+OCr+OCkueZu+mMslxuICAgICAqIEBwYXJhbSB7IEZ1bmN0aW9uIH0g44Oq44K144Kk44K65pmC44Gr5ZG844Gz5Ye644GZ5Yem55CGXG4gICAgICovXG4gICAgc2V0T25DaGFuZ2VEZXZpY2VDYWxsYmFjazogKGZ1bmMpID0+IHtcbiAgICAgIGlmKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSBvbkNoYW5nZURldmljZUNhbGxiYWNrcy5wdXNoKGZ1bmMpO1xuICAgIH0sXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVzaXplTWFuYWdlcjsiLCJ3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGhlYWRlckggPSAkKCcuanMtZml4ZWQtaGVhZGVyJykuaGVpZ2h0KCk7XG4gIGxldCBsYXN0UG9zID0gMDtcbiAgbGV0IGRvY0ggPSAkKGRvY3VtZW50KS5oZWlnaHQoKTtcbiAgbGV0IHdpbkggPSAkKHdpbmRvdykuaGVpZ2h0KCk7XG4gIGxldCBidG1Qb3MgPSBkb2NIIC0gd2luSDtcblxuICAkKHdpbmRvdykub24oJ3Njcm9sbCcsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgcG9zID0gJCh0aGlzKS5zY3JvbGxUb3AoKTtcbiAgICBpZiAocG9zID49IDAgJiYgcG9zID4gaGVhZGVySCAmJiBwb3MgPCBsYXN0UG9zKSB7XG4gICAgICAkKCcuanMtZml4ZWQtaGVhZGVyJykuYWRkQ2xhc3MoJ2lzLWNsb3NlZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkKCcuanMtZml4ZWQtaGVhZGVyJykucmVtb3ZlQ2xhc3MoJ2lzLWNsb3NlZCcpO1xuICAgIH1cblxuICAgIGlmIChwb3MgPj0gMCAmJiBwb3MgPiBoZWFkZXJIICYmIHBvcyA+IGxhc3RQb3MpIHtcbiAgICAgICQoJy5qcy1maXhlZC1oZWFkZXInKS5hZGRDbGFzcygnaXMtY2xvc2VkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICQoJy5qcy1maXhlZC1oZWFkZXInKS5yZW1vdmVDbGFzcygnaXMtY2xvc2VkJyk7XG4gICAgfVxuXG4gICAgaWYgKHBvcyA9PSBidG1Qb3MpIHtcbiAgICAgICQoJy5qcy1maXhlZC1oZWFkZXInKS5yZW1vdmVDbGFzcygnaXMtY2xvc2VkJyk7XG4gICAgfVxuXG4gICAgbGFzdFBvcyA9IHBvcztcblxuICB9KTtcbn0pO1xuIiwiLyoqXG4gKiDjgrnjgq/jg63jg7zjg6vjgrPjg7zjg6vjg5Djg4Pjgq9cbiAqL1xuY29uc3QgU2Nyb2xsTWFuYWdlciA9ICgpID0+IHtcbiAgY29uc3QgVEhST1RUTEVfVElNRSA9IDEwO1xuXG4gIGxldCBjYWxsYmFja3MgPSBbXTtcbiAgbGV0IHRocm90dGxlVGltZXI7XG4gIFxuICAvKipcbiAgICog5Yid5pyf5YyWXG4gICAqL1xuICBjb25zdCBpbml0ID0gKCkgPT4ge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBmdW5jdGlvbigpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aHJvdHRsZVRpbWVyKTtcbiAgICAgIHRocm90dGxlVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgYSA9IGFyZ3VtZW50cztcbiAgICAgICAgY2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24oYikge1xuICAgICAgICAgICAgYi5hcHBseSh0aGlzLCBhKVxuICAgICAgICB9KTtcbiAgICAgIH0sIFRIUk9UVExFX1RJTUUpO1xuICAgIH0sIGZhbHNlICk7XG4gIH1cblxuICBpbml0KCk7XG4gIHJldHVybiB7XG4gICAgLyoqXG4gICAgICog44OH44OQ44Kk44K544K/44Kk44OX44KS6Kit5a6aXG4gICAgICogQHBhcmFtIHsgRnVuY3Rpb24gfSDjg6rjgrXjgqTjgrrmmYLjgavlkbzjgbPlh7rjgZnlh6bnkIZcbiAgICAgKi9cbiAgICBzZXRDYWxsYmFjazogKGZ1bmMpID0+IHtcbiAgICAgIGlmKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSBjYWxsYmFja3MucHVzaChmdW5jKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2Nyb2xsTWFuYWdlcjtcbiIsImNvbnN0IFRBUkdFVF9DTEFTUyA9ICdqcy1wZi1zZWFyY2htZW51JztcblxuLyoqXG4gKiDmpJzntKLjg6Hjg4vjg6Xjg7zjg57jg43jg7zjgrjjg6NcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IOOCreODvFxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIOWApFxuICogXG4gKiBAcmV0dXJuIHtudW1iZXJ9IOWkieaVsFxuICovXG5jb25zdCBTZWFyY2hNZW51TWFuYWdlciA9ICh0YXJnZXQpID0+IHtcblxuICBjb25zdCBQQUdFX0NMQVNTICAgICAgICAgICAgICAgICAgICAgPSAnanMtcGYtc2VhcmNobWVudS1wYWdlJztcblxuICAvLyDmpJzntKLjg6Hjg4vjg6Xjg7zopoHntKBcbiAgY29uc3QgU0VBUkNIX01FTlUgICAgICAgICAgICAgICAgICAgID0gdGFyZ2V0O1xuICBjb25zdCBCT0RZICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTRUFSQ0hfTUVOVS5xdWVyeVNlbGVjdG9yKCcucGYtc2VhcmNobWVudV9ib2R5Jyk7XG4gIGNvbnN0IEZPT1QgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNFQVJDSF9NRU5VLnF1ZXJ5U2VsZWN0b3IoJy5wZi1zZWFyY2htZW51X2Zvb3QnKTtcbiAgY29uc3QgUEFHRV9FTEVzICAgICAgICAgICAgICAgICAgICAgID0gW10uc2xpY2UuY2FsbCh0YXJnZXQucXVlcnlTZWxlY3RvckFsbChgLiR7UEFHRV9DTEFTU31gKSk7XG4gIGNvbnN0IENVUlJFTlRfUEFHRV9DTEFTUyAgICAgICAgICAgICA9ICdpcy1jdXJyZW50LXBhZ2UnO1xuICBjb25zdCBEQVRBX1BBR0VOQU1FICAgICAgICAgICAgICAgICAgPSAnZGF0YS1zZWFyY2htZW51LXBhZ2VuYW1lJztcbiAgY29uc3QgREFUQV9CQVNFX1BBR0UgICAgICAgICAgICAgICAgID0gJ2RhdGEtc2VhcmNobWVudS1wYWdlLWJhc2UnO1xuICBjb25zdCBEQVRBX0xBTkRJTkdfUEFHRSAgICAgICAgICAgICAgPSAnZGF0YS1zZWFyY2htZW51LWxhbmRpbmctcGFnZSc7XG4gIGNvbnN0IERBVEFfUkVRVUlSRV9QQUdFICAgICAgICAgICAgICA9ICdkYXRhLXNlYXJjaG1lbnUtcmVxdWlyZS1wYWdlJztcbiAgY29uc3QgREFUQV9BQ1RJVkVfQ0hFQ0tFRCAgICAgICAgICAgID0gJ2RhdGEtc2VhcmNobWVudS1hY3RpdmUtY2hla2VkJztcbiAgY29uc3QgREFUQV9BQ1RJVkVfU1RBVFVTICAgICAgICAgICAgID0gJ2RhdGEtc2VhcmNobWVudS1hY3RpdmUtc3RhdHVzJztcbiAgY29uc3QgREFUQV9BQ1RJT05fVFlQRSAgICAgICAgICAgICAgID0gJ2RhdGEtc2VhcmNobWVudS1hY3Rpb24tdHlwZSc7XG4gIGNvbnN0IFBBR0VfQUNUSU9OX1RZUEVzICAgICAgICAgICAgICA9IHtcbiAgICBTRUFSQ0g6ICdzZWFyY2gnLCAgLy8g5qSc57Si44Oa44O844K444Gr44K144OW44Of44OD44OIXG4gICAgSU5QVVQ6ICdpbnB1dCcsIC8vIOaMh+Wumueuh+aJgOOBq+WFpeWKm+WGheWuueOCkuaMv+WFpVxuICB9XG5cbiAgLy8g44Oa44O844K46YG356e76KaB57SgXG4gIGNvbnN0IERBVEFfTU9WRV9UTyAgICAgICAgICAgICAgICAgICA9ICdkYXRhLXNlYXJjaG1lbnUtbW92ZS10byc7XG4gIGNvbnN0IERBVEFfQkFDS19UTyAgICAgICAgICAgICAgICAgICA9ICdkYXRhLXNlYXJjaG1lbnUtYmFjay10byc7XG4gIGNvbnN0IFJFQURZX1JJR0hUX0lOX0NMQVNTICAgICAgICAgICA9ICdpcy1yZWFkeS1uZXh0LWluZGV4JztcbiAgY29uc3QgUkVBRFlfTEVGVF9JTl9DTEFTUyAgICAgICAgICAgID0gJ2lzLXJlYWR5LXByZXYtaW5kZXgnO1xuICBjb25zdCBNT1ZFX0JUTl9DTEFTUyAgICAgICAgICAgICAgICAgPSAnanMtcGYtc2VhcmNobWVudS1tb3ZlJztcbiAgY29uc3QgQkFDS19CVE5fQ0xBU1MgICAgICAgICAgICAgICAgID0gJ2pzLXBmLXNlYXJjaG1lbnUtYmFjayc7XG4gIGNvbnN0IFBSRVZfQlROcyAgICAgICAgICAgICAgICAgICAgICA9IFtdLnNsaWNlLmNhbGwoU0VBUkNIX01FTlUucXVlcnlTZWxlY3RvckFsbChgLiR7QkFDS19CVE5fQ0xBU1N9YCkpO1xuXG4gIC8vIOiHqui6q+OBruaknOe0ouODoeODi+ODpeODvElEXG4gIGNvbnN0IFNFTEZfU0VBUkNITUVOVV9JRCAgICAgICAgICAgICA9IFNFQVJDSF9NRU5VLmNsb3Nlc3QoJy5wZi1tb2RhbCcpLmdldEF0dHJpYnV0ZSgnaWQnKTtcblxuICAvLyDjgrnjg4bjg7zjgr/jgrlcbiAgY29uc3QgREFUQV9TRUFSQ0hNRU5VX1NUQVRVUyAgICAgICAgID0gJ2RhdGEtc2VhcmNobWVudS1zdGF0dXMnO1xuICBjb25zdCBEQVRBX1BBR0VfU1RBVFVTICAgICAgICAgICAgICAgPSAnZGF0YS1zZWFyY2htZW51LXBhZ2Utc3RhdHVzJztcbiAgY29uc3QgUEFHRV9TVEFUVVMgICAgICAgICAgICAgICAgICAgID0ge1xuICAgIE5FWFQgICAgIDogJ25leHQnLFxuICAgIENPTVBMRVRFIDogJ2NvbXBsZXRlJyxcbiAgICBBREQgICAgICA6ICdhZGQnLFxuICB9O1xuXG4gIC8vIOOCq+ODhuOCtOODquODvFxuICBjb25zdCBEQVRBX0NBVEVHT1JZICAgICAgICAgICAgICAgICAgPSAnZGF0YS1zZWFyY2htZW51LWNhdGVnb3J5JztcbiAgY29uc3QgREFUQV9TRUxFQ1RFRF9DQVRFR09SWSAgICAgICAgID0gJ2RhdGEtc2VhcmNobWVudS1zZWxlY3QtY2F0ZWdvcnknO1xuXG4gIC8vIOWFpeWKm+WApOaMv+WFpVxuICBjb25zdCBJTlBVVF9UUklHR0VSX0NMQVNTICAgICAgICAgICAgPSAnanMtcGYtc2VhcmNobWVudS1pbnB1dCc7XG4gIGNvbnN0IERBVEFfSU5QVVRfTU9VTlRfUEFHRXMgICAgICAgICA9ICdkYXRhLXNlYXJjaG1lbnUtbW91bnQtcGFnZXMnO1xuICBjb25zdCBEQVRBX0lOUFVUX01PVU5UX1BPSU5UICAgICAgICAgPSAnZGF0YS1zZWFyY2htZW51LW1vdW50LXBvaW50JztcbiAgY29uc3QgREFUQV9JTlBVVF9NT1VOVF9QT0lOVF9DVVNUT01zID0gJ2RhdGEtc2VhcmNobWVudS1tb3VudC1wb2ludC1jdXN0b21zJztcbiAgY29uc3QgREFUQV9JTlBVVF9NT1VOVF9GUk9NICAgICAgICAgID0gJ2RhdGEtc2VhcmNobWVudS1tb3VudC1mcm9tJztcblxuICBjb25zdCBBRERfVFJJR0dFUl9DTEFTUyAgICAgICAgICAgICAgPSAnanMtcGYtc2VhcmNobWVudS1hZGQnO1xuICBjb25zdCBEQVRBX0FERF9NT1VOVF9UTyAgICAgICAgICAgICAgPSAnZGF0YS1zZWFyY2htZW51LWFkZC10byc7XG4gIGNvbnN0IERBVEFfQUREX01PVU5UX1BPSU5UICAgICAgICAgICA9ICdkYXRhLWFkZC1tb3VudC1wb2ludCc7XG5cblxuICAvKipcbiAgICog44Oq44OV44Os44OD44K344OlXG4gICAqXG4gICAqL1xuICBjb25zdCByZWZyZXNoID0gKCkgPT4ge1xuICAgIFNFQVJDSF9NRU5VLnJlbW92ZUF0dHJpYnV0ZShEQVRBX0xBTkRJTkdfUEFHRSk7XG4gICAgU0VBUkNIX01FTlUucmVtb3ZlQXR0cmlidXRlKERBVEFfSU5QVVRfTU9VTlRfUEFHRXMpO1xuICAgIFNFQVJDSF9NRU5VLnJlbW92ZUF0dHJpYnV0ZShQQUdFX1NUQVRVUyk7XG4gICAgU0VBUkNIX01FTlUucmVtb3ZlQXR0cmlidXRlKERBVEFfSU5QVVRfTU9VTlRfUE9JTlRfQ1VTVE9Ncyk7XG5cbiAgICBQQUdFX0VMRXMuZm9yRWFjaChwYWdlID0+IHtcbiAgICAgIHBhZ2UuY2xhc3NMaXN0LnJlbW92ZShDVVJSRU5UX1BBR0VfQ0xBU1MpO1xuICAgIH0pXG4gIH1cblxuXG4gIC8qKlxuICAgKiDplonjgZjjgotcbiAgICpcbiAgICovXG4gIGNvbnN0IG9uQ2xvc2UgPSAoKSA9PiB7XG4gICAgcmVmcmVzaCgpO1xuXG4gICAgaWYod2luZG93Lk1vZGFsTWFuYWdlcikge1xuICAgICAgd2luZG93Lk1vZGFsTWFuYWdlci5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG5cblxuICAvKipcbiAgICog5YWl5Yqb5YCk44KS44Oe44Km44Oz44OI44Od44Kk44Oz44OI44Gr5oy/5YWlXG4gICAqXG4gICAqL1xuICBjb25zdCBvbklucHV0ID0gKCkgPT4ge1xuXG4gICAgaWYoU0VBUkNIX01FTlUuaGFzQXR0cmlidXRlKERBVEFfSU5QVVRfTU9VTlRfUE9JTlRfQ1VTVE9NcykpIHtcbiAgICAgIC8vIOaMv+WFpeWFiOOBruaMh+WumuOBjOOBguOCi+WgtOWQiFxuICAgICAgY29uc3QgY3VzdG9tTW91bnRQb2ludHMgPSBTRUFSQ0hfTUVOVS5nZXRBdHRyaWJ1dGUoREFUQV9JTlBVVF9NT1VOVF9QT0lOVF9DVVNUT01zKS5zcGxpdCgnLCcpLnJlZHVjZSgoYWNjdW0sIGRhdGEpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YUFyciA9IGRhdGEuc3BsaXQoJz0nKTtcbiAgICAgICAgYWNjdW0ucHVzaCh7XG4gICAgICAgICAgcGFnZU5hbWU6IGRhdGFBcnJbMF0sXG4gICAgICAgICAgbW91bnRQb2ludHNEYXRhOiBkYXRhQXJyWzFdLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgfSwgW10pO1xuXG4gICAgICBjdXN0b21Nb3VudFBvaW50cy5mb3JFYWNoKG1vdW50UG9pbnREYXRhID0+IHtcbiAgICAgICAgY29uc3QgcGFnZUVsID0gUEFHRV9FTEVzLmZpbmQocGFnZSA9PiBwYWdlLmdldEF0dHJpYnV0ZShEQVRBX1BBR0VOQU1FKSA9PT0gbW91bnRQb2ludERhdGEucGFnZU5hbWUpO1xuICBcbiAgICAgICAgaWYocGFnZUVsKSB7XG4gICAgICAgICAgY29uc3QgYWxsQ2hlY2tlZFZhbHVlID0gW10uc2xpY2UuY2FsbChwYWdlRWwucXVlcnlTZWxlY3RvckFsbChcImlucHV0Om5vdCguanMtcGYtY2hlY2tib3gtYWxsKSwgc2VsZWN0XCIpKS5yZWR1Y2UoKGFjY3VtLCBpbnB1dCkgPT4ge1xuICAgICAgICAgICAgaWYoaW5wdXQuY2hlY2tlZCkgYWNjdW0ucHVzaChpbnB1dC52YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICAgICAgfSwgW10pO1xuICBcbiAgICAgICAgICBjb25zdCBtb3VudFBvaW50cyA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChtb3VudFBvaW50RGF0YS5tb3VudFBvaW50c0RhdGEpKTtcbiAgXG4gICAgICAgICAgY29uc3QgaW5wdXREYXRhID0gYWxsQ2hlY2tlZFZhbHVlLmpvaW4oJywnKTtcbiAgICAgICAgICBpZihpbnB1dERhdGEgIT09ICcnKSB7XG4gICAgICAgICAgICBtb3VudFBvaW50cy5mb3JFYWNoKG1vdW50UG9pbnQgPT4ge1xuICAgICAgICAgICAgICBtb3VudFBvaW50LnNldEF0dHJpYnV0ZShEQVRBX0lOUFVUX01PVU5UX0ZST00sIHBhZ2VFbC5nZXRBdHRyaWJ1dGUoREFUQV9QQUdFTkFNRSkpO1xuXG4gICAgICAgICAgICAgIGlmKCFtb3VudFBvaW50Lmhhc0F0dHJpYnV0ZSgnZGF0YS1vcmlnaW4nKSkge1xuICAgICAgICAgICAgICAgIG1vdW50UG9pbnQuc2V0QXR0cmlidXRlKCdkYXRhLW9yaWdpbicsIG1vdW50UG9pbnQuaW5uZXJIVE1MKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZihtb3VudFBvaW50LnRhZ05hbWUgPT09ICdJTlBVVCcpIHtcbiAgICAgICAgICAgICAgICBtb3VudFBvaW50LnZhbHVlID0gYWxsQ2hlY2tlZFZhbHVlLmpvaW4oJywnKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtb3VudFBvaW50LmlubmVySFRNTCA9IGFsbENoZWNrZWRWYWx1ZS5qb2luKCcsJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb3VudFBvaW50cy5mb3JFYWNoKG1vdW50UG9pbnQgPT4ge1xuICAgICAgICAgICAgICBtb3VudFBvaW50LnJlbW92ZUF0dHJpYnV0ZShEQVRBX0lOUFVUX01PVU5UX0ZST00pO1xuXG4gICAgICAgICAgICAgIGlmKG1vdW50UG9pbnQuaGFzQXR0cmlidXRlKCdkYXRhLW9yaWdpbicpKSB7XG4gICAgICAgICAgICAgICAgbW91bnRQb2ludC5pbm5lckhUTUwgPSBtb3VudFBvaW50LmdldEF0dHJpYnV0ZSgnZGF0YS1vcmlnaW4nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyDmjIflrprjga7mjL/lhaXlhYjjgYzjgarjgYTloLTlkIhcbiAgICAgIGNvbnN0IHRhcmdldFBhZ2VOZW1hcyA9IFNFQVJDSF9NRU5VLmdldEF0dHJpYnV0ZShEQVRBX0lOUFVUX01PVU5UX1BBR0VzKS5zcGxpdCgnLCcpO1xuXG4gICAgICB0YXJnZXRQYWdlTmVtYXMuZm9yRWFjaChwYWdlTmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IHBhZ2VFbCA9IFBBR0VfRUxFcy5maW5kKHBhZ2UgPT4gcGFnZS5nZXRBdHRyaWJ1dGUoREFUQV9QQUdFTkFNRSkgPT09IHBhZ2VOYW1lKTtcbiAgXG4gICAgICAgIGlmKHBhZ2VFbCkge1xuICAgICAgICAgIGNvbnN0IGFsbENoZWNrZWRWYWx1ZSA9IFtdLnNsaWNlLmNhbGwocGFnZUVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCJpbnB1dDpub3QoLmpzLXBmLWNoZWNrYm94LWFsbCksIHNlbGVjdFwiKSkucmVkdWNlKChhY2N1bSwgaW5wdXQpID0+IHtcbiAgICAgICAgICAgIGlmKGlucHV0LmNoZWNrZWQpIGFjY3VtLnB1c2goaW5wdXQudmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgICAgIH0sIFtdKTtcbiAgXG4gICAgICAgICAgY29uc3QgbW91bnRQb2ludHMgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFske0RBVEFfSU5QVVRfTU9VTlRfUE9JTlR9LSR7cGFnZU5hbWUudG9Mb3dlckNhc2UoKX1dYCkpO1xuICBcbiAgICAgICAgICBjb25zdCBpbnB1dERhdGEgPSBhbGxDaGVja2VkVmFsdWUuam9pbignLCcpO1xuICAgICAgICAgIGlmKGlucHV0RGF0YSAhPT0gJycpIHtcbiAgICAgICAgICAgIG1vdW50UG9pbnRzLmZvckVhY2gobW91bnRQb2ludCA9PiB7XG4gICAgICAgICAgICAgIG1vdW50UG9pbnQuc2V0QXR0cmlidXRlKERBVEFfSU5QVVRfTU9VTlRfRlJPTSwgcGFnZUVsLmdldEF0dHJpYnV0ZShEQVRBX1BBR0VOQU1FKSk7XG5cbiAgICAgICAgICAgICAgaWYoIW1vdW50UG9pbnQuaGFzQXR0cmlidXRlKCdkYXRhLW9yaWdpbicpKSB7XG4gICAgICAgICAgICAgICAgbW91bnRQb2ludC5zZXRBdHRyaWJ1dGUoJ2RhdGEtb3JpZ2luJywgbW91bnRQb2ludC5pbm5lckhUTUwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmKG1vdW50UG9pbnQudGFnTmFtZSA9PT0gJ0lOUFVUJykge1xuICAgICAgICAgICAgICAgIG1vdW50UG9pbnQudmFsdWUgPSBhbGxDaGVja2VkVmFsdWUuam9pbignLCcpO1xuICAgICAgICAgICAgICAgICQobW91bnRQb2ludCkudHJpZ2dlcigndmlydHVhbENoYW5nZScpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1vdW50UG9pbnQuaW5uZXJIVE1MID0gYWxsQ2hlY2tlZFZhbHVlLmpvaW4oJywnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1vdW50UG9pbnRzLmZvckVhY2gobW91bnRQb2ludCA9PiB7XG4gICAgICAgICAgICAgIG1vdW50UG9pbnQucmVtb3ZlQXR0cmlidXRlKERBVEFfSU5QVVRfTU9VTlRfRlJPTSk7XG5cbiAgICAgICAgICAgICAgaWYobW91bnRQb2ludC5oYXNBdHRyaWJ1dGUoJ2RhdGEtb3JpZ2luJykpIHtcbiAgICAgICAgICAgICAgICBtb3VudFBvaW50LmlubmVySFRNTCA9IG1vdW50UG9pbnQuZ2V0QXR0cmlidXRlKCdkYXRhLW9yaWdpbicpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIFxuICAvKipcbiAgICog5YWl5Yqb5YCk44KS44Oe44Km44Oz44OI44Od44Kk44Oz44OI44Gr5oy/5YWl44GX44Gm5LuW44Gu5qSc57Si5p2h5Lu26L+95Yqg44Gr5oi744KLXG4gICAqXG4gICAqL1xuICBjb25zdCBvbkFkZCA9ICgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50UGFnZSA9IFBBR0VfRUxFcy5maW5kKHBhZ2UgPT4gcGFnZS5jbGFzc0xpc3QuY29udGFpbnMoQ1VSUkVOVF9QQUdFX0NMQVNTKSk7XG5cbiAgICBpZihjdXJyZW50UGFnZSkge1xuXG4gICAgICBjb25zdCBjdXN0b21Nb3VudFBvaW50cyA9IGN1cnJlbnRQYWdlLmdldEF0dHJpYnV0ZShEQVRBX0FERF9NT1VOVF9UTykuc3BsaXQoJywnKS5yZWR1Y2UoKGFjY3VtLCBxdWVyeSkgPT4ge1xuICAgICAgICBhY2N1bS5wdXNoKHF1ZXJ5KTtcbiAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgfSwgW10pO1xuXG4gICAgICBjdXN0b21Nb3VudFBvaW50cy5mb3JFYWNoKG1vdW50UG9pbnRRdWVyeSA9PiB7XG4gICAgICAgIGNvbnN0IGFsbENoZWNrZWRWYWx1ZSA9IFtdLnNsaWNlLmNhbGwoY3VycmVudFBhZ2UucXVlcnlTZWxlY3RvckFsbChcImlucHV0Om5vdCguanMtcGYtY2hlY2tib3gtYWxsKSwgc2VsZWN0XCIpKS5yZWR1Y2UoKGFjY3VtLCBpbnB1dCkgPT4ge1xuICAgICAgICAgIGlmKFxuICAgICAgICAgICAgaW5wdXQuY2hlY2tlZFxuICAgICAgICAgICAgfHwgKGlucHV0Lmhhc0F0dHJpYnV0ZSgndHlwZScpICYmIGlucHV0LmdldEF0dHJpYnV0ZSgndHlwZScpID09PSAndGV4dCcpXG4gICAgICAgICAgICB8fCAoaW5wdXQuaGFzQXR0cmlidXRlKCd0eXBlJykgJiYgaW5wdXQuZ2V0QXR0cmlidXRlKCd0eXBlJykgPT09ICdudW1iZXInKVxuICAgICAgICAgICAgfHwgaW5wdXQudGFnTmFtZSA9PT0gJ1NFTEVDVCdcbiAgICAgICAgICApe1xuICAgICAgICAgICAgYWNjdW0ucHVzaChpbnB1dC52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhY2N1bTtcbiAgICAgICAgfSwgW10pO1xuXG4gICAgICAgIGNvbnN0IG1vdW50UG9pbnRzID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKG1vdW50UG9pbnRRdWVyeSkpO1xuXG4gICAgICAgIGNvbnN0IGlucHV0RGF0YSA9IGFsbENoZWNrZWRWYWx1ZS5qb2luKCcsJyk7XG4gICAgICAgIGlmKGlucHV0RGF0YSAhPT0gJycpIHtcbiAgICAgICAgICBtb3VudFBvaW50cy5mb3JFYWNoKG1vdW50UG9pbnQgPT4ge1xuICAgICAgICAgICAgaWYoIW1vdW50UG9pbnQuaGFzQXR0cmlidXRlKCdkYXRhLW9yaWdpbicpKSB7XG4gICAgICAgICAgICAgIG1vdW50UG9pbnQuc2V0QXR0cmlidXRlKCdkYXRhLW9yaWdpbicsIG1vdW50UG9pbnQuaW5uZXJIVE1MKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKG1vdW50UG9pbnQudGFnTmFtZSA9PT0gJ0lOUFVUJykge1xuICAgICAgICAgICAgICBtb3VudFBvaW50LnZhbHVlID0gaW5wdXREYXRhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbW91bnRQb2ludC5pbm5lckhUTUwgPSBpbnB1dERhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbW91bnRQb2ludHMuZm9yRWFjaChtb3VudFBvaW50ID0+IHtcbiAgICAgICAgICAgIGlmKG1vdW50UG9pbnQuaGFzQXR0cmlidXRlKCdkYXRhLW9yaWdpbicpKSB7XG4gICAgICAgICAgICAgIG1vdW50UG9pbnQuaW5uZXJIVE1MID0gbW91bnRQb2ludC5nZXRBdHRyaWJ1dGUoJ2RhdGEtb3JpZ2luJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cblxuICAvKipcbiAgICog44Kr44OG44K044Oq44O844Gu6KGo56S6L+mdnuihqOekuuWIh+OCiuabv+OBiFxuICAgKi9cbiAgY29uc3QgdG9nZ2xlQ2F0ZWdvcnlWaXNpYmxpdHkgPSAoKSA9PiB7XG4gICAgLy8g44Kr44OG44K044Oq44KS5LiA5pem5YWo44Gm6Z2e6KGo56S6XG4gICAgY29uc3QgY2F0ZWdvcmllcyA9IFtdLnNsaWNlLmNhbGwoU0VBUkNIX01FTlUucXVlcnlTZWxlY3RvckFsbChgKlske0RBVEFfQ0FURUdPUll9XWApKTtcbiAgICBjYXRlZ29yaWVzLmZvckVhY2goY2F0ZWdvcnkgPT4ge1xuICAgICAgY2F0ZWdvcnkuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9KTtcblxuICAgIGNvbnN0IHNlbGVjdGVkQ2F0b2dvcmllcyA9IFtdLnNsaWNlLmNhbGwoU0VBUkNIX01FTlUucXVlcnlTZWxlY3RvckFsbChgKlske0RBVEFfU0VMRUNURURfQ0FURUdPUll9XWApKS5yZWR1Y2UoKGFjY3VtLCBzZWxlY3RCdG4pID0+IHtcbiAgICAgIGNvbnN0IGlucHV0RWwgPSBzZWxlY3RCdG4ucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcbiAgICAgIGlmKGlucHV0RWwuY2hlY2tlZCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZENhdGVnb3J5ID0gc2VsZWN0QnRuLmdldEF0dHJpYnV0ZShEQVRBX1NFTEVDVEVEX0NBVEVHT1JZKTtcbiAgICAgICAgLy9JReWvvuetllxuICAgICAgICBpZiAoIUFycmF5LnByb3RvdHlwZS5pbmNsdWRlcyl7XG4gICAgICAgICAgLy8gSUXjga7loLTlkIhcbiAgICAgICAgICBsZXQgaXNOb3RJbmNsdWRlZCA9IHRydWU7XG4gICAgICAgICAgZm9yKGxldCBpIGluIGFjY3VtKXtcbiAgICAgICAgICAgIGlmKCBhY2N1bVtpXSA9PT0gc2VsZWN0ZWRDYXRlZ29yeSApe1xuICAgICAgICAgICAgICBpc05vdEluY2x1ZGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNOb3RJbmNsdWRlZCl7XG4gICAgICAgICAgICBhY2N1bS5wdXNoKHNlbGVjdGVkQ2F0ZWdvcnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgaWYoIWFjY3VtLmluY2x1ZGVzKHNlbGVjdGVkQ2F0ZWdvcnkpKSB7XG4gICAgICAgICAgICBhY2N1bS5wdXNoKHNlbGVjdGVkQ2F0ZWdvcnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjdW07XG4gICAgfSwgW10pO1xuXG4gICAgY2F0ZWdvcmllcy5mb3JFYWNoKGNhdGVnb3J5ID0+IHtcbiAgICAgIFxuICAgICAgY29uc3QgdGhpc0NhdGVnb3J5ID0gY2F0ZWdvcnkuZ2V0QXR0cmlidXRlKERBVEFfQ0FURUdPUlkpO1xuICAgICAgLy9JReWvvuetllxuICAgICAgbGV0IGlzSW5jbHVkZWQgPSBmYWxzZTtcbiAgICAgIGlmICghQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzKXtcbiAgICAgICAgLy9JReOBruWgtOWQiFxuICAgICAgICBmb3IobGV0IGkgaW4gc2VsZWN0ZWRDYXRvZ29yaWVzKXtcbiAgICAgICAgICBpZiggc2VsZWN0ZWRDYXRvZ29yaWVzW2ldID09IHRoaXNDYXRlZ29yeSApe1xuICAgICAgICAgICAgaXNJbmNsdWRlZCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1lbHNle1xuICAgICAgICBpc0luY2x1ZGVkID0gc2VsZWN0ZWRDYXRvZ29yaWVzLmluY2x1ZGVzKHRoaXNDYXRlZ29yeSk7XG4gICAgICB9XG4gICAgICBpZiggaXNJbmNsdWRlZCApIHtcbiAgICAgICAgY2F0ZWdvcnkuc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2F0ZWdvcnkuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgLy8g6YG45oqe54q25oWL44KS5YWo44Gm5aSW44GZXG4gICAgICAgIFtdLnNsaWNlLmNhbGwoY2F0ZWdvcnkucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQ6Y2hlY2tlZCcpKS5mb3JFYWNoKGlucHV0ID0+IGlucHV0LmNoZWNrZWQgPSBmYWxzZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiDjg5rjg7zjgrjmiLvjgopcbiAgICogQHBhcmFtIHsgSFRNTEVsZW1lbnQgfSAgICAgIHRyaWdnZXJFbCDpgbfnp7vjgqLjgq/jgrfjg6fjg7Pjga7jg4jjg6rjgqzjg7zopoHntKBcbiAgICovXG4gIGNvbnN0IG9uUGFnZUJhY2sgPSAodHJpZ2dlckVsLCBiYWNrUGFnZU5hbWUpID0+IHtcbiAgICBjb25zdCBjdXJyZW50UGFnZSA9IFBBR0VfRUxFcy5maW5kKHBhZ2UgPT4gcGFnZS5jbGFzc0xpc3QuY29udGFpbnMoQ1VSUkVOVF9QQUdFX0NMQVNTKSk7XG5cbiAgICAvLyDjg5zjgr/jg7PjgYzmiLvjgorlhYjjgpLmjIHjgaPjgabjgYTjgovloLTlkIjjga/jgZ3jgaHjgonjgpLlhKrlhYhcbiAgICBpZih0cmlnZ2VyRWwgJiYgdHJpZ2dlckVsLmdldEF0dHJpYnV0ZShEQVRBX01PVkVfVE8pKSB7XG4gICAgICBjb25zdCBiYWNrVG9QYWdlTmFtZSA9IHRyaWdnZXJFbC5nZXRBdHRyaWJ1dGUoREFUQV9NT1ZFX1RPKTtcbiAgICAgIGNvbnN0IGJhY2tUb1BhZ2VFbCA9IFBBR0VfRUxFcy5maW5kKHBhZ2UgPT4gcGFnZS5nZXRBdHRyaWJ1dGUoREFUQV9QQUdFTkFNRSkgPT09IGJhY2tUb1BhZ2VOYW1lKTtcbiAgICAgIGlmKGJhY2tUb1BhZ2VFbCkge1xuICAgICAgICByZXR1cm4gb3BlblBhZ2UoYmFja1RvUGFnZUVsLCAnbGVmdCcpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZihiYWNrUGFnZU5hbWUpIHtcbiAgICAgIGNvbnN0IGJhY2tUb1BhZ2VFbCA9IFBBR0VfRUxFcy5maW5kKHBhZ2UgPT4gcGFnZS5nZXRBdHRyaWJ1dGUoREFUQV9QQUdFTkFNRSkgPT09IGJhY2tQYWdlTmFtZSk7XG4gICAgICBpZihiYWNrVG9QYWdlRWwpIHtcbiAgICAgICAgcmV0dXJuIG9wZW5QYWdlKGJhY2tUb1BhZ2VFbCwgJ2xlZnQnKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYoY3VycmVudFBhZ2UgJiYgY3VycmVudFBhZ2UuZ2V0QXR0cmlidXRlKERBVEFfQkFDS19UTykpIHtcbiAgICAgIC8vIOODmuODvOOCuOOBq+aIu+OCiuWFiOOBjOOBguOCi+WgtOWQiOOBr+OBneOBoeOCiVxuICAgICAgY29uc3QgYmFja1RvUGFnZU5hbWUgPSBjdXJyZW50UGFnZS5nZXRBdHRyaWJ1dGUoREFUQV9CQUNLX1RPKTtcbiAgICAgIGNvbnN0IGJhY2tUb1BhZ2VFbCA9IFBBR0VfRUxFcy5maW5kKHBhZ2UgPT4gcGFnZS5nZXRBdHRyaWJ1dGUoREFUQV9QQUdFTkFNRSkgPT09IGJhY2tUb1BhZ2VOYW1lKTtcbiAgICAgIGlmKGJhY2tUb1BhZ2VFbCkge1xuICAgICAgICByZXR1cm4gb3BlblBhZ2UoYmFja1RvUGFnZUVsLCAnbGVmdCcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyDkvZXjgoLjgarjgYTloLTlkIjjga/jg6njg7Pjg4fjgqPjg7PjgrDjg5rjg7zjgrjjgavmiLvjgZlcbiAgICAgIGNvbnN0IGxhbmRpbmdQYWdlTmFtZSA9IFNFQVJDSF9NRU5VLmdldEF0dHJpYnV0ZShEQVRBX0xBTkRJTkdfUEFHRSk7XG4gICAgICBjb25zdCBiYWNrVG9QYWdlRWwgPSBQQUdFX0VMRXMuZmluZChwYWdlID0+IHBhZ2UuZ2V0QXR0cmlidXRlKERBVEFfUEFHRU5BTUUpID09PSBsYW5kaW5nUGFnZU5hbWUpO1xuICAgICAgaWYoYmFja1RvUGFnZUVsKSB7XG4gICAgICAgIHJldHVybiBvcGVuUGFnZShiYWNrVG9QYWdlRWwsICdsZWZ0Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcignZXJyb3I6IE5vdCBmb3VudCBiYWNrIHRvIHBhZ2UnKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIOODmuODvOOCuOmBt+enu1xuICAgKiBAcGFyYW0geyBIVE1MRWxlbWVudCB9ICAgICAgdHJpZ2dlckVsIOmBt+enu+OCouOCr+OCt+ODp+ODs+OBruODiOODquOCrOODvOimgee0oFxuICAgKi9cbiAgY29uc3Qgb25QYWdlTW92ZSA9ICh0cmlnZ2VyRWwpID0+IHtcbiAgICBjb25zdCBjdXJyZW50UGFnZSA9IFBBR0VfRUxFcy5maW5kKHBhZ2UgPT4gcGFnZS5jbGFzc0xpc3QuY29udGFpbnMoQ1VSUkVOVF9QQUdFX0NMQVNTKSk7XG5cbiAgICAvLyDjg5zjgr/jg7PjgYzpgbfnp7vlhYjjgpLmjIHjgaPjgabjgYTjgovloLTlkIjjga/jgZ3jgaHjgonjgpLlhKrlhYhcbiAgICBpZih0cmlnZ2VyRWwuZ2V0QXR0cmlidXRlKERBVEFfTU9WRV9UTykpIHtcbiAgICAgIGNvbnN0IG1vdmVUb1BhZ2VOYW1lID0gdHJpZ2dlckVsLmdldEF0dHJpYnV0ZShEQVRBX01PVkVfVE8pO1xuICAgICAgY29uc3QgbW92ZVRvUGFnZUVsID0gUEFHRV9FTEVzLmZpbmQocGFnZSA9PiBwYWdlLmdldEF0dHJpYnV0ZShEQVRBX1BBR0VOQU1FKSA9PT0gbW92ZVRvUGFnZU5hbWUpO1xuICAgICAgaWYobW92ZVRvUGFnZUVsKSB7XG4gICAgICAgIHJldHVybiBvcGVuUGFnZShtb3ZlVG9QYWdlRWwsICdyaWdodCcpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZihjdXJyZW50UGFnZSAmJiBjdXJyZW50UGFnZS5nZXRBdHRyaWJ1dGUoREFUQV9NT1ZFX1RPKSkge1xuICAgICAgLy8g44Oa44O844K444Gr6YG356e75YWI44GM44GC44KL5aC05ZCI44Gv44Gd44Gh44KJXG4gICAgICBjb25zdCBtb3ZlVG9QYWdlTmFtZSA9IGN1cnJlbnRQYWdlLmdldEF0dHJpYnV0ZShEQVRBX01PVkVfVE8pO1xuICAgICAgY29uc3QgbW92ZVRvUGFnZUVsID0gUEFHRV9FTEVzLmZpbmQocGFnZSA9PiBwYWdlLmdldEF0dHJpYnV0ZShEQVRBX1BBR0VOQU1FKSA9PT0gbW92ZVRvUGFnZU5hbWUpO1xuICAgICAgaWYobW92ZVRvUGFnZUVsKSB7XG4gICAgICAgIHJldHVybiBvcGVuUGFnZShtb3ZlVG9QYWdlRWwsICdyaWdodCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoJ2Vycm9yOiBOb3QgZm91bnQgbW92ZSB0byBwYWdlJyk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiDjgqTjg5njg7Pjg4joqK3lrppcbiAgICovXG4gIGNvbnN0IGFkZEV2ZW50ID0gKCkgPT4ge1xuICAgIGNvbnN0IG1vdmVCdG5zID0gW10uc2xpY2UuY2FsbChTRUFSQ0hfTUVOVS5xdWVyeVNlbGVjdG9yQWxsKGAuJHtNT1ZFX0JUTl9DTEFTU31gKSk7XG4gICAgbW92ZUJ0bnMuZm9yRWFjaChidG4gPT4ge1xuICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2KSA9PiB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIG9uUGFnZU1vdmUoYnRuKVxuICAgICAgfSwgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgYmFja0J0bnMgPSBbXS5zbGljZS5jYWxsKFNFQVJDSF9NRU5VLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0JBQ0tfQlROX0NMQVNTfWApKTtcbiAgICBiYWNrQnRucy5mb3JFYWNoKGJ0biA9PiB7XG4gICAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXYpID0+IHtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgb25QYWdlQmFjayhidG4pXG4gICAgICB9LCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBjYXRlZ29yeVNlbGVjdEJ0bnMgPSBbXS5zbGljZS5jYWxsKFNFQVJDSF9NRU5VLnF1ZXJ5U2VsZWN0b3JBbGwoYCpbJHtEQVRBX1NFTEVDVEVEX0NBVEVHT1JZfV1gKSk7XG4gICAgY2F0ZWdvcnlTZWxlY3RCdG5zLmZvckVhY2goYnRuID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gYnRuLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgICBpZihpbnB1dCkge1xuICAgICAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXYpID0+IHtcbiAgICAgICAgICAvLyBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIC8vIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgdG9nZ2xlQ2F0ZWdvcnlWaXNpYmxpdHkoKTtcbiAgICAgICAgfSwgZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgaW5wdXRCdG5zID0gW10uc2xpY2UuY2FsbChTRUFSQ0hfTUVOVS5xdWVyeVNlbGVjdG9yQWxsKGAuJHtJTlBVVF9UUklHR0VSX0NMQVNTfWApKTtcbiAgICBpbnB1dEJ0bnMuZm9yRWFjaChidG4gPT4ge1xuICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2KSA9PiB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIG9uSW5wdXQoKTtcbiAgICAgICAgb25DbG9zZSgpO1xuICAgICAgfSwgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgYWRkQnRucyA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7QUREX1RSSUdHRVJfQ0xBU1N9YCkpO1xuICAgIGFkZEJ0bnMuZm9yRWFjaChidG4gPT4ge1xuICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2KSA9PiB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIG9uQWRkKCk7XG4gICAgICAgIG9uUGFnZUJhY2sodW5kZWZpbmVkLCAnSE9NRScpO1xuICAgICAgfSwgZmFsc2UpO1xuICAgIH0pXG4gIH1cblxuXG4gIC8qKlxuICAgKiDjg5Xjg4Pjgr/jg7znirbmhYvjga7oqK3lrppcbiAgICogQHBhcmFtIHsgSFRNTEVsZW1lbnQgfSBvcGVuZWRQYWdlIOmWi+OBi+OCjOOCi+ODmuODvOOCuOOBrkhUTUzopoHntKBcbiAgICovXG4gIGNvbnN0IHNldEZvb3RTdGF0dXMgPSAob3BlbmVkUGFnZSkgPT4ge1xuICAgIGNvbnN0IHN0YXR1cyA9IG9wZW5lZFBhZ2UuZ2V0QXR0cmlidXRlKERBVEFfUEFHRV9TVEFUVVMpO1xuICAgIGlmKHN0YXR1cykge1xuICAgICAgc3dpdGNoKHN0YXR1cykge1xuICAgICAgICBjYXNlIFBBR0VfU1RBVFVTLk5FWFQ6XG4gICAgICAgICAgRk9PVC5zZXRBdHRyaWJ1dGUoREFUQV9TRUFSQ0hNRU5VX1NUQVRVUywgJ25leHQnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBQQUdFX1NUQVRVUy5DT01QTEVURTpcbiAgICAgICAgICBGT09ULnNldEF0dHJpYnV0ZShEQVRBX1NFQVJDSE1FTlVfU1RBVFVTLCAnY29tcGxldGUnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBQQUdFX1NUQVRVUy5BREQ6XG4gICAgICAgICAgRk9PVC5zZXRBdHRyaWJ1dGUoREFUQV9TRUFSQ0hNRU5VX1NUQVRVUywgJ2FkZCcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIOODmuODvOOCuOOBrmlucHV06KaB57Sg44Gu5aSJ5pu044KS55uj6KaWXG4gICAqIEBwYXJhbSB7IEhUTUxFbGVtZW50IH0gdGFyZ2V0UGFnZSAgICDnm6Poppblr77osaHjga7jg5rjg7zjgrhcbiAgICovXG4gIGNvbnN0IE9ic2VydmVJbnB1dENoYW5nZWQgPSAodGFyZ2V0UGFnZSkgPT4ge1xuICAgIGlmKHRhcmdldFBhZ2UuaGFzQXR0cmlidXRlKERBVEFfQUNUSVZFX0NIRUNLRUQpKSB7XG4gICAgICBjb25zdCBpbnB1dHMgPSBbXS5zbGljZS5jYWxsKHRhcmdldFBhZ2UucXVlcnlTZWxlY3RvckFsbChcImlucHV0XCIpKTtcblxuICAgICAgaW5wdXRzLmZvckVhY2goaW5wdXQgPT4ge1xuICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZihpbnB1dHMuc29tZShpbnB1dCA9PiBpbnB1dC5jaGVja2VkID09PSB0cnVlKSkge1xuICAgICAgICAgICAgICBTRUFSQ0hfTUVOVS5zZXRBdHRyaWJ1dGUoREFUQV9BQ1RJVkVfU1RBVFVTLCAnYWN0aXZlJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBTRUFSQ0hfTUVOVS5zZXRBdHRyaWJ1dGUoREFUQV9BQ1RJVkVfU1RBVFVTLCAnaW5hY3RpdmUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCA1KTtcbiAgICAgICAgfSwgZmFsc2UpO1xuICAgICAgfSlcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiDjg5rjg7zjgrjjgpLplovjgY9cbiAgICogQHBhcmFtIHsgSFRNTEVsZW1lbnQgfSAgICAgICAgICAgICAgICB0YXJnZXRQYWdlICAgIOmWi+OBj+WvvuixoeOBruODmuODvOOCuFxuICAgKiBAcGFyYW0geyBmYWxzZSB8ICdsZWZ0JyB8ICdyaWdodCcgfSBvcGVuRGlyZWN0aW9uIOODmuODvOOCuOmBt+enu+aWueWQkeOBruaMh+WumuOAgiBmYWxzZeOBruWgtOWQiOOBr+OCouODi+ODoeODvOOCt+ODp+ODs+eEoeOBl+OAglxuICAgKi9cbiAgY29uc3Qgb3BlblBhZ2UgPSAodGFyZ2V0UGFnZSwgZGlyZWN0aW9uID0gZmFsc2UpID0+IHtcblxuICAgIGlmKHRhcmdldFBhZ2UuaGFzQXR0cmlidXRlKERBVEFfUkVRVUlSRV9QQUdFKSkge1xuICAgICAgY29uc3QgcmVxdWlyZVBhZ2VOYW1lID0gdGFyZ2V0UGFnZS5nZXRBdHRyaWJ1dGUoREFUQV9SRVFVSVJFX1BBR0UpO1xuICAgICAgY29uc3QgcmVxdWlyZVBhZ2UgPSBQQUdFX0VMRXMuZmluZChwYWdlID0+IHBhZ2UuZ2V0QXR0cmlidXRlKERBVEFfUEFHRU5BTUUpID09PSByZXF1aXJlUGFnZU5hbWUpO1xuXG4gICAgICBpZihyZXF1aXJlUGFnZSkge1xuXG4gICAgICAgIGNvbnN0IHJlcXVpcmVQYWdlSW5wdXRzID0gW10uc2xpY2UuY2FsbChyZXF1aXJlUGFnZS5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXRcIikpO1xuICAgICAgICBpZighcmVxdWlyZVBhZ2VJbnB1dHMuc29tZShpbnB1dCA9PiBpbnB1dC5jaGVja2VkID09PSB0cnVlKSkge1xuICAgICAgICAgIG9wZW5QYWdlKHJlcXVpcmVQYWdlKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihkaXJlY3Rpb24pIHtcbiAgICAgIC8vIOOCouODi+ODoeODvOOCt+ODp+ODs+eUqOOBruOCr+ODqeOCueioreWumlxuICAgICAgdGFyZ2V0UGFnZS5jbGFzc0xpc3QuYWRkKGRpcmVjdGlvbiA9PT0gJ2xlZnQnID8gUkVBRFlfTEVGVF9JTl9DTEFTUyA6IFJFQURZX1JJR0hUX0lOX0NMQVNTKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBQQUdFX0VMRXMuZm9yRWFjaChwYWdlID0+IHBhZ2UuY2xhc3NMaXN0LnJlbW92ZShDVVJSRU5UX1BBR0VfQ0xBU1MpKTtcblxuICAgICAgICB0YXJnZXRQYWdlLmNsYXNzTGlzdC5yZW1vdmUoZGlyZWN0aW9uID09PSAnbGVmdCcgPyBSRUFEWV9MRUZUX0lOX0NMQVNTIDogUkVBRFlfUklHSFRfSU5fQ0xBU1MpO1xuICAgICAgICB0YXJnZXRQYWdlLmNsYXNzTGlzdC5hZGQoQ1VSUkVOVF9QQUdFX0NMQVNTKTtcblxuICAgICAgICAvLyDjg5rjg7zjgrjjgpLjg4jjg4Pjg5fjgavjgrnjgq/jg63jg7zjg6tcbiAgICAgICAgQk9EWS5zY3JvbGxUb3A9MDtcbiAgICAgIH0sIDEwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g44Oa44O844K45Y2z5pmC5YiH44KK5pu/44GIXG4gICAgICBQQUdFX0VMRXMuZm9yRWFjaChwYWdlID0+IHBhZ2UuY2xhc3NMaXN0LnJlbW92ZShDVVJSRU5UX1BBR0VfQ0xBU1MpKTtcbiAgICAgIHRhcmdldFBhZ2UuY2xhc3NMaXN0LmFkZChDVVJSRU5UX1BBR0VfQ0xBU1MpO1xuXG4gICAgICAvLyDjg5rjg7zjgrjjgpLjg4jjg4Pjg5fjgavjgrnjgq/jg63jg7zjg6tcbiAgICAgIEJPRFkuc2Nyb2xsVG9wPTA7XG4gICAgfVxuXG4gICAgLy8g44OZ44O844K544Oa44O844K444Gu5aC05ZCI44CB5oi744KL44Oc44K/44Oz44KS6Z2e6KGo56S644GrXG4gICAgaWYodGFyZ2V0UGFnZS5oYXNBdHRyaWJ1dGUoREFUQV9CQVNFX1BBR0UpKSB7XG4gICAgICBQUkVWX0JUTnMuZm9yRWFjaChwcmV2QnRuID0+IHByZXZCdG4uc3R5bGUuZGlzcGxheSA9ICdub25lJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFBSRVZfQlROcy5mb3JFYWNoKHByZXZCdG4gPT4gcHJldkJ0bi5zdHlsZS5kaXNwbGF5ID0gJycpO1xuICAgIH1cblxuICAgIC8vIOODgeOCp+ODg+OCr+OBjOS9leOBi+OBl+OCieOBpOOBhOOBpuOBquOBhOOBqOODleODg+OCv+ODvOODnOOCv+ODs+aKvOOBm+OBquOBhOOBi1xuICAgIGlmKHRhcmdldFBhZ2UuaGFzQXR0cmlidXRlKERBVEFfQUNUSVZFX0NIRUNLRUQpKSB7XG4gICAgICBjb25zdCBpbnB1dHMgPSBbXS5zbGljZS5jYWxsKHRhcmdldFBhZ2UucXVlcnlTZWxlY3RvckFsbChcImlucHV0XCIpKTtcbiAgICAgIGlmKGlucHV0cy5zb21lKGlucHV0ID0+IGlucHV0LmNoZWNrZWQgPT09IHRydWUpKSB7XG4gICAgICAgIFNFQVJDSF9NRU5VLnNldEF0dHJpYnV0ZShEQVRBX0FDVElWRV9TVEFUVVMsICdhY3RpdmUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFNFQVJDSF9NRU5VLnNldEF0dHJpYnV0ZShEQVRBX0FDVElWRV9TVEFUVVMsICdpbmFjdGl2ZScpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBTRUFSQ0hfTUVOVS5yZW1vdmVBdHRyaWJ1dGUoREFUQV9BQ1RJVkVfU1RBVFVTKTtcbiAgICB9XG5cbiAgICAvLyDjgrnjg4bjg7zjgr/jgrnnmbvpjLJcbiAgICBzZXRGb290U3RhdHVzKHRhcmdldFBhZ2UpO1xuICB9ICBcblxuXG4gIC8qKlxuICAgKiDnq4vjgaHkuIrjgYzjgorjg5rjg7zjgrjjgpLoqK3lrppcbiAgICogQHBhcmFtIHsgU3RyaW5nIH0gbGFuZGluZ1BhZ2VJZCDliJ3mnJ/ooajnpLrjg5rjg7zjgrjjga5JRFxuICAgKi9cbiAgY29uc3Qgc2V0TGFuZGluZ1BhZ2UgPSAobGFuZGluZ1BhZ2VJZCkgPT4ge1xuICAgIGNvbnN0IGluaXRQYWdlID0gKCgpID0+IHtcbiAgICAgIGlmKCFsYW5kaW5nUGFnZUlkKSB7XG4gICAgICAgIGNvbnN0IGJhc2VQYWdlID0gUEFHRV9FTEVzLmZpbmQocGFnZSA9PiBwYWdlLmdldEF0dHJpYnV0ZShEQVRBX0JBU0VfUEFHRSkpO1xuICAgICAgICBpZihiYXNlUGFnZSkge1xuICAgICAgICAgIHJldHVybiBiYXNlUGFnZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUEFHRV9FTEVzWzBdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gUEFHRV9FTEVzLmZpbmQocGFnZUVsID0+IHtcbiAgICAgICAgcmV0dXJuIHBhZ2VFbC5nZXRBdHRyaWJ1dGUoREFUQV9QQUdFTkFNRSkgPT09IGxhbmRpbmdQYWdlSWQ7XG4gICAgICB9KSA/PyBQQUdFX0VMRXNbMF07XG4gICAgfSkoKTtcblxuXG4gICAgLy8g56uL44Gh5LiK44GM44KK44Oa44O844K444KS6KiY6Yyy44GX44Gm44GK44GPXG4gICAgU0VBUkNIX01FTlUuc2V0QXR0cmlidXRlKERBVEFfTEFORElOR19QQUdFLCBpbml0UGFnZS5nZXRBdHRyaWJ1dGUoREFUQV9QQUdFTkFNRSkpO1xuXG4gICAgb3BlblBhZ2UoaW5pdFBhZ2UpO1xuICB9XG5cblxuICAvKipcbiAgICog6ZaL44GL44KM44Gf44Oc44K/44Oz44OH44O844K/44GL44KJ44CBICBcbiAgICog44GT44Gu5qSc57Si44Oh44OL44Ol44O844Gu5YWl5Yqb5YCk44Gu5oy/5YWl5a++6LGh44Oa44O844K444KS6Kit5a6a44GZ44KLXG4gICAqIEBwYXJhbSB7IEhUTUxFbGVtZW50IH0gb3BlbmVkVHJpZ2dlckVsIOODouODvOODgOODq+OCquODvOODl+ODs+OBjOWun+ihjOOBleOCjOOBn+ODnOOCv+ODs+imgee0oFxuICAgKi9cbiAgY29uc3Qgc2V0SW5wdXRUYXJnZXRQYWdlcyA9IChvcGVuZWRUcmlnZ2VyRWwpID0+IHtcblxuICAgIGNvbnN0IG1vdW50UG9pbnRQYWdlcyA9IG9wZW5lZFRyaWdnZXJFbC5nZXRBdHRyaWJ1dGUoREFUQV9JTlBVVF9NT1VOVF9QQUdFcyk7XG5cbiAgICBpZihtb3VudFBvaW50UGFnZXMpIHtcbiAgICAgIFNFQVJDSF9NRU5VLnNldEF0dHJpYnV0ZShEQVRBX0lOUFVUX01PVU5UX1BBR0VzLCBtb3VudFBvaW50UGFnZXMpO1xuICAgIH1cblxuICAgIC8vIOODnuOCpuODs+ODiOODneOCpOODs+ODiOOBruaMh+WumuOBjOOBguOCi+WgtOWQiOOBr+OBneOBoeOCieOCkueZu+mMslxuICAgIGlmKG9wZW5lZFRyaWdnZXJFbC5oYXNBdHRyaWJ1dGUoREFUQV9JTlBVVF9NT1VOVF9QT0lOVF9DVVNUT01zKSkge1xuXG4gICAgICBTRUFSQ0hfTUVOVS5zZXRBdHRyaWJ1dGUoREFUQV9JTlBVVF9NT1VOVF9QT0lOVF9DVVNUT01zLCBvcGVuZWRUcmlnZ2VyRWwuZ2V0QXR0cmlidXRlKERBVEFfSU5QVVRfTU9VTlRfUE9JTlRfQ1VTVE9NcykpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIOmWi+OBi+OCjOOBn+ODnOOCv+ODs+ODh+ODvOOCv+OBi+OCieOAgSAgXG4gICAqIOOBk+OBruaknOe0ouODoeODi+ODpeODvOOBruODmuODvOOCuOOCouOCr+OCt+ODp+ODs+OCkuioreWumuOBmeOCi1xuICAgKiBAcGFyYW0geyBIVE1MRWxlbWVudCB9IG9wZW5lZFRyaWdnZXJFbCDjg6Ljg7zjg4Djg6vjgqrjg7zjg5fjg7PjgYzlrp/ooYzjgZXjgozjgZ/jg5zjgr/jg7PopoHntKBcbiAgICovXG4gIGNvbnN0IHNldFNlYXJjaFR5cGUgPSAob3BlbmVkVHJpZ2dlckVsKSA9PiB7XG4gICAgbGV0IGFjdGlvblR5cGUgPSBvcGVuZWRUcmlnZ2VyRWwuZ2V0QXR0cmlidXRlKERBVEFfQUNUSU9OX1RZUEUpO1xuXG4gICAgaWYoIWFjdGlvblR5cGUpIHtcbiAgICAgIC8vIOODh+ODleOCqeODq+ODiOOBp+OBr+aknOe0ouOCv+OCpOODl1xuICAgICAgYWN0aW9uVHlwZSA9IFBBR0VfQUNUSU9OX1RZUEVzLlNFQVJDSDtcbiAgICB9XG5cbiAgICBpZihhY3Rpb25UeXBlID09PSBQQUdFX0FDVElPTl9UWVBFcy5JTlBVVCkge1xuICAgICAgc2V0SW5wdXRUYXJnZXRQYWdlcyhvcGVuZWRUcmlnZ2VyRWwpO1xuICAgIH1cblxuICAgIFNFQVJDSF9NRU5VLnNldEF0dHJpYnV0ZShEQVRBX0FDVElPTl9UWVBFLCBhY3Rpb25UeXBlKTtcbiAgfVxuXG5cblxuXG4gIC8qKlxuICAgKiDjg6Ljg7zjg4Djg6vjgqrjg7zjg5fjg7PjgqTjg5njg7Pjg4jjgpLlj5fjgZHlj5bjgorjgIEgIFxuICAgKiDjgZ3jgozjgYzoh6rouqvjga7mpJzntKLjg6Hjg4vjg6Xjg7zjgaDjgaPjgZ/loLTlkIjjgavlh6bnkIbjgpLlrp/ooYxcbiAgICogQHBhcmFtIHsgU3RyaW5nIH0gICAgICBvcGVuTW9kYWxJZCDplovjgYvjgozjgovjg6Ljg7zjg4Djg6vjga5JRFxuICAgKiBAcGFyYW0geyBIVE1MRWxlbWVudCB9IGNsaWNrZWRFbCAgIOODouODvOODgOODq+OCquODvOODl+ODs+OBjOWun+ihjOOBleOCjOOBn+ODnOOCv+ODs+imgee0oFxuICAgKi9cbiAgY29uc3Qgb25Nb2RhbE9wZW4gPSAob3Blbk1vZGFsSWQsIGNsaWNrZWRFbCkgPT4ge1xuICAgIGlmKG9wZW5Nb2RhbElkID09PSBTRUxGX1NFQVJDSE1FTlVfSUQpIHtcbiAgICAgIC8vIOeri+OBoeS4iuOBjOOCiuODmuODvOOCuOOCkuioreWumlxuICAgICAgc2V0TGFuZGluZ1BhZ2UoY2xpY2tlZEVsLmdldEF0dHJpYnV0ZShEQVRBX0xBTkRJTkdfUEFHRSkpO1xuXG4gICAgICAvLyDjg5rjg7zjgrjjgqLjgq/jgrfjg6fjg7Pjgr/jgqTjg5fjgpLoqK3lrppcbiAgICAgIHNldFNlYXJjaFR5cGUoY2xpY2tlZEVsKTtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiDjg6Ljg7zjg4Djg6vjgq/jg63jg7zjgrrjgqTjg5njg7Pjg4jjgpLlj5fjgZHlj5bjgorjgIEgIFxuICAgKiDjgZ3jgozjgYzoh6rouqvjga7mpJzntKLjg6Hjg4vjg6Xjg7zjgaDjgaPjgZ/loLTlkIjjgavlh6bnkIbjgpLlrp/ooYxcbiAgICpcbiAgICogQHBhcmFtIHsgU3RyaW5nIH0gICAgICBjbG9zZU1vZGFsSWQg6ZaJ44GY44KL44Oi44O844OA44Or44GuSURcbiAgICovXG4gIGNvbnN0IG9uTW9kYWxDbG9zZSA9IChjbG9zZU1vZGFsSWQpID0+IHtcbiAgICBpZihjbG9zZU1vZGFsSWQgPT09IFNFTEZfU0VBUkNITUVOVV9JRCkge1xuICAgICAgXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaW5pdGlhbGl6ZSA9ICgpID0+IHtcbiAgICBhZGRFdmVudCgpO1xuXG4gICAgUEFHRV9FTEVzLmZvckVhY2gocGFnZSA9PiBPYnNlcnZlSW5wdXRDaGFuZ2VkKHBhZ2UpKTtcblxuICAgIHdpbmRvdy5lbWl0dGVyLm9uKCdvbk1vZGFsT3BlbicsIG9uTW9kYWxPcGVuKTtcbiAgICB3aW5kb3cuZW1pdHRlci5vbignb25Nb2RhbENsb3NlJywgb25Nb2RhbENsb3NlKTtcbiAgfVxuXG4gIGNvbnN0IGluaXQgPSAoKSA9PiB7XG4gICAgaW5pdGlhbGl6ZSgpXG4gIH1cblxuICBpbml0KCk7XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24oKXtcbiAgY29uc3QgdGFyZ2V0cyA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7VEFSR0VUX0NMQVNTfWApKTtcbiAgdGFyZ2V0cy5mb3JFYWNoKHRhcmdldCA9PiB7XG4gICAgU2VhcmNoTWVudU1hbmFnZXIodGFyZ2V0KTtcbiAgfSk7XG59KTtcbiIsImNvbnN0IFRSSUdHRVJfQ0xBU1MgPSAnanMtcGYtc2VsZWN0LW9uY2UnO1xuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKCl7XG4gICQoZnVuY3Rpb24oKXtcbiAgICAkKCcuJyArIFRSSUdHRVJfQ0xBU1MgKS5vbignY2hhbmdlJyxmdW5jdGlvbigpe1xuICAgICAgbGV0ICR0aGlzID0gJCh0aGlzKTtcbiAgICAgIGxldCBuYW1lID0gJHRoaXMuYXR0cignbmFtZScpO1xuICAgICAgJCgnaW5wdXRbbmFtZT1cIicgKyBuYW1lICsgJ1wiXS5qcy1wZi1zZWxlY3Qtb25jZScpLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgICAgJCh0aGlzKS5wcm9wKCdkaXNhYmxlZCcsZmFsc2UpO1xuICAgICAgfSlcbiAgICAgICR0aGlzLnByb3AoJ2Rpc2FibGVkJywnZGlzYWJsZWQnKTtcbiAgICAgICR0aGlzLnRyaWdnZXIoJ3YtY2xpY2snKTtcbiAgICB9KTtcbiAgfSk7XG59KTsiLCJjb25zdCBUUklHR0VSX0NMQVNTID0gJ2pzLXBmLXNlbGVjdGVkLWluc2VydGVyJztcbmNvbnN0IE1PVU5UX1RPX0RBVEEgPSAnZGF0YS1wZi1zZWxlY3RlZC1pbnNlcnQtbW91bnQtdG8nO1xuXG5jb25zdCBJVEVNX0NMQVNTID0gJ2pzLXBmLXNlbGVjdGVkLWluc2VydGVyLWl0ZW0nO1xuY29uc3QgSVRFTV9DT05URU5UX0NMQVNTID0gJ2pzLXBmLXNlbGVjdGVkLWluc2VydGVyLWl0ZW0tY29udGVudHMnO1xuXG4vKipcbiAqIOmBuOaKnuOCs+ODs+ODhuODs+ODhOaMv+WFpVxuICogQGNvbnN0cnVjdG9yXG4gKlxuICogQHBhcmFtICAgIHsgSFRNTEVsZW1lbnQgfSB0YXJnZXQgICAgICAg55Sf5oiQ5a++6LGh6KaB57SgXG4gKiBcbiAqIEBwcm9wZXJ0eSB7IEhUTUxFbGVtZW50IH0gRVhQX1NFTlRFTkNFIOeUn+aIkOWvvuixoeOBruimquimgee0oFxuICovXG5jb25zdCBTZWxlY3RlZEluc2VydGVyID0gKHRhcmdldCkgPT4ge1xuICBjb25zdCBTRUxFQ1RFRF9JTlNFUlRFUiA9IHRhcmdldDtcbiAgY29uc3QgU0VMRl9JRCA9IFNFTEVDVEVEX0lOU0VSVEVSLmdldEF0dHJpYnV0ZSgnaWQnKTtcblxuICBjb25zdCBJVEVNcyA9IFtdLnNsaWNlLmNhbGwoU0VMRUNURURfSU5TRVJURVIucXVlcnlTZWxlY3RvckFsbChgLiR7SVRFTV9DTEFTU31gKSk7XG5cbiAgbGV0IG1vdW50UG9pbnRRdWVyeSA9ICcnO1xuXG5cbiAgLyoqXG4gICAqIOaMv+WFpVxuICAgKiBAcGFyYW0geyBIVE1MRWxlbWVudCB9IGluc2VydEl0ZW0g5oy/5YWl44GZ44KL6YG45oqe6KaB57SgXG4gICAqL1xuICBjb25zdCBpbnNlcnQgPSAoaW5zZXJ0SXRlbSkgPT4ge1xuICAgIGNvbnN0IG1vdW50UG9pbnRzID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKG1vdW50UG9pbnRRdWVyeSkpO1xuICAgIFxuICAgIGNvbnN0IGluc2VydENvbnRlbnQgPSBbXS5zbGljZS5jYWxsKGluc2VydEl0ZW0ucXVlcnlTZWxlY3RvckFsbChgLiR7SVRFTV9DT05URU5UX0NMQVNTfWApKTtcblxuICAgIG1vdW50UG9pbnRzLmZvckVhY2gobW91bnRQb2ludCA9PiB7XG4gICAgICBpZihtb3VudFBvaW50LnRhZ05hbWUgPT09ICdJTlBVVCdcbiAgICAgICAgfHwgbW91bnRQb2ludC50YWdOYW1lID09PSAnVEVYVEFSRUEnKSB7XG4gICAgICAgIG1vdW50UG9pbnQudmFsdWUgPSBpbnNlcnRDb250ZW50Lm1hcChjb250ZW50ID0+IGNvbnRlbnQuaW5uZXJUZXh0KS5qb2luKCcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1vdW50UG9pbnQuaW5uZXJIVE1MID0gaW5zZXJ0Q29udGVudC5tYXAoY29udGVudCA9PiBjb250ZW50LmlubmVyVGV4dCkuam9pbignJyk7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG5cbiAgLyoqXG4gICAqIOOCpOODmeODs+ODiOS7mOS4jlxuICAgKi9cbiAgY29uc3QgYWRkRXZlbnQgPSAoKSA9PiB7XG4gICAgSVRFTXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgIGluc2VydChpdGVtKTtcblxuICAgICAgICBpZih3aW5kb3cuTW9kYWxNYW5hZ2VyKSB7XG4gICAgICAgICAgd2luZG93Lk1vZGFsTWFuYWdlci5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9LCBmYWxzZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICog44Oi44O844OA44Or44Kq44O844OX44Oz44Kk44OZ44Oz44OI44KS5Y+X44GR5Y+W44KK44CBICBcbiAgICog44Gd44KM44GM6Ieq6Lqr44Gu44Kz44Oz44OG44Oz44OE44Gg44Gj44Gf5aC05ZCI44Gr5Yem55CG44KS5a6f6KGMXG4gICAqIEBwYXJhbSB7IFN0cmluZyB9ICAgICAgb3Blbk1vZGFsSWQg6ZaL44GL44KM44KL44Oi44O844OA44Or44GuSURcbiAgICogQHBhcmFtIHsgSFRNTEVsZW1lbnQgfSBjbGlja2VkRWwgICDjg6Ljg7zjg4Djg6vjgqrjg7zjg5fjg7PjgYzlrp/ooYzjgZXjgozjgZ/jg5zjgr/jg7PopoHntKBcbiAgICovXG4gIGNvbnN0IG9uTW9kYWxPcGVuID0gKG9wZW5Nb2RhbElkLCBjbGlja2VkRWwpID0+IHtcbiAgICBpZihvcGVuTW9kYWxJZCA9PT0gU0VMRl9JRCkge1xuICAgICAgLy8g5oy/5YWl5YWI44KS6KiY6YyyXG4gICAgICBtb3VudFBvaW50UXVlcnkgPSBjbGlja2VkRWwuZ2V0QXR0cmlidXRlKE1PVU5UX1RPX0RBVEEpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGluaXQgPSAoKSA9PiB7XG4gICAgYWRkRXZlbnQoKTtcblxuICAgIHdpbmRvdy5lbWl0dGVyLm9uKCdvbk1vZGFsT3BlbicsIG9uTW9kYWxPcGVuKTtcbiAgfVxuICBpbml0KCk7XG5cbiAgcmV0dXJuIHtcblxuICB9XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24oKXtcbiAgY29uc3QgdGFyZ2V0cyA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7VFJJR0dFUl9DTEFTU31gKSk7XG4gIHRhcmdldHMuZm9yRWFjaCh0YXJnZXQgPT4ge1xuICAgIFNlbGVjdGVkSW5zZXJ0ZXIodGFyZ2V0KTtcbiAgfSk7XG59KTtcbiIsIlxuY29uc3Qgc2V0TWFpbk1pbkhlaWdodCA9ICgpID0+IHtcbiAgY29uc3QgUEZfTUFJTiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wZi1tYWluJyk7XG4gIGNvbnN0IFBGX0ZPT1RFUiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwZi1mb290ZXInKTtcblxuICBpZiAoUEZfTUFJTiAmJiBQRl9GT09URVIpIHtcbiAgICBjb25zdCBQRl9GT09URVJfU1RZTEUgPSBQRl9GT09URVIuY3VycmVudFN0eWxlIHx8IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKFBGX0ZPT1RFUik7XG4gICAgY29uc3QgUEZfRk9PVEVSX01BUkdJTl9UT1AgPSBwYXJzZUZsb2F0KFBGX0ZPT1RFUl9TVFlMRS5tYXJnaW5Ub3ApO1xuXG4gICAgY29uc3QgUEZfRk9PVEVSX0hFSUdIVCA9IFBGX0ZPT1RFUi5jbGllbnRIZWlnaHQgKyBQRl9GT09URVJfTUFSR0lOX1RPUDtcbiAgICBQRl9NQUlOLnN0eWxlLm1pbkhlaWdodCA9IGBjYWxjKDEwMHZoIC0gJHtQRl9GT09URVJfSEVJR0hUfXB4KWA7XG4gIH1cbn1cbnNldE1haW5NaW5IZWlnaHQoKTtcblxuXG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24gKCkge1xuICBpZiAod2luZG93LnJtKSB7XG4gICAgd2luZG93LnJtLnNldE9uQ2hhbmdlRGV2aWNlQ2FsbGJhY2soc2V0TWFpbk1pbkhlaWdodCk7XG4gIH1cbn0pO1xuIiwid2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbigpe1xuICAkKGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgYnRuID0gJCgnLmpzLXBmLXNreXNjcmFwZXJfYnRuJyk7XG4gICAgYnRuLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICQoJy5qcy1wZi1za3lzY3JhcGVyJykuZmFkZU91dCgpO1xuICAgIH0pO1xuXG5cbiAgICAvLyDmpJzntKLov73lvpPooajnpLrjgpLlj5fjgZHlj5bjgopcbiAgICBlbWl0dGVyLm9uKCdvbkZvbGxvd1BhZ2VCb3R0b21WaXNpYmxlJywgKCkgPT4ge1xuICAgICAgJCgnLmpzLXBmLXNreXNjcmFwZXInKS5yZW1vdmVDbGFzcygnaXMtaGlkZGVuLXBhZ2UtYm90dG9tJyk7XG4gICAgfSk7XG5cbiAgICAvLyDmpJzntKLov73lvpPpnZ7ooajnpLrjgpLlj5fjgZHlj5bjgopcbiAgICBlbWl0dGVyLm9uKCdvbkZvbGxvd1BhZ2VCb3R0b21IaWRkZW4nLCAoKSA9PiB7XG4gICAgICAkKCcuanMtcGYtc2t5c2NyYXBlcicpLmFkZENsYXNzKCdpcy1oaWRkZW4tcGFnZS1ib3R0b20nKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiIsIi8vIOODleOCqeODvOODoCDjg5rjg7zjgrjlhoXjg5rjg7zjgrjjgoHjgY/jgorpgbfnp7tcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24oKXtcbiAgJChmdW5jdGlvbigpe1xuICAgIGlmICgkKCcuanMtcGYtc2xpZGUtc3RlcHMnKS5sZW5ndGggPiAxKXtcbiAgICAgIGNvbnN0ICRzbGlkZVN0ZXBzID0gJCgnLmpzLXBmLXNsaWRlLXN0ZXBzJyk7XG4gICAgICBjb25zdCAkc2xpZGVOZXh0QnV0dG9ucyA9ICQoJy5qcy1wZi1zbGlkZS1zdGVwcy0tbmV4dCcpO1xuICAgICAgY29uc3QgJHNsaWRlUHJldkJ1dHRvbnMgPSAkKCcuanMtcGYtc2xpZGUtc3RlcHMtLXByZXYnKTtcbiAgICAgIGNvbnN0IHN0ZXBzID0gJCgnLmpzLXBmLXNsaWRlLXN0ZXBzJykubGVuZ3RoO1xuICAgICAgbGV0IGFjdGl2ZVN0ZXAgPSAwO1xuICAgICAgbGV0IGkgPSAwO1xuICAgICAgbGV0IHN0aWxsRm91bmQgPSBmYWxzZTtcbiAgICAgICRzbGlkZVN0ZXBzLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoJ2lzLWFjdGl2ZScpKXtcbiAgICAgICAgICBhY3RpdmVTdGVwID0gaTtcbiAgICAgICAgICBzdGlsbEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcyggc3RpbGxGb3VuZCA/ICdpcy1yaWdodC1iZWhpbmQnIDogJ2lzLWxlZnQtYmVoaW5kJykucmVtb3ZlQ2xhc3MoJ2lzLWJlZm9yZS1pbml0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaSsrO1xuICAgICAgICAkKHRoaXMpLmRhdGEoJ3NsaWRlU3RlcCcsaSk7XG4gICAgICB9KTtcbiAgICAgIGlmIChpID09PSAwKXtcbiAgICAgICAgJHNsaWRlU3RlcHMuZmlyc3QoKS5hZGRDbGFzcygnaXMtYWN0aXZlJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBtb3ZlU3RlcHMgPSBmdW5jdGlvbihkaXJlY3Rpb24sIGVsLCBldil7XG4gICAgICAgIGxldCAkY3VycmVudFN0ZXAgPSAkKGVsKS5jbG9zZXN0KCcuanMtcGYtc2xpZGUtc3RlcHMnKTtcbiAgICAgICAgbGV0IGN1cnJlbnRTdGVwID0gcGFyc2VJbnQoJGN1cnJlbnRTdGVwLmRhdGEoJ3NsaWRlU3RlcCcpKTtcbiAgICAgICAgaWYgKCAoY3VycmVudFN0ZXAgPD0gMSAmJiBkaXJlY3Rpb24gPT0gLTEpIHx8IChjdXJyZW50U3RlcCA+PSBzdGVwcyAmJiBkaXJlY3Rpb24gPT0gMSkgKXtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCflrZjlnKjjgZfjgarjgYTjgrnjg4bjg4Pjg5fjgbjjga7jg6rjgq/jgqjjgrnjg4jjgafjgZnjgIInKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5leHROdW1iZXIgPSAoZGlyZWN0aW9uID09PSAxKSA/IGN1cnJlbnRTdGVwICsgMSA6IGN1cnJlbnRTdGVwIC0gMTtcbiAgICAgICAgbGV0ICRuZXh0U3RlcDtcbiAgICAgICAgJHNsaWRlU3RlcHMuZWFjaChmdW5jdGlvbigpe1xuICAgICAgICAgIGlmICggJCh0aGlzKS5kYXRhKCdzbGlkZVN0ZXAnKSA9PT0gbmV4dE51bWJlciApe1xuICAgICAgICAgICAgJG5leHRTdGVwID0gJCh0aGlzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgJGNsYXNzRm9yUmVtb3ZlID0gKGRpcmVjdGlvbiA9PT0gMSkgPyAnaXMtcmlnaHQtYmVoaW5kJyA6ICdpcy1sZWZ0LWJlaGluZCcgO1xuICAgICAgICBsZXQgJGNsYXNzRm9yQWRkID0gKGRpcmVjdGlvbiA9PT0gMSkgPyAnaXMtbGVmdC1iZWhpbmQnIDogJ2lzLXJpZ2h0LWJlaGluZCc7XG4gICAgICAgICRuZXh0U3RlcC5yZW1vdmVDbGFzcygkY2xhc3NGb3JSZW1vdmUpLmFkZENsYXNzKCdpcy1hY3RpdmUnKTtcbiAgICAgICAgJGN1cnJlbnRTdGVwLnJlbW92ZUNsYXNzKCdpcy1hY3RpdmUnKS5hZGRDbGFzcygkY2xhc3NGb3JBZGQpO1xuICAgICAgfVxuICAgICAgY29uc3QgbW92ZVByZXYgPSBmdW5jdGlvbihldil7XG4gICAgICAgIHJldHVybiBtb3ZlU3RlcHMoLTEsIHRoaXMsIGV2KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1vdmVOZXh0ID0gZnVuY3Rpb24oZXYpe1xuICAgICAgICByZXR1cm4gbW92ZVN0ZXBzKDEsIHRoaXMsIGV2KTtcbiAgICAgIH1cbiAgICAgICRzbGlkZVByZXZCdXR0b25zLm9uKCdjbGljaycsbW92ZVByZXYpO1xuICAgICAgJHNsaWRlTmV4dEJ1dHRvbnMub24oJ2NsaWNrJyxtb3ZlTmV4dCk7XG4gICAgICBcbiAgICB9XG4gIH0pO1xufSk7IiwiaW1wb3J0IENPTkZJRyBmcm9tIFwiLi9fY29uZmlnXCI7XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24oKXtcbiAgJChmdW5jdGlvbiAoKSB7XG4gICAgJCgnYVtocmVmXj1cIiNcIl0nKS5jbGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBzcGVlZCA9IDEwMDA7XG4gICAgICAgIGxldCBocmVmID0gJCh0aGlzKS5hdHRyKFwiaHJlZlwiKTtcbiAgICAgICAgbGV0IHRhcmdldCA9ICQoaHJlZiA9PSBcIiNcIiB8fCBocmVmID09IFwiXCIgPyAnaHRtbCcgOiBocmVmKTtcbiAgICAgICAgbGV0IHBvc2l0aW9uID0gdGFyZ2V0Lm9mZnNldCgpLnRvcDtcblxuICAgICAgICBjb25zdCBvZmZzZXQgPSBDT05GSUcuQ1VSUkVOVF9ERVZJQ0UgPT09ICdQQycgPyA2NyA6IDcyO1xuXG4gICAgICAgICQoXCJodG1sLCBib2R5XCIpLmFuaW1hdGUoeyBzY3JvbGxUb3A6IHBvc2l0aW9uIC0gb2Zmc2V0IH0sIHNwZWVkLCBcInN3aW5nXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iLCJ3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKCl7XG4gIGZ1bmN0aW9uIHBhZ2VQbHVnaW5Db2RlKHcpIHtcbiAgICByZXR1cm4gJzxkaXYgY2xhc3M9XCJmYi1wYWdlXCIgZGF0YS1ocmVmPVwiaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL2thaWdva3l1dWppbi9cIiBkYXRhLXRhYnM9XCJ0aW1lbGluZVwiIGRhdGEtd2lkdGg9XCInICsgdyArICdcIiBkYXRhLWhlaWdodD1cIjEyMFwiIGRhdGEtc21hbGwtaGVhZGVyPVwiZmFsc2VcIiBkYXRhLWFkYXB0LWNvbnRhaW5lci13aWR0aD1cInRydWVcIiBkYXRhLWhpZGUtY292ZXI9XCJmYWxzZVwiIGRhdGEtc2hvdy1mYWNlcGlsZT1cImZhbHNlXCI+PGJsb2NrcXVvdGUgY2l0ZT1cImh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9rYWlnb2t5dXVqaW4vXCIgY2xhc3M9XCJmYi14ZmJtbC1wYXJzZS1pZ25vcmVcIj48YSBocmVmPVwiaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL2thaWdva3l1dWppbi9cIj7ku4vorbfmsYLkurrjg4rjg5M8L2E+PC9ibG9ja3F1b3RlPjwvZGl2Pic7XG4gIH1cbiAgbGV0IGZhY2Vib29rV3JhcCA9ICQoJy5wZi1zbnNfdGltZWxpbmUnKTtcbiAgZmFjZWJvb2tXcmFwLmVhY2goKG51bSwgZWwpID0+IHtcbiAgICBsZXQgZmJCZWZvcmVXaWR0aCA9ICcnO1xuICAgIGxldCBmYldpZHRoID0gJChlbCkud2lkdGgoKTtcbiAgICBsZXQgZmJUaW1lciA9IGZhbHNlO1xuICAgICQod2luZG93KS5vbignbG9hZCByZXNpemUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoZmJUaW1lciAhPT0gZmFsc2UpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGZiVGltZXIpO1xuICAgICAgfVxuICAgICAgZmJUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBmYldpZHRoID0gTWF0aC5mbG9vcigkKGVsKS53aWR0aCgpKTtcbiAgICAgICAgaWYgKGZiV2lkdGggIT0gZmJCZWZvcmVXaWR0aCkge1xuICAgICAgICAgICQoZWwpLmh0bWwocGFnZVBsdWdpbkNvZGUoZmJXaWR0aCkpO1xuICAgICAgICAgIHdpbmRvdy5GQi5YRkJNTC5wYXJzZSgpO1xuICAgICAgICAgIGZiQmVmb3JlV2lkdGggPSBmYldpZHRoO1xuICAgICAgICB9XG4gICAgICB9LCAyMDApO1xuICAgIH0pO1xuICB9KVxufSk7XG4iLCIvKipcbiAqIOOCv+ODllxuICpcbiAqL1xuY29uc3QgVEFCX0NMQVNTICAgICAgICA9ICdqcy1wZi10YWInO1xuY29uc3QgVEFCX0JUTl9DTEFTUyAgICA9ICdqcy1wZi10YWItY2tib3gnO1xuY29uc3QgVEFCX0NPTlRfQ0xBU1MgICA9ICdqcy1wZi10YWItY29udCc7XG5jb25zdCBUQUJfQUNUSVZFX0NMQVNTID0gJ2lzLWFjdGl2ZSc7XG5jb25zdCBUQUJfTkFNRV9EQVRBICAgID0gJ2RhdGEtdGFiLW5hbWUnO1xuXG5jb25zdCBUYWJNYW5hZ2VyID0gKHRhcmdldCkgPT4ge1xuICBjb25zdCBUQUIgPSB0YXJnZXQ7XG5cbiAgY29uc3QgQlROcyA9IFtdLnNsaWNlLmNhbGwoVEFCLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke1RBQl9CVE5fQ0xBU1N9YCkpO1xuICBjb25zdCBDT05UcyA9IFtdLnNsaWNlLmNhbGwoVEFCLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke1RBQl9DT05UX0NMQVNTfWApKTtcblxuICBpZihCVE5zLmxlbmd0aCA9PT0gMCB8fCBDT05Ucy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICBjb25zdCBzZXRBY3RpdmVUYWIgPSAodGFiTmFtZSkgPT4ge1xuICAgIFRBQi5zZXRBdHRyaWJ1dGUoVEFCX05BTUVfREFUQSwgdGFiTmFtZSk7XG5cbiAgICBCVE5zLmZvckVhY2goYnRuID0+IHtcbiAgICAgIGlmKGJ0bi5nZXRBdHRyaWJ1dGUoVEFCX05BTUVfREFUQSkgPT09IHRhYk5hbWUpIHtcbiAgICAgICAgYnRuLmNsYXNzTGlzdC5hZGQoVEFCX0FDVElWRV9DTEFTUyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidG4uY2xhc3NMaXN0LnJlbW92ZShUQUJfQUNUSVZFX0NMQVNTKTtcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgQ09OVHMuZm9yRWFjaChjb250ID0+IHtcbiAgICAgIGlmKGNvbnQuZ2V0QXR0cmlidXRlKFRBQl9OQU1FX0RBVEEpID09PSB0YWJOYW1lKSB7XG4gICAgICAgIGNvbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgIGNvbnQuY2xhc3NMaXN0LmFkZChUQUJfQUNUSVZFX0NMQVNTKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgY29udC5jbGFzc0xpc3QucmVtb3ZlKFRBQl9BQ1RJVkVfQ0xBU1MpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3Qgb25DaGFuZ2UgPSAoZXYpID0+IHtcbiAgICBjb25zdCBjdXJyZW50ID0gZXYuY3VycmVudFRhcmdldDtcbiAgICBjb25zdCBhY3RpdmVUYWJOYW1lID0gY3VycmVudC5nZXRBdHRyaWJ1dGUoVEFCX05BTUVfREFUQSk7XG5cbiAgICBzZXRBY3RpdmVUYWIoYWN0aXZlVGFiTmFtZSk7XG4gIH1cblxuICAvKipcbiAgKiDjgqTjg5njg7Pjg4jjgbXjgohcbiAgKi9cbiAgY29uc3QgYWRkRXZlbnQgPSAoKSA9PiB7XG4gICAgQlROcy5mb3JFYWNoKGJ0biA9PiB7XG4gICAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgb25DaGFuZ2UpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICog5Yid5pyf5YyWXG4gICovXG4gIGNvbnN0IGluaXQgPSAoKSA9PiB7XG4gICAgYWRkRXZlbnQoKTtcblxuICAgIC8vIOacgOWIneOBruOCv+ODluOCkuOCouOCr+ODhuOCo+ODluOBq+OBmeOCi1xuICAgIEJUTnNbMF0uY2hlY2tlZCA9IHRydWU7XG4gICAgc2V0QWN0aXZlVGFiKEJUTnNbMF0uZ2V0QXR0cmlidXRlKFRBQl9OQU1FX0RBVEEpKTtcbiAgICAvLyBzZXRBY3RpdmVDdXJyaWN1bHVtKFRBQnNbMF0uZ2V0QXR0cmlidXRlKENVUlJJQ1VMVU1fTkFNX0RBVEEpKTtcbiAgfVxuICBpbml0KCk7XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24oKXtcbiAgW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtUQUJfQ0xBU1N9YCkpLmZvckVhY2godGFyZ2V0ID0+IHtcbiAgICBUYWJNYW5hZ2VyKHRhcmdldCk7XG4gIH0pXG59KTsiLCJ3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKCl7XG4gICQoJ2JvZHknKS5vbihcImNsaWNrXCIsICcuanMtcGYtdGFnLWRlbGV0ZS1idG4nLCBmdW5jdGlvbiAoKSB7XG4gICAgJCh0aGlzKS5wYXJlbnQoKS5yZW1vdmUoKTtcbiAgfSk7XG59KTsiLCJpbXBvcnQgRWxsaXBzaXMgZnJvbSAnZWxsaXBzaXMuanMnO1xuXG5jb25zdCBUUlVOQ0FURV9UQVJHRVRfQ0xBU1MgPSAnanMtcGYtdHJ1bmNhdGUnO1xuY29uc3QgVFJVTkNBVEVfTElORV9EQVRBICAgID0gJ2RhdGEtd29yZGNvdW50JztcblxuLyoqXG4gKiDopIfmlbDooYzmloflrZfliJfjga7plbfjgZXjgpLjg4jjg6rjg5/jg7PjgrDjgIHliqDlt6XjgZnjgotcbiAqL1xuY29uc3QgVHJ1bmNhdGVNYW5hZ2VyID0gKCkgPT4ge1xuICBjb25zdCB0cnVuY2F0ZXMgPSBbXTtcblxuICAvKipcbiAgICog44Oq44K144Kk44K644Kk44OZ44Oz44OI55m66KGM5pmC44Gr5Yem55CG44KS5a6f6KGMXG4gICAqL1xuICBjb25zdCBvblJlc2l6ZSA9ICgpID0+IHtcbiAgICB0cnVuY2F0ZXMuZm9yRWFjaCh0cnVuY2F0ZSA9PiB7XG4gICAgICB0cnVuY2F0ZS5lbC5pbm5lckhUTUwgPSB0cnVuY2F0ZS5vcmlnaW5UZXh0O1xuXG4gICAgICBjb25zdCBlbGxpcHNpcyA9IEVsbGlwc2lzKHtcbiAgICAgICAgbGluZXM6IHRydW5jYXRlLmVsLmdldEF0dHJpYnV0ZShUUlVOQ0FURV9MSU5FX0RBVEEpLFxuICAgICAgICByZXNwb25zaXZlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICBlbGxpcHNpcy5hZGQodHJ1bmNhdGUuZWwpO1xuICAgIH0pXG4gIH1cblxuICByZXR1cm4ge1xuICAgIC8qKlxuICAgICAqIOWHpueQhuWJjeOBruOCueOCv+OCpOODq+ioreWumuOAgeOBiuOCiOOBs0lURU1T44Gr6KaB57Sg44KS5qC857SNXG4gICAgICovXG4gICAgaW5pdDogKCkgPT4ge1xuICAgICAgW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtUUlVOQ0FURV9UQVJHRVRfQ0xBU1N9YCkpLmZvckVhY2godGFyZ2V0ID0+IHtcblxuICAgICAgICBjb25zdCBlbGxpcHNpcyA9IEVsbGlwc2lzKHtcbiAgICAgICAgICBsaW5lczogdGFyZ2V0LmdldEF0dHJpYnV0ZShUUlVOQ0FURV9MSU5FX0RBVEEpLFxuICAgICAgICAgIHJlc3BvbnNpdmU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBvcmlnaW5UZXh0ID0gdGFyZ2V0LmlubmVySFRNTDtcbiAgICAgICAgZWxsaXBzaXMuYWRkKHRhcmdldClcbiAgICBcbiAgICAgICAgdHJ1bmNhdGVzLnB1c2goe1xuICAgICAgICAgIGVsbGlwc2lzLFxuICAgICAgICAgIGVsOiB0YXJnZXQsXG4gICAgICAgICAgb3JpZ2luVGV4dDogb3JpZ2luVGV4dCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaWYod2luZG93LnJtKSB7XG4gICAgICAgIHdpbmRvdy5ybS5zZXRDYWxsYmFjayhvblJlc2l6ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24oKXtcbi8vICAgY29uc3QgdHJ1bmNhdGVNYW5hZ2VyID0gVHJ1bmNhdGVNYW5hZ2VyKCk7XG4vLyAgIHRydW5jYXRlTWFuYWdlci5pbml0KCk7XG4vLyB9KTtcbiIsIndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24oKXtcbiAgJChmdW5jdGlvbigpe1xuXG4gICAgLypcbiAgICAgICAgLmpzLXBmLXZhbGlkLWdyb3VwXG4gICAgICAgIOODkOODquODh+ODvOOCt+ODp+ODs+e1kOaenOOBq+OCiOOBo+OBpuODnOOCv+ODs+OBruOCouOCr+ODhuOCo+ODluODu+mdnuOCouOCr+ODhuOCo+ODluOCkuWIh+OCiuabv+OBiOOCi1xuXG4gICAgICAgIC5qcy1wZi12YWxpZC1ncm91cCDjga7lrZDlravopoHntKDjga4gLmpzLXBmLXZhbGlkLWdyb3VwLWl0ZW0g44GZ44G544Gm44Gu44OQ44Oq44OH44O844K344On44Oz44GM5ZCI5qC844GX44Gm44GE44KM44Gw44CBXG4gICAgICAgIC5qcy1wZi12YWxpZC1ncm91cCDjga7lrZDlravopoHntKDjga4gLmpzLXBmLXZhbGlkLWdyb3VwLWJ1dHRvbiDjga7ooajnpLrjg7vli5XkvZzjgYzjgqLjgq/jg4bjgqPjg5bljJbjgZXjgozjgotcblxuICAgICovXG4gICAgLy8ganMtcGYtdmFsaWQtZ3JvdXBcbiAgICBpZiAoICQoJy5qcy1wZi12YWxpZC1ncm91cCcpLmxlbmd0aCApe1xuICAgICAgY29uc3QgcGZWYWxpZGF0aW9uUnVsZXMgPSB7XG4gICAgICAgICdyZXF1aXJlZCc6IHtcbiAgICAgICAgICAnZXJyb3JNc2cnOiAn5YWl5Yqb44GV44KM44Gm44GE44G+44Gb44KT44CCJyxcbiAgICAgICAgICAnaXNWYWxpZCc6IGZ1bmN0aW9uKCRlbCl7XG4gICAgICAgICAgICByZXR1cm4gKCRlbC52YWwoKSAhPSAnJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAna2F0YWthbmEnOiB7XG4gICAgICAgICAgJ2Vycm9yTXNnJzogJ+WFqOinkuOCq+OCv+OCq+ODiuS7peWkluOBruaWh+Wtl+OBjOWQq+OBvuOCjOOBpuOBhOOBvuOBmScsXG4gICAgICAgICAgJ2lzVmFsaWQnOiBmdW5jdGlvbigkZWwpe1xuICAgICAgICAgICAgbGV0IG1hdGNoZXMgPSAkZWwudmFsKCkubWF0Y2goL1te44KhLeODtuODvOOAgF0vKTtcbiAgICAgICAgICAgIHJldHVybiAobnVsbCA9PSBtYXRjaGVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICdlbWFpbCc6IHtcbiAgICAgICAgICAnZXJyb3JNc2cnOiAn44Oh44O844Or44Ki44OJ44Os44K544Gu5pu45byP44GM5q2j44GX44GP44GC44KK44G+44Gb44KTJyxcbiAgICAgICAgICAnaXNWYWxpZCc6IGZ1bmN0aW9uICgkZWwpIHtcbiAgICAgICAgICAgIGlmICgkZWwudmFsKCkgPT09ICcnKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IG1hdGNoZXMgPSAkZWwudmFsKCkubWF0Y2goL15bYS16QS1aMC05Xy4rLV0rQChbYS16QS1aMC05XVthLXpBLVowLTktXSpbYS16QS1aMC05XSpcXC4pK1thLXpBLVpdezIsfSQvKTtcbiAgICAgICAgICAgIHJldHVybiAobnVsbCAhPSBtYXRjaGVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICdwaG9uZV9udW1iZXInOiB7XG4gICAgICAgICAgJ2Vycm9yTXNnJzogJ+mbu+ipseeVquWPt+OBruabuOW8j+OBjOato+OBl+OBj+OBguOCiuOBvuOBm+OCkycsXG4gICAgICAgICAgJ2lzVmFsaWQnOiBmdW5jdGlvbigkZWwpe1xuICAgICAgICAgICAgaWYgKCRlbC52YWwoKSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgbWF0Y2hlcyA9ICRlbC52YWwoKS5yZXBsYWNlKC9b4pSBLirigJAuKuKAlS4q77yNLipcXC0uKuODvC4qXFwtXS9naSwnJykubWF0Y2goL14oMFs1LTldMFswLTldezh9fDBbMS05XVsxLTldWzAtOV17N30pJC8pO1xuICAgICAgICAgICAgcmV0dXJuIChudWxsICE9IG1hdGNoZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgJCgnLmpzLXBmLXZhbGlkLWdyb3VwLWl0ZW0nKS5vbigna2V5dXAgY2hhbmdlIHBmSW5pdCB2aXJ0dWFsQ2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCAkaXRlbSA9ICQodGhpcyk7XG4gICAgICAgIGNvbnN0ICRncm91cCA9ICRpdGVtLmNsb3Nlc3QoJy5qcy1wZi12YWxpZC1ncm91cCcpO1xuICAgICAgICBsZXQgdmFsaWRTdGF0dXMgPSAkZ3JvdXAuZGF0YSgndmFsaWRTdGF0dXMnKTtcbiAgICAgICAgY29uc3QgcmVxdWlyZW1lbnRzID0gKCRpdGVtLmRhdGEoJ3ZhbGlkUmVxJykpLnNwbGl0KCcgJyk7XG4gICAgICAgIGxldCBlcnJvcnMgPSBbXTtcbiAgICAgICAgbGV0IHZhbGlkaXR5ID0gdHJ1ZTtcbiAgICAgICAgZm9yIChsZXQgaSBpbiByZXF1aXJlbWVudHMpe1xuICAgICAgICAgIGlmICghIHBmVmFsaWRhdGlvblJ1bGVzW3JlcXVpcmVtZW50c1tpXV0pIGNvbnRpbnVlO1xuICAgICAgICAgIGxldCBteVZhbGlkaXR5ID0gcGZWYWxpZGF0aW9uUnVsZXNbcmVxdWlyZW1lbnRzW2ldXS5pc1ZhbGlkKCRpdGVtKTtcbiAgICAgICAgICBpZiAobXlWYWxpZGl0eSA9PT0gZmFsc2Upe1xuICAgICAgICAgICAgdmFsaWRpdHkgPSBmYWxzZTtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKHBmVmFsaWRhdGlvblJ1bGVzW3JlcXVpcmVtZW50c1tpXV0uZXJyb3JNc2cpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAkaXRlbS5kYXRhKCd2YWxpZGl0eScsIHZhbGlkaXR5KTtcbiAgICAgICAgaWYgKHZhbGlkaXR5ID09PSBmYWxzZSAmJiB2YWxpZFN0YXR1cyAhPT0gJ2JlZm9yZUlucHV0JyAmJiAkaXRlbS5hdHRyKCdpZCcpICE9ICcnKSB7XG4gICAgICAgICAgJCgnLmpzLXBmLXZhbGlkLWdyb3VwLWVycm9yW2RhdGEtdmFsaWQtdGFyZ2V0PVwiIycgKyAkaXRlbS5hdHRyKCdpZCcpICsnXCJdJykuaHRtbChlcnJvcnMuam9pbignPGJyPicpKTtcbiAgICAgICAgfVxuICAgICAgICAkZ3JvdXAudHJpZ2dlcigncGZWYWxpZGF0ZScpO1xuICAgICAgfSk7XG5cbiAgICAgICQoJy5qcy1wZi12YWxpZC1ncm91cC1kYXRlIHNlbGVjdCcpLm9uKCdjaGFuZ2UgcGRJbml0JywgZnVuY3Rpb24oKXtcbiAgICAgICAgY29uc3QgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgICBjb25zdCAkZGF0ZUdyb3VwID0gJHRoaXMuY2xvc2VzdCgnLmpzLXBmLXZhbGlkLWdyb3VwLWRhdGUnKTtcbiAgICAgICAgY29uc3QgJGdyb3VwID0gJHRoaXMuY2xvc2VzdCgnLmpzLXBmLXZhbGlkLWdyb3VwJyk7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVtZW50cyA9ICRkYXRlR3JvdXAuZGF0YSgndmFsaWRSZXEnKS5zcGxpdCgnICcpO1xuICAgICAgICBsZXQgdmFsaWRpdHkgPSB0cnVlO1xuICAgICAgICBjb25zdCAkeWVhciA9ICRkYXRlR3JvdXAuZmluZCgnLmpzLXBmLXZhbGlkLWdyb3VwLWRhdGUteWVhcicpO1xuICAgICAgICBjb25zdCAkbW9udGggPSAkZGF0ZUdyb3VwLmZpbmQoJy5qcy1wZi12YWxpZC1ncm91cC1kYXRlLW1vbnRoJyk7XG4gICAgICAgIGNvbnN0ICRkYXkgPSAkZGF0ZUdyb3VwLmZpbmQoJy5qcy1wZi12YWxpZC1ncm91cC1kYXRlLWRheScpO1xuICAgICAgICBmb3IgKGxldCBpIGluIHJlcXVpcmVtZW50cyl7XG4gICAgICAgICAgaWYgKCByZXF1aXJlbWVudHNbaV0gPT09ICdyZXF1aXJlZC1kYXRlJyApe1xuICAgICAgICAgICAgaWYgKCAhKCR5ZWFyLnZhbCgpICYmICRtb250aC52YWwoKSAmJiAkZGF5LnZhbCgpKSApe1xuICAgICAgICAgICAgICB2YWxpZGl0eSA9IGZhbHNlO1xuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgIGxldCBteURhdGUgPSBuZXcgRGF0ZSgkeWVhci52YWwoKSwgJG1vbnRoLnZhbCgpLCAkZGF5LnZhbCgpKTtcbiAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgKG15RGF0ZS5nZXREYXRlKCkpID09PSAnbnVtYmVyJyAmJiAgaXNOYU4obXlEYXRlLmdldERhdGUoKSkpe1xuICAgICAgICAgICAgICAgIHZhbGlkaXR5ID0gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgJGRhdGVHcm91cC5kYXRhKCd2YWxpZGl0eScsdmFsaWRpdHkpO1xuICAgICAgICAkZ3JvdXAudHJpZ2dlcigncGZWYWxpZGF0ZScpO1xuICAgICAgfSk7XG5cbiAgICAgICQoJy5qcy1wZi12YWxpZC1ncm91cC1jaGVja2JveGVzIGlucHV0Jykub24oJ2NoYW5nZSBwZkluaXQnLCBmdW5jdGlvbigpe1xuICAgICAgICBjb25zdCAkdGhpcyA9ICQodGhpcyk7XG4gICAgICAgIGNvbnN0ICRib3hHcm91cCA9ICR0aGlzLmNsb3Nlc3QoJy5qcy1wZi12YWxpZC1ncm91cC1jaGVja2JveGVzJyk7XG4gICAgICAgIGNvbnN0ICRncm91cCA9ICR0aGlzLmNsb3Nlc3QoJy5qcy1wZi12YWxpZC1ncm91cCcpO1xuICAgICAgICBsZXQgcmVxdWlyZW1lbnRzID0gJGJveEdyb3VwLmRhdGEoJ3ZhbGlkUmVxJykuc3BsaXQoJyAnKTtcbiAgICAgICAgbGV0IHZhbGlkaXR5ID0gdHJ1ZTtcbiAgICAgICAgZm9yIChsZXQgaSBpbiByZXF1aXJlbWVudHMpe1xuICAgICAgICAgIGlmICggcmVxdWlyZW1lbnRzW2ldID09PSAnY2hlY2tlZC1hbnknICl7XG4gICAgICAgICAgICBpZiAoICRib3hHcm91cC5maW5kKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl06Y2hlY2tlZCxpbnB1dFt0eXBlPVwicmFkaW9cIl06Y2hlY2tlZCcpLmxlbmd0aCA8IDEgKXtcbiAgICAgICAgICAgICAgdmFsaWRpdHkgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgJGJveEdyb3VwLmRhdGEoJ3ZhbGlkaXR5Jyx2YWxpZGl0eSk7XG4gICAgICAgICRncm91cC50cmlnZ2VyKCdwZlZhbGlkYXRlJyk7XG4gICAgICB9KTtcblxuXG4gICAgICAkKCcuanMtcGYtdmFsaWQtZ3JvdXAnKS5vbigncGZWYWxpZGF0ZScsZnVuY3Rpb24oKXtcbiAgICAgICAgY29uc3QgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgICBsZXQgdmFsaWRpdHkgPSB0cnVlO1xuICAgICAgICAkdGhpcy5maW5kKCcuanMtcGYtdmFsaWQtZ3JvdXAtaXRlbSwuanMtcGYtdmFsaWQtZ3JvdXAtY2hlY2tib3hlcywuanMtcGYtdmFsaWQtZ3JvdXAtZGF0ZScpLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgICAgICBpZiAoICQodGhpcykuZGF0YSgndmFsaWRpdHknKSA9PT0gZmFsc2UgKXtcbiAgICAgICAgICAgIHZhbGlkaXR5ID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbGV0ICRidXR0b24gPSAkdGhpcy5maW5kKCcuanMtcGYtdmFsaWQtZ3JvdXAtYnV0dG9uJyk7XG4gICAgICAgIGlmICggdmFsaWRpdHkgKXtcbiAgICAgICAgICAkdGhpcy5kYXRhKCd2YWxpZFN0YXR1cycsJ2FmdGVySW5wdXQnKTtcbiAgICAgICAgICAkYnV0dG9uLnJlbW92ZUNsYXNzKCdwZi1idXR0b24tLWMtaW5hY3RpdmUnKS5hZGRDbGFzcygncGYtYnV0dG9uLS1jLXByaW1hcnknKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAkYnV0dG9uLnJlbW92ZUNsYXNzKCdwZi1idXR0b24tLWMtcHJpbWFyeScpLmFkZENsYXNzKCdwZi1idXR0b24tLWMtaW5hY3RpdmUnKS5hdHRyKCdkaXNhYmxlZCcsJ2Rpc2FibGVkJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGpzLXBmLXZhbGlkLWdyb3VwLWRhdGVcblxuICAgICQoJy5qcy1wZi12YWxpZC1ncm91cC1kYXRlJykuZWFjaChmdW5jdGlvbigpe1xuICAgICAgY29uc3QgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgY29uc3QgJHllYXIgPSAkdGhpcy5maW5kKCcuanMtcGYtdmFsaWQtZ3JvdXAtZGF0ZS15ZWFyJyk7XG4gICAgICBjb25zdCAkbW9udGggPSAkdGhpcy5maW5kKCcuanMtcGYtdmFsaWQtZ3JvdXAtZGF0ZS1tb250aCcpO1xuICAgICAgY29uc3QgJGRheSA9ICR0aGlzLmZpbmQoJy5qcy1wZi12YWxpZC1ncm91cC1kYXRlLWRheScpO1xuICAgICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgbGV0IGRlZmF1bHRZZWFyID0gdG9kYXkuZ2V0RnVsbFllYXIoKSAtIDQwO1xuICAgICAgZGVmYXVsdERhdGUgPSBmYWxzZTtcbiAgICAgIGlmICggJHRoaXMuZGF0YSgnZGVmYXVsdERhdGUnKSApe1xuICAgICAgICBkZWZhdWx0RGF0ZSA9IG5ldyBEYXRlKCR0aGlzLmRhdGEoJ2RlZmF1bHREYXRlJykpO1xuICAgICAgICBkZWZhdWx0WWVhciA9IGRlZmF1bHREYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGZvciAobGV0IGkgPSAxOTQwOyBpIDwgdG9kYXkuZ2V0RnVsbFllYXIoKTsgaSsrKXtcbiAgICAgICAgJCgnPG9wdGlvbi8+JykudGV4dChpICsgJ+W5tCcpLmF0dHIoJ3ZhbHVlJyxpKS5hcHBlbmRUbygkeWVhcik7XG4gICAgICB9XG4gICAgICAkeWVhci52YWwoZGVmYXVsdFllYXIpO1xuICAgICAgZm9yIChsZXQgaSA9IDE7IGk8PTEyOyBpKyspe1xuICAgICAgICAkKCc8b3B0aW9uLz4nKS50ZXh0KGkgKyAn5pyIJykuYXR0cigndmFsdWUnLGkpLmFwcGVuZFRvKCRtb250aCk7XG4gICAgICB9XG4gICAgICBjb25zdCBnZXRMYXN0RGF5ID0gZnVuY3Rpb24gKHllYXIsIG1vbnRoKXtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoLCAwKS5nZXREYXRlKCk7XG4gICAgICB9O1xuICAgICAgJHRoaXMub24oJ2luaXREYXlzJyxmdW5jdGlvbigpe1xuICAgICAgICAkZGF5Lmh0bWwoJzxvcHRpb24gdmFsdWU9XCJcIj7ml6U8L29wdGlvbj4nKTtcbiAgICAgICAgaWYgKCAkeWVhci52YWwoKSAmJiAkbW9udGgudmFsKCkgKXtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaTw9IGdldExhc3REYXkoJHllYXIudmFsKCksICRtb250aC52YWwoKSk7IGkrKyl7XG4gICAgICAgICAgICAkKCc8b3B0aW9uLz4nKS50ZXh0KGkgKyAn5pelJykuYXR0cigndmFsdWUnLGkpLmFwcGVuZFRvKCRkYXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoIGRlZmF1bHREYXRlICl7XG4gICAgICAgICRtb250aC52YWwoZGVmYXVsdERhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAkdGhpcy50cmlnZ2VyKCdpbml0RGF5cycpO1xuICAgICAgICAkZGF5LnZhbChkZWZhdWx0RGF0ZS5nZXREYXRlKCkpO1xuICAgICAgfVxuICAgICAgY29uc3QgJGdyb3VwID0gJHRoaXMuY2xvc2VzdCgnLmpzLXBmLXZhbGlkLWdyb3VwJyk7XG4gICAgICAkeWVhci5vbignY2hhbmdlJyxmdW5jdGlvbigpe1xuICAgICAgICAkdGhpcy50cmlnZ2VyKCdpbml0RGF5cycpO1xuICAgICAgICAkZ3JvdXAudHJpZ2dlcigncGZWYWxpZGF0ZScpO1xuICAgICAgfSk7XG4gICAgICAkbW9udGgub24oJ2NoYW5nZScsZnVuY3Rpb24oKXtcbiAgICAgICAgJHRoaXMudHJpZ2dlcignaW5pdERheXMnKTtcbiAgICAgICAgJGdyb3VwLnRyaWdnZXIoJ3BmVmFsaWRhdGUnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgICAvLyDliJ3mnJ/ljJZcbiAgICAkKCcuanMtcGYtdmFsaWQtZ3JvdXAtaXRlbSwnXG4gICAgICAgICsnLmpzLXBmLXZhbGlkLWdyb3VwLWNoZWNrYm94IGlucHV0OmZpcnN0LCdcbiAgICAgICAgKycuanMtcGYtdmFsaWQtZ3JvdXAtZGF0ZSBzZWxlY3Q6Zmlyc3QnKS50cmlnZ2VyKCdwZkluaXQnKS5jbG9zZXN0KCcuanMtcGYtdmFsaWRhdGUtZ3JvdXAnKS50cmlnZ2VyKCdwZlZhbGlkYXRlJyk7XG5cbiAgICAvLyDpg7Xkvr/nlarlj7dcbiAgICBpZiAoICQoJy5qcy1wZi12YWxpZC1wb3N0YWwnKS5sZW5ndGggKXtcbiAgICAgIFxuICAgICAgbGV0IHByZWZzID0ge307XG4gICAgICAkLmFqYXgoe1xuICAgICAgICAndHlwZSc6ICdHRVQnLFxuICAgICAgICAndXJsJzogJ2h0dHBzOi8vZ2VvbG9uaWEuZ2l0aHViLmlvL2phcGFuZXNlLWFkZHJlc3Nlcy9hcGkvamEuanNvbicsXG4gICAgICAgICdzdWNjZXNzJzogZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgICAgcHJlZnMgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgJCgnLmpzLXBmLXZhbGlkLXBvc3RhbCcpLmFwcGVuZCgnPHNjcmlwdCBzcmM9XCJodHRwczovL2FqYXh6aXAzLmdpdGh1Yi5pby9hamF4emlwMy5qc1wiIGNoYXJzZXQ9XCJVVEYtOFwiPjwvc2NyaXB0PicpO1xuICAgICAgJCgnLmpzLXBmLXZhbGlkLXBvc3RhbCcpLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgICAgY29uc3QgJHBvc3RhbCA9ICQodGhpcyk7XG4gICAgICAgIGNvbnN0ICR6aXBjb2RlID0gJHBvc3RhbC5maW5kKCcuanMtcGYtdmFsaWQtcG9zdGFsLXppcGNvZGUnKTtcbiAgICAgICAgY29uc3QgJHByZWYgPSAkcG9zdGFsLmZpbmQoJy5qcy1wZi12YWxpZC1wb3N0YWwtcHJlZicpO1xuICAgICAgICBjb25zdCAkY2l0eVByZSA9ICRwb3N0YWwuZmluZCgnLmpzLXBmLXZhbGlkLXBvc3RhbC1jaXR5X3ByZScpO1xuICAgICAgICBjb25zdCAkY2l0eSA9ICRwb3N0YWwuZmluZCgnLmpzLXBmLXZhbGlkLXBvc3RhbC1jaXR5Jyk7XG4gICAgICAgIGNvbnN0ICRhZGRyZXNzID0gJHBvc3RhbC5maW5kKCcuanMtcGYtdmFsaWQtcG9zdGFsLWFkZHJlc3MnKTtcbiAgICAgICAgJHByZWYub24oJ2NoYW5nZScsIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgaWYgKCAkcHJlZi52YWwoKSAhPSAnJyAmJiBwcmVmc1skcHJlZi52YWwoKV0gKXtcbiAgICAgICAgICAgIGxldCB0aGlzUHJlZiA9IHByZWZzWyRwcmVmLnZhbCgpXTtcbiAgICAgICAgICAgICRjaXR5Lmh0bWwoJzxvcHRpb24gdmFsdWU9XCJcIj7luILljLrnlLrmnZE8L29wdGlvbj4nKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgaW4gdGhpc1ByZWYpIHtcbiAgICAgICAgICAgICAgJCgnPG9wdGlvbi8+JykudGV4dCh0aGlzUHJlZltpXSkuYXR0cigndmFsdWUnLHRoaXNQcmVmW2ldKS5hcHBlbmRUbygkY2l0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgJHppcGNvZGUub24oJ2tleXVwIGNoYW5nZScsZnVuY3Rpb24oKXtcbiAgICAgICAgICBBamF4WmlwMy56aXAyYWRkciggJHppcGNvZGUuYXR0cignbmFtZScpLCBudWxsLCAkcHJlZi5hdHRyKCduYW1lJyksICRjaXR5UHJlLmF0dHIoJ25hbWUnKSwgJGFkZHJlc3MuYXR0cignbmFtZScpLCAkYWRkcmVzcy5hdHRyKCduYW1lJykgKTtcbiAgICAgICAgICAkcHJlZi50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgICAgICAgICAkY2l0eS50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgICAgICAgICAkY2l0eS52YWwoJGNpdHlQcmUudmFsKCkpO1xuICAgICAgICAgICRjaXR5LnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgfVxuICAgIFxuICAgIC8qIGpzLXBmLXBhc3N3b3JkXG5cbiAgICDjg5Hjgrnjg6/jg7zjg4njga7ooajnpLrjg7vpnZ7ooajnpLrliIfjgormm7/jgYhcblxuXG4gICAgKi9cbiAgICBpZiAoICQoJy5qcy1wZi1wYXNzd29yZC10b2dnbGUnKS5sZW5ndGggKXtcbiAgICAgIGNvbnN0IHBmUGFzc3dvcmRUeXBlcyA9IFsncGFzc3dvcmQnLCd0ZXh0J107XG4gICAgICBsZXQgcGZQYXNzd29yZEluaXQgPSBmdW5jdGlvbiAoKXtcbiAgICAgICAgY29uc3QgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgICBsZXQgbiA9ICgkdGhpcy5kYXRhKCd2aXNpYmlsaXR5JykgPT0gMSApID8gMSA6IDAgO1xuICAgICAgICAkKCR0aGlzLmRhdGEoJ3Bhc3N3b3JkVGFyZ2V0JykpLmF0dHIoJ3R5cGUnLHBmUGFzc3dvcmRUeXBlc1tuXSk7XG4gICAgICB9XG4gICAgICAkKCcuanMtcGYtcGFzc3dvcmQtdG9nZ2xlJykuZWFjaChwZlBhc3N3b3JkSW5pdCk7XG4gICAgICAkKCcuanMtcGYtcGFzc3dvcmQtdG9nZ2xlJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKXtcbiAgICAgICAgY29uc3QgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgICBsZXQgdmlzaWJpbGl0eSA9ICR0aGlzLmRhdGEoJ3Zpc2liaWxpdHknKTtcbiAgICAgICAgJHRoaXMuZGF0YSgndmlzaWJpbGl0eScsKHZpc2liaWxpdHkgPT0gMSA/IDAgOiAxKSk7XG4gICAgICAgICR0aGlzLmVhY2gocGZQYXNzd29yZEluaXQpO1xuICAgICAgfSk7XG4gICAgfVxuXG5cbiAgfSk7XG59KTtcbiIsIi8qXG5DU1MgQnJvd3NlciBTZWxlY3RvciB2MC40LjAgKE5vdiAwMiwgMjAxMClcblJhZmFlbCBMaW1hIChodHRwOi8vcmFmYWVsLmFkbS5icilcbmh0dHA6Ly9yYWZhZWwuYWRtLmJyL2Nzc19icm93c2VyX3NlbGVjdG9yXG5MaWNlbnNlOiBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS8yLjUvXG5Db250cmlidXRvcnM6IGh0dHA6Ly9yYWZhZWwuYWRtLmJyL2Nzc19icm93c2VyX3NlbGVjdG9yI2NvbnRyaWJ1dG9yc1xuKi9cbmZ1bmN0aW9uIGNzc19icm93c2VyX3NlbGVjdG9yKHUpIHsgdmFyIHVhID0gdS50b0xvd2VyQ2FzZSgpLCBpcyA9IGZ1bmN0aW9uICh0KSB7IHJldHVybiB1YS5pbmRleE9mKHQpID4gLTEgfSwgZyA9ICdnZWNrbycsIHcgPSAnd2Via2l0JywgcyA9ICdzYWZhcmknLCBvID0gJ29wZXJhJywgbSA9ICdtb2JpbGUnLCBoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBiID0gWyghKC9vcGVyYXx3ZWJ0di9pLnRlc3QodWEpKSAmJiAvbXNpZVxccyhcXGQpLy50ZXN0KHVhKSkgPyAoJ2llIGllJyArIFJlZ0V4cC4kMSkgOiBpcygnZmlyZWZveC8yJykgPyBnICsgJyBmZjInIDogaXMoJ2ZpcmVmb3gvMy41JykgPyBnICsgJyBmZjMgZmYzXzUnIDogaXMoJ2ZpcmVmb3gvMy42JykgPyBnICsgJyBmZjMgZmYzXzYnIDogaXMoJ2ZpcmVmb3gvMycpID8gZyArICcgZmYzJyA6IGlzKCdnZWNrby8nKSA/IGcgOiBpcygnb3BlcmEnKSA/IG8gKyAoL3ZlcnNpb25cXC8oXFxkKykvLnRlc3QodWEpID8gJyAnICsgbyArIFJlZ0V4cC4kMSA6ICgvb3BlcmEoXFxzfFxcLykoXFxkKykvLnRlc3QodWEpID8gJyAnICsgbyArIFJlZ0V4cC4kMiA6ICcnKSkgOiBpcygna29ucXVlcm9yJykgPyAna29ucXVlcm9yJyA6IGlzKCdibGFja2JlcnJ5JykgPyBtICsgJyBibGFja2JlcnJ5JyA6IGlzKCdhbmRyb2lkJykgPyBtICsgJyBhbmRyb2lkJyA6IGlzKCdjaHJvbWUnKSA/IHcgKyAnIGNocm9tZScgOiBpcygnaXJvbicpID8gdyArICcgaXJvbicgOiBpcygnYXBwbGV3ZWJraXQvJykgPyB3ICsgJyAnICsgcyArICgvdmVyc2lvblxcLyhcXGQrKS8udGVzdCh1YSkgPyAnICcgKyBzICsgUmVnRXhwLiQxIDogJycpIDogaXMoJ21vemlsbGEvJykgPyBnIDogJycsIGlzKCdqMm1lJykgPyBtICsgJyBqMm1lJyA6IGlzKCdpcGhvbmUnKSA/IG0gKyAnIGlwaG9uZScgOiBpcygnaXBvZCcpID8gbSArICcgaXBvZCcgOiBpcygnaXBhZCcpID8gbSArICcgaXBhZCcgOiBpcygnbWFjJykgPyAnbWFjJyA6IGlzKCdkYXJ3aW4nKSA/ICdtYWMnIDogaXMoJ3dlYnR2JykgPyAnd2VidHYnIDogaXMoJ3dpbicpID8gJ3dpbicgKyAoaXMoJ3dpbmRvd3MgbnQgNi4wJykgPyAnIHZpc3RhJyA6ICcnKSA6IGlzKCdmcmVlYnNkJykgPyAnZnJlZWJzZCcgOiAoaXMoJ3gxMScpIHx8IGlzKCdsaW51eCcpKSA/ICdsaW51eCcgOiAnJywgJ2pzJ107IGMgPSBiLmpvaW4oJyAnKTsgaC5jbGFzc05hbWUgKz0gJyAnICsgYzsgcmV0dXJuIGM7IH07IGNzc19icm93c2VyX3NlbGVjdG9yKG5hdmlnYXRvci51c2VyQWdlbnQpOyIsIi8qISBqUXVlcnkgVUkgLSB2MS4xMy4wIC0gMjAyMS0xMi0yN1xuKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4qIEluY2x1ZGVzOiB3aWRnZXQuanMsIHBvc2l0aW9uLmpzLCBrZXljb2RlLmpzLCB1bmlxdWUtaWQuanMsIHdpZGdldHMvYXV0b2NvbXBsZXRlLmpzLCB3aWRnZXRzL2RhdGVwaWNrZXIuanMsIHdpZGdldHMvbWVudS5qc1xuKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yczsgTGljZW5zZWQgTUlUICovXG5cbiFmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjtcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImpxdWVyeVwiXSxlKTplKGpRdWVyeSl9KGZ1bmN0aW9uKEcpe1widXNlIHN0cmljdFwiO0cudWk9Ry51aXx8e307Ry51aS52ZXJzaW9uPVwiMS4xMy4wXCI7dmFyIGEsaT0wLHI9QXJyYXkucHJvdG90eXBlLmhhc093blByb3BlcnR5LG89QXJyYXkucHJvdG90eXBlLnNsaWNlO0cuY2xlYW5EYXRhPShhPUcuY2xlYW5EYXRhLGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxpLHM9MDtudWxsIT0oaT1lW3NdKTtzKyspKHQ9Ry5fZGF0YShpLFwiZXZlbnRzXCIpKSYmdC5yZW1vdmUmJkcoaSkudHJpZ2dlckhhbmRsZXIoXCJyZW1vdmVcIik7YShlKX0pLEcud2lkZ2V0PWZ1bmN0aW9uKGUsaSx0KXt2YXIgcyxhLG4scj17fSxvPWUuc3BsaXQoXCIuXCIpWzBdLGw9bytcIi1cIisoZT1lLnNwbGl0KFwiLlwiKVsxXSk7cmV0dXJuIHR8fCh0PWksaT1HLldpZGdldCksQXJyYXkuaXNBcnJheSh0KSYmKHQ9Ry5leHRlbmQuYXBwbHkobnVsbCxbe31dLmNvbmNhdCh0KSkpLEcuZXhwci5wc2V1ZG9zW2wudG9Mb3dlckNhc2UoKV09ZnVuY3Rpb24oZSl7cmV0dXJuISFHLmRhdGEoZSxsKX0sR1tvXT1HW29dfHx7fSxzPUdbb11bZV0sYT1HW29dW2VdPWZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuX2NyZWF0ZVdpZGdldClyZXR1cm4gbmV3IGEoZSx0KTthcmd1bWVudHMubGVuZ3RoJiZ0aGlzLl9jcmVhdGVXaWRnZXQoZSx0KX0sRy5leHRlbmQoYSxzLHt2ZXJzaW9uOnQudmVyc2lvbixfcHJvdG86Ry5leHRlbmQoe30sdCksX2NoaWxkQ29uc3RydWN0b3JzOltdfSksKG49bmV3IGkpLm9wdGlvbnM9Ry53aWRnZXQuZXh0ZW5kKHt9LG4ub3B0aW9ucyksRy5lYWNoKHQsZnVuY3Rpb24odCxzKXtmdW5jdGlvbiBhKCl7cmV0dXJuIGkucHJvdG90eXBlW3RdLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBuKGUpe3JldHVybiBpLnByb3RvdHlwZVt0XS5hcHBseSh0aGlzLGUpfXJbdF09XCJmdW5jdGlvblwiPT10eXBlb2Ygcz9mdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5fc3VwZXIsaT10aGlzLl9zdXBlckFwcGx5O3JldHVybiB0aGlzLl9zdXBlcj1hLHRoaXMuX3N1cGVyQXBwbHk9bixlPXMuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX3N1cGVyPXQsdGhpcy5fc3VwZXJBcHBseT1pLGV9OnN9KSxhLnByb3RvdHlwZT1HLndpZGdldC5leHRlbmQobix7d2lkZ2V0RXZlbnRQcmVmaXg6cyYmbi53aWRnZXRFdmVudFByZWZpeHx8ZX0scix7Y29uc3RydWN0b3I6YSxuYW1lc3BhY2U6byx3aWRnZXROYW1lOmUsd2lkZ2V0RnVsbE5hbWU6bH0pLHM/KEcuZWFjaChzLl9jaGlsZENvbnN0cnVjdG9ycyxmdW5jdGlvbihlLHQpe3ZhciBpPXQucHJvdG90eXBlO0cud2lkZ2V0KGkubmFtZXNwYWNlK1wiLlwiK2kud2lkZ2V0TmFtZSxhLHQuX3Byb3RvKX0pLGRlbGV0ZSBzLl9jaGlsZENvbnN0cnVjdG9ycyk6aS5fY2hpbGRDb25zdHJ1Y3RvcnMucHVzaChhKSxHLndpZGdldC5icmlkZ2UoZSxhKSxhfSxHLndpZGdldC5leHRlbmQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LGkscz1vLmNhbGwoYXJndW1lbnRzLDEpLGE9MCxuPXMubGVuZ3RoO2E8bjthKyspZm9yKHQgaW4gc1thXSlpPXNbYV1bdF0sci5jYWxsKHNbYV0sdCkmJnZvaWQgMCE9PWkmJihHLmlzUGxhaW5PYmplY3QoaSk/ZVt0XT1HLmlzUGxhaW5PYmplY3QoZVt0XSk/Ry53aWRnZXQuZXh0ZW5kKHt9LGVbdF0saSk6Ry53aWRnZXQuZXh0ZW5kKHt9LGkpOmVbdF09aSk7cmV0dXJuIGV9LEcud2lkZ2V0LmJyaWRnZT1mdW5jdGlvbihuLHQpe3ZhciByPXQucHJvdG90eXBlLndpZGdldEZ1bGxOYW1lfHxuO0cuZm5bbl09ZnVuY3Rpb24oaSl7dmFyIGU9XCJzdHJpbmdcIj09dHlwZW9mIGkscz1vLmNhbGwoYXJndW1lbnRzLDEpLGE9dGhpcztyZXR1cm4gZT90aGlzLmxlbmd0aHx8XCJpbnN0YW5jZVwiIT09aT90aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZSx0PUcuZGF0YSh0aGlzLHIpO3JldHVyblwiaW5zdGFuY2VcIj09PWk/KGE9dCwhMSk6dD9cImZ1bmN0aW9uXCIhPXR5cGVvZiB0W2ldfHxcIl9cIj09PWkuY2hhckF0KDApP0cuZXJyb3IoXCJubyBzdWNoIG1ldGhvZCAnXCIraStcIicgZm9yIFwiK24rXCIgd2lkZ2V0IGluc3RhbmNlXCIpOihlPXRbaV0uYXBwbHkodCxzKSkhPT10JiZ2b2lkIDAhPT1lPyhhPWUmJmUuanF1ZXJ5P2EucHVzaFN0YWNrKGUuZ2V0KCkpOmUsITEpOnZvaWQgMDpHLmVycm9yKFwiY2Fubm90IGNhbGwgbWV0aG9kcyBvbiBcIituK1wiIHByaW9yIHRvIGluaXRpYWxpemF0aW9uOyBhdHRlbXB0ZWQgdG8gY2FsbCBtZXRob2QgJ1wiK2krXCInXCIpfSk6YT12b2lkIDA6KHMubGVuZ3RoJiYoaT1HLndpZGdldC5leHRlbmQuYXBwbHkobnVsbCxbaV0uY29uY2F0KHMpKSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9Ry5kYXRhKHRoaXMscik7ZT8oZS5vcHRpb24oaXx8e30pLGUuX2luaXQmJmUuX2luaXQoKSk6Ry5kYXRhKHRoaXMscixuZXcgdChpLHRoaXMpKX0pKSxhfX0sRy5XaWRnZXQ9ZnVuY3Rpb24oKXt9LEcuV2lkZ2V0Ll9jaGlsZENvbnN0cnVjdG9ycz1bXSxHLldpZGdldC5wcm90b3R5cGU9e3dpZGdldE5hbWU6XCJ3aWRnZXRcIix3aWRnZXRFdmVudFByZWZpeDpcIlwiLGRlZmF1bHRFbGVtZW50OlwiPGRpdj5cIixvcHRpb25zOntjbGFzc2VzOnt9LGRpc2FibGVkOiExLGNyZWF0ZTpudWxsfSxfY3JlYXRlV2lkZ2V0OmZ1bmN0aW9uKGUsdCl7dD1HKHR8fHRoaXMuZGVmYXVsdEVsZW1lbnR8fHRoaXMpWzBdLHRoaXMuZWxlbWVudD1HKHQpLHRoaXMudXVpZD1pKyssdGhpcy5ldmVudE5hbWVzcGFjZT1cIi5cIit0aGlzLndpZGdldE5hbWUrdGhpcy51dWlkLHRoaXMuYmluZGluZ3M9RygpLHRoaXMuaG92ZXJhYmxlPUcoKSx0aGlzLmZvY3VzYWJsZT1HKCksdGhpcy5jbGFzc2VzRWxlbWVudExvb2t1cD17fSx0IT09dGhpcyYmKEcuZGF0YSh0LHRoaXMud2lkZ2V0RnVsbE5hbWUsdGhpcyksdGhpcy5fb24oITAsdGhpcy5lbGVtZW50LHtyZW1vdmU6ZnVuY3Rpb24oZSl7ZS50YXJnZXQ9PT10JiZ0aGlzLmRlc3Ryb3koKX19KSx0aGlzLmRvY3VtZW50PUcodC5zdHlsZT90Lm93bmVyRG9jdW1lbnQ6dC5kb2N1bWVudHx8dCksdGhpcy53aW5kb3c9Ryh0aGlzLmRvY3VtZW50WzBdLmRlZmF1bHRWaWV3fHx0aGlzLmRvY3VtZW50WzBdLnBhcmVudFdpbmRvdykpLHRoaXMub3B0aW9ucz1HLndpZGdldC5leHRlbmQoe30sdGhpcy5vcHRpb25zLHRoaXMuX2dldENyZWF0ZU9wdGlvbnMoKSxlKSx0aGlzLl9jcmVhdGUoKSx0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuX3NldE9wdGlvbkRpc2FibGVkKHRoaXMub3B0aW9ucy5kaXNhYmxlZCksdGhpcy5fdHJpZ2dlcihcImNyZWF0ZVwiLG51bGwsdGhpcy5fZ2V0Q3JlYXRlRXZlbnREYXRhKCkpLHRoaXMuX2luaXQoKX0sX2dldENyZWF0ZU9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm57fX0sX2dldENyZWF0ZUV2ZW50RGF0YTpHLm5vb3AsX2NyZWF0ZTpHLm5vb3AsX2luaXQ6Ry5ub29wLGRlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgaT10aGlzO3RoaXMuX2Rlc3Ryb3koKSxHLmVhY2godGhpcy5jbGFzc2VzRWxlbWVudExvb2t1cCxmdW5jdGlvbihlLHQpe2kuX3JlbW92ZUNsYXNzKHQsZSl9KSx0aGlzLmVsZW1lbnQub2ZmKHRoaXMuZXZlbnROYW1lc3BhY2UpLnJlbW92ZURhdGEodGhpcy53aWRnZXRGdWxsTmFtZSksdGhpcy53aWRnZXQoKS5vZmYodGhpcy5ldmVudE5hbWVzcGFjZSkucmVtb3ZlQXR0cihcImFyaWEtZGlzYWJsZWRcIiksdGhpcy5iaW5kaW5ncy5vZmYodGhpcy5ldmVudE5hbWVzcGFjZSl9LF9kZXN0cm95Okcubm9vcCx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50fSxvcHRpb246ZnVuY3Rpb24oZSx0KXt2YXIgaSxzLGEsbj1lO2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiBHLndpZGdldC5leHRlbmQoe30sdGhpcy5vcHRpb25zKTtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlpZihuPXt9LGU9KGk9ZS5zcGxpdChcIi5cIikpLnNoaWZ0KCksaS5sZW5ndGgpe2ZvcihzPW5bZV09Ry53aWRnZXQuZXh0ZW5kKHt9LHRoaXMub3B0aW9uc1tlXSksYT0wO2E8aS5sZW5ndGgtMTthKyspc1tpW2FdXT1zW2lbYV1dfHx7fSxzPXNbaVthXV07aWYoZT1pLnBvcCgpLDE9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT1zW2VdP251bGw6c1tlXTtzW2VdPXR9ZWxzZXtpZigxPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdm9pZCAwPT09dGhpcy5vcHRpb25zW2VdP251bGw6dGhpcy5vcHRpb25zW2VdO25bZV09dH1yZXR1cm4gdGhpcy5fc2V0T3B0aW9ucyhuKSx0aGlzfSxfc2V0T3B0aW9uczpmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gZSl0aGlzLl9zZXRPcHRpb24odCxlW3RdKTtyZXR1cm4gdGhpc30sX3NldE9wdGlvbjpmdW5jdGlvbihlLHQpe3JldHVyblwiY2xhc3Nlc1wiPT09ZSYmdGhpcy5fc2V0T3B0aW9uQ2xhc3Nlcyh0KSx0aGlzLm9wdGlvbnNbZV09dCxcImRpc2FibGVkXCI9PT1lJiZ0aGlzLl9zZXRPcHRpb25EaXNhYmxlZCh0KSx0aGlzfSxfc2V0T3B0aW9uQ2xhc3NlczpmdW5jdGlvbihlKXt2YXIgdCxpLHM7Zm9yKHQgaW4gZSlzPXRoaXMuY2xhc3Nlc0VsZW1lbnRMb29rdXBbdF0sZVt0XSE9PXRoaXMub3B0aW9ucy5jbGFzc2VzW3RdJiZzJiZzLmxlbmd0aCYmKGk9RyhzLmdldCgpKSx0aGlzLl9yZW1vdmVDbGFzcyhzLHQpLGkuYWRkQ2xhc3ModGhpcy5fY2xhc3Nlcyh7ZWxlbWVudDppLGtleXM6dCxjbGFzc2VzOmUsYWRkOiEwfSkpKX0sX3NldE9wdGlvbkRpc2FibGVkOmZ1bmN0aW9uKGUpe3RoaXMuX3RvZ2dsZUNsYXNzKHRoaXMud2lkZ2V0KCksdGhpcy53aWRnZXRGdWxsTmFtZStcIi1kaXNhYmxlZFwiLG51bGwsISFlKSxlJiYodGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5ob3ZlcmFibGUsbnVsbCxcInVpLXN0YXRlLWhvdmVyXCIpLHRoaXMuX3JlbW92ZUNsYXNzKHRoaXMuZm9jdXNhYmxlLG51bGwsXCJ1aS1zdGF0ZS1mb2N1c1wiKSl9LGVuYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZXRPcHRpb25zKHtkaXNhYmxlZDohMX0pfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NldE9wdGlvbnMoe2Rpc2FibGVkOiEwfSl9LF9jbGFzc2VzOmZ1bmN0aW9uKGEpe3ZhciBuPVtdLHI9dGhpcztmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBpLHM9MDtzPGUubGVuZ3RoO3MrKylpPXIuY2xhc3Nlc0VsZW1lbnRMb29rdXBbZVtzXV18fEcoKSxpPWEuYWRkPyhhLmVsZW1lbnQuZWFjaChmdW5jdGlvbihlLHQpe0cubWFwKHIuY2xhc3Nlc0VsZW1lbnRMb29rdXAsZnVuY3Rpb24oZSl7cmV0dXJuIGV9KS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzKHQpfSl8fHIuX29uKEcodCkse3JlbW92ZTpcIl91bnRyYWNrQ2xhc3Nlc0VsZW1lbnRcIn0pfSksRyhHLnVuaXF1ZVNvcnQoaS5nZXQoKS5jb25jYXQoYS5lbGVtZW50LmdldCgpKSkpKTpHKGkubm90KGEuZWxlbWVudCkuZ2V0KCkpLHIuY2xhc3Nlc0VsZW1lbnRMb29rdXBbZVtzXV09aSxuLnB1c2goZVtzXSksdCYmYS5jbGFzc2VzW2Vbc11dJiZuLnB1c2goYS5jbGFzc2VzW2Vbc11dKX1yZXR1cm4oYT1HLmV4dGVuZCh7ZWxlbWVudDp0aGlzLmVsZW1lbnQsY2xhc3Nlczp0aGlzLm9wdGlvbnMuY2xhc3Nlc3x8e319LGEpKS5rZXlzJiZlKGEua2V5cy5tYXRjaCgvXFxTKy9nKXx8W10sITApLGEuZXh0cmEmJmUoYS5leHRyYS5tYXRjaCgvXFxTKy9nKXx8W10pLG4uam9pbihcIiBcIil9LF91bnRyYWNrQ2xhc3Nlc0VsZW1lbnQ6ZnVuY3Rpb24oaSl7dmFyIHM9dGhpcztHLmVhY2gocy5jbGFzc2VzRWxlbWVudExvb2t1cCxmdW5jdGlvbihlLHQpey0xIT09Ry5pbkFycmF5KGkudGFyZ2V0LHQpJiYocy5jbGFzc2VzRWxlbWVudExvb2t1cFtlXT1HKHQubm90KGkudGFyZ2V0KS5nZXQoKSkpfSksdGhpcy5fb2ZmKEcoaS50YXJnZXQpKX0sX3JlbW92ZUNsYXNzOmZ1bmN0aW9uKGUsdCxpKXtyZXR1cm4gdGhpcy5fdG9nZ2xlQ2xhc3MoZSx0LGksITEpfSxfYWRkQ2xhc3M6ZnVuY3Rpb24oZSx0LGkpe3JldHVybiB0aGlzLl90b2dnbGVDbGFzcyhlLHQsaSwhMCl9LF90b2dnbGVDbGFzczpmdW5jdGlvbihlLHQsaSxzKXt2YXIgYT1cInN0cmluZ1wiPT10eXBlb2YgZXx8bnVsbD09PWUsaT17ZXh0cmE6YT90Omksa2V5czphP2U6dCxlbGVtZW50OmE/dGhpcy5lbGVtZW50OmUsYWRkOnM9XCJib29sZWFuXCI9PXR5cGVvZiBzP3M6aX07cmV0dXJuIGkuZWxlbWVudC50b2dnbGVDbGFzcyh0aGlzLl9jbGFzc2VzKGkpLHMpLHRoaXN9LF9vbjpmdW5jdGlvbihhLG4sZSl7dmFyIHIsbz10aGlzO1wiYm9vbGVhblwiIT10eXBlb2YgYSYmKGU9bixuPWEsYT0hMSksZT8obj1yPUcobiksdGhpcy5iaW5kaW5ncz10aGlzLmJpbmRpbmdzLmFkZChuKSk6KGU9bixuPXRoaXMuZWxlbWVudCxyPXRoaXMud2lkZ2V0KCkpLEcuZWFjaChlLGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe2lmKGF8fCEwIT09by5vcHRpb25zLmRpc2FibGVkJiYhRyh0aGlzKS5oYXNDbGFzcyhcInVpLXN0YXRlLWRpc2FibGVkXCIpKXJldHVybihcInN0cmluZ1wiPT10eXBlb2YgdD9vW3RdOnQpLmFwcGx5KG8sYXJndW1lbnRzKX1cInN0cmluZ1wiIT10eXBlb2YgdCYmKGkuZ3VpZD10Lmd1aWQ9dC5ndWlkfHxpLmd1aWR8fEcuZ3VpZCsrKTt2YXIgcz1lLm1hdGNoKC9eKFtcXHc6LV0qKVxccyooLiopJC8pLGU9c1sxXStvLmV2ZW50TmFtZXNwYWNlLHM9c1syXTtzP3Iub24oZSxzLGkpOm4ub24oZSxpKX0pfSxfb2ZmOmZ1bmN0aW9uKGUsdCl7dD0odHx8XCJcIikuc3BsaXQoXCIgXCIpLmpvaW4odGhpcy5ldmVudE5hbWVzcGFjZStcIiBcIikrdGhpcy5ldmVudE5hbWVzcGFjZSxlLm9mZih0KSx0aGlzLmJpbmRpbmdzPUcodGhpcy5iaW5kaW5ncy5ub3QoZSkuZ2V0KCkpLHRoaXMuZm9jdXNhYmxlPUcodGhpcy5mb2N1c2FibGUubm90KGUpLmdldCgpKSx0aGlzLmhvdmVyYWJsZT1HKHRoaXMuaG92ZXJhYmxlLm5vdChlKS5nZXQoKSl9LF9kZWxheTpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXM7cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4oXCJzdHJpbmdcIj09dHlwZW9mIGU/aVtlXTplKS5hcHBseShpLGFyZ3VtZW50cyl9LHR8fDApfSxfaG92ZXJhYmxlOmZ1bmN0aW9uKGUpe3RoaXMuaG92ZXJhYmxlPXRoaXMuaG92ZXJhYmxlLmFkZChlKSx0aGlzLl9vbihlLHttb3VzZWVudGVyOmZ1bmN0aW9uKGUpe3RoaXMuX2FkZENsYXNzKEcoZS5jdXJyZW50VGFyZ2V0KSxudWxsLFwidWktc3RhdGUtaG92ZXJcIil9LG1vdXNlbGVhdmU6ZnVuY3Rpb24oZSl7dGhpcy5fcmVtb3ZlQ2xhc3MoRyhlLmN1cnJlbnRUYXJnZXQpLG51bGwsXCJ1aS1zdGF0ZS1ob3ZlclwiKX19KX0sX2ZvY3VzYWJsZTpmdW5jdGlvbihlKXt0aGlzLmZvY3VzYWJsZT10aGlzLmZvY3VzYWJsZS5hZGQoZSksdGhpcy5fb24oZSx7Zm9jdXNpbjpmdW5jdGlvbihlKXt0aGlzLl9hZGRDbGFzcyhHKGUuY3VycmVudFRhcmdldCksbnVsbCxcInVpLXN0YXRlLWZvY3VzXCIpfSxmb2N1c291dDpmdW5jdGlvbihlKXt0aGlzLl9yZW1vdmVDbGFzcyhHKGUuY3VycmVudFRhcmdldCksbnVsbCxcInVpLXN0YXRlLWZvY3VzXCIpfX0pfSxfdHJpZ2dlcjpmdW5jdGlvbihlLHQsaSl7dmFyIHMsYSxuPXRoaXMub3B0aW9uc1tlXTtpZihpPWl8fHt9LCh0PUcuRXZlbnQodCkpLnR5cGU9KGU9PT10aGlzLndpZGdldEV2ZW50UHJlZml4P2U6dGhpcy53aWRnZXRFdmVudFByZWZpeCtlKS50b0xvd2VyQ2FzZSgpLHQudGFyZ2V0PXRoaXMuZWxlbWVudFswXSxhPXQub3JpZ2luYWxFdmVudClmb3IocyBpbiBhKXMgaW4gdHx8KHRbc109YVtzXSk7cmV0dXJuIHRoaXMuZWxlbWVudC50cmlnZ2VyKHQsaSksIShcImZ1bmN0aW9uXCI9PXR5cGVvZiBuJiYhMT09PW4uYXBwbHkodGhpcy5lbGVtZW50WzBdLFt0XS5jb25jYXQoaSkpfHx0LmlzRGVmYXVsdFByZXZlbnRlZCgpKX19LEcuZWFjaCh7c2hvdzpcImZhZGVJblwiLGhpZGU6XCJmYWRlT3V0XCJ9LGZ1bmN0aW9uKG4scil7Ry5XaWRnZXQucHJvdG90eXBlW1wiX1wiK25dPWZ1bmN0aW9uKHQsZSxpKXt2YXIgcyxhPShlPVwic3RyaW5nXCI9PXR5cGVvZiBlP3tlZmZlY3Q6ZX06ZSk/ITAhPT1lJiZcIm51bWJlclwiIT10eXBlb2YgZSYmZS5lZmZlY3R8fHI6bjtcIm51bWJlclwiPT10eXBlb2YoZT1lfHx7fSk/ZT17ZHVyYXRpb246ZX06ITA9PT1lJiYoZT17fSkscz0hRy5pc0VtcHR5T2JqZWN0KGUpLGUuY29tcGxldGU9aSxlLmRlbGF5JiZ0LmRlbGF5KGUuZGVsYXkpLHMmJkcuZWZmZWN0cyYmRy5lZmZlY3RzLmVmZmVjdFthXT90W25dKGUpOmEhPT1uJiZ0W2FdP3RbYV0oZS5kdXJhdGlvbixlLmVhc2luZyxpKTp0LnF1ZXVlKGZ1bmN0aW9uKGUpe0codGhpcylbbl0oKSxpJiZpLmNhbGwodFswXSksZSgpfSl9fSk7dmFyIHMsYix3LG4sbCx1LGgsYyxNO0cud2lkZ2V0O2Z1bmN0aW9uIEMoZSx0LGkpe3JldHVybltwYXJzZUZsb2F0KGVbMF0pKihjLnRlc3QoZVswXSk/dC8xMDA6MSkscGFyc2VGbG9hdChlWzFdKSooYy50ZXN0KGVbMV0pP2kvMTAwOjEpXX1mdW5jdGlvbiB4KGUsdCl7cmV0dXJuIHBhcnNlSW50KEcuY3NzKGUsdCksMTApfHwwfWZ1bmN0aW9uIEkoZSl7cmV0dXJuIG51bGwhPWUmJmU9PT1lLndpbmRvd31iPU1hdGgubWF4LHc9TWF0aC5hYnMsbj0vbGVmdHxjZW50ZXJ8cmlnaHQvLGw9L3RvcHxjZW50ZXJ8Ym90dG9tLyx1PS9bXFwrXFwtXVxcZCsoXFwuW1xcZF0rKT8lPy8saD0vXlxcdysvLGM9LyUkLyxNPUcuZm4ucG9zaXRpb24sRy5wb3NpdGlvbj17c2Nyb2xsYmFyV2lkdGg6ZnVuY3Rpb24oKXtpZih2b2lkIDAhPT1zKXJldHVybiBzO3ZhciBlLHQ9RyhcIjxkaXYgc3R5bGU9J2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MjAwcHg7aGVpZ2h0OjIwMHB4O292ZXJmbG93OmhpZGRlbjsnPjxkaXYgc3R5bGU9J2hlaWdodDozMDBweDt3aWR0aDphdXRvOyc+PC9kaXY+PC9kaXY+XCIpLGk9dC5jaGlsZHJlbigpWzBdO3JldHVybiBHKFwiYm9keVwiKS5hcHBlbmQodCksZT1pLm9mZnNldFdpZHRoLHQuY3NzKFwib3ZlcmZsb3dcIixcInNjcm9sbFwiKSxlPT09KGk9aS5vZmZzZXRXaWR0aCkmJihpPXRbMF0uY2xpZW50V2lkdGgpLHQucmVtb3ZlKCkscz1lLWl9LGdldFNjcm9sbEluZm86ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pc1dpbmRvd3x8ZS5pc0RvY3VtZW50P1wiXCI6ZS5lbGVtZW50LmNzcyhcIm92ZXJmbG93LXhcIiksaT1lLmlzV2luZG93fHxlLmlzRG9jdW1lbnQ/XCJcIjplLmVsZW1lbnQuY3NzKFwib3ZlcmZsb3cteVwiKSx0PVwic2Nyb2xsXCI9PT10fHxcImF1dG9cIj09PXQmJmUud2lkdGg8ZS5lbGVtZW50WzBdLnNjcm9sbFdpZHRoO3JldHVybnt3aWR0aDpcInNjcm9sbFwiPT09aXx8XCJhdXRvXCI9PT1pJiZlLmhlaWdodDxlLmVsZW1lbnRbMF0uc2Nyb2xsSGVpZ2h0P0cucG9zaXRpb24uc2Nyb2xsYmFyV2lkdGgoKTowLGhlaWdodDp0P0cucG9zaXRpb24uc2Nyb2xsYmFyV2lkdGgoKTowfX0sZ2V0V2l0aGluSW5mbzpmdW5jdGlvbihlKXt2YXIgdD1HKGV8fHdpbmRvdyksaT1JKHRbMF0pLHM9ISF0WzBdJiY5PT09dFswXS5ub2RlVHlwZTtyZXR1cm57ZWxlbWVudDp0LGlzV2luZG93OmksaXNEb2N1bWVudDpzLG9mZnNldDohaSYmIXM/RyhlKS5vZmZzZXQoKTp7bGVmdDowLHRvcDowfSxzY3JvbGxMZWZ0OnQuc2Nyb2xsTGVmdCgpLHNjcm9sbFRvcDp0LnNjcm9sbFRvcCgpLHdpZHRoOnQub3V0ZXJXaWR0aCgpLGhlaWdodDp0Lm91dGVySGVpZ2h0KCl9fX0sRy5mbi5wb3NpdGlvbj1mdW5jdGlvbihjKXtpZighY3x8IWMub2YpcmV0dXJuIE0uYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBkLHAsZyxmLG0sZSxfPVwic3RyaW5nXCI9PXR5cGVvZihjPUcuZXh0ZW5kKHt9LGMpKS5vZj9HKGRvY3VtZW50KS5maW5kKGMub2YpOkcoYy5vZiksdj1HLnBvc2l0aW9uLmdldFdpdGhpbkluZm8oYy53aXRoaW4pLHk9Ry5wb3NpdGlvbi5nZXRTY3JvbGxJbmZvKHYpLGs9KGMuY29sbGlzaW9ufHxcImZsaXBcIikuc3BsaXQoXCIgXCIpLEQ9e30sdD05PT09KGU9KHQ9XylbMF0pLm5vZGVUeXBlP3t3aWR0aDp0LndpZHRoKCksaGVpZ2h0OnQuaGVpZ2h0KCksb2Zmc2V0Ont0b3A6MCxsZWZ0OjB9fTpJKGUpP3t3aWR0aDp0LndpZHRoKCksaGVpZ2h0OnQuaGVpZ2h0KCksb2Zmc2V0Ont0b3A6dC5zY3JvbGxUb3AoKSxsZWZ0OnQuc2Nyb2xsTGVmdCgpfX06ZS5wcmV2ZW50RGVmYXVsdD97d2lkdGg6MCxoZWlnaHQ6MCxvZmZzZXQ6e3RvcDplLnBhZ2VZLGxlZnQ6ZS5wYWdlWH19Ont3aWR0aDp0Lm91dGVyV2lkdGgoKSxoZWlnaHQ6dC5vdXRlckhlaWdodCgpLG9mZnNldDp0Lm9mZnNldCgpfTtyZXR1cm4gX1swXS5wcmV2ZW50RGVmYXVsdCYmKGMuYXQ9XCJsZWZ0IHRvcFwiKSxwPXQud2lkdGgsZz10LmhlaWdodCxtPUcuZXh0ZW5kKHt9LGY9dC5vZmZzZXQpLEcuZWFjaChbXCJteVwiLFwiYXRcIl0sZnVuY3Rpb24oKXt2YXIgZSx0LGk9KGNbdGhpc118fFwiXCIpLnNwbGl0KFwiIFwiKTsoaT0xPT09aS5sZW5ndGg/bi50ZXN0KGlbMF0pP2kuY29uY2F0KFtcImNlbnRlclwiXSk6bC50ZXN0KGlbMF0pP1tcImNlbnRlclwiXS5jb25jYXQoaSk6W1wiY2VudGVyXCIsXCJjZW50ZXJcIl06aSlbMF09bi50ZXN0KGlbMF0pP2lbMF06XCJjZW50ZXJcIixpWzFdPWwudGVzdChpWzFdKT9pWzFdOlwiY2VudGVyXCIsZT11LmV4ZWMoaVswXSksdD11LmV4ZWMoaVsxXSksRFt0aGlzXT1bZT9lWzBdOjAsdD90WzBdOjBdLGNbdGhpc109W2guZXhlYyhpWzBdKVswXSxoLmV4ZWMoaVsxXSlbMF1dfSksMT09PWsubGVuZ3RoJiYoa1sxXT1rWzBdKSxcInJpZ2h0XCI9PT1jLmF0WzBdP20ubGVmdCs9cDpcImNlbnRlclwiPT09Yy5hdFswXSYmKG0ubGVmdCs9cC8yKSxcImJvdHRvbVwiPT09Yy5hdFsxXT9tLnRvcCs9ZzpcImNlbnRlclwiPT09Yy5hdFsxXSYmKG0udG9wKz1nLzIpLGQ9QyhELmF0LHAsZyksbS5sZWZ0Kz1kWzBdLG0udG9wKz1kWzFdLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBpLGUscj1HKHRoaXMpLG89ci5vdXRlcldpZHRoKCksbD1yLm91dGVySGVpZ2h0KCksdD14KHRoaXMsXCJtYXJnaW5MZWZ0XCIpLHM9eCh0aGlzLFwibWFyZ2luVG9wXCIpLGE9byt0K3godGhpcyxcIm1hcmdpblJpZ2h0XCIpK3kud2lkdGgsbj1sK3MreCh0aGlzLFwibWFyZ2luQm90dG9tXCIpK3kuaGVpZ2h0LHU9Ry5leHRlbmQoe30sbSksaD1DKEQubXksci5vdXRlcldpZHRoKCksci5vdXRlckhlaWdodCgpKTtcInJpZ2h0XCI9PT1jLm15WzBdP3UubGVmdC09bzpcImNlbnRlclwiPT09Yy5teVswXSYmKHUubGVmdC09by8yKSxcImJvdHRvbVwiPT09Yy5teVsxXT91LnRvcC09bDpcImNlbnRlclwiPT09Yy5teVsxXSYmKHUudG9wLT1sLzIpLHUubGVmdCs9aFswXSx1LnRvcCs9aFsxXSxpPXttYXJnaW5MZWZ0OnQsbWFyZ2luVG9wOnN9LEcuZWFjaChbXCJsZWZ0XCIsXCJ0b3BcIl0sZnVuY3Rpb24oZSx0KXtHLnVpLnBvc2l0aW9uW2tbZV1dJiZHLnVpLnBvc2l0aW9uW2tbZV1dW3RdKHUse3RhcmdldFdpZHRoOnAsdGFyZ2V0SGVpZ2h0OmcsZWxlbVdpZHRoOm8sZWxlbUhlaWdodDpsLGNvbGxpc2lvblBvc2l0aW9uOmksY29sbGlzaW9uV2lkdGg6YSxjb2xsaXNpb25IZWlnaHQ6bixvZmZzZXQ6W2RbMF0raFswXSxkWzFdK2hbMV1dLG15OmMubXksYXQ6Yy5hdCx3aXRoaW46dixlbGVtOnJ9KX0pLGMudXNpbmcmJihlPWZ1bmN0aW9uKGUpe3ZhciB0PWYubGVmdC11LmxlZnQsaT10K3AtbyxzPWYudG9wLXUudG9wLGE9cytnLWwsbj17dGFyZ2V0OntlbGVtZW50Ol8sbGVmdDpmLmxlZnQsdG9wOmYudG9wLHdpZHRoOnAsaGVpZ2h0Omd9LGVsZW1lbnQ6e2VsZW1lbnQ6cixsZWZ0OnUubGVmdCx0b3A6dS50b3Asd2lkdGg6byxoZWlnaHQ6bH0saG9yaXpvbnRhbDppPDA/XCJsZWZ0XCI6MDx0P1wicmlnaHRcIjpcImNlbnRlclwiLHZlcnRpY2FsOmE8MD9cInRvcFwiOjA8cz9cImJvdHRvbVwiOlwibWlkZGxlXCJ9O3A8byYmdyh0K2kpPHAmJihuLmhvcml6b250YWw9XCJjZW50ZXJcIiksZzxsJiZ3KHMrYSk8ZyYmKG4udmVydGljYWw9XCJtaWRkbGVcIiksYih3KHQpLHcoaSkpPmIodyhzKSx3KGEpKT9uLmltcG9ydGFudD1cImhvcml6b250YWxcIjpuLmltcG9ydGFudD1cInZlcnRpY2FsXCIsYy51c2luZy5jYWxsKHRoaXMsZSxuKX0pLHIub2Zmc2V0KEcuZXh0ZW5kKHUse3VzaW5nOmV9KSl9KX0sRy51aS5wb3NpdGlvbj17Zml0OntsZWZ0OmZ1bmN0aW9uKGUsdCl7dmFyIGk9dC53aXRoaW4scz1pLmlzV2luZG93P2kuc2Nyb2xsTGVmdDppLm9mZnNldC5sZWZ0LGE9aS53aWR0aCxuPWUubGVmdC10LmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpbkxlZnQscj1zLW4sbz1uK3QuY29sbGlzaW9uV2lkdGgtYS1zO3QuY29sbGlzaW9uV2lkdGg+YT8wPHImJm88PTA/KGk9ZS5sZWZ0K3IrdC5jb2xsaXNpb25XaWR0aC1hLXMsZS5sZWZ0Kz1yLWkpOmUubGVmdD0hKDA8byYmcjw9MCkmJm88cj9zK2EtdC5jb2xsaXNpb25XaWR0aDpzOjA8cj9lLmxlZnQrPXI6MDxvP2UubGVmdC09bzplLmxlZnQ9YihlLmxlZnQtbixlLmxlZnQpfSx0b3A6ZnVuY3Rpb24oZSx0KXt2YXIgaT10LndpdGhpbixzPWkuaXNXaW5kb3c/aS5zY3JvbGxUb3A6aS5vZmZzZXQudG9wLGE9dC53aXRoaW4uaGVpZ2h0LG49ZS50b3AtdC5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5Ub3Ascj1zLW4sbz1uK3QuY29sbGlzaW9uSGVpZ2h0LWEtczt0LmNvbGxpc2lvbkhlaWdodD5hPzA8ciYmbzw9MD8oaT1lLnRvcCtyK3QuY29sbGlzaW9uSGVpZ2h0LWEtcyxlLnRvcCs9ci1pKTplLnRvcD0hKDA8byYmcjw9MCkmJm88cj9zK2EtdC5jb2xsaXNpb25IZWlnaHQ6czowPHI/ZS50b3ArPXI6MDxvP2UudG9wLT1vOmUudG9wPWIoZS50b3AtbixlLnRvcCl9fSxmbGlwOntsZWZ0OmZ1bmN0aW9uKGUsdCl7dmFyIGk9dC53aXRoaW4scz1pLm9mZnNldC5sZWZ0K2kuc2Nyb2xsTGVmdCxhPWkud2lkdGgsbj1pLmlzV2luZG93P2kuc2Nyb2xsTGVmdDppLm9mZnNldC5sZWZ0LHI9ZS5sZWZ0LXQuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luTGVmdCxvPXItbixsPXIrdC5jb2xsaXNpb25XaWR0aC1hLW4sdT1cImxlZnRcIj09PXQubXlbMF0/LXQuZWxlbVdpZHRoOlwicmlnaHRcIj09PXQubXlbMF0/dC5lbGVtV2lkdGg6MCxpPVwibGVmdFwiPT09dC5hdFswXT90LnRhcmdldFdpZHRoOlwicmlnaHRcIj09PXQuYXRbMF0/LXQudGFyZ2V0V2lkdGg6MCxyPS0yKnQub2Zmc2V0WzBdO288MD8oKHM9ZS5sZWZ0K3UraStyK3QuY29sbGlzaW9uV2lkdGgtYS1zKTwwfHxzPHcobykpJiYoZS5sZWZ0Kz11K2krcik6MDxsJiYoMDwobj1lLmxlZnQtdC5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5MZWZ0K3UraStyLW4pfHx3KG4pPGwpJiYoZS5sZWZ0Kz11K2krcil9LHRvcDpmdW5jdGlvbihlLHQpe3ZhciBpPXQud2l0aGluLHM9aS5vZmZzZXQudG9wK2kuc2Nyb2xsVG9wLGE9aS5oZWlnaHQsbj1pLmlzV2luZG93P2kuc2Nyb2xsVG9wOmkub2Zmc2V0LnRvcCxyPWUudG9wLXQuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luVG9wLG89ci1uLGw9cit0LmNvbGxpc2lvbkhlaWdodC1hLW4sdT1cInRvcFwiPT09dC5teVsxXT8tdC5lbGVtSGVpZ2h0OlwiYm90dG9tXCI9PT10Lm15WzFdP3QuZWxlbUhlaWdodDowLGk9XCJ0b3BcIj09PXQuYXRbMV0/dC50YXJnZXRIZWlnaHQ6XCJib3R0b21cIj09PXQuYXRbMV0/LXQudGFyZ2V0SGVpZ2h0OjAscj0tMip0Lm9mZnNldFsxXTtvPDA/KChzPWUudG9wK3UraStyK3QuY29sbGlzaW9uSGVpZ2h0LWEtcyk8MHx8czx3KG8pKSYmKGUudG9wKz11K2krcik6MDxsJiYoMDwobj1lLnRvcC10LmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCt1K2krci1uKXx8dyhuKTxsKSYmKGUudG9wKz11K2krcil9fSxmbGlwZml0OntsZWZ0OmZ1bmN0aW9uKCl7Ry51aS5wb3NpdGlvbi5mbGlwLmxlZnQuYXBwbHkodGhpcyxhcmd1bWVudHMpLEcudWkucG9zaXRpb24uZml0LmxlZnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx0b3A6ZnVuY3Rpb24oKXtHLnVpLnBvc2l0aW9uLmZsaXAudG9wLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxHLnVpLnBvc2l0aW9uLmZpdC50b3AuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19O3ZhciBlO0cudWkucG9zaXRpb24sRy51aS5rZXlDb2RlPXtCQUNLU1BBQ0U6OCxDT01NQToxODgsREVMRVRFOjQ2LERPV046NDAsRU5EOjM1LEVOVEVSOjEzLEVTQ0FQRToyNyxIT01FOjM2LExFRlQ6MzcsUEFHRV9ET1dOOjM0LFBBR0VfVVA6MzMsUEVSSU9EOjE5MCxSSUdIVDozOSxTUEFDRTozMixUQUI6OSxVUDozOH0sRy5mbi5leHRlbmQoe3VuaXF1ZUlkOihlPTAsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5pZHx8KHRoaXMuaWQ9XCJ1aS1pZC1cIisgKytlKX0pfSkscmVtb3ZlVW5pcXVlSWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7L151aS1pZC1cXGQrJC8udGVzdCh0aGlzLmlkKSYmRyh0aGlzKS5yZW1vdmVBdHRyKFwiaWRcIil9KX19KSxHLnVpLnNhZmVBY3RpdmVFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBpO3RyeXtpPXQuYWN0aXZlRWxlbWVudH1jYXRjaChlKXtpPXQuYm9keX1yZXR1cm4gaT0hKGk9aXx8dC5ib2R5KS5ub2RlTmFtZT90LmJvZHk6aX0sRy53aWRnZXQoXCJ1aS5tZW51XCIse3ZlcnNpb246XCIxLjEzLjBcIixkZWZhdWx0RWxlbWVudDpcIjx1bD5cIixkZWxheTozMDAsb3B0aW9uczp7aWNvbnM6e3N1Ym1lbnU6XCJ1aS1pY29uLWNhcmV0LTEtZVwifSxpdGVtczpcIj4gKlwiLG1lbnVzOlwidWxcIixwb3NpdGlvbjp7bXk6XCJsZWZ0IHRvcFwiLGF0OlwicmlnaHQgdG9wXCJ9LHJvbGU6XCJtZW51XCIsYmx1cjpudWxsLGZvY3VzOm51bGwsc2VsZWN0Om51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZU1lbnU9dGhpcy5lbGVtZW50LHRoaXMubW91c2VIYW5kbGVkPSExLHRoaXMubGFzdE1vdXNlUG9zaXRpb249e3g6bnVsbCx5Om51bGx9LHRoaXMuZWxlbWVudC51bmlxdWVJZCgpLmF0dHIoe3JvbGU6dGhpcy5vcHRpb25zLnJvbGUsdGFiSW5kZXg6MH0pLHRoaXMuX2FkZENsYXNzKFwidWktbWVudVwiLFwidWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50XCIpLHRoaXMuX29uKHtcIm1vdXNlZG93biAudWktbWVudS1pdGVtXCI6ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2FjdGl2YXRlSXRlbShlKX0sXCJjbGljayAudWktbWVudS1pdGVtXCI6ZnVuY3Rpb24oZSl7dmFyIHQ9RyhlLnRhcmdldCksaT1HKEcudWkuc2FmZUFjdGl2ZUVsZW1lbnQodGhpcy5kb2N1bWVudFswXSkpOyF0aGlzLm1vdXNlSGFuZGxlZCYmdC5ub3QoXCIudWktc3RhdGUtZGlzYWJsZWRcIikubGVuZ3RoJiYodGhpcy5zZWxlY3QoZSksZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpfHwodGhpcy5tb3VzZUhhbmRsZWQ9ITApLHQuaGFzKFwiLnVpLW1lbnVcIikubGVuZ3RoP3RoaXMuZXhwYW5kKGUpOiF0aGlzLmVsZW1lbnQuaXMoXCI6Zm9jdXNcIikmJmkuY2xvc2VzdChcIi51aS1tZW51XCIpLmxlbmd0aCYmKHRoaXMuZWxlbWVudC50cmlnZ2VyKFwiZm9jdXNcIixbITBdKSx0aGlzLmFjdGl2ZSYmMT09PXRoaXMuYWN0aXZlLnBhcmVudHMoXCIudWktbWVudVwiKS5sZW5ndGgmJmNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSkpfSxcIm1vdXNlZW50ZXIgLnVpLW1lbnUtaXRlbVwiOlwiX2FjdGl2YXRlSXRlbVwiLFwibW91c2Vtb3ZlIC51aS1tZW51LWl0ZW1cIjpcIl9hY3RpdmF0ZUl0ZW1cIixtb3VzZWxlYXZlOlwiY29sbGFwc2VBbGxcIixcIm1vdXNlbGVhdmUgLnVpLW1lbnVcIjpcImNvbGxhcHNlQWxsXCIsZm9jdXM6ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLmFjdGl2ZXx8dGhpcy5fbWVudUl0ZW1zKCkuZmlyc3QoKTt0fHx0aGlzLmZvY3VzKGUsaSl9LGJsdXI6ZnVuY3Rpb24oZSl7dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtHLmNvbnRhaW5zKHRoaXMuZWxlbWVudFswXSxHLnVpLnNhZmVBY3RpdmVFbGVtZW50KHRoaXMuZG9jdW1lbnRbMF0pKXx8dGhpcy5jb2xsYXBzZUFsbChlKX0pfSxrZXlkb3duOlwiX2tleWRvd25cIn0pLHRoaXMucmVmcmVzaCgpLHRoaXMuX29uKHRoaXMuZG9jdW1lbnQse2NsaWNrOmZ1bmN0aW9uKGUpe3RoaXMuX2Nsb3NlT25Eb2N1bWVudENsaWNrKGUpJiZ0aGlzLmNvbGxhcHNlQWxsKGUsITApLHRoaXMubW91c2VIYW5kbGVkPSExfX0pfSxfYWN0aXZhdGVJdGVtOmZ1bmN0aW9uKGUpe3ZhciB0LGk7dGhpcy5wcmV2aW91c0ZpbHRlcnx8ZS5jbGllbnRYPT09dGhpcy5sYXN0TW91c2VQb3NpdGlvbi54JiZlLmNsaWVudFk9PT10aGlzLmxhc3RNb3VzZVBvc2l0aW9uLnl8fCh0aGlzLmxhc3RNb3VzZVBvc2l0aW9uPXt4OmUuY2xpZW50WCx5OmUuY2xpZW50WX0sdD1HKGUudGFyZ2V0KS5jbG9zZXN0KFwiLnVpLW1lbnUtaXRlbVwiKSxpPUcoZS5jdXJyZW50VGFyZ2V0KSx0WzBdPT09aVswXSYmKGkuaXMoXCIudWktc3RhdGUtYWN0aXZlXCIpfHwodGhpcy5fcmVtb3ZlQ2xhc3MoaS5zaWJsaW5ncygpLmNoaWxkcmVuKFwiLnVpLXN0YXRlLWFjdGl2ZVwiKSxudWxsLFwidWktc3RhdGUtYWN0aXZlXCIpLHRoaXMuZm9jdXMoZSxpKSkpKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVsZW1lbnQuZmluZChcIi51aS1tZW51LWl0ZW1cIikucmVtb3ZlQXR0cihcInJvbGUgYXJpYS1kaXNhYmxlZFwiKS5jaGlsZHJlbihcIi51aS1tZW51LWl0ZW0td3JhcHBlclwiKS5yZW1vdmVVbmlxdWVJZCgpLnJlbW92ZUF0dHIoXCJ0YWJJbmRleCByb2xlIGFyaWEtaGFzcG9wdXBcIik7dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIikuZmluZChcIi51aS1tZW51XCIpLmFkZEJhY2soKS5yZW1vdmVBdHRyKFwicm9sZSBhcmlhLWxhYmVsbGVkYnkgYXJpYS1leHBhbmRlZCBhcmlhLWhpZGRlbiBhcmlhLWRpc2FibGVkIHRhYkluZGV4XCIpLnJlbW92ZVVuaXF1ZUlkKCkuc2hvdygpLGUuY2hpbGRyZW4oKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9Ryh0aGlzKTtlLmRhdGEoXCJ1aS1tZW51LXN1Ym1lbnUtY2FyZXRcIikmJmUucmVtb3ZlKCl9KX0sX2tleWRvd246ZnVuY3Rpb24oZSl7dmFyIHQsaSxzLGE9ITA7c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSBHLnVpLmtleUNvZGUuUEFHRV9VUDp0aGlzLnByZXZpb3VzUGFnZShlKTticmVhaztjYXNlIEcudWkua2V5Q29kZS5QQUdFX0RPV046dGhpcy5uZXh0UGFnZShlKTticmVhaztjYXNlIEcudWkua2V5Q29kZS5IT01FOnRoaXMuX21vdmUoXCJmaXJzdFwiLFwiZmlyc3RcIixlKTticmVhaztjYXNlIEcudWkua2V5Q29kZS5FTkQ6dGhpcy5fbW92ZShcImxhc3RcIixcImxhc3RcIixlKTticmVhaztjYXNlIEcudWkua2V5Q29kZS5VUDp0aGlzLnByZXZpb3VzKGUpO2JyZWFrO2Nhc2UgRy51aS5rZXlDb2RlLkRPV046dGhpcy5uZXh0KGUpO2JyZWFrO2Nhc2UgRy51aS5rZXlDb2RlLkxFRlQ6dGhpcy5jb2xsYXBzZShlKTticmVhaztjYXNlIEcudWkua2V5Q29kZS5SSUdIVDp0aGlzLmFjdGl2ZSYmIXRoaXMuYWN0aXZlLmlzKFwiLnVpLXN0YXRlLWRpc2FibGVkXCIpJiZ0aGlzLmV4cGFuZChlKTticmVhaztjYXNlIEcudWkua2V5Q29kZS5FTlRFUjpjYXNlIEcudWkua2V5Q29kZS5TUEFDRTp0aGlzLl9hY3RpdmF0ZShlKTticmVhaztjYXNlIEcudWkua2V5Q29kZS5FU0NBUEU6dGhpcy5jb2xsYXBzZShlKTticmVhaztkZWZhdWx0OnQ9dGhpcy5wcmV2aW91c0ZpbHRlcnx8XCJcIixzPWE9ITEsaT05Njw9ZS5rZXlDb2RlJiZlLmtleUNvZGU8PTEwNT8oZS5rZXlDb2RlLTk2KS50b1N0cmluZygpOlN0cmluZy5mcm9tQ2hhckNvZGUoZS5rZXlDb2RlKSxjbGVhclRpbWVvdXQodGhpcy5maWx0ZXJUaW1lciksaT09PXQ/cz0hMDppPXQraSx0PXRoaXMuX2ZpbHRlck1lbnVJdGVtcyhpKSwodD1zJiYtMSE9PXQuaW5kZXgodGhpcy5hY3RpdmUubmV4dCgpKT90aGlzLmFjdGl2ZS5uZXh0QWxsKFwiLnVpLW1lbnUtaXRlbVwiKTp0KS5sZW5ndGh8fChpPVN0cmluZy5mcm9tQ2hhckNvZGUoZS5rZXlDb2RlKSx0PXRoaXMuX2ZpbHRlck1lbnVJdGVtcyhpKSksdC5sZW5ndGg/KHRoaXMuZm9jdXMoZSx0KSx0aGlzLnByZXZpb3VzRmlsdGVyPWksdGhpcy5maWx0ZXJUaW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe2RlbGV0ZSB0aGlzLnByZXZpb3VzRmlsdGVyfSwxZTMpKTpkZWxldGUgdGhpcy5wcmV2aW91c0ZpbHRlcn1hJiZlLnByZXZlbnREZWZhdWx0KCl9LF9hY3RpdmF0ZTpmdW5jdGlvbihlKXt0aGlzLmFjdGl2ZSYmIXRoaXMuYWN0aXZlLmlzKFwiLnVpLXN0YXRlLWRpc2FibGVkXCIpJiYodGhpcy5hY3RpdmUuY2hpbGRyZW4oXCJbYXJpYS1oYXNwb3B1cD0ndHJ1ZSddXCIpLmxlbmd0aD90aGlzLmV4cGFuZChlKTp0aGlzLnNlbGVjdChlKSl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgZSx0LHM9dGhpcyxhPXRoaXMub3B0aW9ucy5pY29ucy5zdWJtZW51LGk9dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLm1lbnVzKTt0aGlzLl90b2dnbGVDbGFzcyhcInVpLW1lbnUtaWNvbnNcIixudWxsLCEhdGhpcy5lbGVtZW50LmZpbmQoXCIudWktaWNvblwiKS5sZW5ndGgpLHQ9aS5maWx0ZXIoXCI6bm90KC51aS1tZW51KVwiKS5oaWRlKCkuYXR0cih7cm9sZTp0aGlzLm9wdGlvbnMucm9sZSxcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCIsXCJhcmlhLWV4cGFuZGVkXCI6XCJmYWxzZVwifSkuZWFjaChmdW5jdGlvbigpe3ZhciBlPUcodGhpcyksdD1lLnByZXYoKSxpPUcoXCI8c3Bhbj5cIikuZGF0YShcInVpLW1lbnUtc3VibWVudS1jYXJldFwiLCEwKTtzLl9hZGRDbGFzcyhpLFwidWktbWVudS1pY29uXCIsXCJ1aS1pY29uIFwiK2EpLHQuYXR0cihcImFyaWEtaGFzcG9wdXBcIixcInRydWVcIikucHJlcGVuZChpKSxlLmF0dHIoXCJhcmlhLWxhYmVsbGVkYnlcIix0LmF0dHIoXCJpZFwiKSl9KSx0aGlzLl9hZGRDbGFzcyh0LFwidWktbWVudVwiLFwidWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWZyb250XCIpLChlPWkuYWRkKHRoaXMuZWxlbWVudCkuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpKS5ub3QoXCIudWktbWVudS1pdGVtXCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1HKHRoaXMpO3MuX2lzRGl2aWRlcihlKSYmcy5fYWRkQ2xhc3MoZSxcInVpLW1lbnUtZGl2aWRlclwiLFwidWktd2lkZ2V0LWNvbnRlbnRcIil9KSxpPSh0PWUubm90KFwiLnVpLW1lbnUtaXRlbSwgLnVpLW1lbnUtZGl2aWRlclwiKSkuY2hpbGRyZW4oKS5ub3QoXCIudWktbWVudVwiKS51bmlxdWVJZCgpLmF0dHIoe3RhYkluZGV4Oi0xLHJvbGU6dGhpcy5faXRlbVJvbGUoKX0pLHRoaXMuX2FkZENsYXNzKHQsXCJ1aS1tZW51LWl0ZW1cIikuX2FkZENsYXNzKGksXCJ1aS1tZW51LWl0ZW0td3JhcHBlclwiKSxlLmZpbHRlcihcIi51aS1zdGF0ZS1kaXNhYmxlZFwiKS5hdHRyKFwiYXJpYS1kaXNhYmxlZFwiLFwidHJ1ZVwiKSx0aGlzLmFjdGl2ZSYmIUcuY29udGFpbnModGhpcy5lbGVtZW50WzBdLHRoaXMuYWN0aXZlWzBdKSYmdGhpcy5ibHVyKCl9LF9pdGVtUm9sZTpmdW5jdGlvbigpe3JldHVybnttZW51OlwibWVudWl0ZW1cIixsaXN0Ym94Olwib3B0aW9uXCJ9W3RoaXMub3B0aW9ucy5yb2xlXX0sX3NldE9wdGlvbjpmdW5jdGlvbihlLHQpe3ZhciBpO1wiaWNvbnNcIj09PWUmJihpPXRoaXMuZWxlbWVudC5maW5kKFwiLnVpLW1lbnUtaWNvblwiKSx0aGlzLl9yZW1vdmVDbGFzcyhpLG51bGwsdGhpcy5vcHRpb25zLmljb25zLnN1Ym1lbnUpLl9hZGRDbGFzcyhpLG51bGwsdC5zdWJtZW51KSksdGhpcy5fc3VwZXIoZSx0KX0sX3NldE9wdGlvbkRpc2FibGVkOmZ1bmN0aW9uKGUpe3RoaXMuX3N1cGVyKGUpLHRoaXMuZWxlbWVudC5hdHRyKFwiYXJpYS1kaXNhYmxlZFwiLFN0cmluZyhlKSksdGhpcy5fdG9nZ2xlQ2xhc3MobnVsbCxcInVpLXN0YXRlLWRpc2FibGVkXCIsISFlKX0sZm9jdXM6ZnVuY3Rpb24oZSx0KXt2YXIgaTt0aGlzLmJsdXIoZSxlJiZcImZvY3VzXCI9PT1lLnR5cGUpLHRoaXMuX3Njcm9sbEludG9WaWV3KHQpLHRoaXMuYWN0aXZlPXQuZmlyc3QoKSxpPXRoaXMuYWN0aXZlLmNoaWxkcmVuKFwiLnVpLW1lbnUtaXRlbS13cmFwcGVyXCIpLHRoaXMuX2FkZENsYXNzKGksbnVsbCxcInVpLXN0YXRlLWFjdGl2ZVwiKSx0aGlzLm9wdGlvbnMucm9sZSYmdGhpcy5lbGVtZW50LmF0dHIoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIixpLmF0dHIoXCJpZFwiKSksaT10aGlzLmFjdGl2ZS5wYXJlbnQoKS5jbG9zZXN0KFwiLnVpLW1lbnUtaXRlbVwiKS5jaGlsZHJlbihcIi51aS1tZW51LWl0ZW0td3JhcHBlclwiKSx0aGlzLl9hZGRDbGFzcyhpLG51bGwsXCJ1aS1zdGF0ZS1hY3RpdmVcIiksZSYmXCJrZXlkb3duXCI9PT1lLnR5cGU/dGhpcy5fY2xvc2UoKTp0aGlzLnRpbWVyPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5fY2xvc2UoKX0sdGhpcy5kZWxheSksKGk9dC5jaGlsZHJlbihcIi51aS1tZW51XCIpKS5sZW5ndGgmJmUmJi9ebW91c2UvLnRlc3QoZS50eXBlKSYmdGhpcy5fc3RhcnRPcGVuaW5nKGkpLHRoaXMuYWN0aXZlTWVudT10LnBhcmVudCgpLHRoaXMuX3RyaWdnZXIoXCJmb2N1c1wiLGUse2l0ZW06dH0pfSxfc2Nyb2xsSW50b1ZpZXc6ZnVuY3Rpb24oZSl7dmFyIHQsaSxzO3RoaXMuX2hhc1Njcm9sbCgpJiYoaT1wYXJzZUZsb2F0KEcuY3NzKHRoaXMuYWN0aXZlTWVudVswXSxcImJvcmRlclRvcFdpZHRoXCIpKXx8MCxzPXBhcnNlRmxvYXQoRy5jc3ModGhpcy5hY3RpdmVNZW51WzBdLFwicGFkZGluZ1RvcFwiKSl8fDAsdD1lLm9mZnNldCgpLnRvcC10aGlzLmFjdGl2ZU1lbnUub2Zmc2V0KCkudG9wLWktcyxpPXRoaXMuYWN0aXZlTWVudS5zY3JvbGxUb3AoKSxzPXRoaXMuYWN0aXZlTWVudS5oZWlnaHQoKSxlPWUub3V0ZXJIZWlnaHQoKSx0PDA/dGhpcy5hY3RpdmVNZW51LnNjcm9sbFRvcChpK3QpOnM8dCtlJiZ0aGlzLmFjdGl2ZU1lbnUuc2Nyb2xsVG9wKGkrdC1zK2UpKX0sYmx1cjpmdW5jdGlvbihlLHQpe3R8fGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLmFjdGl2ZSYmKHRoaXMuX3JlbW92ZUNsYXNzKHRoaXMuYWN0aXZlLmNoaWxkcmVuKFwiLnVpLW1lbnUtaXRlbS13cmFwcGVyXCIpLG51bGwsXCJ1aS1zdGF0ZS1hY3RpdmVcIiksdGhpcy5fdHJpZ2dlcihcImJsdXJcIixlLHtpdGVtOnRoaXMuYWN0aXZlfSksdGhpcy5hY3RpdmU9bnVsbCl9LF9zdGFydE9wZW5pbmc6ZnVuY3Rpb24oZSl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLFwidHJ1ZVwiPT09ZS5hdHRyKFwiYXJpYS1oaWRkZW5cIikmJih0aGlzLnRpbWVyPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5fY2xvc2UoKSx0aGlzLl9vcGVuKGUpfSx0aGlzLmRlbGF5KSl9LF9vcGVuOmZ1bmN0aW9uKGUpe3ZhciB0PUcuZXh0ZW5kKHtvZjp0aGlzLmFjdGl2ZX0sdGhpcy5vcHRpb25zLnBvc2l0aW9uKTtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5lbGVtZW50LmZpbmQoXCIudWktbWVudVwiKS5ub3QoZS5wYXJlbnRzKFwiLnVpLW1lbnVcIikpLmhpZGUoKS5hdHRyKFwiYXJpYS1oaWRkZW5cIixcInRydWVcIiksZS5zaG93KCkucmVtb3ZlQXR0cihcImFyaWEtaGlkZGVuXCIpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsXCJ0cnVlXCIpLnBvc2l0aW9uKHQpfSxjb2xsYXBzZUFsbDpmdW5jdGlvbih0LGkpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLnRpbWVyPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dmFyIGU9aT90aGlzLmVsZW1lbnQ6Ryh0JiZ0LnRhcmdldCkuY2xvc2VzdCh0aGlzLmVsZW1lbnQuZmluZChcIi51aS1tZW51XCIpKTtlLmxlbmd0aHx8KGU9dGhpcy5lbGVtZW50KSx0aGlzLl9jbG9zZShlKSx0aGlzLmJsdXIodCksdGhpcy5fcmVtb3ZlQ2xhc3MoZS5maW5kKFwiLnVpLXN0YXRlLWFjdGl2ZVwiKSxudWxsLFwidWktc3RhdGUtYWN0aXZlXCIpLHRoaXMuYWN0aXZlTWVudT1lfSxpPzA6dGhpcy5kZWxheSl9LF9jbG9zZTpmdW5jdGlvbihlKXsoZT1lfHwodGhpcy5hY3RpdmU/dGhpcy5hY3RpdmUucGFyZW50KCk6dGhpcy5lbGVtZW50KSkuZmluZChcIi51aS1tZW51XCIpLmhpZGUoKS5hdHRyKFwiYXJpYS1oaWRkZW5cIixcInRydWVcIikuYXR0cihcImFyaWEtZXhwYW5kZWRcIixcImZhbHNlXCIpfSxfY2xvc2VPbkRvY3VtZW50Q2xpY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIUcoZS50YXJnZXQpLmNsb3Nlc3QoXCIudWktbWVudVwiKS5sZW5ndGh9LF9pc0RpdmlkZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIS9bXlxcLVxcdTIwMTRcXHUyMDEzXFxzXS8udGVzdChlLnRleHQoKSl9LGNvbGxhcHNlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYWN0aXZlJiZ0aGlzLmFjdGl2ZS5wYXJlbnQoKS5jbG9zZXN0KFwiLnVpLW1lbnUtaXRlbVwiLHRoaXMuZWxlbWVudCk7dCYmdC5sZW5ndGgmJih0aGlzLl9jbG9zZSgpLHRoaXMuZm9jdXMoZSx0KSl9LGV4cGFuZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmFjdGl2ZSYmdGhpcy5fbWVudUl0ZW1zKHRoaXMuYWN0aXZlLmNoaWxkcmVuKFwiLnVpLW1lbnVcIikpLmZpcnN0KCk7dCYmdC5sZW5ndGgmJih0aGlzLl9vcGVuKHQucGFyZW50KCkpLHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5mb2N1cyhlLHQpfSkpfSxuZXh0OmZ1bmN0aW9uKGUpe3RoaXMuX21vdmUoXCJuZXh0XCIsXCJmaXJzdFwiLGUpfSxwcmV2aW91czpmdW5jdGlvbihlKXt0aGlzLl9tb3ZlKFwicHJldlwiLFwibGFzdFwiLGUpfSxpc0ZpcnN0SXRlbTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFjdGl2ZSYmIXRoaXMuYWN0aXZlLnByZXZBbGwoXCIudWktbWVudS1pdGVtXCIpLmxlbmd0aH0saXNMYXN0SXRlbTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFjdGl2ZSYmIXRoaXMuYWN0aXZlLm5leHRBbGwoXCIudWktbWVudS1pdGVtXCIpLmxlbmd0aH0sX21lbnVJdGVtczpmdW5jdGlvbihlKXtyZXR1cm4oZXx8dGhpcy5lbGVtZW50KS5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuZmlsdGVyKFwiLnVpLW1lbnUtaXRlbVwiKX0sX21vdmU6ZnVuY3Rpb24oZSx0LGkpe3ZhciBzOyhzPXRoaXMuYWN0aXZlP1wiZmlyc3RcIj09PWV8fFwibGFzdFwiPT09ZT90aGlzLmFjdGl2ZVtcImZpcnN0XCI9PT1lP1wicHJldkFsbFwiOlwibmV4dEFsbFwiXShcIi51aS1tZW51LWl0ZW1cIikubGFzdCgpOnRoaXMuYWN0aXZlW2UrXCJBbGxcIl0oXCIudWktbWVudS1pdGVtXCIpLmZpcnN0KCk6cykmJnMubGVuZ3RoJiZ0aGlzLmFjdGl2ZXx8KHM9dGhpcy5fbWVudUl0ZW1zKHRoaXMuYWN0aXZlTWVudSlbdF0oKSksdGhpcy5mb2N1cyhpLHMpfSxuZXh0UGFnZTpmdW5jdGlvbihlKXt2YXIgdCxpLHM7dGhpcy5hY3RpdmU/dGhpcy5pc0xhc3RJdGVtKCl8fCh0aGlzLl9oYXNTY3JvbGwoKT8oaT10aGlzLmFjdGl2ZS5vZmZzZXQoKS50b3Ascz10aGlzLmVsZW1lbnQuaW5uZXJIZWlnaHQoKSwwPT09Ry5mbi5qcXVlcnkuaW5kZXhPZihcIjMuMi5cIikmJihzKz10aGlzLmVsZW1lbnRbMF0ub2Zmc2V0SGVpZ2h0LXRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpKSx0aGlzLmFjdGl2ZS5uZXh0QWxsKFwiLnVpLW1lbnUtaXRlbVwiKS5lYWNoKGZ1bmN0aW9uKCl7cmV0dXJuKHQ9Ryh0aGlzKSkub2Zmc2V0KCkudG9wLWktczwwfSksdGhpcy5mb2N1cyhlLHQpKTp0aGlzLmZvY3VzKGUsdGhpcy5fbWVudUl0ZW1zKHRoaXMuYWN0aXZlTWVudSlbdGhpcy5hY3RpdmU/XCJsYXN0XCI6XCJmaXJzdFwiXSgpKSk6dGhpcy5uZXh0KGUpfSxwcmV2aW91c1BhZ2U6ZnVuY3Rpb24oZSl7dmFyIHQsaSxzO3RoaXMuYWN0aXZlP3RoaXMuaXNGaXJzdEl0ZW0oKXx8KHRoaXMuX2hhc1Njcm9sbCgpPyhpPXRoaXMuYWN0aXZlLm9mZnNldCgpLnRvcCxzPXRoaXMuZWxlbWVudC5pbm5lckhlaWdodCgpLDA9PT1HLmZuLmpxdWVyeS5pbmRleE9mKFwiMy4yLlwiKSYmKHMrPXRoaXMuZWxlbWVudFswXS5vZmZzZXRIZWlnaHQtdGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCkpLHRoaXMuYWN0aXZlLnByZXZBbGwoXCIudWktbWVudS1pdGVtXCIpLmVhY2goZnVuY3Rpb24oKXtyZXR1cm4gMDwodD1HKHRoaXMpKS5vZmZzZXQoKS50b3AtaStzfSksdGhpcy5mb2N1cyhlLHQpKTp0aGlzLmZvY3VzKGUsdGhpcy5fbWVudUl0ZW1zKHRoaXMuYWN0aXZlTWVudSkuZmlyc3QoKSkpOnRoaXMubmV4dChlKX0sX2hhc1Njcm9sbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKTx0aGlzLmVsZW1lbnQucHJvcChcInNjcm9sbEhlaWdodFwiKX0sc2VsZWN0OmZ1bmN0aW9uKGUpe3RoaXMuYWN0aXZlPXRoaXMuYWN0aXZlfHxHKGUudGFyZ2V0KS5jbG9zZXN0KFwiLnVpLW1lbnUtaXRlbVwiKTt2YXIgdD17aXRlbTp0aGlzLmFjdGl2ZX07dGhpcy5hY3RpdmUuaGFzKFwiLnVpLW1lbnVcIikubGVuZ3RofHx0aGlzLmNvbGxhcHNlQWxsKGUsITApLHRoaXMuX3RyaWdnZXIoXCJzZWxlY3RcIixlLHQpfSxfZmlsdGVyTWVudUl0ZW1zOmZ1bmN0aW9uKGUpe3ZhciBlPWUucmVwbGFjZSgvW1xcLVxcW1xcXXt9KCkqKz8uLFxcXFxcXF4kfCNcXHNdL2csXCJcXFxcJCZcIiksdD1uZXcgUmVnRXhwKFwiXlwiK2UsXCJpXCIpO3JldHVybiB0aGlzLmFjdGl2ZU1lbnUuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpLmZpbHRlcihcIi51aS1tZW51LWl0ZW1cIikuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHQudGVzdChTdHJpbmcucHJvdG90eXBlLnRyaW0uY2FsbChHKHRoaXMpLmNoaWxkcmVuKFwiLnVpLW1lbnUtaXRlbS13cmFwcGVyXCIpLnRleHQoKSkpfSl9fSk7Ry53aWRnZXQoXCJ1aS5hdXRvY29tcGxldGVcIix7dmVyc2lvbjpcIjEuMTMuMFwiLGRlZmF1bHRFbGVtZW50OlwiPGlucHV0PlwiLG9wdGlvbnM6e2FwcGVuZFRvOm51bGwsYXV0b0ZvY3VzOiExLGRlbGF5OjMwMCxtaW5MZW5ndGg6MSxwb3NpdGlvbjp7bXk6XCJsZWZ0IHRvcFwiLGF0OlwibGVmdCBib3R0b21cIixjb2xsaXNpb246XCJub25lXCJ9LHNvdXJjZTpudWxsLGNoYW5nZTpudWxsLGNsb3NlOm51bGwsZm9jdXM6bnVsbCxvcGVuOm51bGwscmVzcG9uc2U6bnVsbCxzZWFyY2g6bnVsbCxzZWxlY3Q6bnVsbH0scmVxdWVzdEluZGV4OjAscGVuZGluZzowLF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgaSxzLGEsZT10aGlzLmVsZW1lbnRbMF0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSx0PVwidGV4dGFyZWFcIj09PWUsZT1cImlucHV0XCI9PT1lO3RoaXMuaXNNdWx0aUxpbmU9dHx8IWUmJnRoaXMuX2lzQ29udGVudEVkaXRhYmxlKHRoaXMuZWxlbWVudCksdGhpcy52YWx1ZU1ldGhvZD10aGlzLmVsZW1lbnRbdHx8ZT9cInZhbFwiOlwidGV4dFwiXSx0aGlzLmlzTmV3TWVudT0hMCx0aGlzLl9hZGRDbGFzcyhcInVpLWF1dG9jb21wbGV0ZS1pbnB1dFwiKSx0aGlzLmVsZW1lbnQuYXR0cihcImF1dG9jb21wbGV0ZVwiLFwib2ZmXCIpLHRoaXMuX29uKHRoaXMuZWxlbWVudCx7a2V5ZG93bjpmdW5jdGlvbihlKXtpZih0aGlzLmVsZW1lbnQucHJvcChcInJlYWRPbmx5XCIpKXM9YT1pPSEwO2Vsc2V7cz1hPWk9ITE7dmFyIHQ9Ry51aS5rZXlDb2RlO3N3aXRjaChlLmtleUNvZGUpe2Nhc2UgdC5QQUdFX1VQOmk9ITAsdGhpcy5fbW92ZShcInByZXZpb3VzUGFnZVwiLGUpO2JyZWFrO2Nhc2UgdC5QQUdFX0RPV046aT0hMCx0aGlzLl9tb3ZlKFwibmV4dFBhZ2VcIixlKTticmVhaztjYXNlIHQuVVA6aT0hMCx0aGlzLl9rZXlFdmVudChcInByZXZpb3VzXCIsZSk7YnJlYWs7Y2FzZSB0LkRPV046aT0hMCx0aGlzLl9rZXlFdmVudChcIm5leHRcIixlKTticmVhaztjYXNlIHQuRU5URVI6dGhpcy5tZW51LmFjdGl2ZSYmKGk9ITAsZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubWVudS5zZWxlY3QoZSkpO2JyZWFrO2Nhc2UgdC5UQUI6dGhpcy5tZW51LmFjdGl2ZSYmdGhpcy5tZW51LnNlbGVjdChlKTticmVhaztjYXNlIHQuRVNDQVBFOnRoaXMubWVudS5lbGVtZW50LmlzKFwiOnZpc2libGVcIikmJih0aGlzLmlzTXVsdGlMaW5lfHx0aGlzLl92YWx1ZSh0aGlzLnRlcm0pLHRoaXMuY2xvc2UoZSksZS5wcmV2ZW50RGVmYXVsdCgpKTticmVhaztkZWZhdWx0OnM9ITAsdGhpcy5fc2VhcmNoVGltZW91dChlKX19fSxrZXlwcmVzczpmdW5jdGlvbihlKXtpZihpKXJldHVybiBpPSExLHZvaWQodGhpcy5pc011bHRpTGluZSYmIXRoaXMubWVudS5lbGVtZW50LmlzKFwiOnZpc2libGVcIil8fGUucHJldmVudERlZmF1bHQoKSk7aWYoIXMpe3ZhciB0PUcudWkua2V5Q29kZTtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIHQuUEFHRV9VUDp0aGlzLl9tb3ZlKFwicHJldmlvdXNQYWdlXCIsZSk7YnJlYWs7Y2FzZSB0LlBBR0VfRE9XTjp0aGlzLl9tb3ZlKFwibmV4dFBhZ2VcIixlKTticmVhaztjYXNlIHQuVVA6dGhpcy5fa2V5RXZlbnQoXCJwcmV2aW91c1wiLGUpO2JyZWFrO2Nhc2UgdC5ET1dOOnRoaXMuX2tleUV2ZW50KFwibmV4dFwiLGUpfX19LGlucHV0OmZ1bmN0aW9uKGUpe2lmKGEpcmV0dXJuIGE9ITEsdm9pZCBlLnByZXZlbnREZWZhdWx0KCk7dGhpcy5fc2VhcmNoVGltZW91dChlKX0sZm9jdXM6ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkSXRlbT1udWxsLHRoaXMucHJldmlvdXM9dGhpcy5fdmFsdWUoKX0sYmx1cjpmdW5jdGlvbihlKXtjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLHRoaXMuY2xvc2UoZSksdGhpcy5fY2hhbmdlKGUpfX0pLHRoaXMuX2luaXRTb3VyY2UoKSx0aGlzLm1lbnU9RyhcIjx1bD5cIikuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSkubWVudSh7cm9sZTpudWxsfSkuaGlkZSgpLmF0dHIoe3Vuc2VsZWN0YWJsZTpcIm9uXCJ9KS5tZW51KFwiaW5zdGFuY2VcIiksdGhpcy5fYWRkQ2xhc3ModGhpcy5tZW51LmVsZW1lbnQsXCJ1aS1hdXRvY29tcGxldGVcIixcInVpLWZyb250XCIpLHRoaXMuX29uKHRoaXMubWVudS5lbGVtZW50LHttb3VzZWRvd246ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpfSxtZW51Zm9jdXM6ZnVuY3Rpb24oZSx0KXt2YXIgaTtpZih0aGlzLmlzTmV3TWVudSYmKHRoaXMuaXNOZXdNZW51PSExLGUub3JpZ2luYWxFdmVudCYmL15tb3VzZS8udGVzdChlLm9yaWdpbmFsRXZlbnQudHlwZSkpKXJldHVybiB0aGlzLm1lbnUuYmx1cigpLHZvaWQgdGhpcy5kb2N1bWVudC5vbmUoXCJtb3VzZW1vdmVcIixmdW5jdGlvbigpe0coZS50YXJnZXQpLnRyaWdnZXIoZS5vcmlnaW5hbEV2ZW50KX0pO2k9dC5pdGVtLmRhdGEoXCJ1aS1hdXRvY29tcGxldGUtaXRlbVwiKSwhMSE9PXRoaXMuX3RyaWdnZXIoXCJmb2N1c1wiLGUse2l0ZW06aX0pJiZlLm9yaWdpbmFsRXZlbnQmJi9ea2V5Ly50ZXN0KGUub3JpZ2luYWxFdmVudC50eXBlKSYmdGhpcy5fdmFsdWUoaS52YWx1ZSksKGk9dC5pdGVtLmF0dHIoXCJhcmlhLWxhYmVsXCIpfHxpLnZhbHVlKSYmU3RyaW5nLnByb3RvdHlwZS50cmltLmNhbGwoaSkubGVuZ3RoJiYodGhpcy5saXZlUmVnaW9uLmNoaWxkcmVuKCkuaGlkZSgpLEcoXCI8ZGl2PlwiKS50ZXh0KGkpLmFwcGVuZFRvKHRoaXMubGl2ZVJlZ2lvbikpfSxtZW51c2VsZWN0OmZ1bmN0aW9uKGUsdCl7dmFyIGk9dC5pdGVtLmRhdGEoXCJ1aS1hdXRvY29tcGxldGUtaXRlbVwiKSxzPXRoaXMucHJldmlvdXM7dGhpcy5lbGVtZW50WzBdIT09Ry51aS5zYWZlQWN0aXZlRWxlbWVudCh0aGlzLmRvY3VtZW50WzBdKSYmKHRoaXMuZWxlbWVudC50cmlnZ2VyKFwiZm9jdXNcIiksdGhpcy5wcmV2aW91cz1zLHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5wcmV2aW91cz1zLHRoaXMuc2VsZWN0ZWRJdGVtPWl9KSksITEhPT10aGlzLl90cmlnZ2VyKFwic2VsZWN0XCIsZSx7aXRlbTppfSkmJnRoaXMuX3ZhbHVlKGkudmFsdWUpLHRoaXMudGVybT10aGlzLl92YWx1ZSgpLHRoaXMuY2xvc2UoZSksdGhpcy5zZWxlY3RlZEl0ZW09aX19KSx0aGlzLmxpdmVSZWdpb249RyhcIjxkaXY+XCIse3JvbGU6XCJzdGF0dXNcIixcImFyaWEtbGl2ZVwiOlwiYXNzZXJ0aXZlXCIsXCJhcmlhLXJlbGV2YW50XCI6XCJhZGRpdGlvbnNcIn0pLmFwcGVuZFRvKHRoaXMuZG9jdW1lbnRbMF0uYm9keSksdGhpcy5fYWRkQ2xhc3ModGhpcy5saXZlUmVnaW9uLG51bGwsXCJ1aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGVcIiksdGhpcy5fb24odGhpcy53aW5kb3cse2JlZm9yZXVubG9hZDpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVBdHRyKFwiYXV0b2NvbXBsZXRlXCIpfX0pfSxfZGVzdHJveTpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnNlYXJjaGluZyksdGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoXCJhdXRvY29tcGxldGVcIiksdGhpcy5tZW51LmVsZW1lbnQucmVtb3ZlKCksdGhpcy5saXZlUmVnaW9uLnJlbW92ZSgpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7dGhpcy5fc3VwZXIoZSx0KSxcInNvdXJjZVwiPT09ZSYmdGhpcy5faW5pdFNvdXJjZSgpLFwiYXBwZW5kVG9cIj09PWUmJnRoaXMubWVudS5lbGVtZW50LmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLFwiZGlzYWJsZWRcIj09PWUmJnQmJnRoaXMueGhyJiZ0aGlzLnhoci5hYm9ydCgpfSxfaXNFdmVudFRhcmdldEluV2lkZ2V0OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubWVudS5lbGVtZW50WzBdO3JldHVybiBlLnRhcmdldD09PXRoaXMuZWxlbWVudFswXXx8ZS50YXJnZXQ9PT10fHxHLmNvbnRhaW5zKHQsZS50YXJnZXQpfSxfY2xvc2VPbkNsaWNrT3V0c2lkZTpmdW5jdGlvbihlKXt0aGlzLl9pc0V2ZW50VGFyZ2V0SW5XaWRnZXQoZSl8fHRoaXMuY2xvc2UoKX0sX2FwcGVuZFRvOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLmFwcGVuZFRvO3JldHVybiBlPSEoZT0hKGU9ZSYmKGUuanF1ZXJ5fHxlLm5vZGVUeXBlP0coZSk6dGhpcy5kb2N1bWVudC5maW5kKGUpLmVxKDApKSl8fCFlWzBdP3RoaXMuZWxlbWVudC5jbG9zZXN0KFwiLnVpLWZyb250LCBkaWFsb2dcIik6ZSkubGVuZ3RoP3RoaXMuZG9jdW1lbnRbMF0uYm9keTplfSxfaW5pdFNvdXJjZTpmdW5jdGlvbigpe3ZhciBpLHMsYT10aGlzO0FycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zLnNvdXJjZSk/KGk9dGhpcy5vcHRpb25zLnNvdXJjZSx0aGlzLnNvdXJjZT1mdW5jdGlvbihlLHQpe3QoRy51aS5hdXRvY29tcGxldGUuZmlsdGVyKGksZS50ZXJtKSl9KTpcInN0cmluZ1wiPT10eXBlb2YgdGhpcy5vcHRpb25zLnNvdXJjZT8ocz10aGlzLm9wdGlvbnMuc291cmNlLHRoaXMuc291cmNlPWZ1bmN0aW9uKGUsdCl7YS54aHImJmEueGhyLmFib3J0KCksYS54aHI9Ry5hamF4KHt1cmw6cyxkYXRhOmUsZGF0YVR5cGU6XCJqc29uXCIsc3VjY2VzczpmdW5jdGlvbihlKXt0KGUpfSxlcnJvcjpmdW5jdGlvbigpe3QoW10pfX0pfSk6dGhpcy5zb3VyY2U9dGhpcy5vcHRpb25zLnNvdXJjZX0sX3NlYXJjaFRpbWVvdXQ6ZnVuY3Rpb24ocyl7Y2xlYXJUaW1lb3V0KHRoaXMuc2VhcmNoaW5nKSx0aGlzLnNlYXJjaGluZz10aGlzLl9kZWxheShmdW5jdGlvbigpe3ZhciBlPXRoaXMudGVybT09PXRoaXMuX3ZhbHVlKCksdD10aGlzLm1lbnUuZWxlbWVudC5pcyhcIjp2aXNpYmxlXCIpLGk9cy5hbHRLZXl8fHMuY3RybEtleXx8cy5tZXRhS2V5fHxzLnNoaWZ0S2V5O2UmJih0fHxpKXx8KHRoaXMuc2VsZWN0ZWRJdGVtPW51bGwsdGhpcy5zZWFyY2gobnVsbCxzKSl9LHRoaXMub3B0aW9ucy5kZWxheSl9LHNlYXJjaDpmdW5jdGlvbihlLHQpe3JldHVybiBlPW51bGwhPWU/ZTp0aGlzLl92YWx1ZSgpLHRoaXMudGVybT10aGlzLl92YWx1ZSgpLGUubGVuZ3RoPHRoaXMub3B0aW9ucy5taW5MZW5ndGg/dGhpcy5jbG9zZSh0KTohMSE9PXRoaXMuX3RyaWdnZXIoXCJzZWFyY2hcIix0KT90aGlzLl9zZWFyY2goZSk6dm9pZCAwfSxfc2VhcmNoOmZ1bmN0aW9uKGUpe3RoaXMucGVuZGluZysrLHRoaXMuX2FkZENsYXNzKFwidWktYXV0b2NvbXBsZXRlLWxvYWRpbmdcIiksdGhpcy5jYW5jZWxTZWFyY2g9ITEsdGhpcy5zb3VyY2Uoe3Rlcm06ZX0sdGhpcy5fcmVzcG9uc2UoKSl9LF9yZXNwb25zZTpmdW5jdGlvbigpe3ZhciB0PSsrdGhpcy5yZXF1ZXN0SW5kZXg7cmV0dXJuIGZ1bmN0aW9uKGUpe3Q9PT10aGlzLnJlcXVlc3RJbmRleCYmdGhpcy5fX3Jlc3BvbnNlKGUpLHRoaXMucGVuZGluZy0tLHRoaXMucGVuZGluZ3x8dGhpcy5fcmVtb3ZlQ2xhc3MoXCJ1aS1hdXRvY29tcGxldGUtbG9hZGluZ1wiKX0uYmluZCh0aGlzKX0sX19yZXNwb25zZTpmdW5jdGlvbihlKXtlPWUmJnRoaXMuX25vcm1hbGl6ZShlKSx0aGlzLl90cmlnZ2VyKFwicmVzcG9uc2VcIixudWxsLHtjb250ZW50OmV9KSwhdGhpcy5vcHRpb25zLmRpc2FibGVkJiZlJiZlLmxlbmd0aCYmIXRoaXMuY2FuY2VsU2VhcmNoPyh0aGlzLl9zdWdnZXN0KGUpLHRoaXMuX3RyaWdnZXIoXCJvcGVuXCIpKTp0aGlzLl9jbG9zZSgpfSxjbG9zZTpmdW5jdGlvbihlKXt0aGlzLmNhbmNlbFNlYXJjaD0hMCx0aGlzLl9jbG9zZShlKX0sX2Nsb3NlOmZ1bmN0aW9uKGUpe3RoaXMuX29mZih0aGlzLmRvY3VtZW50LFwibW91c2Vkb3duXCIpLHRoaXMubWVudS5lbGVtZW50LmlzKFwiOnZpc2libGVcIikmJih0aGlzLm1lbnUuZWxlbWVudC5oaWRlKCksdGhpcy5tZW51LmJsdXIoKSx0aGlzLmlzTmV3TWVudT0hMCx0aGlzLl90cmlnZ2VyKFwiY2xvc2VcIixlKSl9LF9jaGFuZ2U6ZnVuY3Rpb24oZSl7dGhpcy5wcmV2aW91cyE9PXRoaXMuX3ZhbHVlKCkmJnRoaXMuX3RyaWdnZXIoXCJjaGFuZ2VcIixlLHtpdGVtOnRoaXMuc2VsZWN0ZWRJdGVtfSl9LF9ub3JtYWxpemU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUubGVuZ3RoJiZlWzBdLmxhYmVsJiZlWzBdLnZhbHVlP2U6Ry5tYXAoZSxmdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT97bGFiZWw6ZSx2YWx1ZTplfTpHLmV4dGVuZCh7fSxlLHtsYWJlbDplLmxhYmVsfHxlLnZhbHVlLHZhbHVlOmUudmFsdWV8fGUubGFiZWx9KX0pfSxfc3VnZ2VzdDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm1lbnUuZWxlbWVudC5lbXB0eSgpO3RoaXMuX3JlbmRlck1lbnUodCxlKSx0aGlzLmlzTmV3TWVudT0hMCx0aGlzLm1lbnUucmVmcmVzaCgpLHQuc2hvdygpLHRoaXMuX3Jlc2l6ZU1lbnUoKSx0LnBvc2l0aW9uKEcuZXh0ZW5kKHtvZjp0aGlzLmVsZW1lbnR9LHRoaXMub3B0aW9ucy5wb3NpdGlvbikpLHRoaXMub3B0aW9ucy5hdXRvRm9jdXMmJnRoaXMubWVudS5uZXh0KCksdGhpcy5fb24odGhpcy5kb2N1bWVudCx7bW91c2Vkb3duOlwiX2Nsb3NlT25DbGlja091dHNpZGVcIn0pfSxfcmVzaXplTWVudTpmdW5jdGlvbigpe3ZhciBlPXRoaXMubWVudS5lbGVtZW50O2Uub3V0ZXJXaWR0aChNYXRoLm1heChlLndpZHRoKFwiXCIpLm91dGVyV2lkdGgoKSsxLHRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCkpKX0sX3JlbmRlck1lbnU6ZnVuY3Rpb24oaSxlKXt2YXIgcz10aGlzO0cuZWFjaChlLGZ1bmN0aW9uKGUsdCl7cy5fcmVuZGVySXRlbURhdGEoaSx0KX0pfSxfcmVuZGVySXRlbURhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcmVuZGVySXRlbShlLHQpLmRhdGEoXCJ1aS1hdXRvY29tcGxldGUtaXRlbVwiLHQpfSxfcmVuZGVySXRlbTpmdW5jdGlvbihlLHQpe3JldHVybiBHKFwiPGxpPlwiKS5hcHBlbmQoRyhcIjxkaXY+XCIpLnRleHQodC5sYWJlbCkpLmFwcGVuZFRvKGUpfSxfbW92ZTpmdW5jdGlvbihlLHQpe2lmKHRoaXMubWVudS5lbGVtZW50LmlzKFwiOnZpc2libGVcIikpcmV0dXJuIHRoaXMubWVudS5pc0ZpcnN0SXRlbSgpJiYvXnByZXZpb3VzLy50ZXN0KGUpfHx0aGlzLm1lbnUuaXNMYXN0SXRlbSgpJiYvXm5leHQvLnRlc3QoZSk/KHRoaXMuaXNNdWx0aUxpbmV8fHRoaXMuX3ZhbHVlKHRoaXMudGVybSksdm9pZCB0aGlzLm1lbnUuYmx1cigpKTp2b2lkIHRoaXMubWVudVtlXSh0KTt0aGlzLnNlYXJjaChudWxsLHQpfSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZW51LmVsZW1lbnR9LF92YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlTWV0aG9kLmFwcGx5KHRoaXMuZWxlbWVudCxhcmd1bWVudHMpfSxfa2V5RXZlbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLmlzTXVsdGlMaW5lJiYhdGhpcy5tZW51LmVsZW1lbnQuaXMoXCI6dmlzaWJsZVwiKXx8KHRoaXMuX21vdmUoZSx0KSx0LnByZXZlbnREZWZhdWx0KCkpfSxfaXNDb250ZW50RWRpdGFibGU6ZnVuY3Rpb24oZSl7aWYoIWUubGVuZ3RoKXJldHVybiExO3ZhciB0PWUucHJvcChcImNvbnRlbnRFZGl0YWJsZVwiKTtyZXR1cm5cImluaGVyaXRcIj09PXQ/dGhpcy5faXNDb250ZW50RWRpdGFibGUoZS5wYXJlbnQoKSk6XCJ0cnVlXCI9PT10fX0pLEcuZXh0ZW5kKEcudWkuYXV0b2NvbXBsZXRlLHtlc2NhcGVSZWdleDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXFwtXFxbXFxde30oKSorPy4sXFxcXFxcXiR8I1xcc10vZyxcIlxcXFwkJlwiKX0sZmlsdGVyOmZ1bmN0aW9uKGUsdCl7dmFyIGk9bmV3IFJlZ0V4cChHLnVpLmF1dG9jb21wbGV0ZS5lc2NhcGVSZWdleCh0KSxcImlcIik7cmV0dXJuIEcuZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBpLnRlc3QoZS5sYWJlbHx8ZS52YWx1ZXx8ZSl9KX19KSxHLndpZGdldChcInVpLmF1dG9jb21wbGV0ZVwiLEcudWkuYXV0b2NvbXBsZXRlLHtvcHRpb25zOnttZXNzYWdlczp7bm9SZXN1bHRzOlwiTm8gc2VhcmNoIHJlc3VsdHMuXCIscmVzdWx0czpmdW5jdGlvbihlKXtyZXR1cm4gZSsoMTxlP1wiIHJlc3VsdHMgYXJlXCI6XCIgcmVzdWx0IGlzXCIpK1wiIGF2YWlsYWJsZSwgdXNlIHVwIGFuZCBkb3duIGFycm93IGtleXMgdG8gbmF2aWdhdGUuXCJ9fX0sX19yZXNwb25zZTpmdW5jdGlvbihlKXt0aGlzLl9zdXBlckFwcGx5KGFyZ3VtZW50cyksdGhpcy5vcHRpb25zLmRpc2FibGVkfHx0aGlzLmNhbmNlbFNlYXJjaHx8KGU9ZSYmZS5sZW5ndGg/dGhpcy5vcHRpb25zLm1lc3NhZ2VzLnJlc3VsdHMoZS5sZW5ndGgpOnRoaXMub3B0aW9ucy5tZXNzYWdlcy5ub1Jlc3VsdHMsdGhpcy5saXZlUmVnaW9uLmNoaWxkcmVuKCkuaGlkZSgpLEcoXCI8ZGl2PlwiKS50ZXh0KGUpLmFwcGVuZFRvKHRoaXMubGl2ZVJlZ2lvbikpfX0pO3ZhciBkO0cudWkuYXV0b2NvbXBsZXRlO2Z1bmN0aW9uIHQoKXt0aGlzLl9jdXJJbnN0PW51bGwsdGhpcy5fa2V5RXZlbnQ9ITEsdGhpcy5fZGlzYWJsZWRJbnB1dHM9W10sdGhpcy5fZGF0ZXBpY2tlclNob3dpbmc9ITEsdGhpcy5faW5EaWFsb2c9ITEsdGhpcy5fbWFpbkRpdklkPVwidWktZGF0ZXBpY2tlci1kaXZcIix0aGlzLl9pbmxpbmVDbGFzcz1cInVpLWRhdGVwaWNrZXItaW5saW5lXCIsdGhpcy5fYXBwZW5kQ2xhc3M9XCJ1aS1kYXRlcGlja2VyLWFwcGVuZFwiLHRoaXMuX3RyaWdnZXJDbGFzcz1cInVpLWRhdGVwaWNrZXItdHJpZ2dlclwiLHRoaXMuX2RpYWxvZ0NsYXNzPVwidWktZGF0ZXBpY2tlci1kaWFsb2dcIix0aGlzLl9kaXNhYmxlQ2xhc3M9XCJ1aS1kYXRlcGlja2VyLWRpc2FibGVkXCIsdGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3M9XCJ1aS1kYXRlcGlja2VyLXVuc2VsZWN0YWJsZVwiLHRoaXMuX2N1cnJlbnRDbGFzcz1cInVpLWRhdGVwaWNrZXItY3VycmVudC1kYXlcIix0aGlzLl9kYXlPdmVyQ2xhc3M9XCJ1aS1kYXRlcGlja2VyLWRheXMtY2VsbC1vdmVyXCIsdGhpcy5yZWdpb25hbD1bXSx0aGlzLnJlZ2lvbmFsW1wiXCJdPXtjbG9zZVRleHQ6XCJEb25lXCIscHJldlRleHQ6XCJQcmV2XCIsbmV4dFRleHQ6XCJOZXh0XCIsY3VycmVudFRleHQ6XCJUb2RheVwiLG1vbnRoTmFtZXM6W1wiSmFudWFyeVwiLFwiRmVicnVhcnlcIixcIk1hcmNoXCIsXCJBcHJpbFwiLFwiTWF5XCIsXCJKdW5lXCIsXCJKdWx5XCIsXCJBdWd1c3RcIixcIlNlcHRlbWJlclwiLFwiT2N0b2JlclwiLFwiTm92ZW1iZXJcIixcIkRlY2VtYmVyXCJdLG1vbnRoTmFtZXNTaG9ydDpbXCJKYW5cIixcIkZlYlwiLFwiTWFyXCIsXCJBcHJcIixcIk1heVwiLFwiSnVuXCIsXCJKdWxcIixcIkF1Z1wiLFwiU2VwXCIsXCJPY3RcIixcIk5vdlwiLFwiRGVjXCJdLGRheU5hbWVzOltcIlN1bmRheVwiLFwiTW9uZGF5XCIsXCJUdWVzZGF5XCIsXCJXZWRuZXNkYXlcIixcIlRodXJzZGF5XCIsXCJGcmlkYXlcIixcIlNhdHVyZGF5XCJdLGRheU5hbWVzU2hvcnQ6W1wiU3VuXCIsXCJNb25cIixcIlR1ZVwiLFwiV2VkXCIsXCJUaHVcIixcIkZyaVwiLFwiU2F0XCJdLGRheU5hbWVzTWluOltcIlN1XCIsXCJNb1wiLFwiVHVcIixcIldlXCIsXCJUaFwiLFwiRnJcIixcIlNhXCJdLHdlZWtIZWFkZXI6XCJXa1wiLGRhdGVGb3JtYXQ6XCJtbS9kZC95eVwiLGZpcnN0RGF5OjAsaXNSVEw6ITEsc2hvd01vbnRoQWZ0ZXJZZWFyOiExLHllYXJTdWZmaXg6XCJcIixzZWxlY3RNb250aExhYmVsOlwiU2VsZWN0IG1vbnRoXCIsc2VsZWN0WWVhckxhYmVsOlwiU2VsZWN0IHllYXJcIn0sdGhpcy5fZGVmYXVsdHM9e3Nob3dPbjpcImZvY3VzXCIsc2hvd0FuaW06XCJmYWRlSW5cIixzaG93T3B0aW9uczp7fSxkZWZhdWx0RGF0ZTpudWxsLGFwcGVuZFRleHQ6XCJcIixidXR0b25UZXh0OlwiLi4uXCIsYnV0dG9uSW1hZ2U6XCJcIixidXR0b25JbWFnZU9ubHk6ITEsaGlkZUlmTm9QcmV2TmV4dDohMSxuYXZpZ2F0aW9uQXNEYXRlRm9ybWF0OiExLGdvdG9DdXJyZW50OiExLGNoYW5nZU1vbnRoOiExLGNoYW5nZVllYXI6ITEseWVhclJhbmdlOlwiYy0xMDpjKzEwXCIsc2hvd090aGVyTW9udGhzOiExLHNlbGVjdE90aGVyTW9udGhzOiExLHNob3dXZWVrOiExLGNhbGN1bGF0ZVdlZWs6dGhpcy5pc284NjAxV2VlayxzaG9ydFllYXJDdXRvZmY6XCIrMTBcIixtaW5EYXRlOm51bGwsbWF4RGF0ZTpudWxsLGR1cmF0aW9uOlwiZmFzdFwiLGJlZm9yZVNob3dEYXk6bnVsbCxiZWZvcmVTaG93Om51bGwsb25TZWxlY3Q6bnVsbCxvbkNoYW5nZU1vbnRoWWVhcjpudWxsLG9uQ2xvc2U6bnVsbCxvblVwZGF0ZURhdGVwaWNrZXI6bnVsbCxudW1iZXJPZk1vbnRoczoxLHNob3dDdXJyZW50QXRQb3M6MCxzdGVwTW9udGhzOjEsc3RlcEJpZ01vbnRoczoxMixhbHRGaWVsZDpcIlwiLGFsdEZvcm1hdDpcIlwiLGNvbnN0cmFpbklucHV0OiEwLHNob3dCdXR0b25QYW5lbDohMSxhdXRvU2l6ZTohMSxkaXNhYmxlZDohMX0sRy5leHRlbmQodGhpcy5fZGVmYXVsdHMsdGhpcy5yZWdpb25hbFtcIlwiXSksdGhpcy5yZWdpb25hbC5lbj1HLmV4dGVuZCghMCx7fSx0aGlzLnJlZ2lvbmFsW1wiXCJdKSx0aGlzLnJlZ2lvbmFsW1wiZW4tVVNcIl09Ry5leHRlbmQoITAse30sdGhpcy5yZWdpb25hbC5lbiksdGhpcy5kcERpdj1wKEcoXCI8ZGl2IGlkPSdcIit0aGlzLl9tYWluRGl2SWQrXCInIGNsYXNzPSd1aS1kYXRlcGlja2VyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWFsbCc+PC9kaXY+XCIpKX1mdW5jdGlvbiBwKGUpe3ZhciB0PVwiYnV0dG9uLCAudWktZGF0ZXBpY2tlci1wcmV2LCAudWktZGF0ZXBpY2tlci1uZXh0LCAudWktZGF0ZXBpY2tlci1jYWxlbmRhciB0ZCBhXCI7cmV0dXJuIGUub24oXCJtb3VzZW91dFwiLHQsZnVuY3Rpb24oKXtHKHRoaXMpLnJlbW92ZUNsYXNzKFwidWktc3RhdGUtaG92ZXJcIiksLTEhPT10aGlzLmNsYXNzTmFtZS5pbmRleE9mKFwidWktZGF0ZXBpY2tlci1wcmV2XCIpJiZHKHRoaXMpLnJlbW92ZUNsYXNzKFwidWktZGF0ZXBpY2tlci1wcmV2LWhvdmVyXCIpLC0xIT09dGhpcy5jbGFzc05hbWUuaW5kZXhPZihcInVpLWRhdGVwaWNrZXItbmV4dFwiKSYmRyh0aGlzKS5yZW1vdmVDbGFzcyhcInVpLWRhdGVwaWNrZXItbmV4dC1ob3ZlclwiKX0pLm9uKFwibW91c2VvdmVyXCIsdCxnKX1mdW5jdGlvbiBnKCl7Ry5kYXRlcGlja2VyLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcigoZC5pbmxpbmU/ZC5kcERpdi5wYXJlbnQoKTpkLmlucHV0KVswXSl8fChHKHRoaXMpLnBhcmVudHMoXCIudWktZGF0ZXBpY2tlci1jYWxlbmRhclwiKS5maW5kKFwiYVwiKS5yZW1vdmVDbGFzcyhcInVpLXN0YXRlLWhvdmVyXCIpLEcodGhpcykuYWRkQ2xhc3MoXCJ1aS1zdGF0ZS1ob3ZlclwiKSwtMSE9PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoXCJ1aS1kYXRlcGlja2VyLXByZXZcIikmJkcodGhpcykuYWRkQ2xhc3MoXCJ1aS1kYXRlcGlja2VyLXByZXYtaG92ZXJcIiksLTEhPT10aGlzLmNsYXNzTmFtZS5pbmRleE9mKFwidWktZGF0ZXBpY2tlci1uZXh0XCIpJiZHKHRoaXMpLmFkZENsYXNzKFwidWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyXCIpKX1mdW5jdGlvbiBmKGUsdCl7Zm9yKHZhciBpIGluIEcuZXh0ZW5kKGUsdCksdCludWxsPT10W2ldJiYoZVtpXT10W2ldKTtyZXR1cm4gZX1HLmV4dGVuZChHLnVpLHtkYXRlcGlja2VyOnt2ZXJzaW9uOlwiMS4xMy4wXCJ9fSksRy5leHRlbmQodC5wcm90b3R5cGUse21hcmtlckNsYXNzTmFtZTpcImhhc0RhdGVwaWNrZXJcIixtYXhSb3dzOjQsX3dpZGdldERhdGVwaWNrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kcERpdn0sc2V0RGVmYXVsdHM6ZnVuY3Rpb24oZSl7cmV0dXJuIGYodGhpcy5fZGVmYXVsdHMsZXx8e30pLHRoaXN9LF9hdHRhY2hEYXRlcGlja2VyOmZ1bmN0aW9uKGUsdCl7dmFyIGkscz1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksYT1cImRpdlwiPT09c3x8XCJzcGFuXCI9PT1zO2UuaWR8fCh0aGlzLnV1aWQrPTEsZS5pZD1cImRwXCIrdGhpcy51dWlkKSwoaT10aGlzLl9uZXdJbnN0KEcoZSksYSkpLnNldHRpbmdzPUcuZXh0ZW5kKHt9LHR8fHt9KSxcImlucHV0XCI9PT1zP3RoaXMuX2Nvbm5lY3REYXRlcGlja2VyKGUsaSk6YSYmdGhpcy5faW5saW5lRGF0ZXBpY2tlcihlLGkpfSxfbmV3SW5zdDpmdW5jdGlvbihlLHQpe3JldHVybntpZDplWzBdLmlkLnJlcGxhY2UoLyhbXkEtWmEtejAtOV9cXC1dKS9nLFwiXFxcXFxcXFwkMVwiKSxpbnB1dDplLHNlbGVjdGVkRGF5OjAsc2VsZWN0ZWRNb250aDowLHNlbGVjdGVkWWVhcjowLGRyYXdNb250aDowLGRyYXdZZWFyOjAsaW5saW5lOnQsZHBEaXY6dD9wKEcoXCI8ZGl2IGNsYXNzPSdcIit0aGlzLl9pbmxpbmVDbGFzcytcIiB1aS1kYXRlcGlja2VyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWFsbCc+PC9kaXY+XCIpKTp0aGlzLmRwRGl2fX0sX2Nvbm5lY3REYXRlcGlja2VyOmZ1bmN0aW9uKGUsdCl7dmFyIGk9RyhlKTt0LmFwcGVuZD1HKFtdKSx0LnRyaWdnZXI9RyhbXSksaS5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSl8fCh0aGlzLl9hdHRhY2htZW50cyhpLHQpLGkuYWRkQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLm9uKFwia2V5ZG93blwiLHRoaXMuX2RvS2V5RG93bikub24oXCJrZXlwcmVzc1wiLHRoaXMuX2RvS2V5UHJlc3MpLm9uKFwia2V5dXBcIix0aGlzLl9kb0tleVVwKSx0aGlzLl9hdXRvU2l6ZSh0KSxHLmRhdGEoZSxcImRhdGVwaWNrZXJcIix0KSx0LnNldHRpbmdzLmRpc2FibGVkJiZ0aGlzLl9kaXNhYmxlRGF0ZXBpY2tlcihlKSl9LF9hdHRhY2htZW50czpmdW5jdGlvbihlLHQpe3ZhciBpLHM9dGhpcy5fZ2V0KHQsXCJhcHBlbmRUZXh0XCIpLGE9dGhpcy5fZ2V0KHQsXCJpc1JUTFwiKTt0LmFwcGVuZCYmdC5hcHBlbmQucmVtb3ZlKCkscyYmKHQuYXBwZW5kPUcoXCI8c3Bhbj5cIikuYWRkQ2xhc3ModGhpcy5fYXBwZW5kQ2xhc3MpLnRleHQocyksZVthP1wiYmVmb3JlXCI6XCJhZnRlclwiXSh0LmFwcGVuZCkpLGUub2ZmKFwiZm9jdXNcIix0aGlzLl9zaG93RGF0ZXBpY2tlciksdC50cmlnZ2VyJiZ0LnRyaWdnZXIucmVtb3ZlKCksXCJmb2N1c1wiIT09KGk9dGhpcy5fZ2V0KHQsXCJzaG93T25cIikpJiZcImJvdGhcIiE9PWl8fGUub24oXCJmb2N1c1wiLHRoaXMuX3Nob3dEYXRlcGlja2VyKSxcImJ1dHRvblwiIT09aSYmXCJib3RoXCIhPT1pfHwocz10aGlzLl9nZXQodCxcImJ1dHRvblRleHRcIiksaT10aGlzLl9nZXQodCxcImJ1dHRvbkltYWdlXCIpLHRoaXMuX2dldCh0LFwiYnV0dG9uSW1hZ2VPbmx5XCIpP3QudHJpZ2dlcj1HKFwiPGltZz5cIikuYWRkQ2xhc3ModGhpcy5fdHJpZ2dlckNsYXNzKS5hdHRyKHtzcmM6aSxhbHQ6cyx0aXRsZTpzfSk6KHQudHJpZ2dlcj1HKFwiPGJ1dHRvbiB0eXBlPSdidXR0b24nPlwiKS5hZGRDbGFzcyh0aGlzLl90cmlnZ2VyQ2xhc3MpLGk/dC50cmlnZ2VyLmh0bWwoRyhcIjxpbWc+XCIpLmF0dHIoe3NyYzppLGFsdDpzLHRpdGxlOnN9KSk6dC50cmlnZ2VyLnRleHQocykpLGVbYT9cImJlZm9yZVwiOlwiYWZ0ZXJcIl0odC50cmlnZ2VyKSx0LnRyaWdnZXIub24oXCJjbGlja1wiLGZ1bmN0aW9uKCl7cmV0dXJuIEcuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJkcuZGF0ZXBpY2tlci5fbGFzdElucHV0PT09ZVswXT9HLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCk6KEcuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJkcuZGF0ZXBpY2tlci5fbGFzdElucHV0IT09ZVswXSYmRy5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpLEcuZGF0ZXBpY2tlci5fc2hvd0RhdGVwaWNrZXIoZVswXSkpLCExfSkpfSxfYXV0b1NpemU6ZnVuY3Rpb24oZSl7dmFyIHQsaSxzLGEsbixyO3RoaXMuX2dldChlLFwiYXV0b1NpemVcIikmJiFlLmlubGluZSYmKG49bmV3IERhdGUoMjAwOSwxMSwyMCksKHI9dGhpcy5fZ2V0KGUsXCJkYXRlRm9ybWF0XCIpKS5tYXRjaCgvW0RNXS8pJiYodD1mdW5jdGlvbihlKXtmb3IoYT1zPWk9MDthPGUubGVuZ3RoO2ErKyllW2FdLmxlbmd0aD5pJiYoaT1lW2FdLmxlbmd0aCxzPWEpO3JldHVybiBzfSxuLnNldE1vbnRoKHQodGhpcy5fZ2V0KGUsci5tYXRjaCgvTU0vKT9cIm1vbnRoTmFtZXNcIjpcIm1vbnRoTmFtZXNTaG9ydFwiKSkpLG4uc2V0RGF0ZSh0KHRoaXMuX2dldChlLHIubWF0Y2goL0RELyk/XCJkYXlOYW1lc1wiOlwiZGF5TmFtZXNTaG9ydFwiKSkrMjAtbi5nZXREYXkoKSkpLGUuaW5wdXQuYXR0cihcInNpemVcIix0aGlzLl9mb3JtYXREYXRlKGUsbikubGVuZ3RoKSl9LF9pbmxpbmVEYXRlcGlja2VyOmZ1bmN0aW9uKGUsdCl7dmFyIGk9RyhlKTtpLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKXx8KGkuYWRkQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLmFwcGVuZCh0LmRwRGl2KSxHLmRhdGEoZSxcImRhdGVwaWNrZXJcIix0KSx0aGlzLl9zZXREYXRlKHQsdGhpcy5fZ2V0RGVmYXVsdERhdGUodCksITApLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIodCksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKHQpLHQuc2V0dGluZ3MuZGlzYWJsZWQmJnRoaXMuX2Rpc2FibGVEYXRlcGlja2VyKGUpLHQuZHBEaXYuY3NzKFwiZGlzcGxheVwiLFwiYmxvY2tcIikpfSxfZGlhbG9nRGF0ZXBpY2tlcjpmdW5jdGlvbihlLHQsaSxzLGEpe3ZhciBuLHI9dGhpcy5fZGlhbG9nSW5zdDtyZXR1cm4gcnx8KHRoaXMudXVpZCs9MSxuPVwiZHBcIit0aGlzLnV1aWQsdGhpcy5fZGlhbG9nSW5wdXQ9RyhcIjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nXCIrbitcIicgc3R5bGU9J3Bvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAtMTAwcHg7IHdpZHRoOiAwcHg7Jy8+XCIpLHRoaXMuX2RpYWxvZ0lucHV0Lm9uKFwia2V5ZG93blwiLHRoaXMuX2RvS2V5RG93biksRyhcImJvZHlcIikuYXBwZW5kKHRoaXMuX2RpYWxvZ0lucHV0KSwocj10aGlzLl9kaWFsb2dJbnN0PXRoaXMuX25ld0luc3QodGhpcy5fZGlhbG9nSW5wdXQsITEpKS5zZXR0aW5ncz17fSxHLmRhdGEodGhpcy5fZGlhbG9nSW5wdXRbMF0sXCJkYXRlcGlja2VyXCIscikpLGYoci5zZXR0aW5ncyxzfHx7fSksdD10JiZ0LmNvbnN0cnVjdG9yPT09RGF0ZT90aGlzLl9mb3JtYXREYXRlKHIsdCk6dCx0aGlzLl9kaWFsb2dJbnB1dC52YWwodCksdGhpcy5fcG9zPWE/YS5sZW5ndGg/YTpbYS5wYWdlWCxhLnBhZ2VZXTpudWxsLHRoaXMuX3Bvc3x8KG49ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLHM9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCx0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0fHxkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQsYT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wfHxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCx0aGlzLl9wb3M9W24vMi0xMDArdCxzLzItMTUwK2FdKSx0aGlzLl9kaWFsb2dJbnB1dC5jc3MoXCJsZWZ0XCIsdGhpcy5fcG9zWzBdKzIwK1wicHhcIikuY3NzKFwidG9wXCIsdGhpcy5fcG9zWzFdK1wicHhcIiksci5zZXR0aW5ncy5vblNlbGVjdD1pLHRoaXMuX2luRGlhbG9nPSEwLHRoaXMuZHBEaXYuYWRkQ2xhc3ModGhpcy5fZGlhbG9nQ2xhc3MpLHRoaXMuX3Nob3dEYXRlcGlja2VyKHRoaXMuX2RpYWxvZ0lucHV0WzBdKSxHLmJsb2NrVUkmJkcuYmxvY2tVSSh0aGlzLmRwRGl2KSxHLmRhdGEodGhpcy5fZGlhbG9nSW5wdXRbMF0sXCJkYXRlcGlja2VyXCIsciksdGhpc30sX2Rlc3Ryb3lEYXRlcGlja2VyOmZ1bmN0aW9uKGUpe3ZhciB0LGk9RyhlKSxzPUcuZGF0YShlLFwiZGF0ZXBpY2tlclwiKTtpLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSYmKHQ9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLEcucmVtb3ZlRGF0YShlLFwiZGF0ZXBpY2tlclwiKSxcImlucHV0XCI9PT10PyhzLmFwcGVuZC5yZW1vdmUoKSxzLnRyaWdnZXIucmVtb3ZlKCksaS5yZW1vdmVDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkub2ZmKFwiZm9jdXNcIix0aGlzLl9zaG93RGF0ZXBpY2tlcikub2ZmKFwia2V5ZG93blwiLHRoaXMuX2RvS2V5RG93bikub2ZmKFwia2V5cHJlc3NcIix0aGlzLl9kb0tleVByZXNzKS5vZmYoXCJrZXl1cFwiLHRoaXMuX2RvS2V5VXApKTpcImRpdlwiIT09dCYmXCJzcGFuXCIhPT10fHxpLnJlbW92ZUNsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS5lbXB0eSgpLGQ9PT1zJiYoZD1udWxsLHRoaXMuX2N1ckluc3Q9bnVsbCkpfSxfZW5hYmxlRGF0ZXBpY2tlcjpmdW5jdGlvbih0KXt2YXIgZSxpPUcodCkscz1HLmRhdGEodCxcImRhdGVwaWNrZXJcIik7aS5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkmJihcImlucHV0XCI9PT0oZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpPyh0LmRpc2FibGVkPSExLHMudHJpZ2dlci5maWx0ZXIoXCJidXR0b25cIikuZWFjaChmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9ITF9KS5lbmQoKS5maWx0ZXIoXCJpbWdcIikuY3NzKHtvcGFjaXR5OlwiMS4wXCIsY3Vyc29yOlwiXCJ9KSk6XCJkaXZcIiE9PWUmJlwic3BhblwiIT09ZXx8KChpPWkuY2hpbGRyZW4oXCIuXCIrdGhpcy5faW5saW5lQ2xhc3MpKS5jaGlsZHJlbigpLnJlbW92ZUNsYXNzKFwidWktc3RhdGUtZGlzYWJsZWRcIiksaS5maW5kKFwic2VsZWN0LnVpLWRhdGVwaWNrZXItbW9udGgsIHNlbGVjdC51aS1kYXRlcGlja2VyLXllYXJcIikucHJvcChcImRpc2FibGVkXCIsITEpKSx0aGlzLl9kaXNhYmxlZElucHV0cz1HLm1hcCh0aGlzLl9kaXNhYmxlZElucHV0cyxmdW5jdGlvbihlKXtyZXR1cm4gZT09PXQ/bnVsbDplfSkpfSxfZGlzYWJsZURhdGVwaWNrZXI6ZnVuY3Rpb24odCl7dmFyIGUsaT1HKHQpLHM9Ry5kYXRhKHQsXCJkYXRlcGlja2VyXCIpO2kuaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpJiYoXCJpbnB1dFwiPT09KGU9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKT8odC5kaXNhYmxlZD0hMCxzLnRyaWdnZXIuZmlsdGVyKFwiYnV0dG9uXCIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkPSEwfSkuZW5kKCkuZmlsdGVyKFwiaW1nXCIpLmNzcyh7b3BhY2l0eTpcIjAuNVwiLGN1cnNvcjpcImRlZmF1bHRcIn0pKTpcImRpdlwiIT09ZSYmXCJzcGFuXCIhPT1lfHwoKGk9aS5jaGlsZHJlbihcIi5cIit0aGlzLl9pbmxpbmVDbGFzcykpLmNoaWxkcmVuKCkuYWRkQ2xhc3MoXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiKSxpLmZpbmQoXCJzZWxlY3QudWktZGF0ZXBpY2tlci1tb250aCwgc2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhclwiKS5wcm9wKFwiZGlzYWJsZWRcIiwhMCkpLHRoaXMuX2Rpc2FibGVkSW5wdXRzPUcubWFwKHRoaXMuX2Rpc2FibGVkSW5wdXRzLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dD9udWxsOmV9KSx0aGlzLl9kaXNhYmxlZElucHV0c1t0aGlzLl9kaXNhYmxlZElucHV0cy5sZW5ndGhdPXQpfSxfaXNEaXNhYmxlZERhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuITE7Zm9yKHZhciB0PTA7dDx0aGlzLl9kaXNhYmxlZElucHV0cy5sZW5ndGg7dCsrKWlmKHRoaXMuX2Rpc2FibGVkSW5wdXRzW3RdPT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0sX2dldEluc3Q6ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBHLmRhdGEoZSxcImRhdGVwaWNrZXJcIil9Y2F0Y2goZSl7dGhyb3dcIk1pc3NpbmcgaW5zdGFuY2UgZGF0YSBmb3IgdGhpcyBkYXRlcGlja2VyXCJ9fSxfb3B0aW9uRGF0ZXBpY2tlcjpmdW5jdGlvbihlLHQsaSl7dmFyIHMsYSxuPXRoaXMuX2dldEluc3QoZSk7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgmJlwic3RyaW5nXCI9PXR5cGVvZiB0KXJldHVyblwiZGVmYXVsdHNcIj09PXQ/Ry5leHRlbmQoe30sRy5kYXRlcGlja2VyLl9kZWZhdWx0cyk6bj9cImFsbFwiPT09dD9HLmV4dGVuZCh7fSxuLnNldHRpbmdzKTp0aGlzLl9nZXQobix0KTpudWxsO3M9dHx8e30sXCJzdHJpbmdcIj09dHlwZW9mIHQmJigocz17fSlbdF09aSksbiYmKHRoaXMuX2N1ckluc3Q9PT1uJiZ0aGlzLl9oaWRlRGF0ZXBpY2tlcigpLGE9dGhpcy5fZ2V0RGF0ZURhdGVwaWNrZXIoZSwhMCksdD10aGlzLl9nZXRNaW5NYXhEYXRlKG4sXCJtaW5cIiksaT10aGlzLl9nZXRNaW5NYXhEYXRlKG4sXCJtYXhcIiksZihuLnNldHRpbmdzLHMpLG51bGwhPT10JiZ2b2lkIDAhPT1zLmRhdGVGb3JtYXQmJnZvaWQgMD09PXMubWluRGF0ZSYmKG4uc2V0dGluZ3MubWluRGF0ZT10aGlzLl9mb3JtYXREYXRlKG4sdCkpLG51bGwhPT1pJiZ2b2lkIDAhPT1zLmRhdGVGb3JtYXQmJnZvaWQgMD09PXMubWF4RGF0ZSYmKG4uc2V0dGluZ3MubWF4RGF0ZT10aGlzLl9mb3JtYXREYXRlKG4saSkpLFwiZGlzYWJsZWRcImluIHMmJihzLmRpc2FibGVkP3RoaXMuX2Rpc2FibGVEYXRlcGlja2VyKGUpOnRoaXMuX2VuYWJsZURhdGVwaWNrZXIoZSkpLHRoaXMuX2F0dGFjaG1lbnRzKEcoZSksbiksdGhpcy5fYXV0b1NpemUobiksdGhpcy5fc2V0RGF0ZShuLGEpLHRoaXMuX3VwZGF0ZUFsdGVybmF0ZShuKSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKG4pKX0sX2NoYW5nZURhdGVwaWNrZXI6ZnVuY3Rpb24oZSx0LGkpe3RoaXMuX29wdGlvbkRhdGVwaWNrZXIoZSx0LGkpfSxfcmVmcmVzaERhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7ZT10aGlzLl9nZXRJbnN0KGUpO2UmJnRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoZSl9LF9zZXREYXRlRGF0ZXBpY2tlcjpmdW5jdGlvbihlLHQpe2U9dGhpcy5fZ2V0SW5zdChlKTtlJiYodGhpcy5fc2V0RGF0ZShlLHQpLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoZSksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKGUpKX0sX2dldERhdGVEYXRlcGlja2VyOmZ1bmN0aW9uKGUsdCl7ZT10aGlzLl9nZXRJbnN0KGUpO3JldHVybiBlJiYhZS5pbmxpbmUmJnRoaXMuX3NldERhdGVGcm9tRmllbGQoZSx0KSxlP3RoaXMuX2dldERhdGUoZSk6bnVsbH0sX2RvS2V5RG93bjpmdW5jdGlvbihlKXt2YXIgdCxpLHM9Ry5kYXRlcGlja2VyLl9nZXRJbnN0KGUudGFyZ2V0KSxhPSEwLG49cy5kcERpdi5pcyhcIi51aS1kYXRlcGlja2VyLXJ0bFwiKTtpZihzLl9rZXlFdmVudD0hMCxHLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nKXN3aXRjaChlLmtleUNvZGUpe2Nhc2UgOTpHLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCksYT0hMTticmVhaztjYXNlIDEzOnJldHVybihpPUcoXCJ0ZC5cIitHLmRhdGVwaWNrZXIuX2RheU92ZXJDbGFzcytcIjpub3QoLlwiK0cuZGF0ZXBpY2tlci5fY3VycmVudENsYXNzK1wiKVwiLHMuZHBEaXYpKVswXSYmRy5kYXRlcGlja2VyLl9zZWxlY3REYXkoZS50YXJnZXQscy5zZWxlY3RlZE1vbnRoLHMuc2VsZWN0ZWRZZWFyLGlbMF0pLCh0PUcuZGF0ZXBpY2tlci5fZ2V0KHMsXCJvblNlbGVjdFwiKSk/KGk9Ry5kYXRlcGlja2VyLl9mb3JtYXREYXRlKHMpLHQuYXBwbHkocy5pbnB1dD9zLmlucHV0WzBdOm51bGwsW2ksc10pKTpHLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCksITE7Y2FzZSAyNzpHLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCk7YnJlYWs7Y2FzZSAzMzpHLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsZS5jdHJsS2V5Py1HLmRhdGVwaWNrZXIuX2dldChzLFwic3RlcEJpZ01vbnRoc1wiKTotRy5kYXRlcGlja2VyLl9nZXQocyxcInN0ZXBNb250aHNcIiksXCJNXCIpO2JyZWFrO2Nhc2UgMzQ6Ry5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LGUuY3RybEtleT8rRy5kYXRlcGlja2VyLl9nZXQocyxcInN0ZXBCaWdNb250aHNcIik6K0cuZGF0ZXBpY2tlci5fZ2V0KHMsXCJzdGVwTW9udGhzXCIpLFwiTVwiKTticmVhaztjYXNlIDM1OihlLmN0cmxLZXl8fGUubWV0YUtleSkmJkcuZGF0ZXBpY2tlci5fY2xlYXJEYXRlKGUudGFyZ2V0KSxhPWUuY3RybEtleXx8ZS5tZXRhS2V5O2JyZWFrO2Nhc2UgMzY6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmRy5kYXRlcGlja2VyLl9nb3RvVG9kYXkoZS50YXJnZXQpLGE9ZS5jdHJsS2V5fHxlLm1ldGFLZXk7YnJlYWs7Y2FzZSAzNzooZS5jdHJsS2V5fHxlLm1ldGFLZXkpJiZHLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsbj8xOi0xLFwiRFwiKSxhPWUuY3RybEtleXx8ZS5tZXRhS2V5LGUub3JpZ2luYWxFdmVudC5hbHRLZXkmJkcuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShlLnRhcmdldCxlLmN0cmxLZXk/LUcuZGF0ZXBpY2tlci5fZ2V0KHMsXCJzdGVwQmlnTW9udGhzXCIpOi1HLmRhdGVwaWNrZXIuX2dldChzLFwic3RlcE1vbnRoc1wiKSxcIk1cIik7YnJlYWs7Y2FzZSAzODooZS5jdHJsS2V5fHxlLm1ldGFLZXkpJiZHLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsLTcsXCJEXCIpLGE9ZS5jdHJsS2V5fHxlLm1ldGFLZXk7YnJlYWs7Y2FzZSAzOTooZS5jdHJsS2V5fHxlLm1ldGFLZXkpJiZHLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsbj8tMToxLFwiRFwiKSxhPWUuY3RybEtleXx8ZS5tZXRhS2V5LGUub3JpZ2luYWxFdmVudC5hbHRLZXkmJkcuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShlLnRhcmdldCxlLmN0cmxLZXk/K0cuZGF0ZXBpY2tlci5fZ2V0KHMsXCJzdGVwQmlnTW9udGhzXCIpOitHLmRhdGVwaWNrZXIuX2dldChzLFwic3RlcE1vbnRoc1wiKSxcIk1cIik7YnJlYWs7Y2FzZSA0MDooZS5jdHJsS2V5fHxlLm1ldGFLZXkpJiZHLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsNyxcIkRcIiksYT1lLmN0cmxLZXl8fGUubWV0YUtleTticmVhaztkZWZhdWx0OmE9ITF9ZWxzZSAzNj09PWUua2V5Q29kZSYmZS5jdHJsS2V5P0cuZGF0ZXBpY2tlci5fc2hvd0RhdGVwaWNrZXIodGhpcyk6YT0hMTthJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCkpfSxfZG9LZXlQcmVzczpmdW5jdGlvbihlKXt2YXIgdCxpPUcuZGF0ZXBpY2tlci5fZ2V0SW5zdChlLnRhcmdldCk7aWYoRy5kYXRlcGlja2VyLl9nZXQoaSxcImNvbnN0cmFpbklucHV0XCIpKXJldHVybiB0PUcuZGF0ZXBpY2tlci5fcG9zc2libGVDaGFycyhHLmRhdGVwaWNrZXIuX2dldChpLFwiZGF0ZUZvcm1hdFwiKSksaT1TdHJpbmcuZnJvbUNoYXJDb2RlKG51bGw9PWUuY2hhckNvZGU/ZS5rZXlDb2RlOmUuY2hhckNvZGUpLGUuY3RybEtleXx8ZS5tZXRhS2V5fHxpPFwiIFwifHwhdHx8LTE8dC5pbmRleE9mKGkpfSxfZG9LZXlVcDpmdW5jdGlvbihlKXtlPUcuZGF0ZXBpY2tlci5fZ2V0SW5zdChlLnRhcmdldCk7aWYoZS5pbnB1dC52YWwoKSE9PWUubGFzdFZhbCl0cnl7Ry5kYXRlcGlja2VyLnBhcnNlRGF0ZShHLmRhdGVwaWNrZXIuX2dldChlLFwiZGF0ZUZvcm1hdFwiKSxlLmlucHV0P2UuaW5wdXQudmFsKCk6bnVsbCxHLmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyhlKSkmJihHLmRhdGVwaWNrZXIuX3NldERhdGVGcm9tRmllbGQoZSksRy5kYXRlcGlja2VyLl91cGRhdGVBbHRlcm5hdGUoZSksRy5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyKGUpKX1jYXRjaChlKXt9cmV0dXJuITB9LF9zaG93RGF0ZXBpY2tlcjpmdW5jdGlvbihlKXt2YXIgdCxpLHMsYTtcImlucHV0XCIhPT0oZT1lLnRhcmdldHx8ZSkubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmKGU9RyhcImlucHV0XCIsZS5wYXJlbnROb2RlKVswXSksRy5kYXRlcGlja2VyLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihlKXx8Ry5kYXRlcGlja2VyLl9sYXN0SW5wdXQ9PT1lfHwoYT1HLmRhdGVwaWNrZXIuX2dldEluc3QoZSksRy5kYXRlcGlja2VyLl9jdXJJbnN0JiZHLmRhdGVwaWNrZXIuX2N1ckluc3QhPT1hJiYoRy5kYXRlcGlja2VyLl9jdXJJbnN0LmRwRGl2LnN0b3AoITAsITApLGEmJkcuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJkcuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoRy5kYXRlcGlja2VyLl9jdXJJbnN0LmlucHV0WzBdKSksITEhPT0oaT0ocz1HLmRhdGVwaWNrZXIuX2dldChhLFwiYmVmb3JlU2hvd1wiKSk/cy5hcHBseShlLFtlLGFdKTp7fSkmJihmKGEuc2V0dGluZ3MsaSksYS5sYXN0VmFsPW51bGwsRy5kYXRlcGlja2VyLl9sYXN0SW5wdXQ9ZSxHLmRhdGVwaWNrZXIuX3NldERhdGVGcm9tRmllbGQoYSksRy5kYXRlcGlja2VyLl9pbkRpYWxvZyYmKGUudmFsdWU9XCJcIiksRy5kYXRlcGlja2VyLl9wb3N8fChHLmRhdGVwaWNrZXIuX3Bvcz1HLmRhdGVwaWNrZXIuX2ZpbmRQb3MoZSksRy5kYXRlcGlja2VyLl9wb3NbMV0rPWUub2Zmc2V0SGVpZ2h0KSx0PSExLEcoZSkucGFyZW50cygpLmVhY2goZnVuY3Rpb24oKXtyZXR1cm4hKHR8PVwiZml4ZWRcIj09PUcodGhpcykuY3NzKFwicG9zaXRpb25cIikpfSkscz17bGVmdDpHLmRhdGVwaWNrZXIuX3Bvc1swXSx0b3A6Ry5kYXRlcGlja2VyLl9wb3NbMV19LEcuZGF0ZXBpY2tlci5fcG9zPW51bGwsYS5kcERpdi5lbXB0eSgpLGEuZHBEaXYuY3NzKHtwb3NpdGlvbjpcImFic29sdXRlXCIsZGlzcGxheTpcImJsb2NrXCIsdG9wOlwiLTEwMDBweFwifSksRy5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyKGEpLHM9Ry5kYXRlcGlja2VyLl9jaGVja09mZnNldChhLHMsdCksYS5kcERpdi5jc3Moe3Bvc2l0aW9uOkcuZGF0ZXBpY2tlci5faW5EaWFsb2cmJkcuYmxvY2tVST9cInN0YXRpY1wiOnQ/XCJmaXhlZFwiOlwiYWJzb2x1dGVcIixkaXNwbGF5Olwibm9uZVwiLGxlZnQ6cy5sZWZ0K1wicHhcIix0b3A6cy50b3ArXCJweFwifSksYS5pbmxpbmV8fChpPUcuZGF0ZXBpY2tlci5fZ2V0KGEsXCJzaG93QW5pbVwiKSxzPUcuZGF0ZXBpY2tlci5fZ2V0KGEsXCJkdXJhdGlvblwiKSxhLmRwRGl2LmNzcyhcInotaW5kZXhcIixmdW5jdGlvbihlKXtmb3IodmFyIHQsaTtlLmxlbmd0aCYmZVswXSE9PWRvY3VtZW50Oyl7aWYoKFwiYWJzb2x1dGVcIj09PSh0PWUuY3NzKFwicG9zaXRpb25cIikpfHxcInJlbGF0aXZlXCI9PT10fHxcImZpeGVkXCI9PT10KSYmKGk9cGFyc2VJbnQoZS5jc3MoXCJ6SW5kZXhcIiksMTApLCFpc05hTihpKSYmMCE9PWkpKXJldHVybiBpO2U9ZS5wYXJlbnQoKX1yZXR1cm4gMH0oRyhlKSkrMSksRy5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZz0hMCxHLmVmZmVjdHMmJkcuZWZmZWN0cy5lZmZlY3RbaV0/YS5kcERpdi5zaG93KGksRy5kYXRlcGlja2VyLl9nZXQoYSxcInNob3dPcHRpb25zXCIpLHMpOmEuZHBEaXZbaXx8XCJzaG93XCJdKGk/czpudWxsKSxHLmRhdGVwaWNrZXIuX3Nob3VsZEZvY3VzSW5wdXQoYSkmJmEuaW5wdXQudHJpZ2dlcihcImZvY3VzXCIpLEcuZGF0ZXBpY2tlci5fY3VySW5zdD1hKSkpfSxfdXBkYXRlRGF0ZXBpY2tlcjpmdW5jdGlvbihlKXt0aGlzLm1heFJvd3M9NCwoZD1lKS5kcERpdi5lbXB0eSgpLmFwcGVuZCh0aGlzLl9nZW5lcmF0ZUhUTUwoZSkpLHRoaXMuX2F0dGFjaEhhbmRsZXJzKGUpO3ZhciB0LGk9dGhpcy5fZ2V0TnVtYmVyT2ZNb250aHMoZSkscz1pWzFdLGE9ZS5kcERpdi5maW5kKFwiLlwiK3RoaXMuX2RheU92ZXJDbGFzcytcIiBhXCIpLG49Ry5kYXRlcGlja2VyLl9nZXQoZSxcIm9uVXBkYXRlRGF0ZXBpY2tlclwiKTswPGEubGVuZ3RoJiZnLmFwcGx5KGEuZ2V0KDApKSxlLmRwRGl2LnJlbW92ZUNsYXNzKFwidWktZGF0ZXBpY2tlci1tdWx0aS0yIHVpLWRhdGVwaWNrZXItbXVsdGktMyB1aS1kYXRlcGlja2VyLW11bHRpLTRcIikud2lkdGgoXCJcIiksMTxzJiZlLmRwRGl2LmFkZENsYXNzKFwidWktZGF0ZXBpY2tlci1tdWx0aS1cIitzKS5jc3MoXCJ3aWR0aFwiLDE3KnMrXCJlbVwiKSxlLmRwRGl2WygxIT09aVswXXx8MSE9PWlbMV0/XCJhZGRcIjpcInJlbW92ZVwiKStcIkNsYXNzXCJdKFwidWktZGF0ZXBpY2tlci1tdWx0aVwiKSxlLmRwRGl2Wyh0aGlzLl9nZXQoZSxcImlzUlRMXCIpP1wiYWRkXCI6XCJyZW1vdmVcIikrXCJDbGFzc1wiXShcInVpLWRhdGVwaWNrZXItcnRsXCIpLGU9PT1HLmRhdGVwaWNrZXIuX2N1ckluc3QmJkcuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJkcuZGF0ZXBpY2tlci5fc2hvdWxkRm9jdXNJbnB1dChlKSYmZS5pbnB1dC50cmlnZ2VyKFwiZm9jdXNcIiksZS55ZWFyc2h0bWwmJih0PWUueWVhcnNodG1sLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0PT09ZS55ZWFyc2h0bWwmJmUueWVhcnNodG1sJiZlLmRwRGl2LmZpbmQoXCJzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyXCIpLmZpcnN0KCkucmVwbGFjZVdpdGgoZS55ZWFyc2h0bWwpLHQ9ZS55ZWFyc2h0bWw9bnVsbH0sMCkpLG4mJm4uYXBwbHkoZS5pbnB1dD9lLmlucHV0WzBdOm51bGwsW2VdKX0sX3Nob3VsZEZvY3VzSW5wdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5wdXQmJmUuaW5wdXQuaXMoXCI6dmlzaWJsZVwiKSYmIWUuaW5wdXQuaXMoXCI6ZGlzYWJsZWRcIikmJiFlLmlucHV0LmlzKFwiOmZvY3VzXCIpfSxfY2hlY2tPZmZzZXQ6ZnVuY3Rpb24oZSx0LGkpe3ZhciBzPWUuZHBEaXYub3V0ZXJXaWR0aCgpLGE9ZS5kcERpdi5vdXRlckhlaWdodCgpLG49ZS5pbnB1dD9lLmlucHV0Lm91dGVyV2lkdGgoKTowLHI9ZS5pbnB1dD9lLmlucHV0Lm91dGVySGVpZ2h0KCk6MCxvPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCsoaT8wOkcoZG9jdW1lbnQpLnNjcm9sbExlZnQoKSksbD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KyhpPzA6Ryhkb2N1bWVudCkuc2Nyb2xsVG9wKCkpO3JldHVybiB0LmxlZnQtPXRoaXMuX2dldChlLFwiaXNSVExcIik/cy1uOjAsdC5sZWZ0LT1pJiZ0LmxlZnQ9PT1lLmlucHV0Lm9mZnNldCgpLmxlZnQ/Ryhkb2N1bWVudCkuc2Nyb2xsTGVmdCgpOjAsdC50b3AtPWkmJnQudG9wPT09ZS5pbnB1dC5vZmZzZXQoKS50b3Arcj9HKGRvY3VtZW50KS5zY3JvbGxUb3AoKTowLHQubGVmdC09TWF0aC5taW4odC5sZWZ0LHQubGVmdCtzPm8mJnM8bz9NYXRoLmFicyh0LmxlZnQrcy1vKTowKSx0LnRvcC09TWF0aC5taW4odC50b3AsdC50b3ArYT5sJiZhPGw/TWF0aC5hYnMoYStyKTowKSx0fSxfZmluZFBvczpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5fZ2V0SW5zdChlKSxpPXRoaXMuX2dldCh0LFwiaXNSVExcIik7ZSYmKFwiaGlkZGVuXCI9PT1lLnR5cGV8fDEhPT1lLm5vZGVUeXBlfHxHLmV4cHIucHNldWRvcy5oaWRkZW4oZSkpOyllPWVbaT9cInByZXZpb3VzU2libGluZ1wiOlwibmV4dFNpYmxpbmdcIl07cmV0dXJuWyh0PUcoZSkub2Zmc2V0KCkpLmxlZnQsdC50b3BdfSxfaGlkZURhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7dmFyIHQsaSxzPXRoaXMuX2N1ckluc3Q7IXN8fGUmJnMhPT1HLmRhdGEoZSxcImRhdGVwaWNrZXJcIil8fHRoaXMuX2RhdGVwaWNrZXJTaG93aW5nJiYodD10aGlzLl9nZXQocyxcInNob3dBbmltXCIpLGk9dGhpcy5fZ2V0KHMsXCJkdXJhdGlvblwiKSxlPWZ1bmN0aW9uKCl7Ry5kYXRlcGlja2VyLl90aWR5RGlhbG9nKHMpfSxHLmVmZmVjdHMmJihHLmVmZmVjdHMuZWZmZWN0W3RdfHxHLmVmZmVjdHNbdF0pP3MuZHBEaXYuaGlkZSh0LEcuZGF0ZXBpY2tlci5fZ2V0KHMsXCJzaG93T3B0aW9uc1wiKSxpLGUpOnMuZHBEaXZbXCJzbGlkZURvd25cIj09PXQ/XCJzbGlkZVVwXCI6XCJmYWRlSW5cIj09PXQ/XCJmYWRlT3V0XCI6XCJoaWRlXCJdKHQ/aTpudWxsLGUpLHR8fGUoKSx0aGlzLl9kYXRlcGlja2VyU2hvd2luZz0hMSwoZT10aGlzLl9nZXQocyxcIm9uQ2xvc2VcIikpJiZlLmFwcGx5KHMuaW5wdXQ/cy5pbnB1dFswXTpudWxsLFtzLmlucHV0P3MuaW5wdXQudmFsKCk6XCJcIixzXSksdGhpcy5fbGFzdElucHV0PW51bGwsdGhpcy5faW5EaWFsb2cmJih0aGlzLl9kaWFsb2dJbnB1dC5jc3Moe3Bvc2l0aW9uOlwiYWJzb2x1dGVcIixsZWZ0OlwiMFwiLHRvcDpcIi0xMDBweFwifSksRy5ibG9ja1VJJiYoRy51bmJsb2NrVUkoKSxHKFwiYm9keVwiKS5hcHBlbmQodGhpcy5kcERpdikpKSx0aGlzLl9pbkRpYWxvZz0hMSl9LF90aWR5RGlhbG9nOmZ1bmN0aW9uKGUpe2UuZHBEaXYucmVtb3ZlQ2xhc3ModGhpcy5fZGlhbG9nQ2xhc3MpLm9mZihcIi51aS1kYXRlcGlja2VyLWNhbGVuZGFyXCIpfSxfY2hlY2tFeHRlcm5hbENsaWNrOmZ1bmN0aW9uKGUpe3ZhciB0O0cuZGF0ZXBpY2tlci5fY3VySW5zdCYmKHQ9RyhlLnRhcmdldCksZT1HLmRhdGVwaWNrZXIuX2dldEluc3QodFswXSksKHRbMF0uaWQ9PT1HLmRhdGVwaWNrZXIuX21haW5EaXZJZHx8MCE9PXQucGFyZW50cyhcIiNcIitHLmRhdGVwaWNrZXIuX21haW5EaXZJZCkubGVuZ3RofHx0Lmhhc0NsYXNzKEcuZGF0ZXBpY2tlci5tYXJrZXJDbGFzc05hbWUpfHx0LmNsb3Nlc3QoXCIuXCIrRy5kYXRlcGlja2VyLl90cmlnZ2VyQ2xhc3MpLmxlbmd0aHx8IUcuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmd8fEcuZGF0ZXBpY2tlci5faW5EaWFsb2cmJkcuYmxvY2tVSSkmJighdC5oYXNDbGFzcyhHLmRhdGVwaWNrZXIubWFya2VyQ2xhc3NOYW1lKXx8Ry5kYXRlcGlja2VyLl9jdXJJbnN0PT09ZSl8fEcuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKSl9LF9hZGp1c3REYXRlOmZ1bmN0aW9uKGUsdCxpKXt2YXIgcz1HKGUpLGU9dGhpcy5fZ2V0SW5zdChzWzBdKTt0aGlzLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihzWzBdKXx8KHRoaXMuX2FkanVzdEluc3REYXRlKGUsdCxpKSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKGUpKX0sX2dvdG9Ub2RheTpmdW5jdGlvbihlKXt2YXIgdD1HKGUpLGk9dGhpcy5fZ2V0SW5zdCh0WzBdKTt0aGlzLl9nZXQoaSxcImdvdG9DdXJyZW50XCIpJiZpLmN1cnJlbnREYXk/KGkuc2VsZWN0ZWREYXk9aS5jdXJyZW50RGF5LGkuZHJhd01vbnRoPWkuc2VsZWN0ZWRNb250aD1pLmN1cnJlbnRNb250aCxpLmRyYXdZZWFyPWkuc2VsZWN0ZWRZZWFyPWkuY3VycmVudFllYXIpOihlPW5ldyBEYXRlLGkuc2VsZWN0ZWREYXk9ZS5nZXREYXRlKCksaS5kcmF3TW9udGg9aS5zZWxlY3RlZE1vbnRoPWUuZ2V0TW9udGgoKSxpLmRyYXdZZWFyPWkuc2VsZWN0ZWRZZWFyPWUuZ2V0RnVsbFllYXIoKSksdGhpcy5fbm90aWZ5Q2hhbmdlKGkpLHRoaXMuX2FkanVzdERhdGUodCl9LF9zZWxlY3RNb250aFllYXI6ZnVuY3Rpb24oZSx0LGkpe3ZhciBzPUcoZSksZT10aGlzLl9nZXRJbnN0KHNbMF0pO2VbXCJzZWxlY3RlZFwiKyhcIk1cIj09PWk/XCJNb250aFwiOlwiWWVhclwiKV09ZVtcImRyYXdcIisoXCJNXCI9PT1pP1wiTW9udGhcIjpcIlllYXJcIildPXBhcnNlSW50KHQub3B0aW9uc1t0LnNlbGVjdGVkSW5kZXhdLnZhbHVlLDEwKSx0aGlzLl9ub3RpZnlDaGFuZ2UoZSksdGhpcy5fYWRqdXN0RGF0ZShzKX0sX3NlbGVjdERheTpmdW5jdGlvbihlLHQsaSxzKXt2YXIgYT1HKGUpO0cocykuaGFzQ2xhc3ModGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3MpfHx0aGlzLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihhWzBdKXx8KChhPXRoaXMuX2dldEluc3QoYVswXSkpLnNlbGVjdGVkRGF5PWEuY3VycmVudERheT1wYXJzZUludChHKFwiYVwiLHMpLmF0dHIoXCJkYXRhLWRhdGVcIikpLGEuc2VsZWN0ZWRNb250aD1hLmN1cnJlbnRNb250aD10LGEuc2VsZWN0ZWRZZWFyPWEuY3VycmVudFllYXI9aSx0aGlzLl9zZWxlY3REYXRlKGUsdGhpcy5fZm9ybWF0RGF0ZShhLGEuY3VycmVudERheSxhLmN1cnJlbnRNb250aCxhLmN1cnJlbnRZZWFyKSkpfSxfY2xlYXJEYXRlOmZ1bmN0aW9uKGUpe2U9RyhlKTt0aGlzLl9zZWxlY3REYXRlKGUsXCJcIil9LF9zZWxlY3REYXRlOmZ1bmN0aW9uKGUsdCl7dmFyIGk9RyhlKSxlPXRoaXMuX2dldEluc3QoaVswXSk7dD1udWxsIT10P3Q6dGhpcy5fZm9ybWF0RGF0ZShlKSxlLmlucHV0JiZlLmlucHV0LnZhbCh0KSx0aGlzLl91cGRhdGVBbHRlcm5hdGUoZSksKGk9dGhpcy5fZ2V0KGUsXCJvblNlbGVjdFwiKSk/aS5hcHBseShlLmlucHV0P2UuaW5wdXRbMF06bnVsbCxbdCxlXSk6ZS5pbnB1dCYmZS5pbnB1dC50cmlnZ2VyKFwiY2hhbmdlXCIpLGUuaW5saW5lP3RoaXMuX3VwZGF0ZURhdGVwaWNrZXIoZSk6KHRoaXMuX2hpZGVEYXRlcGlja2VyKCksdGhpcy5fbGFzdElucHV0PWUuaW5wdXRbMF0sXCJvYmplY3RcIiE9dHlwZW9mIGUuaW5wdXRbMF0mJmUuaW5wdXQudHJpZ2dlcihcImZvY3VzXCIpLHRoaXMuX2xhc3RJbnB1dD1udWxsKX0sX3VwZGF0ZUFsdGVybmF0ZTpmdW5jdGlvbihlKXt2YXIgdCxpLHM9dGhpcy5fZ2V0KGUsXCJhbHRGaWVsZFwiKTtzJiYodD10aGlzLl9nZXQoZSxcImFsdEZvcm1hdFwiKXx8dGhpcy5fZ2V0KGUsXCJkYXRlRm9ybWF0XCIpLGk9dGhpcy5fZ2V0RGF0ZShlKSxlPXRoaXMuZm9ybWF0RGF0ZSh0LGksdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGUpKSxHKGRvY3VtZW50KS5maW5kKHMpLnZhbChlKSl9LG5vV2Vla2VuZHM6ZnVuY3Rpb24oZSl7ZT1lLmdldERheSgpO3JldHVyblswPGUmJmU8NixcIlwiXX0saXNvODYwMVdlZWs6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IERhdGUoZS5nZXRUaW1lKCkpO3JldHVybiB0LnNldERhdGUodC5nZXREYXRlKCkrNC0odC5nZXREYXkoKXx8NykpLGU9dC5nZXRUaW1lKCksdC5zZXRNb250aCgwKSx0LnNldERhdGUoMSksTWF0aC5mbG9vcihNYXRoLnJvdW5kKChlLXQpLzg2NGU1KS83KSsxfSxwYXJzZURhdGU6ZnVuY3Rpb24odCxhLGUpe2lmKG51bGw9PXR8fG51bGw9PWEpdGhyb3dcIkludmFsaWQgYXJndW1lbnRzXCI7aWYoXCJcIj09PShhPVwib2JqZWN0XCI9PXR5cGVvZiBhP2EudG9TdHJpbmcoKTphK1wiXCIpKXJldHVybiBudWxsO2Zvcih2YXIgaSxzLG4scj0wLG89KGU/ZS5zaG9ydFllYXJDdXRvZmY6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLnNob3J0WWVhckN1dG9mZixvPVwic3RyaW5nXCIhPXR5cGVvZiBvP286KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpJTEwMCtwYXJzZUludChvLDEwKSxsPShlP2UuZGF5TmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXNTaG9ydCx1PShlP2UuZGF5TmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzLGg9KGU/ZS5tb250aE5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXNTaG9ydCxjPShlP2UubW9udGhOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lcyxkPS0xLHA9LTEsZz0tMSxmPS0xLG09ITEsXz1mdW5jdGlvbihlKXtlPUQrMTx0Lmxlbmd0aCYmdC5jaGFyQXQoRCsxKT09PWU7cmV0dXJuIGUmJkQrKyxlfSx2PWZ1bmN0aW9uKGUpe3ZhciB0PV8oZSksdD1cIkBcIj09PWU/MTQ6XCIhXCI9PT1lPzIwOlwieVwiPT09ZSYmdD80Olwib1wiPT09ZT8zOjIsdD1uZXcgUmVnRXhwKFwiXlxcXFxke1wiKyhcInlcIj09PWU/dDoxKStcIixcIit0K1wifVwiKSx0PWEuc3Vic3RyaW5nKHIpLm1hdGNoKHQpO2lmKCF0KXRocm93XCJNaXNzaW5nIG51bWJlciBhdCBwb3NpdGlvbiBcIityO3JldHVybiByKz10WzBdLmxlbmd0aCxwYXJzZUludCh0WzBdLDEwKX0seT1mdW5jdGlvbihlLHQsaSl7dmFyIHM9LTEsdD1HLm1hcChfKGUpP2k6dCxmdW5jdGlvbihlLHQpe3JldHVybltbdCxlXV19KS5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuLShlWzFdLmxlbmd0aC10WzFdLmxlbmd0aCl9KTtpZihHLmVhY2godCxmdW5jdGlvbihlLHQpe3ZhciBpPXRbMV07aWYoYS5zdWJzdHIocixpLmxlbmd0aCkudG9Mb3dlckNhc2UoKT09PWkudG9Mb3dlckNhc2UoKSlyZXR1cm4gcz10WzBdLHIrPWkubGVuZ3RoLCExfSksLTEhPT1zKXJldHVybiBzKzE7dGhyb3dcIlVua25vd24gbmFtZSBhdCBwb3NpdGlvbiBcIityfSxrPWZ1bmN0aW9uKCl7aWYoYS5jaGFyQXQocikhPT10LmNoYXJBdChEKSl0aHJvd1wiVW5leHBlY3RlZCBsaXRlcmFsIGF0IHBvc2l0aW9uIFwiK3I7cisrfSxEPTA7RDx0Lmxlbmd0aDtEKyspaWYobSlcIidcIiE9PXQuY2hhckF0KEQpfHxfKFwiJ1wiKT9rKCk6bT0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdChEKSl7Y2FzZVwiZFwiOmc9dihcImRcIik7YnJlYWs7Y2FzZVwiRFwiOnkoXCJEXCIsbCx1KTticmVhaztjYXNlXCJvXCI6Zj12KFwib1wiKTticmVhaztjYXNlXCJtXCI6cD12KFwibVwiKTticmVhaztjYXNlXCJNXCI6cD15KFwiTVwiLGgsYyk7YnJlYWs7Y2FzZVwieVwiOmQ9dihcInlcIik7YnJlYWs7Y2FzZVwiQFwiOmQ9KG49bmV3IERhdGUodihcIkBcIikpKS5nZXRGdWxsWWVhcigpLHA9bi5nZXRNb250aCgpKzEsZz1uLmdldERhdGUoKTticmVhaztjYXNlXCIhXCI6ZD0obj1uZXcgRGF0ZSgodihcIiFcIiktdGhpcy5fdGlja3NUbzE5NzApLzFlNCkpLmdldEZ1bGxZZWFyKCkscD1uLmdldE1vbnRoKCkrMSxnPW4uZ2V0RGF0ZSgpO2JyZWFrO2Nhc2VcIidcIjpfKFwiJ1wiKT9rKCk6bT0hMDticmVhaztkZWZhdWx0OmsoKX1pZihyPGEubGVuZ3RoJiYocz1hLnN1YnN0cihyKSwhL15cXHMrLy50ZXN0KHMpKSl0aHJvd1wiRXh0cmEvdW5wYXJzZWQgY2hhcmFjdGVycyBmb3VuZCBpbiBkYXRlOiBcIitzO2lmKC0xPT09ZD9kPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKTpkPDEwMCYmKGQrPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKS0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCklMTAwKyhkPD1vPzA6LTEwMCkpLC0xPGYpZm9yKHA9MSxnPWY7Oyl7aWYoZzw9KGk9dGhpcy5fZ2V0RGF5c0luTW9udGgoZCxwLTEpKSlicmVhaztwKyssZy09aX1pZigobj10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShkLHAtMSxnKSkpLmdldEZ1bGxZZWFyKCkhPT1kfHxuLmdldE1vbnRoKCkrMSE9PXB8fG4uZ2V0RGF0ZSgpIT09Zyl0aHJvd1wiSW52YWxpZCBkYXRlXCI7cmV0dXJuIG59LEFUT006XCJ5eS1tbS1kZFwiLENPT0tJRTpcIkQsIGRkIE0geXlcIixJU09fODYwMTpcInl5LW1tLWRkXCIsUkZDXzgyMjpcIkQsIGQgTSB5XCIsUkZDXzg1MDpcIkRELCBkZC1NLXlcIixSRkNfMTAzNjpcIkQsIGQgTSB5XCIsUkZDXzExMjM6XCJELCBkIE0geXlcIixSRkNfMjgyMjpcIkQsIGQgTSB5eVwiLFJTUzpcIkQsIGQgTSB5XCIsVElDS1M6XCIhXCIsVElNRVNUQU1QOlwiQFwiLFczQzpcInl5LW1tLWRkXCIsX3RpY2tzVG8xOTcwOjI0Kig3MTg2ODUrTWF0aC5mbG9vcig0OTIuNSktTWF0aC5mbG9vcigxOS43KStNYXRoLmZsb29yKDQuOTI1KSkqNjAqNjAqMWU3LGZvcm1hdERhdGU6ZnVuY3Rpb24odCxlLGkpe2lmKCFlKXJldHVyblwiXCI7ZnVuY3Rpb24gcyhlLHQsaSl7dmFyIHM9XCJcIit0O2lmKGgoZSkpZm9yKDtzLmxlbmd0aDxpOylzPVwiMFwiK3M7cmV0dXJuIHN9ZnVuY3Rpb24gYShlLHQsaSxzKXtyZXR1cm4oaChlKT9zOmkpW3RdfXZhciBuLHI9KGk/aS5kYXlOYW1lc1Nob3J0Om51bGwpfHx0aGlzLl9kZWZhdWx0cy5kYXlOYW1lc1Nob3J0LG89KGk/aS5kYXlOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXMsbD0oaT9pLm1vbnRoTmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lc1Nob3J0LHU9KGk/aS5tb250aE5hbWVzOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzLGg9ZnVuY3Rpb24oZSl7ZT1uKzE8dC5sZW5ndGgmJnQuY2hhckF0KG4rMSk9PT1lO3JldHVybiBlJiZuKyssZX0sYz1cIlwiLGQ9ITE7aWYoZSlmb3Iobj0wO248dC5sZW5ndGg7bisrKWlmKGQpXCInXCIhPT10LmNoYXJBdChuKXx8aChcIidcIik/Yys9dC5jaGFyQXQobik6ZD0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdChuKSl7Y2FzZVwiZFwiOmMrPXMoXCJkXCIsZS5nZXREYXRlKCksMik7YnJlYWs7Y2FzZVwiRFwiOmMrPWEoXCJEXCIsZS5nZXREYXkoKSxyLG8pO2JyZWFrO2Nhc2VcIm9cIjpjKz1zKFwib1wiLE1hdGgucm91bmQoKG5ldyBEYXRlKGUuZ2V0RnVsbFllYXIoKSxlLmdldE1vbnRoKCksZS5nZXREYXRlKCkpLmdldFRpbWUoKS1uZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksMCwwKS5nZXRUaW1lKCkpLzg2NGU1KSwzKTticmVhaztjYXNlXCJtXCI6Yys9cyhcIm1cIixlLmdldE1vbnRoKCkrMSwyKTticmVhaztjYXNlXCJNXCI6Yys9YShcIk1cIixlLmdldE1vbnRoKCksbCx1KTticmVhaztjYXNlXCJ5XCI6Yys9aChcInlcIik/ZS5nZXRGdWxsWWVhcigpOihlLmdldEZ1bGxZZWFyKCklMTAwPDEwP1wiMFwiOlwiXCIpK2UuZ2V0RnVsbFllYXIoKSUxMDA7YnJlYWs7Y2FzZVwiQFwiOmMrPWUuZ2V0VGltZSgpO2JyZWFrO2Nhc2VcIiFcIjpjKz0xZTQqZS5nZXRUaW1lKCkrdGhpcy5fdGlja3NUbzE5NzA7YnJlYWs7Y2FzZVwiJ1wiOmgoXCInXCIpP2MrPVwiJ1wiOmQ9ITA7YnJlYWs7ZGVmYXVsdDpjKz10LmNoYXJBdChuKX1yZXR1cm4gY30sX3Bvc3NpYmxlQ2hhcnM6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVwiXCIsaT0hMSxzPWZ1bmN0aW9uKGUpe2U9YSsxPHQubGVuZ3RoJiZ0LmNoYXJBdChhKzEpPT09ZTtyZXR1cm4gZSYmYSsrLGV9LGE9MDthPHQubGVuZ3RoO2ErKylpZihpKVwiJ1wiIT09dC5jaGFyQXQoYSl8fHMoXCInXCIpP2UrPXQuY2hhckF0KGEpOmk9ITE7ZWxzZSBzd2l0Y2godC5jaGFyQXQoYSkpe2Nhc2VcImRcIjpjYXNlXCJtXCI6Y2FzZVwieVwiOmNhc2VcIkBcIjplKz1cIjAxMjM0NTY3ODlcIjticmVhaztjYXNlXCJEXCI6Y2FzZVwiTVwiOnJldHVybiBudWxsO2Nhc2VcIidcIjpzKFwiJ1wiKT9lKz1cIidcIjppPSEwO2JyZWFrO2RlZmF1bHQ6ZSs9dC5jaGFyQXQoYSl9cmV0dXJuIGV9LF9nZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4odm9pZCAwIT09ZS5zZXR0aW5nc1t0XT9lLnNldHRpbmdzOnRoaXMuX2RlZmF1bHRzKVt0XX0sX3NldERhdGVGcm9tRmllbGQ6ZnVuY3Rpb24oZSx0KXtpZihlLmlucHV0LnZhbCgpIT09ZS5sYXN0VmFsKXt2YXIgaT10aGlzLl9nZXQoZSxcImRhdGVGb3JtYXRcIikscz1lLmxhc3RWYWw9ZS5pbnB1dD9lLmlucHV0LnZhbCgpOm51bGwsYT10aGlzLl9nZXREZWZhdWx0RGF0ZShlKSxuPWEscj10aGlzLl9nZXRGb3JtYXRDb25maWcoZSk7dHJ5e249dGhpcy5wYXJzZURhdGUoaSxzLHIpfHxhfWNhdGNoKGUpe3M9dD9cIlwiOnN9ZS5zZWxlY3RlZERheT1uLmdldERhdGUoKSxlLmRyYXdNb250aD1lLnNlbGVjdGVkTW9udGg9bi5nZXRNb250aCgpLGUuZHJhd1llYXI9ZS5zZWxlY3RlZFllYXI9bi5nZXRGdWxsWWVhcigpLGUuY3VycmVudERheT1zP24uZ2V0RGF0ZSgpOjAsZS5jdXJyZW50TW9udGg9cz9uLmdldE1vbnRoKCk6MCxlLmN1cnJlbnRZZWFyPXM/bi5nZXRGdWxsWWVhcigpOjAsdGhpcy5fYWRqdXN0SW5zdERhdGUoZSl9fSxfZ2V0RGVmYXVsdERhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3Jlc3RyaWN0TWluTWF4KGUsdGhpcy5fZGV0ZXJtaW5lRGF0ZShlLHRoaXMuX2dldChlLFwiZGVmYXVsdERhdGVcIiksbmV3IERhdGUpKX0sX2RldGVybWluZURhdGU6ZnVuY3Rpb24obyxlLHQpe3ZhciBpLHMsZT1udWxsPT1lfHxcIlwiPT09ZT90Olwic3RyaW5nXCI9PXR5cGVvZiBlP2Z1bmN0aW9uKGUpe3RyeXtyZXR1cm4gRy5kYXRlcGlja2VyLnBhcnNlRGF0ZShHLmRhdGVwaWNrZXIuX2dldChvLFwiZGF0ZUZvcm1hdFwiKSxlLEcuZGF0ZXBpY2tlci5fZ2V0Rm9ybWF0Q29uZmlnKG8pKX1jYXRjaChlKXt9Zm9yKHZhciB0PShlLnRvTG93ZXJDYXNlKCkubWF0Y2goL15jLyk/Ry5kYXRlcGlja2VyLl9nZXREYXRlKG8pOm51bGwpfHxuZXcgRGF0ZSxpPXQuZ2V0RnVsbFllYXIoKSxzPXQuZ2V0TW9udGgoKSxhPXQuZ2V0RGF0ZSgpLG49LyhbK1xcLV0/WzAtOV0rKVxccyooZHxEfHd8V3xtfE18eXxZKT8vZyxyPW4uZXhlYyhlKTtyOyl7c3dpdGNoKHJbMl18fFwiZFwiKXtjYXNlXCJkXCI6Y2FzZVwiRFwiOmErPXBhcnNlSW50KHJbMV0sMTApO2JyZWFrO2Nhc2VcIndcIjpjYXNlXCJXXCI6YSs9NypwYXJzZUludChyWzFdLDEwKTticmVhaztjYXNlXCJtXCI6Y2FzZVwiTVwiOnMrPXBhcnNlSW50KHJbMV0sMTApLGE9TWF0aC5taW4oYSxHLmRhdGVwaWNrZXIuX2dldERheXNJbk1vbnRoKGkscykpO2JyZWFrO2Nhc2VcInlcIjpjYXNlXCJZXCI6aSs9cGFyc2VJbnQoclsxXSwxMCksYT1NYXRoLm1pbihhLEcuZGF0ZXBpY2tlci5fZ2V0RGF5c0luTW9udGgoaSxzKSl9cj1uLmV4ZWMoZSl9cmV0dXJuIG5ldyBEYXRlKGkscyxhKX0oZSk6XCJudW1iZXJcIj09dHlwZW9mIGU/aXNOYU4oZSk/dDooaT1lLChzPW5ldyBEYXRlKS5zZXREYXRlKHMuZ2V0RGF0ZSgpK2kpLHMpOm5ldyBEYXRlKGUuZ2V0VGltZSgpKTtyZXR1cm4oZT1lJiZcIkludmFsaWQgRGF0ZVwiPT09ZS50b1N0cmluZygpP3Q6ZSkmJihlLnNldEhvdXJzKDApLGUuc2V0TWludXRlcygwKSxlLnNldFNlY29uZHMoMCksZS5zZXRNaWxsaXNlY29uZHMoMCkpLHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KGUpfSxfZGF5bGlnaHRTYXZpbmdBZGp1c3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/KGUuc2V0SG91cnMoMTI8ZS5nZXRIb3VycygpP2UuZ2V0SG91cnMoKSsyOjApLGUpOm51bGx9LF9zZXREYXRlOmZ1bmN0aW9uKGUsdCxpKXt2YXIgcz0hdCxhPWUuc2VsZWN0ZWRNb250aCxuPWUuc2VsZWN0ZWRZZWFyLHQ9dGhpcy5fcmVzdHJpY3RNaW5NYXgoZSx0aGlzLl9kZXRlcm1pbmVEYXRlKGUsdCxuZXcgRGF0ZSkpO2Uuc2VsZWN0ZWREYXk9ZS5jdXJyZW50RGF5PXQuZ2V0RGF0ZSgpLGUuZHJhd01vbnRoPWUuc2VsZWN0ZWRNb250aD1lLmN1cnJlbnRNb250aD10LmdldE1vbnRoKCksZS5kcmF3WWVhcj1lLnNlbGVjdGVkWWVhcj1lLmN1cnJlbnRZZWFyPXQuZ2V0RnVsbFllYXIoKSxhPT09ZS5zZWxlY3RlZE1vbnRoJiZuPT09ZS5zZWxlY3RlZFllYXJ8fGl8fHRoaXMuX25vdGlmeUNoYW5nZShlKSx0aGlzLl9hZGp1c3RJbnN0RGF0ZShlKSxlLmlucHV0JiZlLmlucHV0LnZhbChzP1wiXCI6dGhpcy5fZm9ybWF0RGF0ZShlKSl9LF9nZXREYXRlOmZ1bmN0aW9uKGUpe3JldHVybiFlLmN1cnJlbnRZZWFyfHxlLmlucHV0JiZcIlwiPT09ZS5pbnB1dC52YWwoKT9udWxsOnRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGUuY3VycmVudFllYXIsZS5jdXJyZW50TW9udGgsZS5jdXJyZW50RGF5KSl9LF9hdHRhY2hIYW5kbGVyczpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nZXQoZSxcInN0ZXBNb250aHNcIiksaT1cIiNcIitlLmlkLnJlcGxhY2UoL1xcXFxcXFxcL2csXCJcXFxcXCIpO2UuZHBEaXYuZmluZChcIltkYXRhLWhhbmRsZXJdXCIpLm1hcChmdW5jdGlvbigpe3ZhciBlPXtwcmV2OmZ1bmN0aW9uKCl7Ry5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGksLXQsXCJNXCIpfSxuZXh0OmZ1bmN0aW9uKCl7Ry5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGksK3QsXCJNXCIpfSxoaWRlOmZ1bmN0aW9uKCl7Ry5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpfSx0b2RheTpmdW5jdGlvbigpe0cuZGF0ZXBpY2tlci5fZ290b1RvZGF5KGkpfSxzZWxlY3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4gRy5kYXRlcGlja2VyLl9zZWxlY3REYXkoaSwrdGhpcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnRoXCIpLCt0aGlzLmdldEF0dHJpYnV0ZShcImRhdGEteWVhclwiKSx0aGlzKSwhMX0sc2VsZWN0TW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gRy5kYXRlcGlja2VyLl9zZWxlY3RNb250aFllYXIoaSx0aGlzLFwiTVwiKSwhMX0sc2VsZWN0WWVhcjpmdW5jdGlvbigpe3JldHVybiBHLmRhdGVwaWNrZXIuX3NlbGVjdE1vbnRoWWVhcihpLHRoaXMsXCJZXCIpLCExfX07Ryh0aGlzKS5vbih0aGlzLmdldEF0dHJpYnV0ZShcImRhdGEtZXZlbnRcIiksZVt0aGlzLmdldEF0dHJpYnV0ZShcImRhdGEtaGFuZGxlclwiKV0pfSl9LF9nZW5lcmF0ZUhUTUw6ZnVuY3Rpb24oZSl7dmFyIHQsaSxzLGEsbixyLG8sbCx1LGgsYyxkLHAsZyxmLG0sXyx2LHksayxELGIsdyxNLEMseCxJLFQsQSxOLFMsRixFPW5ldyBEYXRlLFk9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoRS5nZXRGdWxsWWVhcigpLEUuZ2V0TW9udGgoKSxFLmdldERhdGUoKSkpLE89dGhpcy5fZ2V0KGUsXCJpc1JUTFwiKSxXPXRoaXMuX2dldChlLFwic2hvd0J1dHRvblBhbmVsXCIpLFA9dGhpcy5fZ2V0KGUsXCJoaWRlSWZOb1ByZXZOZXh0XCIpLEw9dGhpcy5fZ2V0KGUsXCJuYXZpZ2F0aW9uQXNEYXRlRm9ybWF0XCIpLEg9dGhpcy5fZ2V0TnVtYmVyT2ZNb250aHMoZSksaj10aGlzLl9nZXQoZSxcInNob3dDdXJyZW50QXRQb3NcIiksRT10aGlzLl9nZXQoZSxcInN0ZXBNb250aHNcIiksSz0xIT09SFswXXx8MSE9PUhbMV0sUj10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChlLmN1cnJlbnREYXk/bmV3IERhdGUoZS5jdXJyZW50WWVhcixlLmN1cnJlbnRNb250aCxlLmN1cnJlbnREYXkpOm5ldyBEYXRlKDk5OTksOSw5KSksVT10aGlzLl9nZXRNaW5NYXhEYXRlKGUsXCJtaW5cIiksej10aGlzLl9nZXRNaW5NYXhEYXRlKGUsXCJtYXhcIikscT1lLmRyYXdNb250aC1qLEI9ZS5kcmF3WWVhcjtpZihxPDAmJihxKz0xMixCLS0pLHopZm9yKHQ9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoei5nZXRGdWxsWWVhcigpLHouZ2V0TW9udGgoKS1IWzBdKkhbMV0rMSx6LmdldERhdGUoKSkpLHQ9VSYmdDxVP1U6dDt0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShCLHEsMSkpPnQ7KS0tcTwwJiYocT0xMSxCLS0pO2ZvcihlLmRyYXdNb250aD1xLGUuZHJhd1llYXI9QixqPXRoaXMuX2dldChlLFwicHJldlRleHRcIiksaj1MP3RoaXMuZm9ybWF0RGF0ZShqLHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKEIscS1FLDEpKSx0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpOmosaT10aGlzLl9jYW5BZGp1c3RNb250aChlLC0xLEIscSk/RyhcIjxhPlwiKS5hdHRyKHtjbGFzczpcInVpLWRhdGVwaWNrZXItcHJldiB1aS1jb3JuZXItYWxsXCIsXCJkYXRhLWhhbmRsZXJcIjpcInByZXZcIixcImRhdGEtZXZlbnRcIjpcImNsaWNrXCIsdGl0bGU6an0pLmFwcGVuZChHKFwiPHNwYW4+XCIpLmFkZENsYXNzKFwidWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS1cIisoTz9cImVcIjpcIndcIikpLnRleHQoaikpWzBdLm91dGVySFRNTDpQP1wiXCI6RyhcIjxhPlwiKS5hdHRyKHtjbGFzczpcInVpLWRhdGVwaWNrZXItcHJldiB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWRpc2FibGVkXCIsdGl0bGU6an0pLmFwcGVuZChHKFwiPHNwYW4+XCIpLmFkZENsYXNzKFwidWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS1cIisoTz9cImVcIjpcIndcIikpLnRleHQoaikpWzBdLm91dGVySFRNTCxqPXRoaXMuX2dldChlLFwibmV4dFRleHRcIiksaj1MP3RoaXMuZm9ybWF0RGF0ZShqLHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKEIscStFLDEpKSx0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpOmoscz10aGlzLl9jYW5BZGp1c3RNb250aChlLDEsQixxKT9HKFwiPGE+XCIpLmF0dHIoe2NsYXNzOlwidWktZGF0ZXBpY2tlci1uZXh0IHVpLWNvcm5lci1hbGxcIixcImRhdGEtaGFuZGxlclwiOlwibmV4dFwiLFwiZGF0YS1ldmVudFwiOlwiY2xpY2tcIix0aXRsZTpqfSkuYXBwZW5kKEcoXCI8c3Bhbj5cIikuYWRkQ2xhc3MoXCJ1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLVwiKyhPP1wid1wiOlwiZVwiKSkudGV4dChqKSlbMF0ub3V0ZXJIVE1MOlA/XCJcIjpHKFwiPGE+XCIpLmF0dHIoe2NsYXNzOlwidWktZGF0ZXBpY2tlci1uZXh0IHVpLWNvcm5lci1hbGwgdWktc3RhdGUtZGlzYWJsZWRcIix0aXRsZTpqfSkuYXBwZW5kKEcoXCI8c3Bhbj5cIikuYXR0cihcImNsYXNzXCIsXCJ1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLVwiKyhPP1wid1wiOlwiZVwiKSkudGV4dChqKSlbMF0ub3V0ZXJIVE1MLEU9dGhpcy5fZ2V0KGUsXCJjdXJyZW50VGV4dFwiKSxQPXRoaXMuX2dldChlLFwiZ290b0N1cnJlbnRcIikmJmUuY3VycmVudERheT9SOlksRT1MP3RoaXMuZm9ybWF0RGF0ZShFLFAsdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGUpKTpFLGo9XCJcIixlLmlubGluZXx8KGo9RyhcIjxidXR0b24+XCIpLmF0dHIoe3R5cGU6XCJidXR0b25cIixjbGFzczpcInVpLWRhdGVwaWNrZXItY2xvc2UgdWktc3RhdGUtZGVmYXVsdCB1aS1wcmlvcml0eS1wcmltYXJ5IHVpLWNvcm5lci1hbGxcIixcImRhdGEtaGFuZGxlclwiOlwiaGlkZVwiLFwiZGF0YS1ldmVudFwiOlwiY2xpY2tcIn0pLnRleHQodGhpcy5fZ2V0KGUsXCJjbG9zZVRleHRcIikpWzBdLm91dGVySFRNTCksTD1cIlwiLFcmJihMPUcoXCI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgdWktd2lkZ2V0LWNvbnRlbnQnPlwiKS5hcHBlbmQoTz9qOlwiXCIpLmFwcGVuZCh0aGlzLl9pc0luUmFuZ2UoZSxQKT9HKFwiPGJ1dHRvbj5cIikuYXR0cih7dHlwZTpcImJ1dHRvblwiLGNsYXNzOlwidWktZGF0ZXBpY2tlci1jdXJyZW50IHVpLXN0YXRlLWRlZmF1bHQgdWktcHJpb3JpdHktc2Vjb25kYXJ5IHVpLWNvcm5lci1hbGxcIixcImRhdGEtaGFuZGxlclwiOlwidG9kYXlcIixcImRhdGEtZXZlbnRcIjpcImNsaWNrXCJ9KS50ZXh0KEUpOlwiXCIpLmFwcGVuZChPP1wiXCI6ailbMF0ub3V0ZXJIVE1MKSxhPXBhcnNlSW50KHRoaXMuX2dldChlLFwiZmlyc3REYXlcIiksMTApLGE9aXNOYU4oYSk/MDphLG49dGhpcy5fZ2V0KGUsXCJzaG93V2Vla1wiKSxyPXRoaXMuX2dldChlLFwiZGF5TmFtZXNcIiksbz10aGlzLl9nZXQoZSxcImRheU5hbWVzTWluXCIpLGw9dGhpcy5fZ2V0KGUsXCJtb250aE5hbWVzXCIpLHU9dGhpcy5fZ2V0KGUsXCJtb250aE5hbWVzU2hvcnRcIiksaD10aGlzLl9nZXQoZSxcImJlZm9yZVNob3dEYXlcIiksYz10aGlzLl9nZXQoZSxcInNob3dPdGhlck1vbnRoc1wiKSxkPXRoaXMuX2dldChlLFwic2VsZWN0T3RoZXJNb250aHNcIikscD10aGlzLl9nZXREZWZhdWx0RGF0ZShlKSxnPVwiXCIsbT0wO208SFswXTttKyspe2ZvcihfPVwiXCIsdGhpcy5tYXhSb3dzPTQsdj0wO3Y8SFsxXTt2Kyspe2lmKHk9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoQixxLGUuc2VsZWN0ZWREYXkpKSxrPVwiIHVpLWNvcm5lci1hbGxcIixEPVwiXCIsSyl7aWYoRCs9XCI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLWdyb3VwXCIsMTxIWzFdKXN3aXRjaCh2KXtjYXNlIDA6RCs9XCIgdWktZGF0ZXBpY2tlci1ncm91cC1maXJzdFwiLGs9XCIgdWktY29ybmVyLVwiKyhPP1wicmlnaHRcIjpcImxlZnRcIik7YnJlYWs7Y2FzZSBIWzFdLTE6RCs9XCIgdWktZGF0ZXBpY2tlci1ncm91cC1sYXN0XCIsaz1cIiB1aS1jb3JuZXItXCIrKE8/XCJsZWZ0XCI6XCJyaWdodFwiKTticmVhaztkZWZhdWx0OkQrPVwiIHVpLWRhdGVwaWNrZXItZ3JvdXAtbWlkZGxlXCIsaz1cIlwifUQrPVwiJz5cIn1mb3IoRCs9XCI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLWhlYWRlciB1aS13aWRnZXQtaGVhZGVyIHVpLWhlbHBlci1jbGVhcmZpeFwiK2srXCInPlwiKygvYWxsfGxlZnQvLnRlc3QoaykmJjA9PT1tP08/czppOlwiXCIpKygvYWxsfHJpZ2h0Ly50ZXN0KGspJiYwPT09bT9PP2k6czpcIlwiKSt0aGlzLl9nZW5lcmF0ZU1vbnRoWWVhckhlYWRlcihlLHEsQixVLHosMDxtfHwwPHYsbCx1KStcIjwvZGl2Pjx0YWJsZSBjbGFzcz0ndWktZGF0ZXBpY2tlci1jYWxlbmRhcic+PHRoZWFkPjx0cj5cIixiPW4/XCI8dGggY2xhc3M9J3VpLWRhdGVwaWNrZXItd2Vlay1jb2wnPlwiK3RoaXMuX2dldChlLFwid2Vla0hlYWRlclwiKStcIjwvdGg+XCI6XCJcIixmPTA7Zjw3O2YrKyliKz1cIjx0aCBzY29wZT0nY29sJ1wiKyg1PD0oZithKzYpJTc/XCIgY2xhc3M9J3VpLWRhdGVwaWNrZXItd2Vlay1lbmQnXCI6XCJcIikrXCI+PHNwYW4gdGl0bGU9J1wiK3Jbdz0oZithKSU3XStcIic+XCIrb1t3XStcIjwvc3Bhbj48L3RoPlwiO2ZvcihEKz1iK1wiPC90cj48L3RoZWFkPjx0Ym9keT5cIixDPXRoaXMuX2dldERheXNJbk1vbnRoKEIscSksQj09PWUuc2VsZWN0ZWRZZWFyJiZxPT09ZS5zZWxlY3RlZE1vbnRoJiYoZS5zZWxlY3RlZERheT1NYXRoLm1pbihlLnNlbGVjdGVkRGF5LEMpKSxNPSh0aGlzLl9nZXRGaXJzdERheU9mTW9udGgoQixxKS1hKzcpJTcsQz1NYXRoLmNlaWwoKE0rQykvNykseD1LJiZ0aGlzLm1heFJvd3M+Qz90aGlzLm1heFJvd3M6Qyx0aGlzLm1heFJvd3M9eCxJPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKEIscSwxLU0pKSxUPTA7VDx4O1QrKyl7Zm9yKEQrPVwiPHRyPlwiLEE9bj9cIjx0ZCBjbGFzcz0ndWktZGF0ZXBpY2tlci13ZWVrLWNvbCc+XCIrdGhpcy5fZ2V0KGUsXCJjYWxjdWxhdGVXZWVrXCIpKEkpK1wiPC90ZD5cIjpcIlwiLGY9MDtmPDc7ZisrKU49aD9oLmFwcGx5KGUuaW5wdXQ/ZS5pbnB1dFswXTpudWxsLFtJXSk6WyEwLFwiXCJdLEY9KFM9SS5nZXRNb250aCgpIT09cSkmJiFkfHwhTlswXXx8VSYmSTxVfHx6JiZ6PEksQSs9XCI8dGQgY2xhc3M9J1wiKyg1PD0oZithKzYpJTc/XCIgdWktZGF0ZXBpY2tlci13ZWVrLWVuZFwiOlwiXCIpKyhTP1wiIHVpLWRhdGVwaWNrZXItb3RoZXItbW9udGhcIjpcIlwiKSsoSS5nZXRUaW1lKCk9PT15LmdldFRpbWUoKSYmcT09PWUuc2VsZWN0ZWRNb250aCYmZS5fa2V5RXZlbnR8fHAuZ2V0VGltZSgpPT09SS5nZXRUaW1lKCkmJnAuZ2V0VGltZSgpPT09eS5nZXRUaW1lKCk/XCIgXCIrdGhpcy5fZGF5T3ZlckNsYXNzOlwiXCIpKyhGP1wiIFwiK3RoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzK1wiIHVpLXN0YXRlLWRpc2FibGVkXCI6XCJcIikrKFMmJiFjP1wiXCI6XCIgXCIrTlsxXSsoSS5nZXRUaW1lKCk9PT1SLmdldFRpbWUoKT9cIiBcIit0aGlzLl9jdXJyZW50Q2xhc3M6XCJcIikrKEkuZ2V0VGltZSgpPT09WS5nZXRUaW1lKCk/XCIgdWktZGF0ZXBpY2tlci10b2RheVwiOlwiXCIpKStcIidcIisoUyYmIWN8fCFOWzJdP1wiXCI6XCIgdGl0bGU9J1wiK05bMl0ucmVwbGFjZSgvJy9nLFwiJiMzOTtcIikrXCInXCIpKyhGP1wiXCI6XCIgZGF0YS1oYW5kbGVyPSdzZWxlY3REYXknIGRhdGEtZXZlbnQ9J2NsaWNrJyBkYXRhLW1vbnRoPSdcIitJLmdldE1vbnRoKCkrXCInIGRhdGEteWVhcj0nXCIrSS5nZXRGdWxsWWVhcigpK1wiJ1wiKStcIj5cIisoUyYmIWM/XCImI3hhMDtcIjpGP1wiPHNwYW4gY2xhc3M9J3VpLXN0YXRlLWRlZmF1bHQnPlwiK0kuZ2V0RGF0ZSgpK1wiPC9zcGFuPlwiOlwiPGEgY2xhc3M9J3VpLXN0YXRlLWRlZmF1bHRcIisoSS5nZXRUaW1lKCk9PT1ZLmdldFRpbWUoKT9cIiB1aS1zdGF0ZS1oaWdobGlnaHRcIjpcIlwiKSsoSS5nZXRUaW1lKCk9PT1SLmdldFRpbWUoKT9cIiB1aS1zdGF0ZS1hY3RpdmVcIjpcIlwiKSsoUz9cIiB1aS1wcmlvcml0eS1zZWNvbmRhcnlcIjpcIlwiKStcIicgaHJlZj0nIycgYXJpYS1jdXJyZW50PSdcIisoSS5nZXRUaW1lKCk9PT1SLmdldFRpbWUoKT9cInRydWVcIjpcImZhbHNlXCIpK1wiJyBkYXRhLWRhdGU9J1wiK0kuZ2V0RGF0ZSgpK1wiJz5cIitJLmdldERhdGUoKStcIjwvYT5cIikrXCI8L3RkPlwiLEkuc2V0RGF0ZShJLmdldERhdGUoKSsxKSxJPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KEkpO0QrPUErXCI8L3RyPlwifTExPCsrcSYmKHE9MCxCKyspLF8rPUQrPVwiPC90Ym9keT48L3RhYmxlPlwiKyhLP1wiPC9kaXY+XCIrKDA8SFswXSYmdj09PUhbMV0tMT9cIjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItcm93LWJyZWFrJz48L2Rpdj5cIjpcIlwiKTpcIlwiKX1nKz1ffXJldHVybiBnKz1MLGUuX2tleUV2ZW50PSExLGd9LF9nZW5lcmF0ZU1vbnRoWWVhckhlYWRlcjpmdW5jdGlvbihlLHQsaSxzLGEsbixyLG8pe3ZhciBsLHUsaCxjLGQscCxnPXRoaXMuX2dldChlLFwiY2hhbmdlTW9udGhcIiksZj10aGlzLl9nZXQoZSxcImNoYW5nZVllYXJcIiksbT10aGlzLl9nZXQoZSxcInNob3dNb250aEFmdGVyWWVhclwiKSxfPXRoaXMuX2dldChlLFwic2VsZWN0TW9udGhMYWJlbFwiKSx2PXRoaXMuX2dldChlLFwic2VsZWN0WWVhckxhYmVsXCIpLHk9XCI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLXRpdGxlJz5cIixrPVwiXCI7aWYobnx8IWcpays9XCI8c3BhbiBjbGFzcz0ndWktZGF0ZXBpY2tlci1tb250aCc+XCIrclt0XStcIjwvc3Bhbj5cIjtlbHNle2ZvcihsPXMmJnMuZ2V0RnVsbFllYXIoKT09PWksdT1hJiZhLmdldEZ1bGxZZWFyKCk9PT1pLGsrPVwiPHNlbGVjdCBjbGFzcz0ndWktZGF0ZXBpY2tlci1tb250aCcgYXJpYS1sYWJlbD0nXCIrXytcIicgZGF0YS1oYW5kbGVyPSdzZWxlY3RNb250aCcgZGF0YS1ldmVudD0nY2hhbmdlJz5cIixoPTA7aDwxMjtoKyspKCFsfHxoPj1zLmdldE1vbnRoKCkpJiYoIXV8fGg8PWEuZ2V0TW9udGgoKSkmJihrKz1cIjxvcHRpb24gdmFsdWU9J1wiK2grXCInXCIrKGg9PT10P1wiIHNlbGVjdGVkPSdzZWxlY3RlZCdcIjpcIlwiKStcIj5cIitvW2hdK1wiPC9vcHRpb24+XCIpO2srPVwiPC9zZWxlY3Q+XCJ9aWYobXx8KHkrPWsrKCFuJiZnJiZmP1wiXCI6XCImI3hhMDtcIikpLCFlLnllYXJzaHRtbClpZihlLnllYXJzaHRtbD1cIlwiLG58fCFmKXkrPVwiPHNwYW4gY2xhc3M9J3VpLWRhdGVwaWNrZXIteWVhcic+XCIraStcIjwvc3Bhbj5cIjtlbHNle2ZvcihyPXRoaXMuX2dldChlLFwieWVhclJhbmdlXCIpLnNwbGl0KFwiOlwiKSxjPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSxkPShfPWZ1bmN0aW9uKGUpe2U9ZS5tYXRjaCgvY1srXFwtXS4qLyk/aStwYXJzZUludChlLnN1YnN0cmluZygxKSwxMCk6ZS5tYXRjaCgvWytcXC1dLiovKT9jK3BhcnNlSW50KGUsMTApOnBhcnNlSW50KGUsMTApO3JldHVybiBpc05hTihlKT9jOmV9KShyWzBdKSxwPU1hdGgubWF4KGQsXyhyWzFdfHxcIlwiKSksZD1zP01hdGgubWF4KGQscy5nZXRGdWxsWWVhcigpKTpkLHA9YT9NYXRoLm1pbihwLGEuZ2V0RnVsbFllYXIoKSk6cCxlLnllYXJzaHRtbCs9XCI8c2VsZWN0IGNsYXNzPSd1aS1kYXRlcGlja2VyLXllYXInIGFyaWEtbGFiZWw9J1wiK3YrXCInIGRhdGEtaGFuZGxlcj0nc2VsZWN0WWVhcicgZGF0YS1ldmVudD0nY2hhbmdlJz5cIjtkPD1wO2QrKyllLnllYXJzaHRtbCs9XCI8b3B0aW9uIHZhbHVlPSdcIitkK1wiJ1wiKyhkPT09aT9cIiBzZWxlY3RlZD0nc2VsZWN0ZWQnXCI6XCJcIikrXCI+XCIrZCtcIjwvb3B0aW9uPlwiO2UueWVhcnNodG1sKz1cIjwvc2VsZWN0PlwiLHkrPWUueWVhcnNodG1sLGUueWVhcnNodG1sPW51bGx9cmV0dXJuIHkrPXRoaXMuX2dldChlLFwieWVhclN1ZmZpeFwiKSxtJiYoeSs9KCFuJiZnJiZmP1wiXCI6XCImI3hhMDtcIikraykseSs9XCI8L2Rpdj5cIn0sX2FkanVzdEluc3REYXRlOmZ1bmN0aW9uKGUsdCxpKXt2YXIgcz1lLnNlbGVjdGVkWWVhcisoXCJZXCI9PT1pP3Q6MCksYT1lLnNlbGVjdGVkTW9udGgrKFwiTVwiPT09aT90OjApLHQ9TWF0aC5taW4oZS5zZWxlY3RlZERheSx0aGlzLl9nZXREYXlzSW5Nb250aChzLGEpKSsoXCJEXCI9PT1pP3Q6MCksdD10aGlzLl9yZXN0cmljdE1pbk1heChlLHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHMsYSx0KSkpO2Uuc2VsZWN0ZWREYXk9dC5nZXREYXRlKCksZS5kcmF3TW9udGg9ZS5zZWxlY3RlZE1vbnRoPXQuZ2V0TW9udGgoKSxlLmRyYXdZZWFyPWUuc2VsZWN0ZWRZZWFyPXQuZ2V0RnVsbFllYXIoKSxcIk1cIiE9PWkmJlwiWVwiIT09aXx8dGhpcy5fbm90aWZ5Q2hhbmdlKGUpfSxfcmVzdHJpY3RNaW5NYXg6ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLl9nZXRNaW5NYXhEYXRlKGUsXCJtaW5cIiksZT10aGlzLl9nZXRNaW5NYXhEYXRlKGUsXCJtYXhcIiksdD1pJiZ0PGk/aTp0O3JldHVybiBlJiZlPHQ/ZTp0fSxfbm90aWZ5Q2hhbmdlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dldChlLFwib25DaGFuZ2VNb250aFllYXJcIik7dCYmdC5hcHBseShlLmlucHV0P2UuaW5wdXRbMF06bnVsbCxbZS5zZWxlY3RlZFllYXIsZS5zZWxlY3RlZE1vbnRoKzEsZV0pfSxfZ2V0TnVtYmVyT2ZNb250aHM6ZnVuY3Rpb24oZSl7ZT10aGlzLl9nZXQoZSxcIm51bWJlck9mTW9udGhzXCIpO3JldHVybiBudWxsPT1lP1sxLDFdOlwibnVtYmVyXCI9PXR5cGVvZiBlP1sxLGVdOmV9LF9nZXRNaW5NYXhEYXRlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2RldGVybWluZURhdGUoZSx0aGlzLl9nZXQoZSx0K1wiRGF0ZVwiKSxudWxsKX0sX2dldERheXNJbk1vbnRoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIDMyLXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGUsdCwzMikpLmdldERhdGUoKX0sX2dldEZpcnN0RGF5T2ZNb250aDpmdW5jdGlvbihlLHQpe3JldHVybiBuZXcgRGF0ZShlLHQsMSkuZ2V0RGF5KCl9LF9jYW5BZGp1c3RNb250aDpmdW5jdGlvbihlLHQsaSxzKXt2YXIgYT10aGlzLl9nZXROdW1iZXJPZk1vbnRocyhlKSxhPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGkscysodDwwP3Q6YVswXSphWzFdKSwxKSk7cmV0dXJuIHQ8MCYmYS5zZXREYXRlKHRoaXMuX2dldERheXNJbk1vbnRoKGEuZ2V0RnVsbFllYXIoKSxhLmdldE1vbnRoKCkpKSx0aGlzLl9pc0luUmFuZ2UoZSxhKX0sX2lzSW5SYW5nZTpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuX2dldE1pbk1heERhdGUoZSxcIm1pblwiKSxzPXRoaXMuX2dldE1pbk1heERhdGUoZSxcIm1heFwiKSxhPW51bGwsbj1udWxsLHI9dGhpcy5fZ2V0KGUsXCJ5ZWFyUmFuZ2VcIik7cmV0dXJuIHImJihlPXIuc3BsaXQoXCI6XCIpLHI9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLGE9cGFyc2VJbnQoZVswXSwxMCksbj1wYXJzZUludChlWzFdLDEwKSxlWzBdLm1hdGNoKC9bK1xcLV0uKi8pJiYoYSs9ciksZVsxXS5tYXRjaCgvWytcXC1dLiovKSYmKG4rPXIpKSwoIWl8fHQuZ2V0VGltZSgpPj1pLmdldFRpbWUoKSkmJighc3x8dC5nZXRUaW1lKCk8PXMuZ2V0VGltZSgpKSYmKCFhfHx0LmdldEZ1bGxZZWFyKCk+PWEpJiYoIW58fHQuZ2V0RnVsbFllYXIoKTw9bil9LF9nZXRGb3JtYXRDb25maWc6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0KGUsXCJzaG9ydFllYXJDdXRvZmZcIik7cmV0dXJue3Nob3J0WWVhckN1dG9mZjp0PVwic3RyaW5nXCIhPXR5cGVvZiB0P3Q6KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpJTEwMCtwYXJzZUludCh0LDEwKSxkYXlOYW1lc1Nob3J0OnRoaXMuX2dldChlLFwiZGF5TmFtZXNTaG9ydFwiKSxkYXlOYW1lczp0aGlzLl9nZXQoZSxcImRheU5hbWVzXCIpLG1vbnRoTmFtZXNTaG9ydDp0aGlzLl9nZXQoZSxcIm1vbnRoTmFtZXNTaG9ydFwiKSxtb250aE5hbWVzOnRoaXMuX2dldChlLFwibW9udGhOYW1lc1wiKX19LF9mb3JtYXREYXRlOmZ1bmN0aW9uKGUsdCxpLHMpe3R8fChlLmN1cnJlbnREYXk9ZS5zZWxlY3RlZERheSxlLmN1cnJlbnRNb250aD1lLnNlbGVjdGVkTW9udGgsZS5jdXJyZW50WWVhcj1lLnNlbGVjdGVkWWVhcik7dD10P1wib2JqZWN0XCI9PXR5cGVvZiB0P3Q6dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUocyxpLHQpKTp0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShlLmN1cnJlbnRZZWFyLGUuY3VycmVudE1vbnRoLGUuY3VycmVudERheSkpO3JldHVybiB0aGlzLmZvcm1hdERhdGUodGhpcy5fZ2V0KGUsXCJkYXRlRm9ybWF0XCIpLHQsdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGUpKX19KSxHLmZuLmRhdGVwaWNrZXI9ZnVuY3Rpb24oZSl7aWYoIXRoaXMubGVuZ3RoKXJldHVybiB0aGlzO0cuZGF0ZXBpY2tlci5pbml0aWFsaXplZHx8KEcoZG9jdW1lbnQpLm9uKFwibW91c2Vkb3duXCIsRy5kYXRlcGlja2VyLl9jaGVja0V4dGVybmFsQ2xpY2spLEcuZGF0ZXBpY2tlci5pbml0aWFsaXplZD0hMCksMD09PUcoXCIjXCIrRy5kYXRlcGlja2VyLl9tYWluRGl2SWQpLmxlbmd0aCYmRyhcImJvZHlcIikuYXBwZW5kKEcuZGF0ZXBpY2tlci5kcERpdik7dmFyIHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlJiYoXCJpc0Rpc2FibGVkXCI9PT1lfHxcImdldERhdGVcIj09PWV8fFwid2lkZ2V0XCI9PT1lKXx8XCJvcHRpb25cIj09PWUmJjI9PT1hcmd1bWVudHMubGVuZ3RoJiZcInN0cmluZ1wiPT10eXBlb2YgYXJndW1lbnRzWzFdP0cuZGF0ZXBpY2tlcltcIl9cIitlK1wiRGF0ZXBpY2tlclwiXS5hcHBseShHLmRhdGVwaWNrZXIsW3RoaXNbMF1dLmNvbmNhdCh0KSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7XCJzdHJpbmdcIj09dHlwZW9mIGU/Ry5kYXRlcGlja2VyW1wiX1wiK2UrXCJEYXRlcGlja2VyXCJdLmFwcGx5KEcuZGF0ZXBpY2tlcixbdGhpc10uY29uY2F0KHQpKTpHLmRhdGVwaWNrZXIuX2F0dGFjaERhdGVwaWNrZXIodGhpcyxlKX0pfSxHLmRhdGVwaWNrZXI9bmV3IHQsRy5kYXRlcGlja2VyLmluaXRpYWxpemVkPSExLEcuZGF0ZXBpY2tlci51dWlkPShuZXcgRGF0ZSkuZ2V0VGltZSgpLEcuZGF0ZXBpY2tlci52ZXJzaW9uPVwiMS4xMy4wXCI7Ry5kYXRlcGlja2VyfSk7IiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLyoqXFxuICogU3dpcGVyIDUuNC41XFxuICogTW9zdCBtb2Rlcm4gbW9iaWxlIHRvdWNoIHNsaWRlciBhbmQgZnJhbWV3b3JrIHdpdGggaGFyZHdhcmUgYWNjZWxlcmF0ZWQgdHJhbnNpdGlvbnNcXG4gKiBodHRwOi8vc3dpcGVyanMuY29tXFxuICpcXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDIwIFZsYWRpbWlyIEtoYXJsYW1waWRpXFxuICpcXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcXG4gKlxcbiAqIFJlbGVhc2VkIG9uOiBKdW5lIDE2LCAyMDIwXFxuICovXFxuXFxuQGZvbnQtZmFjZXtmb250LWZhbWlseTpzd2lwZXItaWNvbnM7c3JjOnVybChcXFwiZGF0YTphcHBsaWNhdGlvbi9mb250LXdvZmY7Y2hhcnNldD11dGYtODtiYXNlNjQsIGQwOUdSZ0FCQUFBQUFBWmdBQkFBQUFBQURBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCR1JsUk5BQUFHUkFBQUFCb0FBQUFjaTZxSGtVZEVSVVlBQUFXZ0FBQUFJd0FBQUNRQVlBQlhSMUJQVXdBQUJoUUFBQUF1QUFBQU51QVk3K3hIVTFWQ0FBQUZ4QUFBQUZBQUFBQm0yZlBjelU5VEx6SUFBQUhjQUFBQVNnQUFBR0JQOVY1UlkyMWhjQUFBQWtRQUFBQ0lBQUFCWXQ2RjBjQmpkblFnQUFBQ3pBQUFBQVFBQUFBRUFCRUJSR2RoYzNBQUFBV1lBQUFBQ0FBQUFBai8vd0FEWjJ4NVpnQUFBeXdBQUFETUFBQUQyTUh0cnlWb1pXRmtBQUFCYkFBQUFEQUFBQUEyRTIrZW9XaG9aV0VBQUFHY0FBQUFId0FBQUNRQzlnRHphRzEwZUFBQUFpZ0FBQUFaQUFBQXJnSmtBQkZzYjJOaEFBQUMwQUFBQUZvQUFBQmFGUUFVR0cxaGVIQUFBQUc4QUFBQUh3QUFBQ0FBY0FCQWJtRnRaUUFBQS9nQUFBRTVBQUFDWHZGZEJ3bHdiM04wQUFBRk5BQUFBR0lBQUFDRTVzNzRoWGphWTJCa1lHQUFZcGY1SHUvaitXMitNbkF6TVlEQXphWDZRakQ2LzQvL0J4ajVHQThBdVJ3TVlHa0FQeXdMMTNqYVkyQmtZR0E4OFA4QWd4NGorLzhmUURZZkExQUVCV2dEQUlCMkJPb0FlTnBqWUdSZ1lOQmg0R2RnWWdBQkVNbklBQkp6WU5BRENRQUFDV2dBc1FCNDJtTmdZZnpDT0lHQmxZR0IwWWN4allHQndSMUtmMldRWkdoaFlHQmlZR1ZtZ0FGR0JpUVFrT2Fhd3REQW9NQlF4WGpnL3dFR1BjWUREQTR3TlVBMkNDZ3dzQUFBTzRFTDZnQUFlTnBqMk0wZ3lBQUNxeGdHTldCa1oyRDQvd01BK3hrRGRnQUFBSGphWTJCZ1lHYUFZQmtHUmdZUWlBSHlHTUY4RmdZSElNM0R3TUhBQkdRck1PZ3lXRExFTTFUOS93OFVCZkVNZ0x6RS8vLy9QLzUvL2YvVi94dityNGVhQUFlTWJBeHdJVVltSU1IRWdLWUFZalVjc0RBd3NMS3hjM0J5Y2ZQdzhqRVFBL2daQkFTRmhFVkV4Y1FsSktXa1pXVGw1QlVVbFpSVlZOWFVOVFFaQmdNQUFNUitFK2dBRVFGRUFBQUFLZ0FxQUNvQU5BQStBRWdBVWdCY0FHWUFjQUI2QUlRQWpnQ1lBS0lBckFDMkFNQUF5Z0RVQU40QTZBRHlBUHdCQmdFUUFSb0JKQUV1QVRnQlFnRk1BVllCWUFGcUFYUUJmZ0dJQVpJQm5BR21BYklCemdIc0FBQjQydTJOTVE2Q1VBeUdXNTY4eDlBbmVZWWdtNE1KYmhLRmFFeElPQVZYOEFwZXdTdDRCaWM0QWZlQWlkM1ZPQml4RHhmUFlFemE1TytYZmkwNFlBRGdnaVVJVUxDdUVKSzhWaE80YlN2cGRua3RISTVRQ1l0ZGkyc2w4Wm5YYUhscVVyTkt6ZEtjVDhjamxxK3J3WlN2SVZjek5pZXpzZm5QL3V6bm1mUEZCTk9ETTJLN01UUTQ1WUVBWnFHUDgxQW1HR2NGM2lQcU9vcDByMVNQVGFUYlZrZlVlNEhYajk3d1lFK3lOd1dZeHdXdTR2MXVnV0hnbzNTMVhkWkVWcVdNN0VUMGNmbkxHeFdma2dSNDJvMlB2V3JETUJTRmovSUhMYUYwektqUmdkaVZNd1NjTlJBb1dVb0g3OFkyaWNCL3lJWTA5QW42QUgyQmR1L1VCK3l4b3BZc2hRaUV2bnZ1MGRVUmdEdDhRZUM4UER3N0ZwamkzZkVBNHovUEVKNllPQjVoS2g0ZGozRXZYaHhQcUgvU0tVWTNySjdzclo0RlpuaDFQTUF0UGh3UDZmbDJQTUpNUERnZVE0clk4WVQ2R3phbzBlQUVBNDA5RHVnZ21UbkZuT2NTQ2lFaUxNZ3hDaVRJNkNxNURaVWQzUW1wMTB2TzBMYUxUZDJjak40Zk91bWxjN2xVWWJTUWNaRmt1dFJHN2c2SktaS3kwUm1kTFk2ODBDRG5FSitVTWtwRkZlMVJON254ZFZwWHJDNGFUdG5hdXJPblllcmNaZzJZVm1MTi9kL2djemZFaW1yRS9mcy9iT3VxMjlabW44dGxvT1JhWGdaZ0dhNzh5TzkvY25YbTJCcGFHdnEyNUR2OVM0RTkrNVNJYzlQcXVwSktoWUZTU2w0NytRY3IxbVlOQUFBQWVOcHR3MGNLd2tBQUFNRFpKQThRN09VSnZrTHNQZlo2ekZWRVJQeThxSGgyWUVSKzNpL0JQODN2SUJMTHlTc29LaW1ycUtxcGEyaHA2K2pxNlJzWUdobWJtSnFaU3kwc3JheHRiTzNzSFJ5ZG5FTVU0dVI2eXg3SkpYdmVQN1dyRHljQUFBQUFBQUgvL3dBQ2VOcGpZR1JnWU9BQlloa2daZ0pDWmdaTkJrWUdMUVp0SUpzRkxNWUFBQXczQUxnQWVOb2xpekVLZ0RBUUJDY2hSYkMyc0ZFUjBZRDZxVlFpQkN2L0g5ZXpHSTZaNVhCQXc4Q0JLL201aVFRVmF1VmJYTG5Pck1adjJvTGRLRmE4UGp1cnUyaEp6R2FibU9TTHpOTXp2dXRwQjNONDJtTmdaR0JnNEdLUVl6QmhZTXhKTE1sajRHQmdBWW93L1AvUEFKSmhMTTZzU29XS2ZXQ0FBd0RBamdiUkFBQjQybU5nWUdCa0FJSWJDWm81SVBybVVuMGhHQTBBTzhFRlRRQUFcXFwiKSBmb3JtYXQoXFxcIndvZmZcXFwiKTtmb250LXdlaWdodDo0MDA7Zm9udC1zdHlsZTpub3JtYWx9OnJvb3R7LS1zd2lwZXItdGhlbWUtY29sb3I6IzAwN2FmZn0uc3dpcGVyLWNvbnRhaW5lcnttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjtsaXN0LXN0eWxlOm5vbmU7cGFkZGluZzowO3otaW5kZXg6MX0uc3dpcGVyLWNvbnRhaW5lci12ZXJ0aWNhbD4uc3dpcGVyLXdyYXBwZXJ7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5zd2lwZXItd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3otaW5kZXg6MTtkaXNwbGF5OmZsZXg7dHJhbnNpdGlvbi1wcm9wZXJ0eTp0cmFuc2Zvcm07Ym94LXNpemluZzpjb250ZW50LWJveH0uc3dpcGVyLWNvbnRhaW5lci1hbmRyb2lkIC5zd2lwZXItc2xpZGUsLnN3aXBlci13cmFwcGVye3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwcHgsMCwwKX0uc3dpcGVyLWNvbnRhaW5lci1tdWx0aXJvdz4uc3dpcGVyLXdyYXBwZXJ7ZmxleC13cmFwOndyYXB9LnN3aXBlci1jb250YWluZXItbXVsdGlyb3ctY29sdW1uPi5zd2lwZXItd3JhcHBlcntmbGV4LXdyYXA6d3JhcDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LnN3aXBlci1jb250YWluZXItZnJlZS1tb2RlPi5zd2lwZXItd3JhcHBlcnt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLW91dDttYXJnaW46MCBhdXRvfS5zd2lwZXItc2xpZGV7ZmxleC1zaHJpbms6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zaXRpb24tcHJvcGVydHk6dHJhbnNmb3JtfS5zd2lwZXItc2xpZGUtaW52aXNpYmxlLWJsYW5re3Zpc2liaWxpdHk6aGlkZGVufS5zd2lwZXItY29udGFpbmVyLWF1dG9oZWlnaHQsLnN3aXBlci1jb250YWluZXItYXV0b2hlaWdodCAuc3dpcGVyLXNsaWRle2hlaWdodDphdXRvfS5zd2lwZXItY29udGFpbmVyLWF1dG9oZWlnaHQgLnN3aXBlci13cmFwcGVye2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7dHJhbnNpdGlvbi1wcm9wZXJ0eTp0cmFuc2Zvcm0saGVpZ2h0fS5zd2lwZXItY29udGFpbmVyLTNke3BlcnNwZWN0aXZlOjEyMDBweH0uc3dpcGVyLWNvbnRhaW5lci0zZCAuc3dpcGVyLWN1YmUtc2hhZG93LC5zd2lwZXItY29udGFpbmVyLTNkIC5zd2lwZXItc2xpZGUsLnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctYm90dG9tLC5zd2lwZXItY29udGFpbmVyLTNkIC5zd2lwZXItc2xpZGUtc2hhZG93LWxlZnQsLnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQsLnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctdG9wLC5zd2lwZXItY29udGFpbmVyLTNkIC5zd2lwZXItd3JhcHBlcnt0cmFuc2Zvcm0tc3R5bGU6cHJlc2VydmUtM2R9LnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctYm90dG9tLC5zd2lwZXItY29udGFpbmVyLTNkIC5zd2lwZXItc2xpZGUtc2hhZG93LWxlZnQsLnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQsLnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctdG9we3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3BvaW50ZXItZXZlbnRzOm5vbmU7ei1pbmRleDoxMH0uc3dpcGVyLWNvbnRhaW5lci0zZCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1sZWZ0e2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQscmdiYSgwLDAsMCwuNSkscmdiYSgwLDAsMCwwKSl9LnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHR7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQscmdiYSgwLDAsMCwuNSkscmdiYSgwLDAsMCwwKSl9LnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctdG9we2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHRvcCxyZ2JhKDAsMCwwLC41KSxyZ2JhKDAsMCwwLDApKX0uc3dpcGVyLWNvbnRhaW5lci0zZCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1ib3R0b217YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHJnYmEoMCwwLDAsLjUpLHJnYmEoMCwwLDAsMCkpfS5zd2lwZXItY29udGFpbmVyLWNzcy1tb2RlPi5zd2lwZXItd3JhcHBlcntvdmVyZmxvdzphdXRvO3Njcm9sbGJhci13aWR0aDpub25lOy1tcy1vdmVyZmxvdy1zdHlsZTpub25lfS5zd2lwZXItY29udGFpbmVyLWNzcy1tb2RlPi5zd2lwZXItd3JhcHBlcjo6LXdlYmtpdC1zY3JvbGxiYXJ7ZGlzcGxheTpub25lfS5zd2lwZXItY29udGFpbmVyLWNzcy1tb2RlPi5zd2lwZXItd3JhcHBlcj4uc3dpcGVyLXNsaWRle3Njcm9sbC1zbmFwLWFsaWduOnN0YXJ0IHN0YXJ0fS5zd2lwZXItY29udGFpbmVyLWhvcml6b250YWwuc3dpcGVyLWNvbnRhaW5lci1jc3MtbW9kZT4uc3dpcGVyLXdyYXBwZXJ7c2Nyb2xsLXNuYXAtdHlwZTp4IG1hbmRhdG9yeX0uc3dpcGVyLWNvbnRhaW5lci12ZXJ0aWNhbC5zd2lwZXItY29udGFpbmVyLWNzcy1tb2RlPi5zd2lwZXItd3JhcHBlcntzY3JvbGwtc25hcC10eXBlOnkgbWFuZGF0b3J5fTpyb290ey0tc3dpcGVyLW5hdmlnYXRpb24tc2l6ZTo0NHB4fS5zd2lwZXItYnV0dG9uLW5leHQsLnN3aXBlci1idXR0b24tcHJldntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3dpZHRoOmNhbGModmFyKC0tc3dpcGVyLW5hdmlnYXRpb24tc2l6ZSkvIDQ0ICogMjcpO2hlaWdodDp2YXIoLS1zd2lwZXItbmF2aWdhdGlvbi1zaXplKTttYXJnaW4tdG9wOmNhbGMoLTEgKiB2YXIoLS1zd2lwZXItbmF2aWdhdGlvbi1zaXplKS8gMik7ei1pbmRleDoxMDtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Y29sb3I6dmFyKC0tc3dpcGVyLW5hdmlnYXRpb24tY29sb3IsdmFyKC0tc3dpcGVyLXRoZW1lLWNvbG9yKSl9LnN3aXBlci1idXR0b24tbmV4dC5zd2lwZXItYnV0dG9uLWRpc2FibGVkLC5zd2lwZXItYnV0dG9uLXByZXYuc3dpcGVyLWJ1dHRvbi1kaXNhYmxlZHtvcGFjaXR5Oi4zNTtjdXJzb3I6YXV0bztwb2ludGVyLWV2ZW50czpub25lfS5zd2lwZXItYnV0dG9uLW5leHQ6YWZ0ZXIsLnN3aXBlci1idXR0b24tcHJldjphZnRlcntmb250LWZhbWlseTpzd2lwZXItaWNvbnM7Zm9udC1zaXplOnZhcigtLXN3aXBlci1uYXZpZ2F0aW9uLXNpemUpO3RleHQtdHJhbnNmb3JtOm5vbmUhaW1wb3J0YW50O2xldHRlci1zcGFjaW5nOjA7dGV4dC10cmFuc2Zvcm06bm9uZTtmb250LXZhcmlhbnQ6aW5pdGlhbDtsaW5lLWhlaWdodDoxfS5zd2lwZXItYnV0dG9uLXByZXYsLnN3aXBlci1jb250YWluZXItcnRsIC5zd2lwZXItYnV0dG9uLW5leHR7bGVmdDoxMHB4O3JpZ2h0OmF1dG99LnN3aXBlci1idXR0b24tcHJldjphZnRlciwuc3dpcGVyLWNvbnRhaW5lci1ydGwgLnN3aXBlci1idXR0b24tbmV4dDphZnRlcntjb250ZW50OidwcmV2J30uc3dpcGVyLWJ1dHRvbi1uZXh0LC5zd2lwZXItY29udGFpbmVyLXJ0bCAuc3dpcGVyLWJ1dHRvbi1wcmV2e3JpZ2h0OjEwcHg7bGVmdDphdXRvfS5zd2lwZXItYnV0dG9uLW5leHQ6YWZ0ZXIsLnN3aXBlci1jb250YWluZXItcnRsIC5zd2lwZXItYnV0dG9uLXByZXY6YWZ0ZXJ7Y29udGVudDonbmV4dCd9LnN3aXBlci1idXR0b24tbmV4dC5zd2lwZXItYnV0dG9uLXdoaXRlLC5zd2lwZXItYnV0dG9uLXByZXYuc3dpcGVyLWJ1dHRvbi13aGl0ZXstLXN3aXBlci1uYXZpZ2F0aW9uLWNvbG9yOiNmZmZmZmZ9LnN3aXBlci1idXR0b24tbmV4dC5zd2lwZXItYnV0dG9uLWJsYWNrLC5zd2lwZXItYnV0dG9uLXByZXYuc3dpcGVyLWJ1dHRvbi1ibGFja3stLXN3aXBlci1uYXZpZ2F0aW9uLWNvbG9yOiMwMDAwMDB9LnN3aXBlci1idXR0b24tbG9ja3tkaXNwbGF5Om5vbmV9LnN3aXBlci1wYWdpbmF0aW9ue3Bvc2l0aW9uOmFic29sdXRlO3RleHQtYWxpZ246Y2VudGVyO3RyYW5zaXRpb246LjNzIG9wYWNpdHk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt6LWluZGV4OjEwfS5zd2lwZXItcGFnaW5hdGlvbi5zd2lwZXItcGFnaW5hdGlvbi1oaWRkZW57b3BhY2l0eTowfS5zd2lwZXItY29udGFpbmVyLWhvcml6b250YWw+LnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMsLnN3aXBlci1wYWdpbmF0aW9uLWN1c3RvbSwuc3dpcGVyLXBhZ2luYXRpb24tZnJhY3Rpb257Ym90dG9tOjEwcHg7bGVmdDowO3dpZHRoOjEwMCV9LnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMtZHluYW1pY3tvdmVyZmxvdzpoaWRkZW47Zm9udC1zaXplOjB9LnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMtZHluYW1pYyAuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0e3RyYW5zZm9ybTpzY2FsZSguMzMpO3Bvc2l0aW9uOnJlbGF0aXZlfS5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzLWR5bmFtaWMgLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldC1hY3RpdmV7dHJhbnNmb3JtOnNjYWxlKDEpfS5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzLWR5bmFtaWMgLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldC1hY3RpdmUtbWFpbnt0cmFuc2Zvcm06c2NhbGUoMSl9LnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMtZHluYW1pYyAuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0LWFjdGl2ZS1wcmV2e3RyYW5zZm9ybTpzY2FsZSguNjYpfS5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzLWR5bmFtaWMgLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldC1hY3RpdmUtcHJldi1wcmV2e3RyYW5zZm9ybTpzY2FsZSguMzMpfS5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzLWR5bmFtaWMgLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldC1hY3RpdmUtbmV4dHt0cmFuc2Zvcm06c2NhbGUoLjY2KX0uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWljIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQtYWN0aXZlLW5leHQtbmV4dHt0cmFuc2Zvcm06c2NhbGUoLjMzKX0uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0e3dpZHRoOjhweDtoZWlnaHQ6OHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlci1yYWRpdXM6MTAwJTtiYWNrZ3JvdW5kOiMwMDA7b3BhY2l0eTouMn1idXR0b24uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0e2JvcmRlcjpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3gtc2hhZG93Om5vbmU7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lfS5zd2lwZXItcGFnaW5hdGlvbi1jbGlja2FibGUgLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHtjdXJzb3I6cG9pbnRlcn0uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0LWFjdGl2ZXtvcGFjaXR5OjE7YmFja2dyb3VuZDp2YXIoLS1zd2lwZXItcGFnaW5hdGlvbi1jb2xvcix2YXIoLS1zd2lwZXItdGhlbWUtY29sb3IpKX0uc3dpcGVyLWNvbnRhaW5lci12ZXJ0aWNhbD4uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0c3tyaWdodDoxMHB4O3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDBweCwtNTAlLDApfS5zd2lwZXItY29udGFpbmVyLXZlcnRpY2FsPi5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXR7bWFyZ2luOjZweCAwO2Rpc3BsYXk6YmxvY2t9LnN3aXBlci1jb250YWluZXItdmVydGljYWw+LnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWlje3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7d2lkdGg6OHB4fS5zd2lwZXItY29udGFpbmVyLXZlcnRpY2FsPi5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMtZHluYW1pYyAuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RyYW5zaXRpb246LjJzIHRyYW5zZm9ybSwuMnMgdG9wfS5zd2lwZXItY29udGFpbmVyLWhvcml6b250YWw+LnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMgLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHttYXJnaW46MCA0cHh9LnN3aXBlci1jb250YWluZXItaG9yaXpvbnRhbD4uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzLWR5bmFtaWN7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSk7d2hpdGUtc3BhY2U6bm93cmFwfS5zd2lwZXItY29udGFpbmVyLWhvcml6b250YWw+LnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWljIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXR7dHJhbnNpdGlvbjouMnMgdHJhbnNmb3JtLC4ycyBsZWZ0fS5zd2lwZXItY29udGFpbmVyLWhvcml6b250YWwuc3dpcGVyLWNvbnRhaW5lci1ydGw+LnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMtZHluYW1pYyAuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0e3RyYW5zaXRpb246LjJzIHRyYW5zZm9ybSwuMnMgcmlnaHR9LnN3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFye2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMjUpO3Bvc2l0aW9uOmFic29sdXRlfS5zd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2JhciAuc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXItZmlsbHtiYWNrZ3JvdW5kOnZhcigtLXN3aXBlci1wYWdpbmF0aW9uLWNvbG9yLHZhcigtLXN3aXBlci10aGVtZS1jb2xvcikpO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RyYW5zZm9ybTpzY2FsZSgwKTt0cmFuc2Zvcm0tb3JpZ2luOmxlZnQgdG9wfS5zd2lwZXItY29udGFpbmVyLXJ0bCAuc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXIgLnN3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFyLWZpbGx7dHJhbnNmb3JtLW9yaWdpbjpyaWdodCB0b3B9LnN3aXBlci1jb250YWluZXItaG9yaXpvbnRhbD4uc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXIsLnN3aXBlci1jb250YWluZXItdmVydGljYWw+LnN3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFyLnN3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFyLW9wcG9zaXRle3dpZHRoOjEwMCU7aGVpZ2h0OjRweDtsZWZ0OjA7dG9wOjB9LnN3aXBlci1jb250YWluZXItaG9yaXpvbnRhbD4uc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXIuc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXItb3Bwb3NpdGUsLnN3aXBlci1jb250YWluZXItdmVydGljYWw+LnN3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFye3dpZHRoOjRweDtoZWlnaHQ6MTAwJTtsZWZ0OjA7dG9wOjB9LnN3aXBlci1wYWdpbmF0aW9uLXdoaXRley0tc3dpcGVyLXBhZ2luYXRpb24tY29sb3I6I2ZmZmZmZn0uc3dpcGVyLXBhZ2luYXRpb24tYmxhY2t7LS1zd2lwZXItcGFnaW5hdGlvbi1jb2xvcjojMDAwMDAwfS5zd2lwZXItcGFnaW5hdGlvbi1sb2Nre2Rpc3BsYXk6bm9uZX0uc3dpcGVyLXNjcm9sbGJhcntib3JkZXItcmFkaXVzOjEwcHg7cG9zaXRpb246cmVsYXRpdmU7LW1zLXRvdWNoLWFjdGlvbjpub25lO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMSl9LnN3aXBlci1jb250YWluZXItaG9yaXpvbnRhbD4uc3dpcGVyLXNjcm9sbGJhcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjElO2JvdHRvbTozcHg7ei1pbmRleDo1MDtoZWlnaHQ6NXB4O3dpZHRoOjk4JX0uc3dpcGVyLWNvbnRhaW5lci12ZXJ0aWNhbD4uc3dpcGVyLXNjcm9sbGJhcntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDozcHg7dG9wOjElO3otaW5kZXg6NTA7d2lkdGg6NXB4O2hlaWdodDo5OCV9LnN3aXBlci1zY3JvbGxiYXItZHJhZ3toZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuNSk7Ym9yZGVyLXJhZGl1czoxMHB4O2xlZnQ6MDt0b3A6MH0uc3dpcGVyLXNjcm9sbGJhci1jdXJzb3ItZHJhZ3tjdXJzb3I6bW92ZX0uc3dpcGVyLXNjcm9sbGJhci1sb2Nre2Rpc3BsYXk6bm9uZX0uc3dpcGVyLXpvb20tY29udGFpbmVye3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3RleHQtYWxpZ246Y2VudGVyfS5zd2lwZXItem9vbS1jb250YWluZXI+Y2FudmFzLC5zd2lwZXItem9vbS1jb250YWluZXI+aW1nLC5zd2lwZXItem9vbS1jb250YWluZXI+c3Zne21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvbnRhaW59LnN3aXBlci1zbGlkZS16b29tZWR7Y3Vyc29yOm1vdmV9LnN3aXBlci1sYXp5LXByZWxvYWRlcnt3aWR0aDo0MnB4O2hlaWdodDo0MnB4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NTAlO3RvcDo1MCU7bWFyZ2luLWxlZnQ6LTIxcHg7bWFyZ2luLXRvcDotMjFweDt6LWluZGV4OjEwO3RyYW5zZm9ybS1vcmlnaW46NTAlO2FuaW1hdGlvbjpzd2lwZXItcHJlbG9hZGVyLXNwaW4gMXMgaW5maW5pdGUgbGluZWFyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6NHB4IHNvbGlkIHZhcigtLXN3aXBlci1wcmVsb2FkZXItY29sb3IsdmFyKC0tc3dpcGVyLXRoZW1lLWNvbG9yKSk7Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyLXRvcC1jb2xvcjp0cmFuc3BhcmVudH0uc3dpcGVyLWxhenktcHJlbG9hZGVyLXdoaXRley0tc3dpcGVyLXByZWxvYWRlci1jb2xvcjojZmZmfS5zd2lwZXItbGF6eS1wcmVsb2FkZXItYmxhY2t7LS1zd2lwZXItcHJlbG9hZGVyLWNvbG9yOiMwMDB9QGtleWZyYW1lcyBzd2lwZXItcHJlbG9hZGVyLXNwaW57MTAwJXt0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fS5zd2lwZXItY29udGFpbmVyIC5zd2lwZXItbm90aWZpY2F0aW9ue3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDtwb2ludGVyLWV2ZW50czpub25lO29wYWNpdHk6MDt6LWluZGV4Oi0xMDAwfS5zd2lwZXItY29udGFpbmVyLWZhZGUuc3dpcGVyLWNvbnRhaW5lci1mcmVlLW1vZGUgLnN3aXBlci1zbGlkZXt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLW91dH0uc3dpcGVyLWNvbnRhaW5lci1mYWRlIC5zd2lwZXItc2xpZGV7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHl9LnN3aXBlci1jb250YWluZXItZmFkZSAuc3dpcGVyLXNsaWRlIC5zd2lwZXItc2xpZGV7cG9pbnRlci1ldmVudHM6bm9uZX0uc3dpcGVyLWNvbnRhaW5lci1mYWRlIC5zd2lwZXItc2xpZGUtYWN0aXZlLC5zd2lwZXItY29udGFpbmVyLWZhZGUgLnN3aXBlci1zbGlkZS1hY3RpdmUgLnN3aXBlci1zbGlkZS1hY3RpdmV7cG9pbnRlci1ldmVudHM6YXV0b30uc3dpcGVyLWNvbnRhaW5lci1jdWJle292ZXJmbG93OnZpc2libGV9LnN3aXBlci1jb250YWluZXItY3ViZSAuc3dpcGVyLXNsaWRle3BvaW50ZXItZXZlbnRzOm5vbmU7LXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbjtiYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbjt6LWluZGV4OjE7dmlzaWJpbGl0eTpoaWRkZW47dHJhbnNmb3JtLW9yaWdpbjowIDA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0uc3dpcGVyLWNvbnRhaW5lci1jdWJlIC5zd2lwZXItc2xpZGUgLnN3aXBlci1zbGlkZXtwb2ludGVyLWV2ZW50czpub25lfS5zd2lwZXItY29udGFpbmVyLWN1YmUuc3dpcGVyLWNvbnRhaW5lci1ydGwgLnN3aXBlci1zbGlkZXt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMH0uc3dpcGVyLWNvbnRhaW5lci1jdWJlIC5zd2lwZXItc2xpZGUtYWN0aXZlLC5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZS1hY3RpdmUgLnN3aXBlci1zbGlkZS1hY3RpdmV7cG9pbnRlci1ldmVudHM6YXV0b30uc3dpcGVyLWNvbnRhaW5lci1jdWJlIC5zd2lwZXItc2xpZGUtYWN0aXZlLC5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZS1uZXh0LC5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZS1uZXh0Ky5zd2lwZXItc2xpZGUsLnN3aXBlci1jb250YWluZXItY3ViZSAuc3dpcGVyLXNsaWRlLXByZXZ7cG9pbnRlci1ldmVudHM6YXV0bzt2aXNpYmlsaXR5OnZpc2libGV9LnN3aXBlci1jb250YWluZXItY3ViZSAuc3dpcGVyLXNsaWRlLXNoYWRvdy1ib3R0b20sLnN3aXBlci1jb250YWluZXItY3ViZSAuc3dpcGVyLXNsaWRlLXNoYWRvdy1sZWZ0LC5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQsLnN3aXBlci1jb250YWluZXItY3ViZSAuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3B7ei1pbmRleDowOy13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW59LnN3aXBlci1jb250YWluZXItY3ViZSAuc3dpcGVyLWN1YmUtc2hhZG93e3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtib3R0b206MHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDojMDAwO29wYWNpdHk6LjY7LXdlYmtpdC1maWx0ZXI6Ymx1cig1MHB4KTtmaWx0ZXI6Ymx1cig1MHB4KTt6LWluZGV4OjB9LnN3aXBlci1jb250YWluZXItZmxpcHtvdmVyZmxvdzp2aXNpYmxlfS5zd2lwZXItY29udGFpbmVyLWZsaXAgLnN3aXBlci1zbGlkZXtwb2ludGVyLWV2ZW50czpub25lOy13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47ei1pbmRleDoxfS5zd2lwZXItY29udGFpbmVyLWZsaXAgLnN3aXBlci1zbGlkZSAuc3dpcGVyLXNsaWRle3BvaW50ZXItZXZlbnRzOm5vbmV9LnN3aXBlci1jb250YWluZXItZmxpcCAuc3dpcGVyLXNsaWRlLWFjdGl2ZSwuc3dpcGVyLWNvbnRhaW5lci1mbGlwIC5zd2lwZXItc2xpZGUtYWN0aXZlIC5zd2lwZXItc2xpZGUtYWN0aXZle3BvaW50ZXItZXZlbnRzOmF1dG99LnN3aXBlci1jb250YWluZXItZmxpcCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1ib3R0b20sLnN3aXBlci1jb250YWluZXItZmxpcCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1sZWZ0LC5zd2lwZXItY29udGFpbmVyLWZsaXAgLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQsLnN3aXBlci1jb250YWluZXItZmxpcCAuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3B7ei1pbmRleDowOy13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW59XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jc3Mvc3dpcGVyLm1pbi5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7Ozs7Ozs7Ozs7RUFVRTs7QUFFRixXQUFXLHdCQUF3QixDQUFDLDJzRUFBMnNFLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sNEJBQTRCLENBQUMsa0JBQWtCLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQywyQ0FBMkMscUJB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QUFpQyxLQUFLLHdCQUF3QixDQUFDLENBQUMsdUNBQXVDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxnRUFBZ0UsbUNBQW1DLENBQUMscUNBQXFDLG1CQUFtQixDQUFDLDJCQUEyQixDQUFDLG1EQUFtRCxtQkFBbUIsQ0FBQyw2R0FBNkcsbUJBQW1CLENBQUMsdUJBQXVCLGdCQUFnQixDQUFDLHFDQUFxQyxtQkFBbUIsQ0FBQyxrQ0FBa0MsQ0FBQywwQkFBMEIsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxtREFBbUQsbUJBQW1CLENBQUMsMERBQTBELHVCQUF1QixDQUFDLDZHQUE2RyxtQkFBbUIsQ0FBQyx3TEFBd0wsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsc01BQXNNLFNBQVMsQ0FBQyxrQ0FBa0MsQ0FBQywwQkFBMEIsQ0FBQywyQ0FBMkMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMseUJBQXlCLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLHVCQUF1QixnQkFBZ0IsQ0FBQyxxQ0FBcUMsbUJBQW1CLENBQUMsa0NBQWtDLENBQUMsMEJBQTBCLENBQUMsU0FBUyxDQUFDLG1EQUFtRCxtQkFBbUIsQ0FBQyw2R0FBNkcsbUJBQW1CLENBQUMsc01BQXNNLFNBQVMsQ0FBQyxrQ0FBa0MsQ0FBQywwQkFBMEJcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLyoqXFxuICogU3dpcGVyIDUuNC41XFxuICogTW9zdCBtb2Rlcm4gbW9iaWxlIHRvdWNoIHNsaWRlciBhbmQgZnJhbWV3b3JrIHdpdGggaGFyZHdhcmUgYWNjZWxlcmF0ZWQgdHJhbnNpdGlvbnNcXG4gKiBodHRwOi8vc3dpcGVyanMuY29tXFxuICpcXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDIwIFZsYWRpbWlyIEtoYXJsYW1waWRpXFxuICpcXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcXG4gKlxcbiAqIFJlbGVhc2VkIG9uOiBKdW5lIDE2LCAyMDIwXFxuICovXFxuXFxuQGZvbnQtZmFjZXtmb250LWZhbWlseTpzd2lwZXItaWNvbnM7c3JjOnVybChcXFwiZGF0YTphcHBsaWNhdGlvbi9mb250LXdvZmY7Y2hhcnNldD11dGYtODtiYXNlNjQsIGQwOUdSZ0FCQUFBQUFBWmdBQkFBQUFBQURBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCR1JsUk5BQUFHUkFBQUFCb0FBQUFjaTZxSGtVZEVSVVlBQUFXZ0FBQUFJd0FBQUNRQVlBQlhSMUJQVXdBQUJoUUFBQUF1QUFBQU51QVk3K3hIVTFWQ0FBQUZ4QUFBQUZBQUFBQm0yZlBjelU5VEx6SUFBQUhjQUFBQVNnQUFBR0JQOVY1UlkyMWhjQUFBQWtRQUFBQ0lBQUFCWXQ2RjBjQmpkblFnQUFBQ3pBQUFBQVFBQUFBRUFCRUJSR2RoYzNBQUFBV1lBQUFBQ0FBQUFBai8vd0FEWjJ4NVpnQUFBeXdBQUFETUFBQUQyTUh0cnlWb1pXRmtBQUFCYkFBQUFEQUFBQUEyRTIrZW9XaG9aV0VBQUFHY0FBQUFId0FBQUNRQzlnRHphRzEwZUFBQUFpZ0FBQUFaQUFBQXJnSmtBQkZzYjJOaEFBQUMwQUFBQUZvQUFBQmFGUUFVR0cxaGVIQUFBQUc4QUFBQUh3QUFBQ0FBY0FCQWJtRnRaUUFBQS9nQUFBRTVBQUFDWHZGZEJ3bHdiM04wQUFBRk5BQUFBR0lBQUFDRTVzNzRoWGphWTJCa1lHQUFZcGY1SHUvaitXMitNbkF6TVlEQXphWDZRakQ2LzQvL0J4ajVHQThBdVJ3TVlHa0FQeXdMMTNqYVkyQmtZR0E4OFA4QWd4NGorLzhmUURZZkExQUVCV2dEQUlCMkJPb0FlTnBqWUdSZ1lOQmg0R2RnWWdBQkVNbklBQkp6WU5BRENRQUFDV2dBc1FCNDJtTmdZZnpDT0lHQmxZR0IwWWN4allHQndSMUtmMldRWkdoaFlHQmlZR1ZtZ0FGR0JpUVFrT2Fhd3REQW9NQlF4WGpnL3dFR1BjWUREQTR3TlVBMkNDZ3dzQUFBTzRFTDZnQUFlTnBqMk0wZ3lBQUNxeGdHTldCa1oyRDQvd01BK3hrRGRnQUFBSGphWTJCZ1lHYUFZQmtHUmdZUWlBSHlHTUY4RmdZSElNM0R3TUhBQkdRck1PZ3lXRExFTTFUOS93OFVCZkVNZ0x6RS8vLy9QLzUvL2YvVi94dityNGVhQUFlTWJBeHdJVVltSU1IRWdLWUFZalVjc0RBd3NMS3hjM0J5Y2ZQdzhqRVFBL2daQkFTRmhFVkV4Y1FsSktXa1pXVGw1QlVVbFpSVlZOWFVOVFFaQmdNQUFNUitFK2dBRVFGRUFBQUFLZ0FxQUNvQU5BQStBRWdBVWdCY0FHWUFjQUI2QUlRQWpnQ1lBS0lBckFDMkFNQUF5Z0RVQU40QTZBRHlBUHdCQmdFUUFSb0JKQUV1QVRnQlFnRk1BVllCWUFGcUFYUUJmZ0dJQVpJQm5BR21BYklCemdIc0FBQjQydTJOTVE2Q1VBeUdXNTY4eDlBbmVZWWdtNE1KYmhLRmFFeElPQVZYOEFwZXdTdDRCaWM0QWZlQWlkM1ZPQml4RHhmUFlFemE1TytYZmkwNFlBRGdnaVVJVUxDdUVKSzhWaE80YlN2cGRua3RISTVRQ1l0ZGkyc2w4Wm5YYUhscVVyTkt6ZEtjVDhjamxxK3J3WlN2SVZjek5pZXpzZm5QL3V6bm1mUEZCTk9ETTJLN01UUTQ1WUVBWnFHUDgxQW1HR2NGM2lQcU9vcDByMVNQVGFUYlZrZlVlNEhYajk3d1lFK3lOd1dZeHdXdTR2MXVnV0hnbzNTMVhkWkVWcVdNN0VUMGNmbkxHeFdma2dSNDJvMlB2V3JETUJTRmovSUhMYUYwektqUmdkaVZNd1NjTlJBb1dVb0g3OFkyaWNCL3lJWTA5QW42QUgyQmR1L1VCK3l4b3BZc2hRaUV2bnZ1MGRVUmdEdDhRZUM4UER3N0ZwamkzZkVBNHovUEVKNllPQjVoS2g0ZGozRXZYaHhQcUgvU0tVWTNySjdzclo0RlpuaDFQTUF0UGh3UDZmbDJQTUpNUERnZVE0clk4WVQ2R3phbzBlQUVBNDA5RHVnZ21UbkZuT2NTQ2lFaUxNZ3hDaVRJNkNxNURaVWQzUW1wMTB2TzBMYUxUZDJjak40Zk91bWxjN2xVWWJTUWNaRmt1dFJHN2c2SktaS3kwUm1kTFk2ODBDRG5FSitVTWtwRkZlMVJON254ZFZwWHJDNGFUdG5hdXJPblllcmNaZzJZVm1MTi9kL2djemZFaW1yRS9mcy9iT3VxMjlabW44dGxvT1JhWGdaZ0dhNzh5TzkvY25YbTJCcGFHdnEyNUR2OVM0RTkrNVNJYzlQcXVwSktoWUZTU2w0NytRY3IxbVlOQUFBQWVOcHR3MGNLd2tBQUFNRFpKQThRN09VSnZrTHNQZlo2ekZWRVJQeThxSGgyWUVSKzNpL0JQODN2SUJMTHlTc29LaW1ycUtxcGEyaHA2K2pxNlJzWUdobWJtSnFaU3kwc3JheHRiTzNzSFJ5ZG5FTVU0dVI2eXg3SkpYdmVQN1dyRHljQUFBQUFBQUgvL3dBQ2VOcGpZR1JnWU9BQlloa2daZ0pDWmdaTkJrWUdMUVp0SUpzRkxNWUFBQXczQUxnQWVOb2xpekVLZ0RBUUJDY2hSYkMyc0ZFUjBZRDZxVlFpQkN2L0g5ZXpHSTZaNVhCQXc4Q0JLL201aVFRVmF1VmJYTG5Pck1adjJvTGRLRmE4UGp1cnUyaEp6R2FibU9TTHpOTXp2dXRwQjNONDJtTmdaR0JnNEdLUVl6QmhZTXhKTE1sajRHQmdBWW93L1AvUEFKSmhMTTZzU29XS2ZXQ0FBd0RBamdiUkFBQjQybU5nWUdCa0FJSWJDWm81SVBybVVuMGhHQTBBTzhFRlRRQUFcXFwiKSBmb3JtYXQoXFxcIndvZmZcXFwiKTtmb250LXdlaWdodDo0MDA7Zm9udC1zdHlsZTpub3JtYWx9OnJvb3R7LS1zd2lwZXItdGhlbWUtY29sb3I6IzAwN2FmZn0uc3dpcGVyLWNvbnRhaW5lcnttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjtsaXN0LXN0eWxlOm5vbmU7cGFkZGluZzowO3otaW5kZXg6MX0uc3dpcGVyLWNvbnRhaW5lci12ZXJ0aWNhbD4uc3dpcGVyLXdyYXBwZXJ7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5zd2lwZXItd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3otaW5kZXg6MTtkaXNwbGF5OmZsZXg7dHJhbnNpdGlvbi1wcm9wZXJ0eTp0cmFuc2Zvcm07Ym94LXNpemluZzpjb250ZW50LWJveH0uc3dpcGVyLWNvbnRhaW5lci1hbmRyb2lkIC5zd2lwZXItc2xpZGUsLnN3aXBlci13cmFwcGVye3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwcHgsMCwwKX0uc3dpcGVyLWNvbnRhaW5lci1tdWx0aXJvdz4uc3dpcGVyLXdyYXBwZXJ7ZmxleC13cmFwOndyYXB9LnN3aXBlci1jb250YWluZXItbXVsdGlyb3ctY29sdW1uPi5zd2lwZXItd3JhcHBlcntmbGV4LXdyYXA6d3JhcDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LnN3aXBlci1jb250YWluZXItZnJlZS1tb2RlPi5zd2lwZXItd3JhcHBlcnt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLW91dDttYXJnaW46MCBhdXRvfS5zd2lwZXItc2xpZGV7ZmxleC1zaHJpbms6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zaXRpb24tcHJvcGVydHk6dHJhbnNmb3JtfS5zd2lwZXItc2xpZGUtaW52aXNpYmxlLWJsYW5re3Zpc2liaWxpdHk6aGlkZGVufS5zd2lwZXItY29udGFpbmVyLWF1dG9oZWlnaHQsLnN3aXBlci1jb250YWluZXItYXV0b2hlaWdodCAuc3dpcGVyLXNsaWRle2hlaWdodDphdXRvfS5zd2lwZXItY29udGFpbmVyLWF1dG9oZWlnaHQgLnN3aXBlci13cmFwcGVye2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7dHJhbnNpdGlvbi1wcm9wZXJ0eTp0cmFuc2Zvcm0saGVpZ2h0fS5zd2lwZXItY29udGFpbmVyLTNke3BlcnNwZWN0aXZlOjEyMDBweH0uc3dpcGVyLWNvbnRhaW5lci0zZCAuc3dpcGVyLWN1YmUtc2hhZG93LC5zd2lwZXItY29udGFpbmVyLTNkIC5zd2lwZXItc2xpZGUsLnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctYm90dG9tLC5zd2lwZXItY29udGFpbmVyLTNkIC5zd2lwZXItc2xpZGUtc2hhZG93LWxlZnQsLnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQsLnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctdG9wLC5zd2lwZXItY29udGFpbmVyLTNkIC5zd2lwZXItd3JhcHBlcnt0cmFuc2Zvcm0tc3R5bGU6cHJlc2VydmUtM2R9LnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctYm90dG9tLC5zd2lwZXItY29udGFpbmVyLTNkIC5zd2lwZXItc2xpZGUtc2hhZG93LWxlZnQsLnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQsLnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctdG9we3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3BvaW50ZXItZXZlbnRzOm5vbmU7ei1pbmRleDoxMH0uc3dpcGVyLWNvbnRhaW5lci0zZCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1sZWZ0e2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQscmdiYSgwLDAsMCwuNSkscmdiYSgwLDAsMCwwKSl9LnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHR7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQscmdiYSgwLDAsMCwuNSkscmdiYSgwLDAsMCwwKSl9LnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctdG9we2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHRvcCxyZ2JhKDAsMCwwLC41KSxyZ2JhKDAsMCwwLDApKX0uc3dpcGVyLWNvbnRhaW5lci0zZCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1ib3R0b217YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHJnYmEoMCwwLDAsLjUpLHJnYmEoMCwwLDAsMCkpfS5zd2lwZXItY29udGFpbmVyLWNzcy1tb2RlPi5zd2lwZXItd3JhcHBlcntvdmVyZmxvdzphdXRvO3Njcm9sbGJhci13aWR0aDpub25lOy1tcy1vdmVyZmxvdy1zdHlsZTpub25lfS5zd2lwZXItY29udGFpbmVyLWNzcy1tb2RlPi5zd2lwZXItd3JhcHBlcjo6LXdlYmtpdC1zY3JvbGxiYXJ7ZGlzcGxheTpub25lfS5zd2lwZXItY29udGFpbmVyLWNzcy1tb2RlPi5zd2lwZXItd3JhcHBlcj4uc3dpcGVyLXNsaWRle3Njcm9sbC1zbmFwLWFsaWduOnN0YXJ0IHN0YXJ0fS5zd2lwZXItY29udGFpbmVyLWhvcml6b250YWwuc3dpcGVyLWNvbnRhaW5lci1jc3MtbW9kZT4uc3dpcGVyLXdyYXBwZXJ7c2Nyb2xsLXNuYXAtdHlwZTp4IG1hbmRhdG9yeX0uc3dpcGVyLWNvbnRhaW5lci12ZXJ0aWNhbC5zd2lwZXItY29udGFpbmVyLWNzcy1tb2RlPi5zd2lwZXItd3JhcHBlcntzY3JvbGwtc25hcC10eXBlOnkgbWFuZGF0b3J5fTpyb290ey0tc3dpcGVyLW5hdmlnYXRpb24tc2l6ZTo0NHB4fS5zd2lwZXItYnV0dG9uLW5leHQsLnN3aXBlci1idXR0b24tcHJldntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3dpZHRoOmNhbGModmFyKC0tc3dpcGVyLW5hdmlnYXRpb24tc2l6ZSkvIDQ0ICogMjcpO2hlaWdodDp2YXIoLS1zd2lwZXItbmF2aWdhdGlvbi1zaXplKTttYXJnaW4tdG9wOmNhbGMoLTEgKiB2YXIoLS1zd2lwZXItbmF2aWdhdGlvbi1zaXplKS8gMik7ei1pbmRleDoxMDtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Y29sb3I6dmFyKC0tc3dpcGVyLW5hdmlnYXRpb24tY29sb3IsdmFyKC0tc3dpcGVyLXRoZW1lLWNvbG9yKSl9LnN3aXBlci1idXR0b24tbmV4dC5zd2lwZXItYnV0dG9uLWRpc2FibGVkLC5zd2lwZXItYnV0dG9uLXByZXYuc3dpcGVyLWJ1dHRvbi1kaXNhYmxlZHtvcGFjaXR5Oi4zNTtjdXJzb3I6YXV0bztwb2ludGVyLWV2ZW50czpub25lfS5zd2lwZXItYnV0dG9uLW5leHQ6YWZ0ZXIsLnN3aXBlci1idXR0b24tcHJldjphZnRlcntmb250LWZhbWlseTpzd2lwZXItaWNvbnM7Zm9udC1zaXplOnZhcigtLXN3aXBlci1uYXZpZ2F0aW9uLXNpemUpO3RleHQtdHJhbnNmb3JtOm5vbmUhaW1wb3J0YW50O2xldHRlci1zcGFjaW5nOjA7dGV4dC10cmFuc2Zvcm06bm9uZTtmb250LXZhcmlhbnQ6aW5pdGlhbDtsaW5lLWhlaWdodDoxfS5zd2lwZXItYnV0dG9uLXByZXYsLnN3aXBlci1jb250YWluZXItcnRsIC5zd2lwZXItYnV0dG9uLW5leHR7bGVmdDoxMHB4O3JpZ2h0OmF1dG99LnN3aXBlci1idXR0b24tcHJldjphZnRlciwuc3dpcGVyLWNvbnRhaW5lci1ydGwgLnN3aXBlci1idXR0b24tbmV4dDphZnRlcntjb250ZW50OidwcmV2J30uc3dpcGVyLWJ1dHRvbi1uZXh0LC5zd2lwZXItY29udGFpbmVyLXJ0bCAuc3dpcGVyLWJ1dHRvbi1wcmV2e3JpZ2h0OjEwcHg7bGVmdDphdXRvfS5zd2lwZXItYnV0dG9uLW5leHQ6YWZ0ZXIsLnN3aXBlci1jb250YWluZXItcnRsIC5zd2lwZXItYnV0dG9uLXByZXY6YWZ0ZXJ7Y29udGVudDonbmV4dCd9LnN3aXBlci1idXR0b24tbmV4dC5zd2lwZXItYnV0dG9uLXdoaXRlLC5zd2lwZXItYnV0dG9uLXByZXYuc3dpcGVyLWJ1dHRvbi13aGl0ZXstLXN3aXBlci1uYXZpZ2F0aW9uLWNvbG9yOiNmZmZmZmZ9LnN3aXBlci1idXR0b24tbmV4dC5zd2lwZXItYnV0dG9uLWJsYWNrLC5zd2lwZXItYnV0dG9uLXByZXYuc3dpcGVyLWJ1dHRvbi1ibGFja3stLXN3aXBlci1uYXZpZ2F0aW9uLWNvbG9yOiMwMDAwMDB9LnN3aXBlci1idXR0b24tbG9ja3tkaXNwbGF5Om5vbmV9LnN3aXBlci1wYWdpbmF0aW9ue3Bvc2l0aW9uOmFic29sdXRlO3RleHQtYWxpZ246Y2VudGVyO3RyYW5zaXRpb246LjNzIG9wYWNpdHk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt6LWluZGV4OjEwfS5zd2lwZXItcGFnaW5hdGlvbi5zd2lwZXItcGFnaW5hdGlvbi1oaWRkZW57b3BhY2l0eTowfS5zd2lwZXItY29udGFpbmVyLWhvcml6b250YWw+LnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMsLnN3aXBlci1wYWdpbmF0aW9uLWN1c3RvbSwuc3dpcGVyLXBhZ2luYXRpb24tZnJhY3Rpb257Ym90dG9tOjEwcHg7bGVmdDowO3dpZHRoOjEwMCV9LnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMtZHluYW1pY3tvdmVyZmxvdzpoaWRkZW47Zm9udC1zaXplOjB9LnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMtZHluYW1pYyAuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0e3RyYW5zZm9ybTpzY2FsZSguMzMpO3Bvc2l0aW9uOnJlbGF0aXZlfS5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzLWR5bmFtaWMgLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldC1hY3RpdmV7dHJhbnNmb3JtOnNjYWxlKDEpfS5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzLWR5bmFtaWMgLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldC1hY3RpdmUtbWFpbnt0cmFuc2Zvcm06c2NhbGUoMSl9LnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMtZHluYW1pYyAuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0LWFjdGl2ZS1wcmV2e3RyYW5zZm9ybTpzY2FsZSguNjYpfS5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzLWR5bmFtaWMgLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldC1hY3RpdmUtcHJldi1wcmV2e3RyYW5zZm9ybTpzY2FsZSguMzMpfS5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzLWR5bmFtaWMgLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldC1hY3RpdmUtbmV4dHt0cmFuc2Zvcm06c2NhbGUoLjY2KX0uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWljIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQtYWN0aXZlLW5leHQtbmV4dHt0cmFuc2Zvcm06c2NhbGUoLjMzKX0uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0e3dpZHRoOjhweDtoZWlnaHQ6OHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlci1yYWRpdXM6MTAwJTtiYWNrZ3JvdW5kOiMwMDA7b3BhY2l0eTouMn1idXR0b24uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0e2JvcmRlcjpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3gtc2hhZG93Om5vbmU7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lfS5zd2lwZXItcGFnaW5hdGlvbi1jbGlja2FibGUgLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHtjdXJzb3I6cG9pbnRlcn0uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0LWFjdGl2ZXtvcGFjaXR5OjE7YmFja2dyb3VuZDp2YXIoLS1zd2lwZXItcGFnaW5hdGlvbi1jb2xvcix2YXIoLS1zd2lwZXItdGhlbWUtY29sb3IpKX0uc3dpcGVyLWNvbnRhaW5lci12ZXJ0aWNhbD4uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0c3tyaWdodDoxMHB4O3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDBweCwtNTAlLDApfS5zd2lwZXItY29udGFpbmVyLXZlcnRpY2FsPi5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXR7bWFyZ2luOjZweCAwO2Rpc3BsYXk6YmxvY2t9LnN3aXBlci1jb250YWluZXItdmVydGljYWw+LnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWlje3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7d2lkdGg6OHB4fS5zd2lwZXItY29udGFpbmVyLXZlcnRpY2FsPi5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMtZHluYW1pYyAuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RyYW5zaXRpb246LjJzIHRyYW5zZm9ybSwuMnMgdG9wfS5zd2lwZXItY29udGFpbmVyLWhvcml6b250YWw+LnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMgLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHttYXJnaW46MCA0cHh9LnN3aXBlci1jb250YWluZXItaG9yaXpvbnRhbD4uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzLWR5bmFtaWN7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSk7d2hpdGUtc3BhY2U6bm93cmFwfS5zd2lwZXItY29udGFpbmVyLWhvcml6b250YWw+LnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWljIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXR7dHJhbnNpdGlvbjouMnMgdHJhbnNmb3JtLC4ycyBsZWZ0fS5zd2lwZXItY29udGFpbmVyLWhvcml6b250YWwuc3dpcGVyLWNvbnRhaW5lci1ydGw+LnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMtZHluYW1pYyAuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0e3RyYW5zaXRpb246LjJzIHRyYW5zZm9ybSwuMnMgcmlnaHR9LnN3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFye2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMjUpO3Bvc2l0aW9uOmFic29sdXRlfS5zd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2JhciAuc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXItZmlsbHtiYWNrZ3JvdW5kOnZhcigtLXN3aXBlci1wYWdpbmF0aW9uLWNvbG9yLHZhcigtLXN3aXBlci10aGVtZS1jb2xvcikpO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RyYW5zZm9ybTpzY2FsZSgwKTt0cmFuc2Zvcm0tb3JpZ2luOmxlZnQgdG9wfS5zd2lwZXItY29udGFpbmVyLXJ0bCAuc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXIgLnN3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFyLWZpbGx7dHJhbnNmb3JtLW9yaWdpbjpyaWdodCB0b3B9LnN3aXBlci1jb250YWluZXItaG9yaXpvbnRhbD4uc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXIsLnN3aXBlci1jb250YWluZXItdmVydGljYWw+LnN3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFyLnN3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFyLW9wcG9zaXRle3dpZHRoOjEwMCU7aGVpZ2h0OjRweDtsZWZ0OjA7dG9wOjB9LnN3aXBlci1jb250YWluZXItaG9yaXpvbnRhbD4uc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXIuc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXItb3Bwb3NpdGUsLnN3aXBlci1jb250YWluZXItdmVydGljYWw+LnN3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFye3dpZHRoOjRweDtoZWlnaHQ6MTAwJTtsZWZ0OjA7dG9wOjB9LnN3aXBlci1wYWdpbmF0aW9uLXdoaXRley0tc3dpcGVyLXBhZ2luYXRpb24tY29sb3I6I2ZmZmZmZn0uc3dpcGVyLXBhZ2luYXRpb24tYmxhY2t7LS1zd2lwZXItcGFnaW5hdGlvbi1jb2xvcjojMDAwMDAwfS5zd2lwZXItcGFnaW5hdGlvbi1sb2Nre2Rpc3BsYXk6bm9uZX0uc3dpcGVyLXNjcm9sbGJhcntib3JkZXItcmFkaXVzOjEwcHg7cG9zaXRpb246cmVsYXRpdmU7LW1zLXRvdWNoLWFjdGlvbjpub25lO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMSl9LnN3aXBlci1jb250YWluZXItaG9yaXpvbnRhbD4uc3dpcGVyLXNjcm9sbGJhcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjElO2JvdHRvbTozcHg7ei1pbmRleDo1MDtoZWlnaHQ6NXB4O3dpZHRoOjk4JX0uc3dpcGVyLWNvbnRhaW5lci12ZXJ0aWNhbD4uc3dpcGVyLXNjcm9sbGJhcntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDozcHg7dG9wOjElO3otaW5kZXg6NTA7d2lkdGg6NXB4O2hlaWdodDo5OCV9LnN3aXBlci1zY3JvbGxiYXItZHJhZ3toZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuNSk7Ym9yZGVyLXJhZGl1czoxMHB4O2xlZnQ6MDt0b3A6MH0uc3dpcGVyLXNjcm9sbGJhci1jdXJzb3ItZHJhZ3tjdXJzb3I6bW92ZX0uc3dpcGVyLXNjcm9sbGJhci1sb2Nre2Rpc3BsYXk6bm9uZX0uc3dpcGVyLXpvb20tY29udGFpbmVye3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3RleHQtYWxpZ246Y2VudGVyfS5zd2lwZXItem9vbS1jb250YWluZXI+Y2FudmFzLC5zd2lwZXItem9vbS1jb250YWluZXI+aW1nLC5zd2lwZXItem9vbS1jb250YWluZXI+c3Zne21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvbnRhaW59LnN3aXBlci1zbGlkZS16b29tZWR7Y3Vyc29yOm1vdmV9LnN3aXBlci1sYXp5LXByZWxvYWRlcnt3aWR0aDo0MnB4O2hlaWdodDo0MnB4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NTAlO3RvcDo1MCU7bWFyZ2luLWxlZnQ6LTIxcHg7bWFyZ2luLXRvcDotMjFweDt6LWluZGV4OjEwO3RyYW5zZm9ybS1vcmlnaW46NTAlO2FuaW1hdGlvbjpzd2lwZXItcHJlbG9hZGVyLXNwaW4gMXMgaW5maW5pdGUgbGluZWFyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6NHB4IHNvbGlkIHZhcigtLXN3aXBlci1wcmVsb2FkZXItY29sb3IsdmFyKC0tc3dpcGVyLXRoZW1lLWNvbG9yKSk7Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyLXRvcC1jb2xvcjp0cmFuc3BhcmVudH0uc3dpcGVyLWxhenktcHJlbG9hZGVyLXdoaXRley0tc3dpcGVyLXByZWxvYWRlci1jb2xvcjojZmZmfS5zd2lwZXItbGF6eS1wcmVsb2FkZXItYmxhY2t7LS1zd2lwZXItcHJlbG9hZGVyLWNvbG9yOiMwMDB9QGtleWZyYW1lcyBzd2lwZXItcHJlbG9hZGVyLXNwaW57MTAwJXt0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fS5zd2lwZXItY29udGFpbmVyIC5zd2lwZXItbm90aWZpY2F0aW9ue3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDtwb2ludGVyLWV2ZW50czpub25lO29wYWNpdHk6MDt6LWluZGV4Oi0xMDAwfS5zd2lwZXItY29udGFpbmVyLWZhZGUuc3dpcGVyLWNvbnRhaW5lci1mcmVlLW1vZGUgLnN3aXBlci1zbGlkZXt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLW91dH0uc3dpcGVyLWNvbnRhaW5lci1mYWRlIC5zd2lwZXItc2xpZGV7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHl9LnN3aXBlci1jb250YWluZXItZmFkZSAuc3dpcGVyLXNsaWRlIC5zd2lwZXItc2xpZGV7cG9pbnRlci1ldmVudHM6bm9uZX0uc3dpcGVyLWNvbnRhaW5lci1mYWRlIC5zd2lwZXItc2xpZGUtYWN0aXZlLC5zd2lwZXItY29udGFpbmVyLWZhZGUgLnN3aXBlci1zbGlkZS1hY3RpdmUgLnN3aXBlci1zbGlkZS1hY3RpdmV7cG9pbnRlci1ldmVudHM6YXV0b30uc3dpcGVyLWNvbnRhaW5lci1jdWJle292ZXJmbG93OnZpc2libGV9LnN3aXBlci1jb250YWluZXItY3ViZSAuc3dpcGVyLXNsaWRle3BvaW50ZXItZXZlbnRzOm5vbmU7LXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbjtiYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbjt6LWluZGV4OjE7dmlzaWJpbGl0eTpoaWRkZW47dHJhbnNmb3JtLW9yaWdpbjowIDA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0uc3dpcGVyLWNvbnRhaW5lci1jdWJlIC5zd2lwZXItc2xpZGUgLnN3aXBlci1zbGlkZXtwb2ludGVyLWV2ZW50czpub25lfS5zd2lwZXItY29udGFpbmVyLWN1YmUuc3dpcGVyLWNvbnRhaW5lci1ydGwgLnN3aXBlci1zbGlkZXt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMH0uc3dpcGVyLWNvbnRhaW5lci1jdWJlIC5zd2lwZXItc2xpZGUtYWN0aXZlLC5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZS1hY3RpdmUgLnN3aXBlci1zbGlkZS1hY3RpdmV7cG9pbnRlci1ldmVudHM6YXV0b30uc3dpcGVyLWNvbnRhaW5lci1jdWJlIC5zd2lwZXItc2xpZGUtYWN0aXZlLC5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZS1uZXh0LC5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZS1uZXh0Ky5zd2lwZXItc2xpZGUsLnN3aXBlci1jb250YWluZXItY3ViZSAuc3dpcGVyLXNsaWRlLXByZXZ7cG9pbnRlci1ldmVudHM6YXV0bzt2aXNpYmlsaXR5OnZpc2libGV9LnN3aXBlci1jb250YWluZXItY3ViZSAuc3dpcGVyLXNsaWRlLXNoYWRvdy1ib3R0b20sLnN3aXBlci1jb250YWluZXItY3ViZSAuc3dpcGVyLXNsaWRlLXNoYWRvdy1sZWZ0LC5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQsLnN3aXBlci1jb250YWluZXItY3ViZSAuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3B7ei1pbmRleDowOy13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW59LnN3aXBlci1jb250YWluZXItY3ViZSAuc3dpcGVyLWN1YmUtc2hhZG93e3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtib3R0b206MHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDojMDAwO29wYWNpdHk6LjY7LXdlYmtpdC1maWx0ZXI6Ymx1cig1MHB4KTtmaWx0ZXI6Ymx1cig1MHB4KTt6LWluZGV4OjB9LnN3aXBlci1jb250YWluZXItZmxpcHtvdmVyZmxvdzp2aXNpYmxlfS5zd2lwZXItY29udGFpbmVyLWZsaXAgLnN3aXBlci1zbGlkZXtwb2ludGVyLWV2ZW50czpub25lOy13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47ei1pbmRleDoxfS5zd2lwZXItY29udGFpbmVyLWZsaXAgLnN3aXBlci1zbGlkZSAuc3dpcGVyLXNsaWRle3BvaW50ZXItZXZlbnRzOm5vbmV9LnN3aXBlci1jb250YWluZXItZmxpcCAuc3dpcGVyLXNsaWRlLWFjdGl2ZSwuc3dpcGVyLWNvbnRhaW5lci1mbGlwIC5zd2lwZXItc2xpZGUtYWN0aXZlIC5zd2lwZXItc2xpZGUtYWN0aXZle3BvaW50ZXItZXZlbnRzOmF1dG99LnN3aXBlci1jb250YWluZXItZmxpcCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1ib3R0b20sLnN3aXBlci1jb250YWluZXItZmxpcCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1sZWZ0LC5zd2lwZXItY29udGFpbmVyLWZsaXAgLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQsLnN3aXBlci1jb250YWluZXItZmxpcCAuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3B7ei1pbmRleDowOy13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW59XCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsInZhciBtYXAgPSB7XG5cdFwiLi9hZlwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYWYuanNcIixcblx0XCIuL2FmLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hZi5qc1wiLFxuXHRcIi4vYXJcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLmpzXCIsXG5cdFwiLi9hci1kelwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItZHouanNcIixcblx0XCIuL2FyLWR6LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1kei5qc1wiLFxuXHRcIi4vYXIta3dcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLWt3LmpzXCIsXG5cdFwiLi9hci1rdy5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXIta3cuanNcIixcblx0XCIuL2FyLWx5XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1seS5qc1wiLFxuXHRcIi4vYXItbHkuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLWx5LmpzXCIsXG5cdFwiLi9hci1tYVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItbWEuanNcIixcblx0XCIuL2FyLW1hLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1tYS5qc1wiLFxuXHRcIi4vYXItc2FcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLXNhLmpzXCIsXG5cdFwiLi9hci1zYS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItc2EuanNcIixcblx0XCIuL2FyLXRuXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci10bi5qc1wiLFxuXHRcIi4vYXItdG4uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLXRuLmpzXCIsXG5cdFwiLi9hci5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXIuanNcIixcblx0XCIuL2F6XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hei5qc1wiLFxuXHRcIi4vYXouanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2F6LmpzXCIsXG5cdFwiLi9iZVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYmUuanNcIixcblx0XCIuL2JlLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iZS5qc1wiLFxuXHRcIi4vYmdcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JnLmpzXCIsXG5cdFwiLi9iZy5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYmcuanNcIixcblx0XCIuL2JtXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ibS5qc1wiLFxuXHRcIi4vYm0uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JtLmpzXCIsXG5cdFwiLi9iblwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYm4uanNcIixcblx0XCIuL2JuLWJkXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ibi1iZC5qc1wiLFxuXHRcIi4vYm4tYmQuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JuLWJkLmpzXCIsXG5cdFwiLi9ibi5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYm4uanNcIixcblx0XCIuL2JvXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iby5qc1wiLFxuXHRcIi4vYm8uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JvLmpzXCIsXG5cdFwiLi9iclwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYnIuanNcIixcblx0XCIuL2JyLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ici5qc1wiLFxuXHRcIi4vYnNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JzLmpzXCIsXG5cdFwiLi9icy5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYnMuanNcIixcblx0XCIuL2NhXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jYS5qc1wiLFxuXHRcIi4vY2EuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2NhLmpzXCIsXG5cdFwiLi9jc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvY3MuanNcIixcblx0XCIuL2NzLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jcy5qc1wiLFxuXHRcIi4vY3ZcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2N2LmpzXCIsXG5cdFwiLi9jdi5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvY3YuanNcIixcblx0XCIuL2N5XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jeS5qc1wiLFxuXHRcIi4vY3kuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2N5LmpzXCIsXG5cdFwiLi9kYVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGEuanNcIixcblx0XCIuL2RhLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kYS5qc1wiLFxuXHRcIi4vZGVcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2RlLmpzXCIsXG5cdFwiLi9kZS1hdFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGUtYXQuanNcIixcblx0XCIuL2RlLWF0LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS1hdC5qc1wiLFxuXHRcIi4vZGUtY2hcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2RlLWNoLmpzXCIsXG5cdFwiLi9kZS1jaC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGUtY2guanNcIixcblx0XCIuL2RlLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS5qc1wiLFxuXHRcIi4vZHZcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2R2LmpzXCIsXG5cdFwiLi9kdi5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZHYuanNcIixcblx0XCIuL2VsXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbC5qc1wiLFxuXHRcIi4vZWwuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VsLmpzXCIsXG5cdFwiLi9lbi1hdVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tYXUuanNcIixcblx0XCIuL2VuLWF1LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1hdS5qc1wiLFxuXHRcIi4vZW4tY2FcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWNhLmpzXCIsXG5cdFwiLi9lbi1jYS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tY2EuanNcIixcblx0XCIuL2VuLWdiXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1nYi5qc1wiLFxuXHRcIi4vZW4tZ2IuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWdiLmpzXCIsXG5cdFwiLi9lbi1pZVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4taWUuanNcIixcblx0XCIuL2VuLWllLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pZS5qc1wiLFxuXHRcIi4vZW4taWxcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWlsLmpzXCIsXG5cdFwiLi9lbi1pbC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4taWwuanNcIixcblx0XCIuL2VuLWluXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pbi5qc1wiLFxuXHRcIi4vZW4taW4uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWluLmpzXCIsXG5cdFwiLi9lbi1uelwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tbnouanNcIixcblx0XCIuL2VuLW56LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1uei5qc1wiLFxuXHRcIi4vZW4tc2dcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLXNnLmpzXCIsXG5cdFwiLi9lbi1zZy5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tc2cuanNcIixcblx0XCIuL2VvXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lby5qc1wiLFxuXHRcIi4vZW8uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VvLmpzXCIsXG5cdFwiLi9lc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXMuanNcIixcblx0XCIuL2VzLWRvXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy1kby5qc1wiLFxuXHRcIi4vZXMtZG8uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VzLWRvLmpzXCIsXG5cdFwiLi9lcy1teFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXMtbXguanNcIixcblx0XCIuL2VzLW14LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy1teC5qc1wiLFxuXHRcIi4vZXMtdXNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VzLXVzLmpzXCIsXG5cdFwiLi9lcy11cy5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXMtdXMuanNcIixcblx0XCIuL2VzLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy5qc1wiLFxuXHRcIi4vZXRcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2V0LmpzXCIsXG5cdFwiLi9ldC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXQuanNcIixcblx0XCIuL2V1XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ldS5qc1wiLFxuXHRcIi4vZXUuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2V1LmpzXCIsXG5cdFwiLi9mYVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZmEuanNcIixcblx0XCIuL2ZhLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mYS5qc1wiLFxuXHRcIi4vZmlcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZpLmpzXCIsXG5cdFwiLi9maS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZmkuanNcIixcblx0XCIuL2ZpbFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZmlsLmpzXCIsXG5cdFwiLi9maWwuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZpbC5qc1wiLFxuXHRcIi4vZm9cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZvLmpzXCIsXG5cdFwiLi9mby5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZm8uanNcIixcblx0XCIuL2ZyXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mci5qc1wiLFxuXHRcIi4vZnItY2FcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZyLWNhLmpzXCIsXG5cdFwiLi9mci1jYS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnItY2EuanNcIixcblx0XCIuL2ZyLWNoXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mci1jaC5qc1wiLFxuXHRcIi4vZnItY2guanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZyLWNoLmpzXCIsXG5cdFwiLi9mci5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnIuanNcIixcblx0XCIuL2Z5XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9meS5qc1wiLFxuXHRcIi4vZnkuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2Z5LmpzXCIsXG5cdFwiLi9nYVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ2EuanNcIixcblx0XCIuL2dhLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nYS5qc1wiLFxuXHRcIi4vZ2RcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dkLmpzXCIsXG5cdFwiLi9nZC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ2QuanNcIixcblx0XCIuL2dsXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nbC5qc1wiLFxuXHRcIi4vZ2wuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dsLmpzXCIsXG5cdFwiLi9nb20tZGV2YVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ29tLWRldmEuanNcIixcblx0XCIuL2dvbS1kZXZhLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nb20tZGV2YS5qc1wiLFxuXHRcIi4vZ29tLWxhdG5cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dvbS1sYXRuLmpzXCIsXG5cdFwiLi9nb20tbGF0bi5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ29tLWxhdG4uanNcIixcblx0XCIuL2d1XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ndS5qc1wiLFxuXHRcIi4vZ3UuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2d1LmpzXCIsXG5cdFwiLi9oZVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaGUuanNcIixcblx0XCIuL2hlLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oZS5qc1wiLFxuXHRcIi4vaGlcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2hpLmpzXCIsXG5cdFwiLi9oaS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaGkuanNcIixcblx0XCIuL2hyXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oci5qc1wiLFxuXHRcIi4vaHIuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2hyLmpzXCIsXG5cdFwiLi9odVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaHUuanNcIixcblx0XCIuL2h1LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9odS5qc1wiLFxuXHRcIi4vaHktYW1cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2h5LWFtLmpzXCIsXG5cdFwiLi9oeS1hbS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaHktYW0uanNcIixcblx0XCIuL2lkXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pZC5qc1wiLFxuXHRcIi4vaWQuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2lkLmpzXCIsXG5cdFwiLi9pc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaXMuanNcIixcblx0XCIuL2lzLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pcy5qc1wiLFxuXHRcIi4vaXRcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2l0LmpzXCIsXG5cdFwiLi9pdC1jaFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaXQtY2guanNcIixcblx0XCIuL2l0LWNoLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pdC1jaC5qc1wiLFxuXHRcIi4vaXQuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2l0LmpzXCIsXG5cdFwiLi9qYVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvamEuanNcIixcblx0XCIuL2phLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9qYS5qc1wiLFxuXHRcIi4vanZcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2p2LmpzXCIsXG5cdFwiLi9qdi5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvanYuanNcIixcblx0XCIuL2thXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rYS5qc1wiLFxuXHRcIi4va2EuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2thLmpzXCIsXG5cdFwiLi9ra1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva2suanNcIixcblx0XCIuL2trLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ray5qc1wiLFxuXHRcIi4va21cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ttLmpzXCIsXG5cdFwiLi9rbS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva20uanNcIixcblx0XCIuL2tuXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rbi5qc1wiLFxuXHRcIi4va24uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2tuLmpzXCIsXG5cdFwiLi9rb1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva28uanNcIixcblx0XCIuL2tvLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rby5qc1wiLFxuXHRcIi4va3VcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2t1LmpzXCIsXG5cdFwiLi9rdS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva3UuanNcIixcblx0XCIuL2t5XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9reS5qc1wiLFxuXHRcIi4va3kuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2t5LmpzXCIsXG5cdFwiLi9sYlwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbGIuanNcIixcblx0XCIuL2xiLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sYi5qc1wiLFxuXHRcIi4vbG9cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2xvLmpzXCIsXG5cdFwiLi9sby5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbG8uanNcIixcblx0XCIuL2x0XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sdC5qc1wiLFxuXHRcIi4vbHQuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2x0LmpzXCIsXG5cdFwiLi9sdlwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbHYuanNcIixcblx0XCIuL2x2LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sdi5qc1wiLFxuXHRcIi4vbWVcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21lLmpzXCIsXG5cdFwiLi9tZS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWUuanNcIixcblx0XCIuL21pXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9taS5qc1wiLFxuXHRcIi4vbWkuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21pLmpzXCIsXG5cdFwiLi9ta1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWsuanNcIixcblx0XCIuL21rLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tay5qc1wiLFxuXHRcIi4vbWxcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21sLmpzXCIsXG5cdFwiLi9tbC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWwuanNcIixcblx0XCIuL21uXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tbi5qc1wiLFxuXHRcIi4vbW4uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21uLmpzXCIsXG5cdFwiLi9tclwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXIuanNcIixcblx0XCIuL21yLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tci5qc1wiLFxuXHRcIi4vbXNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21zLmpzXCIsXG5cdFwiLi9tcy1teVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXMtbXkuanNcIixcblx0XCIuL21zLW15LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tcy1teS5qc1wiLFxuXHRcIi4vbXMuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21zLmpzXCIsXG5cdFwiLi9tdFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXQuanNcIixcblx0XCIuL210LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tdC5qc1wiLFxuXHRcIi4vbXlcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL215LmpzXCIsXG5cdFwiLi9teS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXkuanNcIixcblx0XCIuL25iXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9uYi5qc1wiLFxuXHRcIi4vbmIuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25iLmpzXCIsXG5cdFwiLi9uZVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmUuanNcIixcblx0XCIuL25lLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9uZS5qc1wiLFxuXHRcIi4vbmxcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25sLmpzXCIsXG5cdFwiLi9ubC1iZVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmwtYmUuanNcIixcblx0XCIuL25sLWJlLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ubC1iZS5qc1wiLFxuXHRcIi4vbmwuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25sLmpzXCIsXG5cdFwiLi9ublwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbm4uanNcIixcblx0XCIuL25uLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ubi5qc1wiLFxuXHRcIi4vb2MtbG5jXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9vYy1sbmMuanNcIixcblx0XCIuL29jLWxuYy5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvb2MtbG5jLmpzXCIsXG5cdFwiLi9wYS1pblwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcGEtaW4uanNcIixcblx0XCIuL3BhLWluLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wYS1pbi5qc1wiLFxuXHRcIi4vcGxcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3BsLmpzXCIsXG5cdFwiLi9wbC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcGwuanNcIixcblx0XCIuL3B0XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wdC5qc1wiLFxuXHRcIi4vcHQtYnJcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3B0LWJyLmpzXCIsXG5cdFwiLi9wdC1ici5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcHQtYnIuanNcIixcblx0XCIuL3B0LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wdC5qc1wiLFxuXHRcIi4vcm9cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3JvLmpzXCIsXG5cdFwiLi9yby5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcm8uanNcIixcblx0XCIuL3J1XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ydS5qc1wiLFxuXHRcIi4vcnUuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3J1LmpzXCIsXG5cdFwiLi9zZFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2QuanNcIixcblx0XCIuL3NkLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zZC5qc1wiLFxuXHRcIi4vc2VcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NlLmpzXCIsXG5cdFwiLi9zZS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2UuanNcIixcblx0XCIuL3NpXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zaS5qc1wiLFxuXHRcIi4vc2kuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NpLmpzXCIsXG5cdFwiLi9za1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2suanNcIixcblx0XCIuL3NrLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zay5qc1wiLFxuXHRcIi4vc2xcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NsLmpzXCIsXG5cdFwiLi9zbC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2wuanNcIixcblx0XCIuL3NxXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zcS5qc1wiLFxuXHRcIi4vc3EuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NxLmpzXCIsXG5cdFwiLi9zclwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3IuanNcIixcblx0XCIuL3NyLWN5cmxcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NyLWN5cmwuanNcIixcblx0XCIuL3NyLWN5cmwuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NyLWN5cmwuanNcIixcblx0XCIuL3NyLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zci5qc1wiLFxuXHRcIi4vc3NcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NzLmpzXCIsXG5cdFwiLi9zcy5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3MuanNcIixcblx0XCIuL3N2XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zdi5qc1wiLFxuXHRcIi4vc3YuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3N2LmpzXCIsXG5cdFwiLi9zd1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3cuanNcIixcblx0XCIuL3N3LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zdy5qc1wiLFxuXHRcIi4vdGFcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RhLmpzXCIsXG5cdFwiLi90YS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGEuanNcIixcblx0XCIuL3RlXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ZS5qc1wiLFxuXHRcIi4vdGUuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RlLmpzXCIsXG5cdFwiLi90ZXRcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RldC5qc1wiLFxuXHRcIi4vdGV0LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ZXQuanNcIixcblx0XCIuL3RnXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90Zy5qc1wiLFxuXHRcIi4vdGcuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RnLmpzXCIsXG5cdFwiLi90aFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGguanNcIixcblx0XCIuL3RoLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90aC5qc1wiLFxuXHRcIi4vdGtcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RrLmpzXCIsXG5cdFwiLi90ay5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGsuanNcIixcblx0XCIuL3RsLXBoXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90bC1waC5qc1wiLFxuXHRcIi4vdGwtcGguanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RsLXBoLmpzXCIsXG5cdFwiLi90bGhcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RsaC5qc1wiLFxuXHRcIi4vdGxoLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90bGguanNcIixcblx0XCIuL3RyXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ci5qc1wiLFxuXHRcIi4vdHIuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RyLmpzXCIsXG5cdFwiLi90emxcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3R6bC5qc1wiLFxuXHRcIi4vdHpsLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90emwuanNcIixcblx0XCIuL3R6bVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdHptLmpzXCIsXG5cdFwiLi90em0tbGF0blwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdHptLWxhdG4uanNcIixcblx0XCIuL3R6bS1sYXRuLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90em0tbGF0bi5qc1wiLFxuXHRcIi4vdHptLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90em0uanNcIixcblx0XCIuL3VnLWNuXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91Zy1jbi5qc1wiLFxuXHRcIi4vdWctY24uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VnLWNuLmpzXCIsXG5cdFwiLi91a1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdWsuanNcIixcblx0XCIuL3VrLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ay5qc1wiLFxuXHRcIi4vdXJcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VyLmpzXCIsXG5cdFwiLi91ci5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdXIuanNcIixcblx0XCIuL3V6XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ei5qc1wiLFxuXHRcIi4vdXotbGF0blwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdXotbGF0bi5qc1wiLFxuXHRcIi4vdXotbGF0bi5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdXotbGF0bi5qc1wiLFxuXHRcIi4vdXouanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3V6LmpzXCIsXG5cdFwiLi92aVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdmkuanNcIixcblx0XCIuL3ZpLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS92aS5qc1wiLFxuXHRcIi4veC1wc2V1ZG9cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3gtcHNldWRvLmpzXCIsXG5cdFwiLi94LXBzZXVkby5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUveC1wc2V1ZG8uanNcIixcblx0XCIuL3lvXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS95by5qc1wiLFxuXHRcIi4veW8uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3lvLmpzXCIsXG5cdFwiLi96aC1jblwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtY24uanNcIixcblx0XCIuL3poLWNuLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS96aC1jbi5qc1wiLFxuXHRcIi4vemgtaGtcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLWhrLmpzXCIsXG5cdFwiLi96aC1oay5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtaGsuanNcIixcblx0XCIuL3poLW1vXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS96aC1tby5qc1wiLFxuXHRcIi4vemgtbW8uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLW1vLmpzXCIsXG5cdFwiLi96aC10d1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtdHcuanNcIixcblx0XCIuL3poLXR3LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS96aC10dy5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLiokXCI7IiwiXG4gICAgICBpbXBvcnQgQVBJIGZyb20gXCIhLi4vLi4vc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgIGltcG9ydCBkb21BUEkgZnJvbSBcIiEuLi8uLi9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi8uLi9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanNcIjtcbiAgICAgIGltcG9ydCBzZXRBdHRyaWJ1dGVzIGZyb20gXCIhLi4vLi4vc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRTdHlsZUVsZW1lbnQgZnJvbSBcIiEuLi8uLi9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi8uLi9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzXCI7XG4gICAgICBpbXBvcnQgY29udGVudCwgKiBhcyBuYW1lZEV4cG9ydCBmcm9tIFwiISEuLi8uLi9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzFdLnVzZVsxXSEuL3N3aXBlci5taW4uY3NzXCI7XG4gICAgICBcbiAgICAgIFxuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtID0gc3R5bGVUYWdUcmFuc2Zvcm1Gbjtcbm9wdGlvbnMuc2V0QXR0cmlidXRlcyA9IHNldEF0dHJpYnV0ZXM7XG5cbiAgICAgIG9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG4gICAgXG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vLi4vY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cnVsZVNldFsxXS5ydWxlc1sxXS51c2VbMV0hLi9zd2lwZXIubWluLmNzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgc3R5bGVzSW5ET00gPSBbXTtcblxuZnVuY3Rpb24gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICB2YXIgcmVzdWx0ID0gLTE7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXNJbkRPTS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzdHlsZXNJbkRPTVtpXS5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKSB7XG4gICAgICByZXN1bHQgPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpIHtcbiAgdmFyIGlkQ291bnRNYXAgPSB7fTtcbiAgdmFyIGlkZW50aWZpZXJzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBsaXN0W2ldO1xuICAgIHZhciBpZCA9IG9wdGlvbnMuYmFzZSA/IGl0ZW1bMF0gKyBvcHRpb25zLmJhc2UgOiBpdGVtWzBdO1xuICAgIHZhciBjb3VudCA9IGlkQ291bnRNYXBbaWRdIHx8IDA7XG4gICAgdmFyIGlkZW50aWZpZXIgPSBcIlwiLmNvbmNhdChpZCwgXCIgXCIpLmNvbmNhdChjb3VudCk7XG4gICAgaWRDb3VudE1hcFtpZF0gPSBjb3VudCArIDE7XG4gICAgdmFyIGluZGV4QnlJZGVudGlmaWVyID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgdmFyIG9iaiA9IHtcbiAgICAgIGNzczogaXRlbVsxXSxcbiAgICAgIG1lZGlhOiBpdGVtWzJdLFxuICAgICAgc291cmNlTWFwOiBpdGVtWzNdLFxuICAgICAgc3VwcG9ydHM6IGl0ZW1bNF0sXG4gICAgICBsYXllcjogaXRlbVs1XVxuICAgIH07XG5cbiAgICBpZiAoaW5kZXhCeUlkZW50aWZpZXIgIT09IC0xKSB7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0ucmVmZXJlbmNlcysrO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnVwZGF0ZXIob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHVwZGF0ZXIgPSBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKTtcbiAgICAgIG9wdGlvbnMuYnlJbmRleCA9IGk7XG4gICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoaSwgMCwge1xuICAgICAgICBpZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgICB1cGRhdGVyOiB1cGRhdGVyLFxuICAgICAgICByZWZlcmVuY2VzOiAxXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpO1xuICB9XG5cbiAgcmV0dXJuIGlkZW50aWZpZXJzO1xufVxuXG5mdW5jdGlvbiBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKSB7XG4gIHZhciBhcGkgPSBvcHRpb25zLmRvbUFQSShvcHRpb25zKTtcbiAgYXBpLnVwZGF0ZShvYmopO1xuXG4gIHZhciB1cGRhdGVyID0gZnVuY3Rpb24gdXBkYXRlcihuZXdPYmopIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJiBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJiBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwICYmIG5ld09iai5zdXBwb3J0cyA9PT0gb2JqLnN1cHBvcnRzICYmIG5ld09iai5sYXllciA9PT0gb2JqLmxheWVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXBpLnVwZGF0ZShvYmogPSBuZXdPYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVtb3ZlKCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB1cGRhdGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaXN0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBsaXN0ID0gbGlzdCB8fCBbXTtcbiAgdmFyIGxhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZShuZXdMaXN0KSB7XG4gICAgbmV3TGlzdCA9IG5ld0xpc3QgfHwgW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhc3RJZGVudGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbaV07XG4gICAgICB2YXIgaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4XS5yZWZlcmVuY2VzLS07XG4gICAgfVxuXG4gICAgdmFyIG5ld0xhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShuZXdMaXN0LCBvcHRpb25zKTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2lkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbX2ldO1xuXG4gICAgICB2YXIgX2luZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoX2lkZW50aWZpZXIpO1xuXG4gICAgICBpZiAoc3R5bGVzSW5ET01bX2luZGV4XS5yZWZlcmVuY2VzID09PSAwKSB7XG4gICAgICAgIHN0eWxlc0luRE9NW19pbmRleF0udXBkYXRlcigpO1xuXG4gICAgICAgIHN0eWxlc0luRE9NLnNwbGljZShfaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxhc3RJZGVudGlmaWVycyA9IG5ld0xhc3RJZGVudGlmaWVycztcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBtZW1vID0ge307XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0KHRhcmdldCkge1xuICBpZiAodHlwZW9mIG1lbW9bdGFyZ2V0XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHZhciBzdHlsZVRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTsgLy8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcblxuICAgIGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG4gICAgICAgIC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gc3R5bGVUYXJnZXQuY29udGVudERvY3VtZW50LmhlYWQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtZW1vW3RhcmdldF0gPSBzdHlsZVRhcmdldDtcbiAgfVxuXG4gIHJldHVybiBtZW1vW3RhcmdldF07XG59XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuXG5mdW5jdGlvbiBpbnNlcnRCeVNlbGVjdG9yKGluc2VydCwgc3R5bGUpIHtcbiAgdmFyIHRhcmdldCA9IGdldFRhcmdldChpbnNlcnQpO1xuXG4gIGlmICghdGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnQnIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcbiAgfVxuXG4gIHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0QnlTZWxlY3RvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgb3B0aW9ucy5zZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMuYXR0cmlidXRlcyk7XG4gIG9wdGlvbnMuaW5zZXJ0KGVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG4gIHJldHVybiBlbGVtZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydFN0eWxlRWxlbWVudDsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMoc3R5bGVFbGVtZW50KSB7XG4gIHZhciBub25jZSA9IHR5cGVvZiBfX3dlYnBhY2tfbm9uY2VfXyAhPT0gXCJ1bmRlZmluZWRcIiA/IF9fd2VicGFja19ub25jZV9fIDogbnVsbDtcblxuICBpZiAobm9uY2UpIHtcbiAgICBzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwibm9uY2VcIiwgbm9uY2UpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKSB7XG4gIHZhciBjc3MgPSBcIlwiO1xuXG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChvYmouc3VwcG9ydHMsIFwiKSB7XCIpO1xuICB9XG5cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIkBtZWRpYSBcIi5jb25jYXQob2JqLm1lZGlhLCBcIiB7XCIpO1xuICB9XG5cbiAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBvYmoubGF5ZXIgIT09IFwidW5kZWZpbmVkXCI7XG5cbiAgaWYgKG5lZWRMYXllcikge1xuICAgIGNzcyArPSBcIkBsYXllclwiLmNvbmNhdChvYmoubGF5ZXIubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChvYmoubGF5ZXIpIDogXCJcIiwgXCIge1wiKTtcbiAgfVxuXG4gIGNzcyArPSBvYmouY3NzO1xuXG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cblxuICBpZiAob2JqLm1lZGlhKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG5cbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuXG4gIHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwO1xuXG4gIGlmIChzb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjc3MgKz0gXCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiLmNvbmNhdChidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpLCBcIiAqL1wiKTtcbiAgfSAvLyBGb3Igb2xkIElFXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICAqL1xuXG5cbiAgb3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCkge1xuICAvLyBpc3RhbmJ1bCBpZ25vcmUgaWZcbiAgaWYgKHN0eWxlRWxlbWVudC5wYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KTtcbn1cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuXG5cbmZ1bmN0aW9uIGRvbUFQSShvcHRpb25zKSB7XG4gIHZhciBzdHlsZUVsZW1lbnQgPSBvcHRpb25zLmluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKTtcbiAgcmV0dXJuIHtcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShvYmopIHtcbiAgICAgIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKTtcbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCk7XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRvbUFQSTsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCkge1xuICBpZiAoc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGVFbGVtZW50LnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHlsZVRhZ1RyYW5zZm9ybTsiLCJtb2R1bGUuZXhwb3J0cyA9IGpRdWVyeTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHtcbiAgICBhcnIyW2ldID0gYXJyW2ldO1xuICB9XG5cbiAgcmV0dXJuIGFycjI7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn0iLCJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufSIsImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHtcbiAgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdO1xuXG4gIGlmIChfaSA9PSBudWxsKSByZXR1cm47XG4gIHZhciBfYXJyID0gW107XG4gIHZhciBfbiA9IHRydWU7XG4gIHZhciBfZCA9IGZhbHNlO1xuXG4gIHZhciBfcywgX2U7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7XG4gICAgICBfYXJyLnB1c2goX3MudmFsdWUpO1xuXG4gICAgICBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBfZCA9IHRydWU7XG4gICAgX2UgPSBlcnI7XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gX2Fycjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufSIsImltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZlwiO1xuaW1wb3J0IGFzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7XG4gIH1cblxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcblxuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufSIsImltcG9ydCBhcnJheVdpdGhIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheUxpbWl0IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzXCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCBub25JdGVyYWJsZVJlc3QgZnJvbSBcIi4vbm9uSXRlcmFibGVSZXN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHtcbiAgICBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIF90eXBlb2Yob2JqKTtcbn0iLCJpbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufSIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0aWQ6IG1vZHVsZUlkLFxuXHRcdGxvYWRlZDogZmFsc2UsXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuXHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0ZnVuY3Rpb24oKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG5cdFx0ZnVuY3Rpb24oKSB7IHJldHVybiBtb2R1bGU7IH07XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBkZWZpbml0aW9uKSB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqLCBwcm9wKSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTsgfSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5ubWQgPSBmdW5jdGlvbihtb2R1bGUpIHtcblx0bW9kdWxlLnBhdGhzID0gW107XG5cdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0cmV0dXJuIG1vZHVsZTtcbn07IiwiaW1wb3J0ICdjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmluZCc7XG5pbXBvcnQgJ2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduJztcbmltcG9ydCAnY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5lbnRyaWVzJztcbmltcG9ydCAnaW50ZXJzZWN0aW9uLW9ic2VydmVyJztcbmltcG9ydCAnZWxlbWVudC1jbG9zZXN0LXBvbHlmaWxsJztcblxuaW1wb3J0IGpxdWVyeSBmcm9tICdqcXVlcnknO1xud2luZG93LiQgPSBqcXVlcnk7XG5cbmltcG9ydCBlbWl0dGVyIGZyb20gJy4vX2VtaXR0ZXInO1xud2luZG93LmVtaXR0ZXIgPSBlbWl0dGVyO1xuXG5pbXBvcnQgUmVzaXplTWFuYWdlciBmcm9tICcuL19yZXNpemUnO1xuaW1wb3J0IFNjcm9sbE1hbmFnZXIgZnJvbSAnLi9fc2Nyb2xsTWFuYWdlcic7XG5cbndpbmRvdy5ybSA9IFJlc2l6ZU1hbmFnZXIoKTtcbndpbmRvdy5zbSA9IFNjcm9sbE1hbmFnZXIoKTtcblxuaW1wb3J0ICcuL2xpYnMvanF1ZXJ5LXVpLm1pbic7XG5pbXBvcnQgJy4vbGlicy9jc3NfYnJvd3Nlcl9zZWxlY3RvcidcblxuaW1wb3J0ICcuL19hY2NvcmRpb24nO1xuaW1wb3J0ICcuL19jYXJvdXNlbCc7XG5pbXBvcnQgJy4vX21vZGFsJztcbmltcG9ydCAnLi9fc2Nyb2xsJztcbmltcG9ydCAnLi9fcmVhZG1vcmUnO1xuaW1wb3J0ICcuL19zbnMnO1xuaW1wb3J0ICcuL190cnVuY2F0ZSc7XG5pbXBvcnQgJy4vX2Zsb2F0LWJveCc7XG5pbXBvcnQgJy4vX2NoZWNrYm94JztcbmltcG9ydCAnLi9fc2VhcmNobWVudSc7XG5pbXBvcnQgJy4vX3JhZGlvJztcbmltcG9ydCAnLi9fc21vdGhzY3JvbGwnO1xuaW1wb3J0ICcuL19za3lzY3JhcGVyJztcbmltcG9ydCAnLi9fZm9sbG93LXBhZ2UtYm90dG9tJztcbmltcG9ydCAnLi9fdmFsaWRhdGlvbic7XG5pbXBvcnQgJy4vX21haWxhZGRyZXNzJztcbmltcG9ydCAnLi9fZm9sbG93LWNhcmQnO1xuaW1wb3J0ICcuL19zbGlkZS1zdGVwcyc7XG5pbXBvcnQgJy4vX3RhZ2RlbGV0ZSc7XG5pbXBvcnQgJy4vX2RhdGUnO1xuaW1wb3J0ICcuL19zZWxlY3RlZEluc2VydGVyJztcbmltcG9ydCAnLi9fbGljZW5zZVNlbGVjdG9yJztcbmltcG9ydCAnLi9fc2VsZWN0T25jZSc7XG5pbXBvcnQgJy4vX2Zhdm9yaXRlJztcbmltcG9ydCAnLi9fdGFiJztcbmltcG9ydCAnLi9fY2hhcnQnO1xuaW1wb3J0ICcuL19zZXQtbWFpbi1oZWlnaHQnO1xuIl0sIm5hbWVzIjpbIl90eXBlb2YiLCJvYmoiLCJTeW1ib2wiLCJpdGVyYXRvciIsIm1vZHVsZSIsImV4cG9ydHMiLCJfX2VzTW9kdWxlIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJnbG9iYWwiLCJmYWN0b3J5IiwicmVxdWlyZSIsImUiLCJkZWZpbmUiLCJhbWQiLCJDaGFydCIsIm1vbWVudCIsImhhc093blByb3BlcnR5IiwiY29udmVyc2lvbnMiLCJyZ2IyaHNsIiwicmdiMmhzdiIsInJnYjJod2IiLCJyZ2IyY215ayIsInJnYjJrZXl3b3JkIiwicmdiMnh5eiIsInJnYjJsYWIiLCJyZ2IybGNoIiwiaHNsMnJnYiIsImhzbDJoc3YiLCJoc2wyaHdiIiwiaHNsMmNteWsiLCJoc2wya2V5d29yZCIsImhzdjJyZ2IiLCJoc3YyaHNsIiwiaHN2Mmh3YiIsImhzdjJjbXlrIiwiaHN2MmtleXdvcmQiLCJod2IycmdiIiwiaHdiMmhzbCIsImh3YjJoc3YiLCJod2IyY215ayIsImh3YjJrZXl3b3JkIiwiY215azJyZ2IiLCJjbXlrMmhzbCIsImNteWsyaHN2IiwiY215azJod2IiLCJjbXlrMmtleXdvcmQiLCJrZXl3b3JkMnJnYiIsImtleXdvcmQyaHNsIiwia2V5d29yZDJoc3YiLCJrZXl3b3JkMmh3YiIsImtleXdvcmQyY215ayIsImtleXdvcmQybGFiIiwia2V5d29yZDJ4eXoiLCJ4eXoycmdiIiwieHl6MmxhYiIsInh5ejJsY2giLCJsYWIyeHl6IiwibGFiMnJnYiIsImxhYjJsY2giLCJsY2gybGFiIiwibGNoMnh5eiIsImxjaDJyZ2IiLCJyZ2IiLCJyIiwiZyIsImIiLCJtaW4iLCJNYXRoIiwibWF4IiwiZGVsdGEiLCJoIiwicyIsImwiLCJ2IiwidyIsImMiLCJtIiwieSIsImsiLCJyZXZlcnNlS2V5d29yZHMiLCJKU09OIiwic3RyaW5naWZ5IiwicG93IiwieCIsInoiLCJ4eXoiLCJhIiwiYXJncyIsImhzbCIsInQxIiwidDIiLCJ0MyIsInZhbCIsImkiLCJzdiIsImhzdiIsImhpIiwiZmxvb3IiLCJmIiwicCIsInEiLCJ0Iiwic2wiLCJod2IiLCJ3aCIsImJsIiwicmF0aW8iLCJuIiwiY215ayIsImxhYiIsInkyIiwiaHIiLCJhdGFuMiIsIlBJIiwic3FydCIsImxjaCIsImNvcyIsInNpbiIsImtleXdvcmQiLCJjc3NLZXl3b3JkcyIsImFsaWNlYmx1ZSIsImFudGlxdWV3aGl0ZSIsImFxdWEiLCJhcXVhbWFyaW5lIiwiYXp1cmUiLCJiZWlnZSIsImJpc3F1ZSIsImJsYWNrIiwiYmxhbmNoZWRhbG1vbmQiLCJibHVlIiwiYmx1ZXZpb2xldCIsImJyb3duIiwiYnVybHl3b29kIiwiY2FkZXRibHVlIiwiY2hhcnRyZXVzZSIsImNob2NvbGF0ZSIsImNvcmFsIiwiY29ybmZsb3dlcmJsdWUiLCJjb3Juc2lsayIsImNyaW1zb24iLCJjeWFuIiwiZGFya2JsdWUiLCJkYXJrY3lhbiIsImRhcmtnb2xkZW5yb2QiLCJkYXJrZ3JheSIsImRhcmtncmVlbiIsImRhcmtncmV5IiwiZGFya2toYWtpIiwiZGFya21hZ2VudGEiLCJkYXJrb2xpdmVncmVlbiIsImRhcmtvcmFuZ2UiLCJkYXJrb3JjaGlkIiwiZGFya3JlZCIsImRhcmtzYWxtb24iLCJkYXJrc2VhZ3JlZW4iLCJkYXJrc2xhdGVibHVlIiwiZGFya3NsYXRlZ3JheSIsImRhcmtzbGF0ZWdyZXkiLCJkYXJrdHVycXVvaXNlIiwiZGFya3Zpb2xldCIsImRlZXBwaW5rIiwiZGVlcHNreWJsdWUiLCJkaW1ncmF5IiwiZGltZ3JleSIsImRvZGdlcmJsdWUiLCJmaXJlYnJpY2siLCJmbG9yYWx3aGl0ZSIsImZvcmVzdGdyZWVuIiwiZnVjaHNpYSIsImdhaW5zYm9ybyIsImdob3N0d2hpdGUiLCJnb2xkIiwiZ29sZGVucm9kIiwiZ3JheSIsImdyZWVuIiwiZ3JlZW55ZWxsb3ciLCJncmV5IiwiaG9uZXlkZXciLCJob3RwaW5rIiwiaW5kaWFucmVkIiwiaW5kaWdvIiwiaXZvcnkiLCJraGFraSIsImxhdmVuZGVyIiwibGF2ZW5kZXJibHVzaCIsImxhd25ncmVlbiIsImxlbW9uY2hpZmZvbiIsImxpZ2h0Ymx1ZSIsImxpZ2h0Y29yYWwiLCJsaWdodGN5YW4iLCJsaWdodGdvbGRlbnJvZHllbGxvdyIsImxpZ2h0Z3JheSIsImxpZ2h0Z3JlZW4iLCJsaWdodGdyZXkiLCJsaWdodHBpbmsiLCJsaWdodHNhbG1vbiIsImxpZ2h0c2VhZ3JlZW4iLCJsaWdodHNreWJsdWUiLCJsaWdodHNsYXRlZ3JheSIsImxpZ2h0c2xhdGVncmV5IiwibGlnaHRzdGVlbGJsdWUiLCJsaWdodHllbGxvdyIsImxpbWUiLCJsaW1lZ3JlZW4iLCJsaW5lbiIsIm1hZ2VudGEiLCJtYXJvb24iLCJtZWRpdW1hcXVhbWFyaW5lIiwibWVkaXVtYmx1ZSIsIm1lZGl1bW9yY2hpZCIsIm1lZGl1bXB1cnBsZSIsIm1lZGl1bXNlYWdyZWVuIiwibWVkaXVtc2xhdGVibHVlIiwibWVkaXVtc3ByaW5nZ3JlZW4iLCJtZWRpdW10dXJxdW9pc2UiLCJtZWRpdW12aW9sZXRyZWQiLCJtaWRuaWdodGJsdWUiLCJtaW50Y3JlYW0iLCJtaXN0eXJvc2UiLCJtb2NjYXNpbiIsIm5hdmFqb3doaXRlIiwibmF2eSIsIm9sZGxhY2UiLCJvbGl2ZSIsIm9saXZlZHJhYiIsIm9yYW5nZSIsIm9yYW5nZXJlZCIsIm9yY2hpZCIsInBhbGVnb2xkZW5yb2QiLCJwYWxlZ3JlZW4iLCJwYWxldHVycXVvaXNlIiwicGFsZXZpb2xldHJlZCIsInBhcGF5YXdoaXAiLCJwZWFjaHB1ZmYiLCJwZXJ1IiwicGluayIsInBsdW0iLCJwb3dkZXJibHVlIiwicHVycGxlIiwicmViZWNjYXB1cnBsZSIsInJlZCIsInJvc3licm93biIsInJveWFsYmx1ZSIsInNhZGRsZWJyb3duIiwic2FsbW9uIiwic2FuZHlicm93biIsInNlYWdyZWVuIiwic2Vhc2hlbGwiLCJzaWVubmEiLCJzaWx2ZXIiLCJza3libHVlIiwic2xhdGVibHVlIiwic2xhdGVncmF5Iiwic2xhdGVncmV5Iiwic25vdyIsInNwcmluZ2dyZWVuIiwic3RlZWxibHVlIiwidGFuIiwidGVhbCIsInRoaXN0bGUiLCJ0b21hdG8iLCJ0dXJxdW9pc2UiLCJ2aW9sZXQiLCJ3aGVhdCIsIndoaXRlIiwid2hpdGVzbW9rZSIsInllbGxvdyIsInllbGxvd2dyZWVuIiwia2V5IiwiY29udmVydCIsIkNvbnZlcnRlciIsImZ1bmMiLCJhcmciLCJBcnJheSIsInNsaWNlIiwiY2FsbCIsImFyZ3VtZW50cyIsInBhaXIiLCJleGVjIiwiZnJvbSIsInRvIiwidW5kZWZpbmVkIiwibGVuZ3RoIiwicm91bmQiLCJjb252cyIsInJvdXRlU3BhY2UiLCJzcGFjZSIsInZhbHVlcyIsImdldFZhbHVlcyIsInNldFZhbHVlcyIsInZhbHMiLCJmc3BhY2UiLCJmb3JFYWNoIiwiY29sb3JDb252ZXJ0IiwiY29sb3JOYW1lIiwiY29sb3JTdHJpbmciLCJnZXRSZ2JhIiwiZ2V0SHNsYSIsImdldFJnYiIsImdldEhzbCIsImdldEh3YiIsImdldEFscGhhIiwiaGV4U3RyaW5nIiwicmdiU3RyaW5nIiwicmdiYVN0cmluZyIsInBlcmNlbnRTdHJpbmciLCJwZXJjZW50YVN0cmluZyIsImhzbFN0cmluZyIsImhzbGFTdHJpbmciLCJod2JTdHJpbmciLCJzdHJpbmciLCJhYmJyIiwiaGV4IiwicmdiYSIsInBlciIsIm1hdGNoIiwiaGV4QWxwaGEiLCJwYXJzZUludCIsInBhcnNlRmxvYXQiLCJzY2FsZSIsImFscGhhIiwiaXNOYU4iLCJoc2xhIiwiaGV4RG91YmxlIiwicmV2ZXJzZU5hbWVzIiwibnVtIiwic3RyIiwidG9TdHJpbmciLCJ0b1VwcGVyQ2FzZSIsIm5hbWUiLCJDb2xvciIsInZhbGlkIiwibGlnaHRuZXNzIiwidmFsdWUiLCJ3aGl0ZW5lc3MiLCJpc1ZhbGlkIiwic2V0U3BhY2UiLCJyZ2JBcnJheSIsImhzbEFycmF5IiwiaHN2QXJyYXkiLCJod2JBcnJheSIsImNvbmNhdCIsImNteWtBcnJheSIsInJnYmFBcnJheSIsImhzbGFBcnJheSIsInNldENoYW5uZWwiLCJodWUiLCJzYXR1cmF0aW9uIiwic2F0dXJhdGlvbnYiLCJibGFja25lc3MiLCJyZ2JOdW1iZXIiLCJsdW1pbm9zaXR5IiwibHVtIiwiY2hhbiIsImNvbnRyYXN0IiwiY29sb3IyIiwibHVtMSIsImx1bTIiLCJsZXZlbCIsImNvbnRyYXN0UmF0aW8iLCJkYXJrIiwieWlxIiwibGlnaHQiLCJuZWdhdGUiLCJsaWdodGVuIiwiZGFya2VuIiwic2F0dXJhdGUiLCJkZXNhdHVyYXRlIiwid2hpdGVuIiwiYmxhY2tlbiIsImdyZXlzY2FsZSIsImNsZWFyZXIiLCJvcGFxdWVyIiwicm90YXRlIiwiZGVncmVlcyIsIm1peCIsIm1peGluQ29sb3IiLCJ3ZWlnaHQiLCJjb2xvcjEiLCJ3MSIsIncyIiwidG9KU09OIiwiY2xvbmUiLCJyZXN1bHQiLCJzb3VyY2UiLCJ0YXJnZXQiLCJ0eXBlIiwicHJvcCIsImNvbnNvbGUiLCJlcnJvciIsInNwYWNlcyIsIm1heGVzIiwiY2hhckF0IiwiY2hhbnMiLCJjYXBwZWQiLCJzbmFtZSIsImluZGV4Iiwic3ZhbHVlcyIsIndpbmRvdyIsImNoYXJ0anNDb2xvciIsImhlbHBlcnMiLCJub29wIiwidWlkIiwiaWQiLCJpc051bGxPclVuZGVmIiwiaXNBcnJheSIsIk9iamVjdCIsInN1YnN0ciIsImlzT2JqZWN0IiwiaXNGaW5pdGUiLCJOdW1iZXIiLCJ2YWx1ZU9yRGVmYXVsdCIsImRlZmF1bHRWYWx1ZSIsInZhbHVlQXRJbmRleE9yRGVmYXVsdCIsImNhbGxiYWNrIiwiZm4iLCJ0aGlzQXJnIiwiYXBwbHkiLCJlYWNoIiwibG9vcGFibGUiLCJyZXZlcnNlIiwibGVuIiwia2V5cyIsImFycmF5RXF1YWxzIiwiYTAiLCJhMSIsImlsZW4iLCJ2MCIsInYxIiwibWFwIiwia2xlbiIsIl9tZXJnZXIiLCJvcHRpb25zIiwidHZhbCIsInN2YWwiLCJtZXJnZSIsIl9tZXJnZXJJZiIsIm1lcmdlSWYiLCJzb3VyY2VzIiwibWVyZ2VyIiwiZXh0ZW5kIiwic2V0Rm4iLCJpbmhlcml0cyIsImV4dGVuc2lvbnMiLCJtZSIsIkNoYXJ0RWxlbWVudCIsIlN1cnJvZ2F0ZSIsIl9fc3VwZXJfXyIsImhlbHBlcnNfY29yZSIsImNhbGxDYWxsYmFjayIsImluZGV4T2YiLCJhcnJheSIsIml0ZW0iLCJmcm9tSW5kZXgiLCJnZXRWYWx1ZU9yRGVmYXVsdCIsImdldFZhbHVlQXRJbmRleE9yRGVmYXVsdCIsImVmZmVjdHMiLCJsaW5lYXIiLCJlYXNlSW5RdWFkIiwiZWFzZU91dFF1YWQiLCJlYXNlSW5PdXRRdWFkIiwiZWFzZUluQ3ViaWMiLCJlYXNlT3V0Q3ViaWMiLCJlYXNlSW5PdXRDdWJpYyIsImVhc2VJblF1YXJ0IiwiZWFzZU91dFF1YXJ0IiwiZWFzZUluT3V0UXVhcnQiLCJlYXNlSW5RdWludCIsImVhc2VPdXRRdWludCIsImVhc2VJbk91dFF1aW50IiwiZWFzZUluU2luZSIsImVhc2VPdXRTaW5lIiwiZWFzZUluT3V0U2luZSIsImVhc2VJbkV4cG8iLCJlYXNlT3V0RXhwbyIsImVhc2VJbk91dEV4cG8iLCJlYXNlSW5DaXJjIiwiZWFzZU91dENpcmMiLCJlYXNlSW5PdXRDaXJjIiwiZWFzZUluRWxhc3RpYyIsImFzaW4iLCJlYXNlT3V0RWxhc3RpYyIsImVhc2VJbk91dEVsYXN0aWMiLCJlYXNlSW5CYWNrIiwiZWFzZU91dEJhY2siLCJlYXNlSW5PdXRCYWNrIiwiZWFzZUluQm91bmNlIiwiZWFzZU91dEJvdW5jZSIsImVhc2VJbk91dEJvdW5jZSIsImhlbHBlcnNfZWFzaW5nIiwiZWFzaW5nRWZmZWN0cyIsIlJBRF9QRVJfREVHIiwiRE9VQkxFX1BJIiwiSEFMRl9QSSIsIlFVQVJURVJfUEkiLCJUV09fVEhJUkRTX1BJIiwiZXhwb3J0cyQxIiwiY2xlYXIiLCJjaGFydCIsImN0eCIsImNsZWFyUmVjdCIsIndpZHRoIiwiaGVpZ2h0Iiwicm91bmRlZFJlY3QiLCJyYWRpdXMiLCJsZWZ0IiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJtb3ZlVG8iLCJhcmMiLCJjbG9zZVBhdGgiLCJyZWN0IiwiZHJhd1BvaW50Iiwic3R5bGUiLCJyb3RhdGlvbiIsInhPZmZzZXQiLCJ5T2Zmc2V0Iiwic2l6ZSIsImNvcm5lclJhZGl1cyIsInJhZCIsImRyYXdJbWFnZSIsImJlZ2luUGF0aCIsImxpbmVUbyIsIlNRUlQxXzIiLCJmaWxsIiwic3Ryb2tlIiwiX2lzUG9pbnRJbkFyZWEiLCJwb2ludCIsImFyZWEiLCJlcHNpbG9uIiwiY2xpcEFyZWEiLCJzYXZlIiwiY2xpcCIsInVuY2xpcEFyZWEiLCJyZXN0b3JlIiwicHJldmlvdXMiLCJmbGlwIiwic3RlcHBlZCIsInN0ZXBwZWRMaW5lIiwibWlkcG9pbnQiLCJ0ZW5zaW9uIiwiYmV6aWVyQ3VydmVUbyIsImNvbnRyb2xQb2ludFByZXZpb3VzWCIsImNvbnRyb2xQb2ludE5leHRYIiwiY29udHJvbFBvaW50UHJldmlvdXNZIiwiY29udHJvbFBvaW50TmV4dFkiLCJoZWxwZXJzX2NhbnZhcyIsImRyYXdSb3VuZGVkUmVjdGFuZ2xlIiwiZGVmYXVsdHMiLCJfc2V0Iiwic2NvcGUiLCJkZWZhdWx0Q29sb3IiLCJkZWZhdWx0Rm9udENvbG9yIiwiZGVmYXVsdEZvbnRGYW1pbHkiLCJkZWZhdWx0Rm9udFNpemUiLCJkZWZhdWx0Rm9udFN0eWxlIiwiZGVmYXVsdExpbmVIZWlnaHQiLCJzaG93TGluZXMiLCJjb3JlX2RlZmF1bHRzIiwidG9Gb250U3RyaW5nIiwiZm9udCIsImZhbWlseSIsImhlbHBlcnNfb3B0aW9ucyIsInRvTGluZUhlaWdodCIsIm1hdGNoZXMiLCJ0b1BhZGRpbmciLCJfcGFyc2VGb250IiwiZ2xvYmFsRGVmYXVsdHMiLCJmb250U2l6ZSIsImZvbnRGYW1pbHkiLCJsaW5lSGVpZ2h0IiwiZm9udFN0eWxlIiwicmVzb2x2ZSIsImlucHV0cyIsImNvbnRleHQiLCJoZWxwZXJzJDEiLCJlYXNpbmciLCJjYW52YXMiLCJpbnRlcnBvbGF0ZSIsInN0YXJ0IiwidmlldyIsIm1vZGVsIiwiZWFzZSIsImFjdHVhbCIsIm9yaWdpbiIsImMwIiwiYzEiLCJFbGVtZW50IiwiY29uZmlndXJhdGlvbiIsImluaXRpYWxpemUiLCJoaWRkZW4iLCJwaXZvdCIsIl92aWV3IiwiX21vZGVsIiwiX3N0YXJ0IiwidHJhbnNpdGlvbiIsInRvb2x0aXBQb3NpdGlvbiIsImhhc1ZhbHVlIiwiaXNOdW1iZXIiLCJjb3JlX2VsZW1lbnQiLCJleHBvcnRzJDIiLCJjdXJyZW50U3RlcCIsIm51bVN0ZXBzIiwicmVuZGVyIiwib25BbmltYXRpb25Qcm9ncmVzcyIsIm9uQW5pbWF0aW9uQ29tcGxldGUiLCJjb3JlX2FuaW1hdGlvbiIsImRlZmluZVByb3BlcnR5IiwiZ2V0Iiwic2V0IiwiYW5pbWF0aW9uIiwiZHVyYXRpb24iLCJvblByb2dyZXNzIiwib25Db21wbGV0ZSIsImNvcmVfYW5pbWF0aW9ucyIsImFuaW1hdGlvbnMiLCJyZXF1ZXN0IiwiYWRkQW5pbWF0aW9uIiwibGF6eSIsInN0YXJ0VGltZSIsIkRhdGUiLCJub3ciLCJhbmltYXRpbmciLCJwdXNoIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiY2FuY2VsQW5pbWF0aW9uIiwiZmluZEluZGV4Iiwic3BsaWNlIiwicmVxdWVzdEFuaW1GcmFtZSIsInN0YXJ0RGlnZXN0IiwiYWR2YW5jZSIsIm5leHRTdGVwIiwiYXJyYXlFdmVudHMiLCJsaXN0ZW5BcnJheUV2ZW50cyIsImxpc3RlbmVyIiwiX2NoYXJ0anMiLCJsaXN0ZW5lcnMiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwibWV0aG9kIiwiYmFzZSIsInJlcyIsIm9iamVjdCIsInVubGlzdGVuQXJyYXlFdmVudHMiLCJzdHViIiwiRGF0YXNldENvbnRyb2xsZXIiLCJkYXRhc2V0SW5kZXgiLCJkYXRhc2V0RWxlbWVudFR5cGUiLCJkYXRhRWxlbWVudFR5cGUiLCJsaW5rU2NhbGVzIiwiYWRkRWxlbWVudHMiLCJ1cGRhdGVJbmRleCIsIm1ldGEiLCJnZXRNZXRhIiwiZGF0YXNldCIsImdldERhdGFzZXQiLCJ4QXhpc0lEIiwic2NhbGVzIiwieEF4ZXMiLCJ5QXhpc0lEIiwieUF4ZXMiLCJkYXRhIiwiZGF0YXNldHMiLCJnZXREYXRhc2V0TWV0YSIsImdldFNjYWxlRm9ySWQiLCJzY2FsZUlEIiwiX2dldFZhbHVlU2NhbGVJZCIsIl9nZXRJbmRleFNjYWxlSWQiLCJfZ2V0VmFsdWVTY2FsZSIsIl9nZXRJbmRleFNjYWxlIiwicmVzZXQiLCJ1cGRhdGUiLCJkZXN0cm95IiwiX2RhdGEiLCJjcmVhdGVNZXRhRGF0YXNldCIsIl9jaGFydCIsIl9kYXRhc2V0SW5kZXgiLCJjcmVhdGVNZXRhRGF0YSIsIl9pbmRleCIsIm1ldGFEYXRhIiwiYWRkRWxlbWVudEFuZFJlc2V0IiwiZWxlbWVudCIsInVwZGF0ZUVsZW1lbnQiLCJidWlsZE9yVXBkYXRlRWxlbWVudHMiLCJpc0V4dGVuc2libGUiLCJyZXN5bmNFbGVtZW50cyIsImVhc2luZ1ZhbHVlIiwiZWxlbWVudHMiLCJkcmF3IiwicmVtb3ZlSG92ZXJTdHlsZSIsIiRwcmV2aW91c1N0eWxlIiwic2V0SG92ZXJTdHlsZSIsImN1c3RvbSIsImdldEhvdmVyQ29sb3IiLCJiYWNrZ3JvdW5kQ29sb3IiLCJib3JkZXJDb2xvciIsImJvcmRlcldpZHRoIiwiaG92ZXJCYWNrZ3JvdW5kQ29sb3IiLCJob3ZlckJvcmRlckNvbG9yIiwiaG92ZXJCb3JkZXJXaWR0aCIsIm51bU1ldGEiLCJudW1EYXRhIiwiaW5zZXJ0RWxlbWVudHMiLCJjb3VudCIsIm9uRGF0YVB1c2giLCJvbkRhdGFQb3AiLCJwb3AiLCJvbkRhdGFTaGlmdCIsInNoaWZ0Iiwib25EYXRhU3BsaWNlIiwib25EYXRhVW5zaGlmdCIsImNvcmVfZGF0YXNldENvbnRyb2xsZXIiLCJib3JkZXJBbGlnbiIsImVsZW1lbnRfYXJjIiwiaW5MYWJlbFJhbmdlIiwibW91c2VYIiwidm0iLCJob3ZlclJhZGl1cyIsImluUmFuZ2UiLCJjaGFydFgiLCJjaGFydFkiLCJwb2ludFJlbGF0aXZlUG9zaXRpb24iLCJnZXRBbmdsZUZyb21Qb2ludCIsImFuZ2xlIiwiZGlzdGFuY2UiLCJzdGFydEFuZ2xlIiwiZW5kQW5nbGUiLCJiZXR3ZWVuQW5nbGVzIiwid2l0aGluUmFkaXVzIiwiaW5uZXJSYWRpdXMiLCJvdXRlclJhZGl1cyIsImdldENlbnRlclBvaW50IiwiaGFsZkFuZ2xlIiwiaGFsZlJhZGl1cyIsImdldEFyZWEiLCJjZW50cmVBbmdsZSIsInJhbmdlRnJvbUNlbnRyZSIsInNBIiwiZUEiLCJwaXhlbE1hcmdpbiIsImFuZ2xlTWFyZ2luIiwiZmlsbFN0eWxlIiwibGluZVdpZHRoIiwibGluZUpvaW4iLCJzdHJva2VTdHlsZSIsInZhbHVlT3JEZWZhdWx0JDEiLCJsaW5lIiwiYm9yZGVyQ2FwU3R5bGUiLCJib3JkZXJEYXNoIiwiYm9yZGVyRGFzaE9mZnNldCIsImJvcmRlckpvaW5TdHlsZSIsImNhcEJlemllclBvaW50cyIsImVsZW1lbnRfbGluZSIsInNwYW5HYXBzIiwicG9pbnRzIiwiX2NoaWxkcmVuIiwiZ2xvYmFsT3B0aW9uTGluZUVsZW1lbnRzIiwibGFzdERyYXduSW5kZXgiLCJjdXJyZW50IiwiY3VycmVudFZNIiwiX2xvb3AiLCJsaW5lQ2FwIiwic2V0TGluZURhc2giLCJsaW5lRGFzaE9mZnNldCIsInByZXZpb3VzSXRlbSIsInNraXAiLCJ2YWx1ZU9yRGVmYXVsdCQyIiwiZGVmYXVsdENvbG9yJDEiLCJwb2ludFN0eWxlIiwiaGl0UmFkaXVzIiwieFJhbmdlIiwiYWJzIiwieVJhbmdlIiwibW91c2VZIiwiZWxlbWVudF9wb2ludCIsImluWFJhbmdlIiwiaW5ZUmFuZ2UiLCJwYWRkaW5nIiwiY2hhcnRBcmVhIiwiZGVmYXVsdENvbG9yJDIiLCJyZWN0YW5nbGUiLCJib3JkZXJTa2lwcGVkIiwiaXNWZXJ0aWNhbCIsImdldEJhckJvdW5kcyIsIngxIiwieDIiLCJ5MSIsImhhbGYiLCJzd2FwIiwib3JpZyIsInYyIiwicGFyc2VCb3JkZXJTa2lwcGVkIiwiZWRnZSIsImhvcml6b250YWwiLCJwYXJzZUJvcmRlcldpZHRoIiwibWF4VyIsIm1heEgiLCJib3VuZGluZ1JlY3RzIiwiYm91bmRzIiwiYm9yZGVyIiwib3V0ZXIiLCJpbm5lciIsInNraXBYIiwic2tpcFkiLCJlbGVtZW50X3JlY3RhbmdsZSIsInJlY3RzIiwiZmlsbFJlY3QiLCJBcmMiLCJMaW5lIiwiUG9pbnQiLCJSZWN0YW5nbGUiLCJyZXNvbHZlJDEiLCJob3ZlciIsIm1vZGUiLCJjYXRlZ29yeVBlcmNlbnRhZ2UiLCJiYXJQZXJjZW50YWdlIiwib2Zmc2V0IiwiZ3JpZExpbmVzIiwib2Zmc2V0R3JpZExpbmVzIiwiY29tcHV0ZU1pblNhbXBsZVNpemUiLCJwaXhlbHMiLCJpc0hvcml6b250YWwiLCJ0aWNrcyIsImdldFRpY2tzIiwicHJldiIsImN1cnIiLCJnZXRQaXhlbEZvclRpY2siLCJjb21wdXRlRml0Q2F0ZWdvcnlUcmFpdHMiLCJydWxlciIsInRoaWNrbmVzcyIsImJhclRoaWNrbmVzcyIsInN0YWNrQ291bnQiLCJjaHVuayIsImNvbXB1dGVGbGV4Q2F0ZWdvcnlUcmFpdHMiLCJuZXh0IiwicGVyY2VudCIsImVuZCIsImNvbnRyb2xsZXJfYmFyIiwic3RhY2siLCJiYXIiLCJfcnVsZXIiLCJnZXRSdWxlciIsIl9yZXNvbHZlRWxlbWVudE9wdGlvbnMiLCJfeFNjYWxlIiwiX3lTY2FsZSIsImRhdGFzZXRMYWJlbCIsImxhYmVsIiwibGFiZWxzIiwiX3VwZGF0ZUVsZW1lbnRHZW9tZXRyeSIsInZzY2FsZSIsImdldEJhc2VQaXhlbCIsInZwaXhlbHMiLCJjYWxjdWxhdGVCYXJWYWx1ZVBpeGVscyIsImlwaXhlbHMiLCJjYWxjdWxhdGVCYXJJbmRleFBpeGVscyIsImhlYWQiLCJjZW50ZXIiLCJfZ2V0U3RhY2tzIiwibGFzdCIsInN0YWNrZWQiLCJzdGFja3MiLCJpc0RhdGFzZXRWaXNpYmxlIiwiZ2V0U3RhY2tDb3VudCIsImdldFN0YWNrSW5kZXgiLCJnZXRQaXhlbEZvclZhbHVlIiwiZ2V0UmlnaHRWYWx1ZSIsIm1pbkJhckxlbmd0aCIsImltZXRhIiwiaXZhbHVlIiwiY29udHJvbGxlciIsInJhbmdlIiwic3RhY2tJbmRleCIsIm1heEJhclRoaWNrbmVzcyIsIkluZmluaXR5IiwiZGF0YUluZGV4IiwidmFsdWVPckRlZmF1bHQkMyIsInJlc29sdmUkMiIsInBvc2l0aW9uIiwidG9vbHRpcHMiLCJjYWxsYmFja3MiLCJ0aXRsZSIsImRhdGFQb2ludCIsInhMYWJlbCIsInlMYWJlbCIsImNvbnRyb2xsZXJfYnViYmxlIiwieFNjYWxlIiwieVNjYWxlIiwiZHNJbmRleCIsImdldFBpeGVsRm9yRGVjaW1hbCIsIk5hTiIsIl9vcHRpb25zIiwicmVzb2x2ZSQzIiwidmFsdWVPckRlZmF1bHQkNCIsImFuaW1hdGVSb3RhdGUiLCJhbmltYXRlU2NhbGUiLCJsZWdlbmRDYWxsYmFjayIsInRleHQiLCJqb2luIiwibGVnZW5kIiwiZ2VuZXJhdGVMYWJlbHMiLCJkcyIsImFyY09wdHMiLCJidyIsIm9uQ2xpY2siLCJsZWdlbmRJdGVtIiwiY3V0b3V0UGVyY2VudGFnZSIsImNpcmN1bWZlcmVuY2UiLCJ0b29sdGlwSXRlbSIsImRhdGFMYWJlbCIsImNvbnRyb2xsZXJfZG91Z2hudXQiLCJnZXRSaW5nSW5kZXgiLCJyaW5nSW5kZXgiLCJqIiwib3B0cyIsImF2YWlsYWJsZVdpZHRoIiwiYXZhaWxhYmxlSGVpZ2h0IiwibWluU2l6ZSIsImFyY3MiLCJjaGFydFdlaWdodCIsIl9nZXRSaW5nV2VpZ2h0IiwiY29udGFpbnMwIiwiY29udGFpbnM5MCIsImNvbnRhaW5zMTgwIiwiY29udGFpbnMyNzAiLCJjdXRvdXQiLCJnZXRNYXhCb3JkZXJXaWR0aCIsInJhZGl1c0xlbmd0aCIsIl9nZXRWaXNpYmxlRGF0YXNldFdlaWdodFRvdGFsIiwib2Zmc2V0WCIsIm9mZnNldFkiLCJ0b3RhbCIsImNhbGN1bGF0ZVRvdGFsIiwiX2dldFJpbmdXZWlnaHRPZmZzZXQiLCJhbmltYXRpb25PcHRzIiwiY2VudGVyWCIsImNlbnRlclkiLCJjYWxjdWxhdGVDaXJjdW1mZXJlbmNlIiwiaG92ZXJXaWR0aCIsInJpbmdXZWlnaHRPZmZzZXQiLCJkYXRhU2V0SW5kZXgiLCJheGlzIiwiY29udHJvbGxlcl9ob3Jpem9udGFsQmFyIiwidmFsdWVPckRlZmF1bHQkNSIsInJlc29sdmUkNCIsImlzUG9pbnRJbkFyZWEiLCJsaW5lRW5hYmxlZCIsInNob3dMaW5lIiwiY29udHJvbGxlcl9saW5lIiwibGluZVRlbnNpb24iLCJfc2NhbGUiLCJfcmVzb2x2ZUxpbmVPcHRpb25zIiwidXBkYXRlQmV6aWVyQ29udHJvbFBvaW50cyIsImxpbmVNb2RlbCIsIl9yZXNvbHZlUG9pbnRPcHRpb25zIiwiY2FsY3VsYXRlUG9pbnRZIiwiRUxFTUVOVF9PUFRJT05TIiwiZWxlbWVudE9wdGlvbnMiLCJzdW1Qb3MiLCJzdW1OZWciLCJkc01ldGEiLCJzdGFja2VkUmlnaHRWYWx1ZSIsInJpZ2h0VmFsdWUiLCJjb250cm9sUG9pbnRzIiwiZmlsdGVyIiwicHQiLCJjYXBDb250cm9sUG9pbnQiLCJjdWJpY0ludGVycG9sYXRpb25Nb2RlIiwic3BsaW5lQ3VydmVNb25vdG9uZSIsInNwbGluZUN1cnZlIiwibmV4dEl0ZW0iLCJoYWxmQm9yZGVyV2lkdGgiLCJyZXNvbHZlJDUiLCJhbmdsZUxpbmVzIiwiZGlzcGxheSIsImNpcmN1bGFyIiwicG9pbnRMYWJlbHMiLCJiZWdpbkF0WmVybyIsImNvbnRyb2xsZXJfcG9sYXJBcmVhIiwic3RhcnRzIiwiX3N0YXJ0cyIsImFuZ2xlcyIsIl9hbmdsZXMiLCJfdXBkYXRlUmFkaXVzIiwiY291bnRWaXNpYmxlRWxlbWVudHMiLCJfY29tcHV0ZUFuZ2xlIiwiZ2V0VmlzaWJsZURhdGFzZXRDb3VudCIsInhDZW50ZXIiLCJ5Q2VudGVyIiwiZGF0YXNldFN0YXJ0QW5nbGUiLCJnZXREaXN0YW5jZUZyb21DZW50ZXJGb3JWYWx1ZSIsInJlc2V0UmFkaXVzIiwiZG91Z2hudXQiLCJjb250cm9sbGVyX3BpZSIsInZhbHVlT3JEZWZhdWx0JDYiLCJyZXNvbHZlJDYiLCJjb250cm9sbGVyX3JhZGFyIiwicG9pbnRQb3NpdGlvbiIsImdldFBvaW50UG9zaXRpb25Gb3JWYWx1ZSIsImNvbnRyb2xsZXJfc2NhdHRlciIsImNvbnRyb2xsZXJzIiwiYnViYmxlIiwiaG9yaXpvbnRhbEJhciIsInBvbGFyQXJlYSIsInBpZSIsInJhZGFyIiwic2NhdHRlciIsImdldFJlbGF0aXZlUG9zaXRpb24iLCJuYXRpdmUiLCJwYXJzZVZpc2libGVJdGVtcyIsImhhbmRsZXIiLCJqbGVuIiwiZ2V0SW50ZXJzZWN0SXRlbXMiLCJnZXROZWFyZXN0SXRlbXMiLCJpbnRlcnNlY3QiLCJkaXN0YW5jZU1ldHJpYyIsIm1pbkRpc3RhbmNlIiwiUE9TSVRJVkVfSU5GSU5JVFkiLCJuZWFyZXN0SXRlbXMiLCJnZXREaXN0YW5jZU1ldHJpY0ZvckF4aXMiLCJ1c2VYIiwidXNlWSIsInB0MSIsInB0MiIsImRlbHRhWCIsImRlbHRhWSIsImluZGV4TW9kZSIsIml0ZW1zIiwiY29yZV9pbnRlcmFjdGlvbiIsIm1vZGVzIiwic2luZ2xlIiwibmVhcmVzdCIsImludGVyc2VjdHNJdGVtIiwiZmlsdGVyQnlQb3NpdGlvbiIsIndoZXJlIiwic29ydEJ5V2VpZ2h0IiwiX3RtcEluZGV4XyIsInNvcnQiLCJmaW5kTWF4UGFkZGluZyIsImJveGVzIiwiYm94IiwiZ2V0UGFkZGluZyIsImJveFBhZGRpbmciLCJhZGRTaXplQnlQb3NpdGlvbiIsImxheW91dCIsImNvcmVfbGF5b3V0cyIsImFkZEJveCIsImZ1bGxXaWR0aCIsInJlbW92ZUJveCIsImxheW91dEl0ZW0iLCJjb25maWd1cmUiLCJwcm9wcyIsImxheW91dE9wdGlvbnMiLCJsZWZ0UGFkZGluZyIsInJpZ2h0UGFkZGluZyIsInRvcFBhZGRpbmciLCJib3R0b21QYWRkaW5nIiwibGVmdEJveGVzIiwicmlnaHRCb3hlcyIsInRvcEJveGVzIiwiYm90dG9tQm94ZXMiLCJjaGFydEFyZWFCb3hlcyIsInZlcnRpY2FsQm94ZXMiLCJob3Jpem9udGFsQm94ZXMiLCJvdXRlckJveGVzIiwiY2hhcnRXaWR0aCIsImNoYXJ0SGVpZ2h0IiwiY2hhcnRBcmVhV2lkdGgiLCJ2ZXJ0aWNhbEJveFdpZHRoIiwibWF4Q2hhcnRBcmVhV2lkdGgiLCJtYXhDaGFydEFyZWFIZWlnaHQiLCJvdXRlckJveFNpemVzIiwibWluQm94U2l6ZXMiLCJtYXhQYWRkaW5nIiwiZ2V0TWluaW11bUJveFNpemUiLCJmaXRCb3giLCJtaW5Cb3hTaXplIiwiZmluZE5leHRXaGVyZSIsIm1pbkJveCIsInNjYWxlTWFyZ2luIiwiZmluYWxGaXRWZXJ0aWNhbEJveCIsImxlZnRQYWRkaW5nQWRkaXRpb24iLCJ0b3BQYWRkaW5nQWRkaXRpb24iLCJuZXdNYXhDaGFydEFyZWFIZWlnaHQiLCJuZXdNYXhDaGFydEFyZWFXaWR0aCIsInBsYWNlQm94IiwicGxhdGZvcm1fYmFzaWMiLCJhY3F1aXJlQ29udGV4dCIsImdldENvbnRleHQiLCJwbGF0Zm9ybV9kb20iLCJwbGF0Zm9ybV9kb20kMSIsImZyZWV6ZSIsImRlZmF1bHQiLCJnZXRDanNFeHBvcnRGcm9tTmFtZXNwYWNlIiwic3R5bGVzaGVldCIsIkVYUEFORE9fS0VZIiwiQ1NTX1BSRUZJWCIsIkNTU19TSVpFX01PTklUT1IiLCJDU1NfUkVOREVSX01PTklUT1IiLCJDU1NfUkVOREVSX0FOSU1BVElPTiIsIkFOSU1BVElPTl9TVEFSVF9FVkVOVFMiLCJFVkVOVF9UWVBFUyIsInRvdWNoc3RhcnQiLCJ0b3VjaG1vdmUiLCJ0b3VjaGVuZCIsInBvaW50ZXJlbnRlciIsInBvaW50ZXJkb3duIiwicG9pbnRlcm1vdmUiLCJwb2ludGVydXAiLCJwb2ludGVybGVhdmUiLCJwb2ludGVyb3V0IiwicmVhZFVzZWRTaXplIiwicHJvcGVydHkiLCJnZXRTdHlsZSIsImluaXRDYW52YXMiLCJjb25maWciLCJyZW5kZXJIZWlnaHQiLCJnZXRBdHRyaWJ1dGUiLCJyZW5kZXJXaWR0aCIsImluaXRpYWwiLCJkaXNwbGF5V2lkdGgiLCJhc3BlY3RSYXRpbyIsImRpc3BsYXlIZWlnaHQiLCJzdXBwb3J0c0V2ZW50TGlzdGVuZXJPcHRpb25zIiwic3VwcG9ydHMiLCJhZGRFdmVudExpc3RlbmVyIiwiZXZlbnRMaXN0ZW5lck9wdGlvbnMiLCJwYXNzaXZlIiwiYWRkTGlzdGVuZXIiLCJub2RlIiwicmVtb3ZlTGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY3JlYXRlRXZlbnQiLCJuYXRpdmVFdmVudCIsImZyb21OYXRpdmVFdmVudCIsImV2ZW50IiwicG9zIiwidGhyb3R0bGVkIiwidGlja2luZyIsImNyZWF0ZURpdiIsImNscyIsImVsIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiY3JlYXRlUmVzaXplciIsIm1heFNpemUiLCJyZXNpemVyIiwiZXhwYW5kIiwic2hyaW5rIiwiYXBwZW5kQ2hpbGQiLCJfcmVzZXQiLCJzY3JvbGxMZWZ0Iiwic2Nyb2xsVG9wIiwib25TY3JvbGwiLCJiaW5kIiwid2F0Y2hGb3JSZW5kZXIiLCJleHBhbmRvIiwicHJveHkiLCJyZW5kZXJQcm94eSIsImFuaW1hdGlvbk5hbWUiLCJyZWZsb3ciLCJvZmZzZXRQYXJlbnQiLCJjbGFzc0xpc3QiLCJhZGQiLCJ1bndhdGNoRm9yUmVuZGVyIiwicmVtb3ZlIiwiYWRkUmVzaXplTGlzdGVuZXIiLCJjb250YWluZXIiLCJtYWludGFpbkFzcGVjdFJhdGlvIiwicGFyZW50Tm9kZSIsImNsaWVudFdpZHRoIiwiaW5zZXJ0QmVmb3JlIiwiZmlyc3RDaGlsZCIsInJlbW92ZVJlc2l6ZUxpc3RlbmVyIiwicmVtb3ZlQ2hpbGQiLCJpbmplY3RDU1MiLCJwbGF0Zm9ybSIsImNzcyIsIl9zdHlsZSIsInNldEF0dHJpYnV0ZSIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiY3JlYXRlVGV4dE5vZGUiLCJwbGF0Zm9ybV9kb20kMiIsImRpc2FibGVDU1NJbmplY3Rpb24iLCJfZW5hYmxlZCIsIl9lbnN1cmVMb2FkZWQiLCJfbG9hZGVkIiwiZ2V0RWxlbWVudEJ5SWQiLCJyZWxlYXNlQ29udGV4dCIsInJlbW92ZUF0dHJpYnV0ZSIsInByb3hpZXMiLCJhZGRFdmVudCIsInJlbW92ZUV2ZW50IiwiaW1wbGVtZW50YXRpb24iLCJwbHVnaW5zIiwiY29yZV9wbHVnaW5zIiwiX3BsdWdpbnMiLCJfY2FjaGVJZCIsInJlZ2lzdGVyIiwicGx1Z2luIiwidW5yZWdpc3RlciIsImlkeCIsImdldEFsbCIsIm5vdGlmeSIsImhvb2siLCJkZXNjcmlwdG9ycyIsImRlc2NyaXB0b3IiLCJwYXJhbXMiLCJjYWNoZSIsIiRwbHVnaW5zIiwiX2ludmFsaWRhdGUiLCJjb3JlX3NjYWxlU2VydmljZSIsImNvbnN0cnVjdG9ycyIsInJlZ2lzdGVyU2NhbGVUeXBlIiwic2NhbGVDb25zdHJ1Y3RvciIsInNjYWxlRGVmYXVsdHMiLCJnZXRTY2FsZUNvbnN0cnVjdG9yIiwiZ2V0U2NhbGVEZWZhdWx0cyIsInVwZGF0ZVNjYWxlRGVmYXVsdHMiLCJhZGRpdGlvbnMiLCJhZGRTY2FsZXNUb0xheW91dCIsInZhbHVlT3JEZWZhdWx0JDciLCJlbmFibGVkIiwidGl0bGVGb250U3R5bGUiLCJ0aXRsZVNwYWNpbmciLCJ0aXRsZU1hcmdpbkJvdHRvbSIsInRpdGxlRm9udENvbG9yIiwidGl0bGVBbGlnbiIsImJvZHlTcGFjaW5nIiwiYm9keUZvbnRDb2xvciIsImJvZHlBbGlnbiIsImZvb3RlckZvbnRTdHlsZSIsImZvb3RlclNwYWNpbmciLCJmb290ZXJNYXJnaW5Ub3AiLCJmb290ZXJGb250Q29sb3IiLCJmb290ZXJBbGlnbiIsInlQYWRkaW5nIiwieFBhZGRpbmciLCJjYXJldFBhZGRpbmciLCJjYXJldFNpemUiLCJtdWx0aUtleUJhY2tncm91bmQiLCJkaXNwbGF5Q29sb3JzIiwiYmVmb3JlVGl0bGUiLCJ0b29sdGlwSXRlbXMiLCJsYWJlbENvdW50IiwiYWZ0ZXJUaXRsZSIsImJlZm9yZUJvZHkiLCJiZWZvcmVMYWJlbCIsImxhYmVsQ29sb3IiLCJhY3RpdmVFbGVtZW50IiwibGFiZWxUZXh0Q29sb3IiLCJhZnRlckxhYmVsIiwiYWZ0ZXJCb2R5IiwiYmVmb3JlRm9vdGVyIiwiZm9vdGVyIiwiYWZ0ZXJGb290ZXIiLCJwb3NpdGlvbmVycyIsImF2ZXJhZ2UiLCJldmVudFBvc2l0aW9uIiwibmVhcmVzdEVsZW1lbnQiLCJkIiwiZGlzdGFuY2VCZXR3ZWVuUG9pbnRzIiwidHAiLCJwdXNoT3JDb25jYXQiLCJ0b1B1c2giLCJzcGxpdE5ld2xpbmVzIiwiU3RyaW5nIiwic3BsaXQiLCJjcmVhdGVUb29sdGlwSXRlbSIsImluZGV4U2NhbGUiLCJ2YWx1ZVNjYWxlIiwiZ2V0TGFiZWxGb3JJbmRleCIsImdldEJhc2VNb2RlbCIsInRvb2x0aXBPcHRzIiwieEFsaWduIiwieUFsaWduIiwiX2JvZHlGb250RmFtaWx5IiwiYm9keUZvbnRGYW1pbHkiLCJfYm9keUZvbnRTdHlsZSIsImJvZHlGb250U3R5bGUiLCJfYm9keUFsaWduIiwiYm9keUZvbnRTaXplIiwiX3RpdGxlRm9udEZhbWlseSIsInRpdGxlRm9udEZhbWlseSIsIl90aXRsZUZvbnRTdHlsZSIsInRpdGxlRm9udFNpemUiLCJfdGl0bGVBbGlnbiIsIl9mb290ZXJGb250RmFtaWx5IiwiZm9vdGVyRm9udEZhbWlseSIsIl9mb290ZXJGb250U3R5bGUiLCJmb290ZXJGb250U2l6ZSIsIl9mb290ZXJBbGlnbiIsIm9wYWNpdHkiLCJsZWdlbmRDb2xvckJhY2tncm91bmQiLCJnZXRUb29sdGlwU2l6ZSIsInRvb2x0aXAiLCJib2R5IiwiY29tYmluZWRCb2R5TGVuZ3RoIiwicmVkdWNlIiwiYm9keUl0ZW0iLCJiZWZvcmUiLCJsaW5lcyIsImFmdGVyIiwidGl0bGVMaW5lQ291bnQiLCJmb290ZXJMaW5lQ291bnQiLCJ3aWR0aFBhZGRpbmciLCJtYXhMaW5lV2lkdGgiLCJtZWFzdXJlVGV4dCIsImZvbnRTdHJpbmciLCJkZXRlcm1pbmVBbGlnbm1lbnQiLCJsZiIsInJmIiwib2xmIiwib3JmIiwieWYiLCJtaWRYIiwibWlkWSIsImdldEJhY2tncm91bmRQb2ludCIsImFsaWdubWVudCIsInBhZGRpbmdBbmRTaXplIiwicmFkaXVzQW5kUGFkZGluZyIsImdldEFsaWduZWRYIiwiYWxpZ24iLCJnZXRCZWZvcmVBZnRlckJvZHlMaW5lcyIsImV4cG9ydHMkMyIsIl9sYXN0QWN0aXZlIiwiZ2V0VGl0bGUiLCJnZXRCZWZvcmVCb2R5IiwiZ2V0Qm9keSIsImJvZHlJdGVtcyIsImdldEFmdGVyQm9keSIsImdldEZvb3RlciIsImNoYW5nZWQiLCJleGlzdGluZ01vZGVsIiwiYWN0aXZlIiwiX2FjdGl2ZSIsImJhY2tncm91bmRQb2ludCIsInRvb2x0aXBTaXplIiwiY2FyZXRYIiwiY2FyZXRZIiwibGFiZWxDb2xvcnMiLCJsYWJlbFRleHRDb2xvcnMiLCJfZXZlbnRQb3NpdGlvbiIsIml0ZW1Tb3J0IiwiZGF0YVBvaW50cyIsImRyYXdDYXJldCIsInRvb2x0aXBQb2ludCIsImNhcmV0UG9zaXRpb24iLCJnZXRDYXJldFBvc2l0aW9uIiwieDMiLCJ5MyIsInB0WCIsInB0WSIsInRtcCIsImRyYXdUaXRsZSIsInRleHRBbGlnbiIsInRleHRCYXNlbGluZSIsImZpbGxUZXh0IiwiZHJhd0JvZHkiLCJkcmF3Q29sb3JCb3hlcyIsInhMaW5lUGFkZGluZyIsImNvbG9yWCIsInRleHRDb2xvciIsImZpbGxMaW5lT2ZUZXh0Iiwic3Ryb2tlUmVjdCIsImRyYXdGb290ZXIiLCJkcmF3QmFja2dyb3VuZCIsInF1YWRyYXRpY0N1cnZlVG8iLCJoYXNUb29sdGlwQ29udGVudCIsImdsb2JhbEFscGhhIiwiaGFuZGxlRXZlbnQiLCJnZXRFbGVtZW50c0F0RXZlbnRGb3JNb2RlIiwicG9zaXRpb25lcnNfMSIsImNvcmVfdG9vbHRpcCIsInZhbHVlT3JEZWZhdWx0JDgiLCJldmVudHMiLCJvbkhvdmVyIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJyZXNwb25zaXZlIiwicmVzcG9uc2l2ZUFuaW1hdGlvbkR1cmF0aW9uIiwibWVyZ2VTY2FsZUNvbmZpZyIsInNsZW4iLCJtZXJnZUNvbmZpZyIsImluaXRDb25maWciLCJ1cGRhdGVDb25maWciLCJuZXdPcHRpb25zIiwiZW5zdXJlU2NhbGVzSGF2ZUlEcyIsImJ1aWxkT3JVcGRhdGVTY2FsZXMiLCJwb3NpdGlvbklzSG9yaXpvbnRhbCIsImNvbnN0cnVjdCIsIl9idWZmZXJlZFJlbmRlciIsImluc3RhbmNlcyIsInJldGluYVNjYWxlIiwiZGV2aWNlUGl4ZWxSYXRpbyIsImJpbmRFdmVudHMiLCJyZXNpemUiLCJpbml0VG9vbFRpcCIsInN0b3AiLCJzaWxlbnQiLCJuZXdXaWR0aCIsImdldE1heGltdW1XaWR0aCIsIm5ld0hlaWdodCIsImdldE1heGltdW1IZWlnaHQiLCJuZXdTaXplIiwib25SZXNpemUiLCJzY2FsZXNPcHRpb25zIiwic2NhbGVPcHRpb25zIiwieEF4aXNPcHRpb25zIiwieUF4aXNPcHRpb25zIiwidXBkYXRlZCIsImR0eXBlIiwiZHBvc2l0aW9uIiwiaXNEZWZhdWx0Iiwic2NhbGVUeXBlIiwic2NhbGVDbGFzcyIsIm1lcmdlVGlja3NPcHRpb25zIiwiaGFzVXBkYXRlZCIsImJ1aWxkT3JVcGRhdGVDb250cm9sbGVycyIsIm5ld0NvbnRyb2xsZXJzIiwiZGVzdHJveURhdGFzZXRNZXRhIiwiQ29udHJvbGxlckNsYXNzIiwiRXJyb3IiLCJyZXNldEVsZW1lbnRzIiwidXBkYXRlTGF5b3V0IiwidXBkYXRlRGF0YXNldHMiLCJsYXN0QWN0aXZlIiwiX2J1ZmZlcmVkUmVxdWVzdCIsInVwZGF0ZURhdGFzZXQiLCJhbmltYXRpb25PcHRpb25zIiwiYW5pbWF0aW9uT2JqZWN0IiwiZWFzaW5nRnVuY3Rpb24iLCJzdGVwRGVjaW1hbCIsImRyYXdEYXRhc2V0cyIsIl9kcmF3VG9vbHRpcCIsImRyYXdEYXRhc2V0IiwiZ2V0RWxlbWVudEF0RXZlbnQiLCJnZXRFbGVtZW50c0F0RXZlbnQiLCJnZXRFbGVtZW50c0F0WEF4aXMiLCJnZXREYXRhc2V0QXRFdmVudCIsIl9tZXRhIiwiZ2VuZXJhdGVMZWdlbmQiLCJ1bmJpbmRFdmVudHMiLCJ0b0Jhc2U2NEltYWdlIiwidG9EYXRhVVJMIiwiX2NoYXJ0SW5zdGFuY2UiLCJfbGlzdGVuZXJzIiwiZXZlbnRIYW5kbGVyIiwidXBkYXRlSG92ZXJTdHlsZSIsImJ1ZmZlcmVkUmVxdWVzdCIsImhvdmVyT3B0aW9ucyIsImNvcmVfY29udHJvbGxlciIsIkNvbnRyb2xsZXIiLCJ0eXBlcyIsImNvbmZpZ01lcmdlIiwic2NhbGVNZXJnZSIsImNvcmVfaGVscGVycyIsImNvbGxlY3Rpb24iLCJmaWx0ZXJDYWxsYmFjayIsImZpbHRlcmVkIiwiYXJyYXlUb1NlYXJjaCIsInN0YXJ0SW5kZXgiLCJjdXJyZW50SXRlbSIsImZpbmRQcmV2aW91c1doZXJlIiwiYWxtb3N0RXF1YWxzIiwiYWxtb3N0V2hvbGUiLCJyb3VuZGVkIiwiTkVHQVRJVkVfSU5GSU5JVFkiLCJzaWduIiwibG9nMTAiLCJleHBvbmVudCIsImxvZyIsIkxPRzEwRSIsInBvd2VyT2YxMCIsImlzUG93ZXJPZjEwIiwidG9SYWRpYW5zIiwidG9EZWdyZWVzIiwicmFkaWFucyIsIl9kZWNpbWFsUGxhY2VzIiwiY2VudHJlUG9pbnQiLCJhbmdsZVBvaW50IiwiZGlzdGFuY2VGcm9tWENlbnRlciIsImRpc3RhbmNlRnJvbVlDZW50ZXIiLCJyYWRpYWxEaXN0YW5jZUZyb21DZW50ZXIiLCJhbGlhc1BpeGVsIiwicGl4ZWxXaWR0aCIsIl9hbGlnblBpeGVsIiwicGl4ZWwiLCJjdXJyZW50RGV2aWNlUGl4ZWxSYXRpbyIsImhhbGZXaWR0aCIsImZpcnN0UG9pbnQiLCJtaWRkbGVQb2ludCIsImFmdGVyUG9pbnQiLCJkMDEiLCJkMTIiLCJzMDEiLCJzMTIiLCJmYSIsImZiIiwiRVBTSUxPTiIsInBvaW50c1dpdGhUYW5nZW50cyIsImRlbHRhSyIsIm1LIiwicG9pbnRzTGVuIiwicG9pbnRCZWZvcmUiLCJwb2ludEN1cnJlbnQiLCJwb2ludEFmdGVyIiwic2xvcGVEZWx0YVgiLCJhbHBoYUsiLCJiZXRhSyIsInRhdUsiLCJzcXVhcmVkTWFnbml0dWRlIiwibG9vcCIsIm5pY2VOdW0iLCJmcmFjdGlvbiIsIm5pY2VGcmFjdGlvbiIsIndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSIsIm1velJlcXVlc3RBbmltYXRpb25GcmFtZSIsIm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJtc1JlcXVlc3RBbmltYXRpb25GcmFtZSIsInNldFRpbWVvdXQiLCJldnQiLCJvcmlnaW5hbEV2ZW50Iiwic3JjRWxlbWVudCIsImJvdW5kaW5nUmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInRvdWNoZXMiLCJjbGllbnRYIiwiY2xpZW50WSIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ1RvcCIsInBhZGRpbmdSaWdodCIsInBhZGRpbmdCb3R0b20iLCJwYXJzZU1heFN0eWxlIiwic3R5bGVWYWx1ZSIsInBhcmVudFByb3BlcnR5IiwidmFsdWVJblBpeGVscyIsImlzQ29uc3RyYWluZWRWYWx1ZSIsImdldENvbnN0cmFpbnREaW1lbnNpb24iLCJkb21Ob2RlIiwibWF4U3R5bGUiLCJwZXJjZW50YWdlUHJvcGVydHkiLCJkZWZhdWx0VmlldyIsIl9nZXRQYXJlbnROb2RlIiwiY29uc3RyYWluZWROb2RlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImNvbnN0cmFpbmVkQ29udGFpbmVyIiwiaGFzQ05vZGUiLCJoYXNDQ29udGFpbmVyIiwiaW5maW5pdHkiLCJnZXRDb25zdHJhaW50V2lkdGgiLCJnZXRDb25zdHJhaW50SGVpZ2h0IiwiX2NhbGN1bGF0ZVBhZGRpbmciLCJwYXJlbnREaW1lbnNpb24iLCJwYXJlbnQiLCJob3N0IiwiY3ciLCJjbGllbnRIZWlnaHQiLCJjaCIsImN1cnJlbnRTdHlsZSIsImdldFByb3BlcnR5VmFsdWUiLCJmb3JjZVJhdGlvIiwicGl4ZWxSYXRpbyIsInBpeGVsU2l6ZSIsImxvbmdlc3RUZXh0IiwiYXJyYXlPZlRoaW5ncyIsImdjIiwiZ2FyYmFnZUNvbGxlY3QiLCJsb25nZXN0IiwidGhpbmciLCJuZXN0ZWRUaGluZyIsImdjTGVuIiwidGV4dFdpZHRoIiwibnVtYmVyT2ZMYWJlbExpbmVzIiwibnVtYmVyT2ZMaW5lcyIsImNvbG9yIiwiQ2FudmFzR3JhZGllbnQiLCJjb2xvclZhbHVlIiwiQ2FudmFzUGF0dGVybiIsImFic3RyYWN0IiwiRGF0ZUFkYXB0ZXIiLCJmb3JtYXRzIiwicGFyc2UiLCJmb3JtYXQiLCJkaWZmIiwic3RhcnRPZiIsImVuZE9mIiwiX2NyZWF0ZSIsIm92ZXJyaWRlIiwibWVtYmVycyIsIl9kYXRlIiwiY29yZV9hZGFwdGVycyIsImNvcmVfdGlja3MiLCJmb3JtYXR0ZXJzIiwidGlja1ZhbHVlIiwibG9nRGVsdGEiLCJ0aWNrU3RyaW5nIiwibWF4VGljayIsImxvZ1RpY2siLCJ0b0V4cG9uZW50aWFsIiwibnVtRGVjaW1hbCIsInRvRml4ZWQiLCJsb2dhcml0aG1pYyIsInJlbWFpbiIsInZhbHVlT3JEZWZhdWx0JDkiLCJkcmF3Qm9yZGVyIiwiZHJhd09uQ2hhcnRBcmVhIiwiZHJhd1RpY2tzIiwidGlja01hcmtMZW5ndGgiLCJ6ZXJvTGluZVdpZHRoIiwiemVyb0xpbmVDb2xvciIsInplcm9MaW5lQm9yZGVyRGFzaCIsInplcm9MaW5lQm9yZGVyRGFzaE9mZnNldCIsInNjYWxlTGFiZWwiLCJsYWJlbFN0cmluZyIsIm1pblJvdGF0aW9uIiwibWF4Um90YXRpb24iLCJtaXJyb3IiLCJhdXRvU2tpcCIsImF1dG9Ta2lwUGFkZGluZyIsImxhYmVsT2Zmc2V0IiwibWlub3IiLCJtYWpvciIsImxhYmVsc0Zyb21UaWNrcyIsImdldFBpeGVsRm9yR3JpZExpbmUiLCJsaW5lVmFsdWUiLCJjb21wdXRlVGV4dFNpemUiLCJ0aWNrIiwiY29yZV9zY2FsZSIsIl90aWNrcyIsImJlZm9yZVVwZGF0ZSIsIm1heFdpZHRoIiwibWF4SGVpZ2h0IiwibWFyZ2lucyIsIl9tYXhMYWJlbExpbmVzIiwibG9uZ2VzdExhYmVsV2lkdGgiLCJsb25nZXN0VGV4dENhY2hlIiwiYmVmb3JlU2V0RGltZW5zaW9ucyIsInNldERpbWVuc2lvbnMiLCJhZnRlclNldERpbWVuc2lvbnMiLCJiZWZvcmVEYXRhTGltaXRzIiwiZGV0ZXJtaW5lRGF0YUxpbWl0cyIsImFmdGVyRGF0YUxpbWl0cyIsImJlZm9yZUJ1aWxkVGlja3MiLCJidWlsZFRpY2tzIiwiYWZ0ZXJCdWlsZFRpY2tzIiwiYmVmb3JlVGlja1RvTGFiZWxDb252ZXJzaW9uIiwiY29udmVydFRpY2tzVG9MYWJlbHMiLCJhZnRlclRpY2tUb0xhYmVsQ29udmVyc2lvbiIsImJlZm9yZUNhbGN1bGF0ZVRpY2tSb3RhdGlvbiIsImNhbGN1bGF0ZVRpY2tSb3RhdGlvbiIsImFmdGVyQ2FsY3VsYXRlVGlja1JvdGF0aW9uIiwiYmVmb3JlRml0IiwiZml0IiwiYWZ0ZXJGaXQiLCJhZnRlclVwZGF0ZSIsInRpY2tPcHRzIiwidXNlckNhbGxiYWNrIiwidGlja0ZvbnQiLCJsYWJlbFJvdGF0aW9uIiwib3JpZ2luYWxMYWJlbFdpZHRoIiwibGFiZWxXaWR0aCIsImNvc1JvdGF0aW9uIiwic2luUm90YXRpb24iLCJ0aWNrV2lkdGgiLCJhbmdsZVJhZGlhbnMiLCJzY2FsZUxhYmVsT3B0cyIsImdyaWRMaW5lT3B0cyIsIl9pc1Zpc2libGUiLCJwYXJzZUZvbnQiLCJpc0Z1bGxXaWR0aCIsInNjYWxlTGFiZWxGb250Iiwic2NhbGVMYWJlbFBhZGRpbmciLCJkZWx0YUhlaWdodCIsImxhcmdlc3RUZXh0V2lkdGgiLCJ0YWxsZXN0TGFiZWxIZWlnaHRJbkxpbmVzIiwibGluZVNwYWNlIiwidGlja1BhZGRpbmciLCJsYWJlbEhlaWdodCIsImZpcnN0TGFiZWxXaWR0aCIsImxhc3RMYWJlbFdpZHRoIiwib2Zmc2V0TGVmdCIsIm9mZnNldFJpZ2h0IiwiaGFuZGxlTWFyZ2lucyIsInJhd1ZhbHVlIiwiZ2V0VmFsdWVGb3JQaXhlbCIsImlubmVyV2lkdGgiLCJmaW5hbFZhbCIsImlubmVySGVpZ2h0IiwiZGVjaW1hbCIsInZhbHVlT2Zmc2V0IiwiZ2V0QmFzZVZhbHVlIiwiX2F1dG9Ta2lwIiwib3B0aW9uVGlja3MiLCJ0aWNrQ291bnQiLCJza2lwUmF0aW8iLCJtYXhUaWNrcyIsIm1heFRpY2tzTGltaXQiLCJ0aWNrc0xlbmd0aCIsIl90aWNrU2l6ZSIsImF4aXNMZW5ndGgiLCJQYWRkaW5nQm90dG9tIiwicm90Iiwib3B0aW9uTWFqb3JUaWNrcyIsImlzUm90YXRlZCIsImlzTWlycm9yZWQiLCJ0aWNrRm9udENvbG9yIiwiZm9udENvbG9yIiwibWFqb3JUaWNrRm9udENvbG9yIiwibWFqb3JUaWNrRm9udCIsInRsIiwic2NhbGVMYWJlbEZvbnRDb2xvciIsImxhYmVsUm90YXRpb25SYWRpYW5zIiwiaXRlbXNUb0RyYXciLCJheGlzV2lkdGgiLCJhbGlnblBpeGVsIiwiYm9yZGVyVmFsdWUiLCJ0aWNrU3RhcnQiLCJ0aWNrRW5kIiwibGluZUNvbG9yIiwiemVyb0xpbmVJbmRleCIsInR4MSIsInR5MSIsInR4MiIsInR5MiIsImxhYmVsWCIsImxhYmVsWSIsInRleHRPZmZzZXQiLCJsYWJlbFlPZmZzZXQiLCJsYWJlbFhPZmZzZXQiLCJnbFdpZHRoIiwiZ2xDb2xvciIsImdsQm9yZGVyRGFzaCIsImdsQm9yZGVyRGFzaE9mZnNldCIsIml0ZW1Ub0RyYXciLCJ0cmFuc2xhdGUiLCJzY2FsZUxhYmVsWCIsInNjYWxlTGFiZWxZIiwiaGFsZkxpbmVIZWlnaHQiLCJpc0xlZnQiLCJmaXJzdExpbmVXaWR0aCIsImxhc3RMaW5lV2lkdGgiLCJkZWZhdWx0Q29uZmlnIiwic2NhbGVfY2F0ZWdvcnkiLCJnZXRMYWJlbHMiLCJ4TGFiZWxzIiwieUxhYmVscyIsIm1pbkluZGV4IiwibWF4SW5kZXgiLCJvZmZzZXRBbXQiLCJ2YWx1ZUNhdGVnb3J5IiwidmFsdWVXaWR0aCIsIndpZHRoT2Zmc2V0IiwidmFsdWVIZWlnaHQiLCJoZWlnaHRPZmZzZXQiLCJob3J6IiwidmFsdWVEaW1lbnNpb24iLCJfZGVmYXVsdHMiLCJnZW5lcmF0ZVRpY2tzIiwiZ2VuZXJhdGlvbk9wdGlvbnMiLCJkYXRhUmFuZ2UiLCJNSU5fU1BBQ0lORyIsInN0ZXBTaXplIiwidW5pdCIsIm1heE51bVNwYWNlcyIsInByZWNpc2lvbiIsInJtaW4iLCJybWF4Iiwic3BhY2luZyIsImZhY3RvciIsIm5pY2VNaW4iLCJuaWNlTWF4IiwibnVtU3BhY2VzIiwiY2VpbCIsInNjYWxlX2xpbmVhcmJhc2UiLCJoYW5kbGVUaWNrUmFuZ2VPcHRpb25zIiwibWluU2lnbiIsIm1heFNpZ24iLCJzZXRNaW4iLCJzdWdnZXN0ZWRNaW4iLCJzZXRNYXgiLCJzdWdnZXN0ZWRNYXgiLCJnZXRUaWNrTGltaXQiLCJfY29tcHV0ZVRpY2tMaW1pdCIsImhhbmRsZURpcmVjdGlvbmFsQ2hhbmdlcyIsIm51bWVyaWNHZW5lcmF0b3JPcHRpb25zIiwiZml4ZWRTdGVwU2l6ZSIsInRpY2tzQXNOdW1iZXJzIiwiZGVmYXVsdENvbmZpZyQxIiwic2NhbGVfbGluZWFyIiwiREVGQVVMVF9NSU4iLCJERUZBVUxUX01BWCIsIklETWF0Y2hlcyIsImhhc1N0YWNrcyIsInZhbHVlc1BlclN0YWNrIiwicG9zaXRpdmVWYWx1ZXMiLCJuZWdhdGl2ZVZhbHVlcyIsInJlbGF0aXZlUG9pbnRzIiwidmFsdWVzRm9yVHlwZSIsIm1pblZhbCIsIm1heFZhbCIsImlubmVyRGltZW5zaW9uIiwiX2RlZmF1bHRzJDEiLCJ2YWx1ZU9yRGVmYXVsdCRhIiwiZ2VuZXJhdGVUaWNrcyQxIiwidGlja1ZhbCIsImVuZEV4cCIsImVuZFNpZ25pZmljYW5kIiwiZXhwIiwic2lnbmlmaWNhbmQiLCJtaW5Ob3RaZXJvIiwibGFzdFRpY2siLCJkZWZhdWx0Q29uZmlnJDIiLCJub25OZWdhdGl2ZU9yRGVmYXVsdCIsInNjYWxlX2xvZ2FyaXRobWljIiwidGlja1ZhbHVlcyIsIl9nZXRGaXJzdFRpY2tWYWx1ZSIsImZpcnN0VGlja1ZhbHVlIiwiX2RlZmF1bHRzJDIiLCJ2YWx1ZU9yRGVmYXVsdCRiIiwidmFsdWVBdEluZGV4T3JEZWZhdWx0JDEiLCJyZXNvbHZlJDciLCJkZWZhdWx0Q29uZmlnJDMiLCJhbmltYXRlIiwic2hvd0xhYmVsQmFja2Ryb3AiLCJiYWNrZHJvcENvbG9yIiwiYmFja2Ryb3BQYWRkaW5nWSIsImJhY2tkcm9wUGFkZGluZ1giLCJnZXRWYWx1ZUNvdW50IiwiZ2V0VGlja0JhY2tkcm9wSGVpZ2h0IiwibWVhc3VyZUxhYmVsU2l6ZSIsImRldGVybWluZUxpbWl0cyIsImZpdFdpdGhQb2ludExhYmVscyIsInBsRm9udCIsImZ1cnRoZXN0TGltaXRzIiwiZnVydGhlc3RBbmdsZXMiLCJ0ZXh0U2l6ZSIsIl9wb2ludExhYmVsU2l6ZXMiLCJ2YWx1ZUNvdW50IiwiZ2V0UG9pbnRQb3NpdGlvbiIsImRyYXdpbmdBcmVhIiwiZ2V0SW5kZXhBbmdsZSIsImhMaW1pdHMiLCJ2TGltaXRzIiwic2V0UmVkdWN0aW9ucyIsImdldFRleHRBbGlnbkZvckFuZ2xlIiwiYWRqdXN0UG9pbnRQb3NpdGlvbkZvckxhYmVsSGVpZ2h0IiwiZHJhd1BvaW50TGFiZWxzIiwiYW5nbGVMaW5lT3B0cyIsInBvaW50TGFiZWxPcHRzIiwidGlja0JhY2tkcm9wSGVpZ2h0Iiwib3V0ZXJEaXN0YW5jZSIsIm91dGVyUG9zaXRpb24iLCJleHRyYSIsInBvaW50TGFiZWxQb3NpdGlvbiIsInBvaW50TGFiZWxGb250Q29sb3IiLCJkcmF3UmFkaXVzTGluZSIsIm51bWJlck9yWmVybyIsInBhcmFtIiwic2NhbGVfcmFkaWFsTGluZWFyIiwic2V0Q2VudGVyUG9pbnQiLCJsYXJnZXN0UG9zc2libGVSYWRpdXMiLCJyYWRpdXNSZWR1Y3Rpb25MZWZ0IiwicmFkaXVzUmVkdWN0aW9uUmlnaHQiLCJyYWRpdXNSZWR1Y3Rpb25Ub3AiLCJyYWRpdXNSZWR1Y3Rpb25Cb3R0b20iLCJsZWZ0TW92ZW1lbnQiLCJyaWdodE1vdmVtZW50IiwidG9wTW92ZW1lbnQiLCJib3R0b21Nb3ZlbWVudCIsIm1heFJpZ2h0IiwibWF4TGVmdCIsIm1heFRvcCIsIm1heEJvdHRvbSIsImFuZ2xlTXVsdGlwbGllciIsInN0YXJ0QW5nbGVSYWRpYW5zIiwic2NhbGluZ0ZhY3RvciIsImRpc3RhbmNlRnJvbUNlbnRlciIsInRoaXNBbmdsZSIsImdldEJhc2VQb3NpdGlvbiIsInlDZW50ZXJPZmZzZXQiLCJfZGVmYXVsdHMkMyIsInZhbHVlT3JEZWZhdWx0JGMiLCJNSU5fSU5URUdFUiIsIk1JTl9TQUZFX0lOVEVHRVIiLCJNQVhfSU5URUdFUiIsIk1BWF9TQUZFX0lOVEVHRVIiLCJJTlRFUlZBTFMiLCJtaWxsaXNlY29uZCIsImNvbW1vbiIsInN0ZXBzIiwic2Vjb25kIiwibWludXRlIiwiaG91ciIsImRheSIsIndlZWsiLCJtb250aCIsInF1YXJ0ZXIiLCJ5ZWFyIiwiVU5JVFMiLCJzb3J0ZXIiLCJhcnJheVVuaXF1ZSIsImhhc2giLCJvdXQiLCJidWlsZExvb2t1cFRhYmxlIiwidGltZXN0YW1wcyIsImRpc3RyaWJ1dGlvbiIsInRpbWUiLCJ0YWJsZSIsImxvb2t1cCIsImxvIiwibWlkIiwiaTAiLCJpMSIsImludGVycG9sYXRlJDEiLCJza2V5IiwidGtleSIsInNwYW4iLCJ0b1RpbWVzdGFtcCIsImlucHV0IiwiYWRhcHRlciIsIl9hZGFwdGVyIiwicGFyc2VyIiwiZGV0ZXJtaW5lU3RlcFNpemUiLCJjYXBhY2l0eSIsImludGVydmFsIiwibWlsbGlzZWNvbmRzIiwiZGV0ZXJtaW5lVW5pdEZvckF1dG9UaWNrcyIsIm1pblVuaXQiLCJkZXRlcm1pbmVVbml0Rm9yRm9ybWF0dGluZyIsImRldGVybWluZU1ham9yVW5pdCIsImdlbmVyYXRlIiwidGltZU9wdHMiLCJ1bml0U3RlcFNpemUiLCJ3ZWVrZGF5IiwiaXNvV2Vla2RheSIsIm1ham9yVGlja3NFbmFibGVkIiwiZmlyc3QiLCJjb21wdXRlT2Zmc2V0cyIsInRpY2tzRnJvbVRpbWVzdGFtcHMiLCJtYWpvclVuaXQiLCJkZWZhdWx0Q29uZmlnJDQiLCJhZGFwdGVycyIsImRpc3BsYXlGb3JtYXQiLCJkaXNwbGF5Rm9ybWF0cyIsInNjYWxlX3RpbWUiLCJkYXRlIiwid2FybiIsInRpbWVzdGFtcCIsImRhdGFMYWJlbHMiLCJfaG9yaXpvbnRhbCIsIl90YWJsZSIsIl90aW1lc3RhbXBzIiwiZ2V0TGFiZWxDYXBhY2l0eSIsIl91bml0IiwiX21ham9yVW5pdCIsIl9vZmZzZXRzIiwidG9vbHRpcEZvcm1hdCIsImRhdGV0aW1lIiwidGlja0Zvcm1hdEZ1bmN0aW9uIiwibWlub3JGb3JtYXQiLCJtYWpvckZvcm1hdCIsIm1ham9yVGltZSIsIm1ham9yVGlja09wdHMiLCJmb3JtYXR0ZXIiLCJnZXRQaXhlbEZvck9mZnNldCIsImlzUmV2ZXJzZSIsImdldExhYmVsV2lkdGgiLCJ0aWNrc09wdHMiLCJ0aWNrTGFiZWxXaWR0aCIsInRpY2tGb250U2l6ZSIsImV4YW1wbGVUaW1lIiwiZXhhbXBsZUxhYmVsIiwiX2RlZmF1bHRzJDQiLCJjYXRlZ29yeSIsInJhZGlhbExpbmVhciIsIkZPUk1BVFMiLCJfaWQiLCJ2YWx1ZU9mIiwiYW1vdW50IiwiYXMiLCJmaWxsZXIiLCJwcm9wYWdhdGUiLCJtYXBwZXJzIiwidmlzaWJsZSIsImJvdW5kYXJ5IiwiZGVjb2RlRmlsbCIsImNvbXB1dGVCb3VuZGFyeSIsInNjYWxlQm90dG9tIiwic2NhbGVUb3AiLCJzY2FsZVplcm8iLCJyZXNvbHZlVGFyZ2V0IiwidmlzaXRlZCIsImNyZWF0ZU1hcHBlciIsImlzRHJhd2FibGUiLCJkcmF3QXJlYSIsImN1cnZlMCIsImN1cnZlMSIsImxlbjAiLCJsZW4xIiwiZG9GaWxsIiwibWFwcGVyIiwicDAiLCJwMSIsImQwIiwiZDEiLCJwbHVnaW5fZmlsbGVyIiwiYWZ0ZXJEYXRhc2V0c1VwZGF0ZSIsIiRmaWxsZXIiLCJiZWZvcmVEYXRhc2V0RHJhdyIsIm5vb3AkMSIsInZhbHVlT3JEZWZhdWx0JGQiLCJjaSIsIm9uTGVhdmUiLCJib3hXaWR0aCIsImxpbmVEYXNoIiwiZ2V0Qm94V2lkdGgiLCJsYWJlbE9wdHMiLCJ1c2VQb2ludFN0eWxlIiwiTGVnZW5kIiwibGVnZW5kSGl0Qm94ZXMiLCJfaG92ZXJlZEl0ZW0iLCJkb3VnaG51dE1vZGUiLCJiZWZvcmVCdWlsZExhYmVscyIsImJ1aWxkTGFiZWxzIiwiYWZ0ZXJCdWlsZExhYmVscyIsImxlZ2VuZEl0ZW1zIiwibGFiZWxGb250IiwiaGl0Ym94ZXMiLCJsaW5lV2lkdGhzIiwidG90YWxIZWlnaHQiLCJ2UGFkZGluZyIsImNvbHVtbldpZHRocyIsInRvdGFsV2lkdGgiLCJjdXJyZW50Q29sV2lkdGgiLCJjdXJyZW50Q29sSGVpZ2h0IiwiaXRlbUhlaWdodCIsIml0ZW1XaWR0aCIsImxpbmVEZWZhdWx0IiwibGVnZW5kV2lkdGgiLCJjdXJzb3IiLCJkcmF3TGVnZW5kQm94IiwiU1FSVDIiLCJoYWxmRm9udFNpemUiLCJ4TGVmdCIsInlNaWRkbGUiLCJfZ2V0TGVnZW5kSXRlbUF0IiwiaGl0Qm94IiwibGgiLCJob3ZlcmVkSXRlbSIsImNyZWF0ZU5ld0xlZ2VuZEFuZEF0dGFjaCIsImxlZ2VuZE9wdHMiLCJwbHVnaW5fbGVnZW5kIiwiX2VsZW1lbnQiLCJiZWZvcmVJbml0IiwiYWZ0ZXJFdmVudCIsIm5vb3AkMiIsIlRpdGxlIiwibGluZUNvdW50IiwiZm9udE9wdHMiLCJ0aXRsZVgiLCJ0aXRsZVkiLCJjcmVhdGVOZXdUaXRsZUJsb2NrQW5kQXR0YWNoIiwidGl0bGVPcHRzIiwidGl0bGVCbG9jayIsInBsdWdpbl90aXRsZSIsIl9hZGFwdGVycyIsIkFuaW1hdGlvbiIsImFuaW1hdGlvblNlcnZpY2UiLCJJbnRlcmFjdGlvbiIsImxheW91dHMiLCJTY2FsZSIsInNjYWxlU2VydmljZSIsIlRpY2tzIiwiVG9vbHRpcCIsInNyYyIsInBsdWdpblNlcnZpY2UiLCJQbHVnaW5CYXNlIiwiY2FudmFzSGVscGVycyIsImxheW91dFNlcnZpY2UiLCJMaW5lYXJTY2FsZUJhc2UiLCJrbGFzcyIsImNmZyIsInRvTG93ZXJDYXNlIiwiaXNDYWxsYWJsZSIsInRyeVRvU3RyaW5nIiwiYXJndW1lbnQiLCJUeXBlRXJyb3IiLCJ3ZWxsS25vd25TeW1ib2wiLCJjcmVhdGUiLCJkZWZpbmVQcm9wZXJ0eU1vZHVsZSIsIlVOU0NPUEFCTEVTIiwiQXJyYXlQcm90b3R5cGUiLCJ0b0luZGV4ZWRPYmplY3QiLCJ0b0Fic29sdXRlSW5kZXgiLCJsZW5ndGhPZkFycmF5TGlrZSIsImNyZWF0ZU1ldGhvZCIsIklTX0lOQ0xVREVTIiwiJHRoaXMiLCJPIiwiaW5jbHVkZXMiLCJJbmRleGVkT2JqZWN0IiwidG9PYmplY3QiLCJhcnJheVNwZWNpZXNDcmVhdGUiLCJUWVBFIiwiSVNfTUFQIiwiSVNfRklMVEVSIiwiSVNfU09NRSIsIklTX0VWRVJZIiwiSVNfRklORF9JTkRFWCIsIklTX0ZJTFRFUl9SRUpFQ1QiLCJOT19IT0xFUyIsImNhbGxiYWNrZm4iLCJ0aGF0Iiwic3BlY2lmaWNDcmVhdGUiLCJzZWxmIiwiYm91bmRGdW5jdGlvbiIsInNvbWUiLCJldmVyeSIsImZpbmQiLCJmaWx0ZXJSZWplY3QiLCJpc0NvbnN0cnVjdG9yIiwiU1BFQ0lFUyIsIm9yaWdpbmFsQXJyYXkiLCJDIiwiYXJyYXlTcGVjaWVzQ29uc3RydWN0b3IiLCJpdCIsIlRPX1NUUklOR19UQUdfU1VQUE9SVCIsImNsYXNzb2ZSYXciLCJUT19TVFJJTkdfVEFHIiwiQ09SUkVDVF9BUkdVTUVOVFMiLCJ0cnlHZXQiLCJ0YWciLCJjYWxsZWUiLCJoYXNPd24iLCJvd25LZXlzIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiREVTQ1JJUFRPUlMiLCJjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IiLCJiaXRtYXAiLCJ3cml0YWJsZSIsImZhaWxzIiwiRVhJU1RTIiwiZ2V0QnVpbHRJbiIsInVzZXJBZ2VudCIsInByb2Nlc3MiLCJEZW5vIiwidmVyc2lvbnMiLCJ2ZXJzaW9uIiwidjgiLCJjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkiLCJyZWRlZmluZSIsInNldEdsb2JhbCIsImNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMiLCJpc0ZvcmNlZCIsIlRBUkdFVCIsIkdMT0JBTCIsIlNUQVRJQyIsInN0YXQiLCJGT1JDRUQiLCJ0YXJnZXRQcm9wZXJ0eSIsInNvdXJjZVByb3BlcnR5Iiwibm9UYXJnZXRHZXQiLCJmb3JjZWQiLCJzaGFtIiwiYUNhbGxhYmxlIiwiRnVuY3Rpb25Qcm90b3R5cGUiLCJGdW5jdGlvbiIsImdldERlc2NyaXB0b3IiLCJQUk9QRVIiLCJzb21ldGhpbmciLCJDT05GSUdVUkFCTEUiLCJhRnVuY3Rpb24iLCJuYW1lc3BhY2UiLCJWIiwiUCIsImNoZWNrIiwiZ2xvYmFsVGhpcyIsImNsYXNzb2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInN0b3JlIiwiZnVuY3Rpb25Ub1N0cmluZyIsImluc3BlY3RTb3VyY2UiLCJOQVRJVkVfV0VBS19NQVAiLCJzaGFyZWQiLCJzaGFyZWRLZXkiLCJoaWRkZW5LZXlzIiwiT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQiLCJXZWFrTWFwIiwiaGFzIiwiZW5mb3JjZSIsImdldHRlckZvciIsInN0YXRlIiwid21nZXQiLCJ3bWhhcyIsIndtc2V0IiwibWV0YWRhdGEiLCJmYWNhZGUiLCJTVEFURSIsImVtcHR5IiwiY29uc3RydWN0b3JSZWdFeHAiLCJJTkNPUlJFQ1RfVE9fU1RSSU5HIiwiaXNDb25zdHJ1Y3Rvck1vZGVybiIsImlzQ29uc3RydWN0b3JMZWdhY3kiLCJjYWxsZWQiLCJyZXBsYWNlbWVudCIsImZlYXR1cmUiLCJkZXRlY3Rpb24iLCJub3JtYWxpemUiLCJQT0xZRklMTCIsIk5BVElWRSIsInJlcGxhY2UiLCJVU0VfU1lNQk9MX0FTX1VJRCIsIiRTeW1ib2wiLCJ0b0xlbmd0aCIsIlY4X1ZFUlNJT04iLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJzeW1ib2wiLCJ0ZXN0Iiwib2JqZWN0S2V5cyIsImdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSIsInByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlIiwiJGFzc2lnbiIsImFzc2lnbiIsIkEiLCJCIiwiYWxwaGFiZXQiLCJjaHIiLCJUIiwiYXJndW1lbnRzTGVuZ3RoIiwiUyIsImFuT2JqZWN0IiwiZGVmaW5lUHJvcGVydGllcyIsImVudW1CdWdLZXlzIiwiaHRtbCIsImRvY3VtZW50Q3JlYXRlRWxlbWVudCIsIkdUIiwiTFQiLCJQUk9UT1RZUEUiLCJTQ1JJUFQiLCJJRV9QUk9UTyIsIkVtcHR5Q29uc3RydWN0b3IiLCJzY3JpcHRUYWciLCJjb250ZW50IiwiTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCIsImFjdGl2ZVhEb2N1bWVudCIsIndyaXRlIiwiY2xvc2UiLCJ0ZW1wIiwicGFyZW50V2luZG93IiwiTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lIiwiaWZyYW1lIiwiSlMiLCJpZnJhbWVEb2N1bWVudCIsImNvbnRlbnRXaW5kb3ciLCJvcGVuIiwiRiIsIk51bGxQcm90b09iamVjdCIsIkFjdGl2ZVhPYmplY3QiLCJkb21haW4iLCJQcm9wZXJ0aWVzIiwiSUU4X0RPTV9ERUZJTkUiLCJ0b1Byb3BlcnR5S2V5IiwiJGRlZmluZVByb3BlcnR5IiwiQXR0cmlidXRlcyIsIiRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJpbnRlcm5hbE9iamVjdEtleXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwibmFtZXMiLCIkcHJvcGVydHlJc0VudW1lcmFibGUiLCJOQVNIT1JOX0JVRyIsIlRPX0VOVFJJRVMiLCJlbnRyaWVzIiwicHJlZiIsImdldE93blByb3BlcnR5TmFtZXNNb2R1bGUiLCJJbnRlcm5hbFN0YXRlTW9kdWxlIiwiQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUiLCJnZXRJbnRlcm5hbFN0YXRlIiwiZW5mb3JjZUludGVybmFsU3RhdGUiLCJURU1QTEFURSIsInVuc2FmZSIsInNpbXBsZSIsIlNIQVJFRCIsIklTX1BVUkUiLCJjb3B5cmlnaHQiLCJ0b0ludGVnZXJPckluZmluaXR5IiwiaW50ZWdlciIsInJlcXVpcmVPYmplY3RDb2VyY2libGUiLCJudW1iZXIiLCJpc1N5bWJvbCIsImdldE1ldGhvZCIsIm9yZGluYXJ5VG9QcmltaXRpdmUiLCJUT19QUklNSVRJVkUiLCJleG90aWNUb1ByaW0iLCJ0b1ByaW1pdGl2ZSIsInBvc3RmaXgiLCJyYW5kb20iLCJOQVRJVkVfU1lNQk9MIiwiV2VsbEtub3duU3ltYm9sc1N0b3JlIiwiY3JlYXRlV2VsbEtub3duU3ltYm9sIiwid2l0aG91dFNldHRlciIsIiQiLCIkZmluZCIsImFkZFRvVW5zY29wYWJsZXMiLCJGSU5EIiwiU0tJUFNfSE9MRVMiLCJwcm90byIsIiRlbnRyaWVzIiwiY3NzV2l0aE1hcHBpbmdUb1N0cmluZyIsImxpc3QiLCJuZWVkTGF5ZXIiLCJtb2R1bGVzIiwibWVkaWEiLCJkZWR1cGUiLCJsYXllciIsImFscmVhZHlJbXBvcnRlZE1vZHVsZXMiLCJfaSIsIl9pMiIsImNzc01hcHBpbmciLCJidG9hIiwiYmFzZTY0IiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJzb3VyY2VNYXBwaW5nIiwic291cmNlVVJMcyIsInNvdXJjZVJvb3QiLCJEb203IiwiYXJyIiwic2VsZWN0b3IiLCJlbHMiLCJ0ZW1wUGFyZW50IiwidHJpbSIsInRvQ3JlYXRlIiwiaW5uZXJIVE1MIiwiY2hpbGROb2RlcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJub2RlVHlwZSIsIkNsYXNzIiwidW5pcXVlIiwidW5pcXVlQXJyYXkiLCJ0b0NhbWVsQ2FzZSIsImdyb3VwMSIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwid2Via2l0Q2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJjbGVhclRpbWVvdXQiLCJhZGRDbGFzcyIsImNsYXNzZXMiLCJyZW1vdmVDbGFzcyIsImhhc0NsYXNzIiwiY29udGFpbnMiLCJ0b2dnbGVDbGFzcyIsInRvZ2dsZSIsImF0dHIiLCJhdHRycyIsImF0dHJOYW1lIiwicmVtb3ZlQXR0ciIsInByb3BOYW1lIiwiZG9tN0VsZW1lbnREYXRhU3RvcmFnZSIsImRhdGFLZXkiLCJyZW1vdmVEYXRhIiwiYXR0cmlidXRlcyIsImRvbSIsIm11bHRpcGxlIiwibm9kZU5hbWUiLCJzZWxlY3RlZE9wdGlvbnMiLCJzZWxlY3RlZCIsInRyYW5zZm9ybSIsImVsU3R5bGUiLCJ3ZWJraXRUcmFuc2Zvcm0iLCJ3ZWJraXRUcmFuc2l0aW9uRHVyYXRpb24iLCJ0cmFuc2l0aW9uRHVyYXRpb24iLCJvbiIsImV2ZW50VHlwZSIsInRhcmdldFNlbGVjdG9yIiwiY2FwdHVyZSIsImhhbmRsZUxpdmVFdmVudCIsImV2ZW50RGF0YSIsImRvbTdFdmVudERhdGEiLCJ1bnNoaWZ0IiwiaXMiLCJwYXJlbnRzIiwiZG9tN0xpc3RlbmVycyIsInByb3h5TGlzdGVuZXIiLCJkb203TGl2ZUxpc3RlbmVycyIsIm9mZiIsImhhbmRsZXJzIiwiZG9tN3Byb3h5Iiwib25jZSIsImV2ZW50TmFtZSIsIm9uY2VIYW5kbGVyIiwiZXZlbnRBcmdzIiwidHJpZ2dlciIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiYnViYmxlcyIsImNhbmNlbGFibGUiLCJpbml0RXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwidHJhbnNpdGlvbkVuZCIsImZpcmVDYWxsQmFjayIsImFuaW1hdGlvbkVuZCIsIm91dGVyV2lkdGgiLCJpbmNsdWRlTWFyZ2lucyIsInN0eWxlcyIsIm9mZnNldFdpZHRoIiwib3V0ZXJIZWlnaHQiLCJvZmZzZXRIZWlnaHQiLCJjbGllbnRUb3AiLCJjbGllbnRMZWZ0Iiwic2Nyb2xsWSIsInNjcm9sbFgiLCJoaWRlIiwic2hvdyIsInRvQXJyYXkiLCJtYXRjaGVkSXRlbXMiLCJtb2RpZmllZEl0ZW1zIiwidGV4dENvbnRlbnQiLCJjb21wYXJlV2l0aCIsIndlYmtpdE1hdGNoZXNTZWxlY3RvciIsIm1zTWF0Y2hlc1NlbGVjdG9yIiwiY2hpbGQiLCJwcmV2aW91c1NpYmxpbmciLCJlcSIsInJldHVybkluZGV4IiwiYXBwZW5kIiwibmV3Q2hpbGQiLCJ0ZW1wRGl2IiwiYXBwZW5kVG8iLCJwcmVwZW5kIiwicHJlcGVuZFRvIiwiY2xvbmVOb2RlIiwiaW5zZXJ0QWZ0ZXIiLCJuZXh0U2libGluZyIsIm5leHRFbGVtZW50U2libGluZyIsIm5leHRBbGwiLCJuZXh0RWxzIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsInByZXZBbGwiLCJwcmV2RWxzIiwic2libGluZ3MiLCJjbG9zZXN0IiwiZm91bmRFbGVtZW50cyIsImZvdW5kIiwiY2hpbGRyZW4iLCJkZXRhY2giLCJ0b0FkZCIsInNjcm9sbFRvIiwiY3VycmVudFRvcCIsImN1cnJlbnRMZWZ0IiwibmV3VG9wIiwibmV3TGVmdCIsImFuaW1hdGVUb3AiLCJhbmltYXRlTGVmdCIsInNjcm9sbEhlaWdodCIsInNjcm9sbFdpZHRoIiwiZ2V0VGltZSIsInByb2dyZXNzIiwiZWFzZVByb2dyZXNzIiwiZG9uZSIsImluaXRpYWxQcm9wcyIsImluaXRpYWxQYXJhbXMiLCJxdWUiLCJlYXNpbmdQcm9ncmVzcyIsImZyYW1lSWQiLCJkb203QW5pbWF0ZUluc3RhbmNlIiwiY29tcGxldGUiLCJpbml0aWFsRnVsbFZhbHVlIiwiaW5pdGlhbFZhbHVlIiwiZmluYWxWYWx1ZSIsImZpbmFsRnVsbFZhbHVlIiwiY3VycmVudFZhbHVlIiwiZWxlbWVudHNEb25lIiwicHJvcHNEb25lIiwiYmVnYW4iLCJiZWdpbiIsImFuaW1hdGVJbnN0YW5jZSIsIm5vVHJpZ2dlciIsImV2ZW50U2hvcnRjdXQiLCJjbGljayIsImJsdXIiLCJmb2N1cyIsImZvY3VzaW4iLCJmb2N1c291dCIsImtleXVwIiwia2V5ZG93biIsImtleXByZXNzIiwic3VibWl0IiwiY2hhbmdlIiwibW91c2Vkb3duIiwibW91c2Vtb3ZlIiwibW91c2V1cCIsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwibW91c2VvdXQiLCJtb3VzZW92ZXIiLCJzY3JvbGwiLCJwYXJlbnRFbGVtZW50IiwiZGVmYXVsdENvbmYiLCJlbGxpcHNpcyIsImRlYm91bmNlIiwicG9ydHJhaXQiLCJicmVha193b3JkIiwiX2lkQ291bnRlciIsIlJBRl9TVVBQT1JURUQiLCJuZXdJZCIsInNldElkQXR0cmlidXRlIiwiZ2V0SWRBdHRyaWJ1dGUiLCJzdG9yZUNhY2hlIiwicmV0cmlldmVDYWNoZSIsImdldENhY2hlZEVsZW1lbnRzIiwib2JqMSIsIm9iajIiLCJvYmozIiwiYXR0cm4iLCJhdHRybm0iLCJFbGxpcHNpcyIsImNvbmYiLCJkZWJvdW5jZVRpbWUiLCJfaXNTY2hlZHVsZWQiLCJjcmVhdGVQcm9wIiwidmlld3BvcnRPZmZzZXQiLCJsaW5laGVpZ2h0IiwibGluZWgiLCJhZGRFbGVtZW50IiwiY2FjaGVkIiwiaXNOb3RDb3JyZWN0IiwiaGFuZGxlQ2hpbGRyZW4iLCJzaW1wbGVUZXh0IiwiYnJlYWtXb3JkIiwic3RyMiIsImZpeCIsIndvcmRzIiwic3QiLCJjaGlsZFRleHQiLCJub2RlVmFsdWUiLCJwcm9jZXNzQnJlYWsiLCJkT25lIiwiZFR3byIsImlubmVyVGV4dCIsImRvbUNoaWxkcmVuIiwiZGlzcGxheU9yaWdpbiIsIkVsbGlwc2lzQ2xhc3MiLCJSIiwiUmVmbGVjdCIsIlJlZmxlY3RBcHBseSIsInJlY2VpdmVyIiwiUmVmbGVjdE93bktleXMiLCJQcm9jZXNzRW1pdFdhcm5pbmciLCJ3YXJuaW5nIiwiTnVtYmVySXNOYU4iLCJFdmVudEVtaXR0ZXIiLCJpbml0IiwiX2V2ZW50cyIsIl9ldmVudHNDb3VudCIsIl9tYXhMaXN0ZW5lcnMiLCJkZWZhdWx0TWF4TGlzdGVuZXJzIiwiY2hlY2tMaXN0ZW5lciIsIlJhbmdlRXJyb3IiLCJnZXRQcm90b3R5cGVPZiIsInNldE1heExpc3RlbmVycyIsIl9nZXRNYXhMaXN0ZW5lcnMiLCJnZXRNYXhMaXN0ZW5lcnMiLCJlbWl0IiwiZG9FcnJvciIsImVyIiwiZXJyIiwibWVzc2FnZSIsImFycmF5Q2xvbmUiLCJfYWRkTGlzdGVuZXIiLCJleGlzdGluZyIsIm5ld0xpc3RlbmVyIiwid2FybmVkIiwiZW1pdHRlciIsInByZXBlbmRMaXN0ZW5lciIsIm9uY2VXcmFwcGVyIiwiZmlyZWQiLCJ3cmFwRm4iLCJfb25jZVdyYXAiLCJ3cmFwcGVkIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsIm9yaWdpbmFsTGlzdGVuZXIiLCJzcGxpY2VPbmUiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJ1bndyYXAiLCJldmxpc3RlbmVyIiwidW53cmFwTGlzdGVuZXJzIiwicmF3TGlzdGVuZXJzIiwibGlzdGVuZXJDb3VudCIsImV2ZW50TmFtZXMiLCJjb3B5IiwicmV0IiwiUHJvbWlzZSIsInJlamVjdCIsImVycm9yTGlzdGVuZXIiLCJyZXNvbHZlciIsImV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lciIsImFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyIiwiZmxhZ3MiLCJ3cmFwTGlzdGVuZXIiLCJJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5IiwiaW50ZXJzZWN0aW9uUmF0aW8iLCJnZXRGcmFtZUVsZW1lbnQiLCJkb2MiLCJmcmFtZUVsZW1lbnQiLCJzdGFydERvYyIsImZyYW1lIiwib3duZXJEb2N1bWVudCIsInJlZ2lzdHJ5IiwiY3Jvc3NPcmlnaW5VcGRhdGVyIiwiY3Jvc3NPcmlnaW5SZWN0IiwiZW50cnkiLCJyb290Qm91bmRzIiwiZW5zdXJlRE9NUmVjdCIsImJvdW5kaW5nQ2xpZW50UmVjdCIsImludGVyc2VjdGlvblJlY3QiLCJnZXRFbXB0eVJlY3QiLCJpc0ludGVyc2VjdGluZyIsInRhcmdldFJlY3QiLCJ0YXJnZXRBcmVhIiwiaW50ZXJzZWN0aW9uQXJlYSIsIkludGVyc2VjdGlvbk9ic2VydmVyIiwib3B0X29wdGlvbnMiLCJyb290IiwiX2NoZWNrRm9ySW50ZXJzZWN0aW9ucyIsInRocm90dGxlIiwiVEhST1RUTEVfVElNRU9VVCIsIl9jYWxsYmFjayIsIl9vYnNlcnZhdGlvblRhcmdldHMiLCJfcXVldWVkRW50cmllcyIsIl9yb290TWFyZ2luVmFsdWVzIiwiX3BhcnNlUm9vdE1hcmdpbiIsInJvb3RNYXJnaW4iLCJ0aHJlc2hvbGRzIiwiX2luaXRUaHJlc2hvbGRzIiwidGhyZXNob2xkIiwibWFyZ2luIiwiX21vbml0b3JpbmdEb2N1bWVudHMiLCJfbW9uaXRvcmluZ1Vuc3Vic2NyaWJlcyIsIlBPTExfSU5URVJWQUwiLCJVU0VfTVVUQVRJT05fT0JTRVJWRVIiLCJfc2V0dXBDcm9zc09yaWdpblVwZGF0ZXIiLCJjb252ZXJ0RnJvbVBhcmVudFJlY3QiLCJvYnNlcnZlciIsIl9yZXNldENyb3NzT3JpZ2luVXBkYXRlciIsIm9ic2VydmUiLCJpc1RhcmdldEFscmVhZHlPYnNlcnZlZCIsIl9yZWdpc3Rlckluc3RhbmNlIiwiX21vbml0b3JJbnRlcnNlY3Rpb25zIiwidW5vYnNlcnZlIiwiX3VubW9uaXRvckludGVyc2VjdGlvbnMiLCJfdW5yZWdpc3Rlckluc3RhbmNlIiwiZGlzY29ubmVjdCIsIl91bm1vbml0b3JBbGxJbnRlcnNlY3Rpb25zIiwidGFrZVJlY29yZHMiLCJyZWNvcmRzIiwib3B0X3RocmVzaG9sZCIsIm9wdF9yb290TWFyZ2luIiwibWFyZ2luU3RyaW5nIiwicGFydHMiLCJ3aW4iLCJtb25pdG9yaW5nSW50ZXJ2YWwiLCJkb21PYnNlcnZlciIsInNldEludGVydmFsIiwiTXV0YXRpb25PYnNlcnZlciIsImNoaWxkTGlzdCIsImNoYXJhY3RlckRhdGEiLCJzdWJ0cmVlIiwiY2xlYXJJbnRlcnZhbCIsInJvb3REb2MiLCJoYXNEZXBlbmRlbnRUYXJnZXRzIiwiaXRlbURvYyIsInVuc3Vic2NyaWJlIiwidW5zdWJzY3JpYmVzIiwicm9vdElzSW5Eb20iLCJfcm9vdElzSW5Eb20iLCJyb290UmVjdCIsIl9nZXRSb290UmVjdCIsInJvb3RDb250YWluc1RhcmdldCIsIl9yb290Q29udGFpbnNUYXJnZXQiLCJvbGRFbnRyeSIsIl9jb21wdXRlVGFyZ2V0QW5kUm9vdEludGVyc2VjdGlvbiIsIm5ld0VudHJ5IiwiX2hhc0Nyb3NzZWRUaHJlc2hvbGQiLCJnZXRQYXJlbnROb2RlIiwiYXRSb290IiwicGFyZW50UmVjdCIsInBhcmVudENvbXB1dGVkU3R5bGUiLCJmcmFtZVJlY3QiLCJmcmFtZUludGVyc2VjdCIsImRvY3VtZW50RWxlbWVudCIsIm92ZXJmbG93IiwiY29tcHV0ZVJlY3RJbnRlcnNlY3Rpb24iLCJpc0RvYyIsIl9leHBhbmRSZWN0QnlSb290TWFyZ2luIiwibmV3UmVjdCIsIm9sZFJhdGlvIiwibmV3UmF0aW8iLCJjb250YWluc0RlZXAiLCJwZXJmb3JtYW5jZSIsInRpbWVvdXQiLCJ0aW1lciIsIm9wdF91c2VDYXB0dXJlIiwiYXR0YWNoRXZlbnQiLCJkZXRhdGNoRXZlbnQiLCJyZWN0MSIsInJlY3QyIiwicGFyZW50Qm91bmRpbmdSZWN0IiwicGFyZW50SW50ZXJzZWN0aW9uUmVjdCIsImFzc2lnbmVkU2xvdCIsImFmIiwiZGVmaW5lTG9jYWxlIiwibW9udGhzIiwibW9udGhzU2hvcnQiLCJ3ZWVrZGF5cyIsIndlZWtkYXlzU2hvcnQiLCJ3ZWVrZGF5c01pbiIsIm1lcmlkaWVtUGFyc2UiLCJpc1BNIiwibWVyaWRpZW0iLCJob3VycyIsIm1pbnV0ZXMiLCJpc0xvd2VyIiwibG9uZ0RhdGVGb3JtYXQiLCJMVFMiLCJMIiwiTEwiLCJMTEwiLCJMTExMIiwiY2FsZW5kYXIiLCJzYW1lRGF5IiwibmV4dERheSIsIm5leHRXZWVrIiwibGFzdERheSIsImxhc3RXZWVrIiwic2FtZUVsc2UiLCJyZWxhdGl2ZVRpbWUiLCJmdXR1cmUiLCJwYXN0Iiwic3MiLCJtbSIsImhoIiwiZGQiLCJNIiwiTU0iLCJ5eSIsImRheU9mTW9udGhPcmRpbmFsUGFyc2UiLCJvcmRpbmFsIiwiZG93IiwiZG95IiwicGx1cmFsRm9ybSIsInBsdXJhbHMiLCJwbHVyYWxpemUiLCJ1Iiwid2l0aG91dFN1ZmZpeCIsImlzRnV0dXJlIiwiYXJEeiIsIndlZWtkYXlzUGFyc2VFeGFjdCIsInBvc3Rmb3JtYXQiLCJhckt3Iiwic3ltYm9sTWFwIiwiYXJMeSIsInByZXBhcnNlIiwiYXJNYSIsIm51bWJlck1hcCIsImFyU2EiLCJhclRuIiwiYXIiLCJzdWZmaXhlcyIsImF6IiwicGx1cmFsIiwid29yZCIsImZvcm1zIiwicmVsYXRpdmVUaW1lV2l0aFBsdXJhbCIsImJlIiwic3RhbmRhbG9uZSIsImlzRm9ybWF0IiwicGVyaW9kIiwiYmciLCJ3dyIsImxhc3REaWdpdCIsImxhc3QyRGlnaXRzIiwiYm0iLCJibkJkIiwibWVyaWRpZW1Ib3VyIiwiYm4iLCJibyIsIm1vbnRoc1Nob3J0UmVnZXgiLCJtb250aHNQYXJzZUV4YWN0IiwicmVsYXRpdmVUaW1lV2l0aE11dGF0aW9uIiwibXV0YXRpb24iLCJzcGVjaWFsTXV0YXRpb25Gb3JZZWFycyIsImxhc3ROdW1iZXIiLCJzb2Z0TXV0YXRpb24iLCJtdXRhdGlvblRhYmxlIiwic3Vic3RyaW5nIiwibW9udGhzUGFyc2UiLCJtb250aHNSZWdleCIsIm1vbnRoc1N0cmljdFJlZ2V4IiwibW9udGhzU2hvcnRTdHJpY3RSZWdleCIsImZ1bGxXZWVrZGF5c1BhcnNlIiwic2hvcnRXZWVrZGF5c1BhcnNlIiwibWluV2Vla2RheXNQYXJzZSIsImJyIiwid2Vla2RheXNQYXJzZSIsImxvbmdNb250aHNQYXJzZSIsInNob3J0TW9udGhzUGFyc2UiLCJvdXRwdXQiLCJ0b2tlbiIsImJzIiwiY2EiLCJsbCIsImxsbCIsImxsbGwiLCJjcyIsImN2IiwiYWZmaXgiLCJjeSIsImRhIiwicHJvY2Vzc1JlbGF0aXZlVGltZSIsImRlQXQiLCJkZUNoIiwiZGUiLCJkdiIsImlzRnVuY3Rpb24iLCJtb250aHNOb21pbmF0aXZlRWwiLCJtb250aHNHZW5pdGl2ZUVsIiwibW9tZW50VG9Gb3JtYXQiLCJfbW9udGhzTm9taW5hdGl2ZUVsIiwiX21vbnRoc0dlbml0aXZlRWwiLCJjYWxlbmRhckVsIiwibW9tIiwiX2NhbGVuZGFyRWwiLCJlbkF1IiwiZW5DYSIsImVuR2IiLCJlbkllIiwiZW5JbCIsImVuSW4iLCJlbk56IiwiZW5TZyIsImVvIiwibW9udGhzU2hvcnREb3QiLCJlc0RvIiwiZXNNeCIsImludmFsaWREYXRlIiwiZXNVcyIsImVzIiwiZXQiLCJldSIsIm51bWJlcnNQYXN0IiwibnVtYmVyc0Z1dHVyZSIsInZlcmJhbE51bWJlciIsImZpIiwiZmlsIiwiZm8iLCJmckNhIiwiZnJDaCIsImZyIiwibW9udGhzU2hvcnRXaXRoRG90cyIsIm1vbnRoc1Nob3J0V2l0aG91dERvdHMiLCJmeSIsImdhIiwiZ2QiLCJnbCIsImdvbURldmEiLCJnb21MYXRuIiwiZ3UiLCJoZSIsIndlZWtFbmRpbmdzIiwiaHUiLCJoeUFtIiwiaXRDaCIsImphIiwiZXJhcyIsInNpbmNlIiwibmFycm93IiwidW50aWwiLCJlcmFZZWFyT3JkaW5hbFJlZ2V4IiwiZXJhWWVhck9yZGluYWxQYXJzZSIsImp2Iiwia2EiLCIkMCIsIiQxIiwiJDIiLCJrayIsImttIiwia24iLCJrbyIsImlzVXBwZXIiLCJrdSIsImt5IiwicHJvY2Vzc0Z1dHVyZVRpbWUiLCJlaWZlbGVyUmVnZWxBcHBsaWVzVG9OdW1iZXIiLCJwcm9jZXNzUGFzdFRpbWUiLCJmaXJzdERpZ2l0IiwibGIiLCJ1bml0cyIsInRyYW5zbGF0ZVNlY29uZHMiLCJ0cmFuc2xhdGVTaW5ndWxhciIsInNwZWNpYWwiLCJsdCIsInJlbGF0aXZlVGltZVdpdGhTaW5ndWxhciIsInJlbGF0aXZlU2Vjb25kcyIsImx2IiwidHJhbnNsYXRvciIsImNvcnJlY3RHcmFtbWF0aWNhbENhc2UiLCJ3b3JkS2V5IiwibGFzdFdlZWtEYXlzIiwibWkiLCJtayIsIm1sIiwibW4iLCJyZWxhdGl2ZVRpbWVNciIsIm1yIiwibXNNeSIsIm1zIiwibXQiLCJteSIsIm5iIiwibmUiLCJubEJlIiwibmwiLCJubiIsIm9jTG5jIiwicGFJbiIsIm1vbnRoc05vbWluYXRpdmUiLCJtb250aHNTdWJqZWN0aXZlIiwicGwiLCJwdEJyIiwic2VwYXJhdG9yIiwicm8iLCJydSIsImRheXMiLCJzZCIsInNlIiwic2kiLCJzayIsInNxIiwic3JDeXJsIiwic3IiLCJzdyIsInRhIiwidGUiLCJ0ZXQiLCJ0ZyIsInRoIiwidGsiLCJ0bFBoIiwibnVtYmVyc05vdW5zIiwidHJhbnNsYXRlRnV0dXJlIiwidHJhbnNsYXRlUGFzdCIsIm51bWJlck5vdW4iLCJudW1iZXJBc05vdW4iLCJodW5kcmVkIiwidGVuIiwib25lIiwidGxoIiwidHIiLCJ0emwiLCJ0em1MYXRuIiwidHptIiwidWdDbiIsImhtIiwid2Vla2RheXNDYXNlUmVwbGFjZSIsIm5vbWluYXRpdmUiLCJhY2N1c2F0aXZlIiwiZ2VuaXRpdmUiLCJub3VuQ2FzZSIsInByb2Nlc3NIb3Vyc0Z1bmN0aW9uIiwidWsiLCJ1ciIsInV6TGF0biIsInV6IiwidmkiLCJ4UHNldWRvIiwieW8iLCJ6aENuIiwiemhIayIsInpoTW8iLCJ6aFR3IiwiaG9va0NhbGxiYWNrIiwiaG9va3MiLCJzZXRIb29rQ2FsbGJhY2siLCJoYXNPd25Qcm9wIiwiaXNPYmplY3RFbXB0eSIsImlzVW5kZWZpbmVkIiwiaXNEYXRlIiwiY3JlYXRlVVRDIiwibG9jYWxlIiwic3RyaWN0IiwiY3JlYXRlTG9jYWxPclVUQyIsInV0YyIsImRlZmF1bHRQYXJzaW5nRmxhZ3MiLCJ1bnVzZWRUb2tlbnMiLCJ1bnVzZWRJbnB1dCIsImNoYXJzTGVmdE92ZXIiLCJudWxsSW5wdXQiLCJpbnZhbGlkRXJhIiwiaW52YWxpZE1vbnRoIiwiaW52YWxpZEZvcm1hdCIsInVzZXJJbnZhbGlkYXRlZCIsImlzbyIsInBhcnNlZERhdGVQYXJ0cyIsImVyYSIsInJmYzI4MjIiLCJ3ZWVrZGF5TWlzbWF0Y2giLCJnZXRQYXJzaW5nRmxhZ3MiLCJfcGYiLCJmdW4iLCJfaXNWYWxpZCIsInBhcnNlZFBhcnRzIiwiaXNOb3dWYWxpZCIsIl9kIiwiaW52YWxpZFdlZWtkYXkiLCJfc3RyaWN0IiwiYmlnSG91ciIsImlzRnJvemVuIiwiY3JlYXRlSW52YWxpZCIsIm1vbWVudFByb3BlcnRpZXMiLCJ1cGRhdGVJblByb2dyZXNzIiwiY29weUNvbmZpZyIsIl9pc0FNb21lbnRPYmplY3QiLCJfZiIsIl9sIiwiX3R6bSIsIl9pc1VUQyIsIl9vZmZzZXQiLCJfbG9jYWxlIiwiTW9tZW50IiwidXBkYXRlT2Zmc2V0IiwiaXNNb21lbnQiLCJtc2ciLCJzdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MiLCJkZXByZWNhdGUiLCJmaXJzdFRpbWUiLCJkZXByZWNhdGlvbkhhbmRsZXIiLCJkZXByZWNhdGlvbnMiLCJkZXByZWNhdGVTaW1wbGUiLCJfY29uZmlnIiwiX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50IiwiUmVnRXhwIiwiX2RheU9mTW9udGhPcmRpbmFsUGFyc2UiLCJfb3JkaW5hbFBhcnNlIiwibWVyZ2VDb25maWdzIiwicGFyZW50Q29uZmlnIiwiY2hpbGRDb25maWciLCJMb2NhbGUiLCJkZWZhdWx0Q2FsZW5kYXIiLCJfY2FsZW5kYXIiLCJ6ZXJvRmlsbCIsInRhcmdldExlbmd0aCIsImZvcmNlU2lnbiIsImFic051bWJlciIsInplcm9zVG9GaWxsIiwiZm9ybWF0dGluZ1Rva2VucyIsImxvY2FsRm9ybWF0dGluZ1Rva2VucyIsImZvcm1hdEZ1bmN0aW9ucyIsImZvcm1hdFRva2VuRnVuY3Rpb25zIiwiYWRkRm9ybWF0VG9rZW4iLCJwYWRkZWQiLCJsb2NhbGVEYXRhIiwicmVtb3ZlRm9ybWF0dGluZ1Rva2VucyIsIm1ha2VGb3JtYXRGdW5jdGlvbiIsImZvcm1hdE1vbWVudCIsImV4cGFuZEZvcm1hdCIsInJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2VucyIsImxhc3RJbmRleCIsImRlZmF1bHRMb25nRGF0ZUZvcm1hdCIsIl9sb25nRGF0ZUZvcm1hdCIsImZvcm1hdFVwcGVyIiwidG9rIiwiZGVmYXVsdEludmFsaWREYXRlIiwiX2ludmFsaWREYXRlIiwiZGVmYXVsdE9yZGluYWwiLCJkZWZhdWx0RGF5T2ZNb250aE9yZGluYWxQYXJzZSIsIl9vcmRpbmFsIiwiZGVmYXVsdFJlbGF0aXZlVGltZSIsIl9yZWxhdGl2ZVRpbWUiLCJwYXN0RnV0dXJlIiwiYWxpYXNlcyIsImFkZFVuaXRBbGlhcyIsInNob3J0aGFuZCIsImxvd2VyQ2FzZSIsIm5vcm1hbGl6ZVVuaXRzIiwibm9ybWFsaXplT2JqZWN0VW5pdHMiLCJpbnB1dE9iamVjdCIsIm5vcm1hbGl6ZWRJbnB1dCIsIm5vcm1hbGl6ZWRQcm9wIiwicHJpb3JpdGllcyIsImFkZFVuaXRQcmlvcml0eSIsInByaW9yaXR5IiwiZ2V0UHJpb3JpdGl6ZWRVbml0cyIsInVuaXRzT2JqIiwiaXNMZWFwWWVhciIsImFic0Zsb29yIiwidG9JbnQiLCJhcmd1bWVudEZvckNvZXJjaW9uIiwiY29lcmNlZE51bWJlciIsIm1ha2VHZXRTZXQiLCJrZWVwVGltZSIsInNldCQxIiwiZGF5c0luTW9udGgiLCJzdHJpbmdHZXQiLCJzdHJpbmdTZXQiLCJwcmlvcml0aXplZCIsIm1hdGNoMSIsIm1hdGNoMiIsIm1hdGNoMyIsIm1hdGNoNCIsIm1hdGNoNiIsIm1hdGNoMXRvMiIsIm1hdGNoM3RvNCIsIm1hdGNoNXRvNiIsIm1hdGNoMXRvMyIsIm1hdGNoMXRvNCIsIm1hdGNoMXRvNiIsIm1hdGNoVW5zaWduZWQiLCJtYXRjaFNpZ25lZCIsIm1hdGNoT2Zmc2V0IiwibWF0Y2hTaG9ydE9mZnNldCIsIm1hdGNoVGltZXN0YW1wIiwibWF0Y2hXb3JkIiwicmVnZXhlcyIsImFkZFJlZ2V4VG9rZW4iLCJyZWdleCIsInN0cmljdFJlZ2V4IiwiaXNTdHJpY3QiLCJnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4iLCJ1bmVzY2FwZUZvcm1hdCIsInJlZ2V4RXNjYXBlIiwibWF0Y2hlZCIsInAyIiwicDMiLCJwNCIsInRva2VucyIsImFkZFBhcnNlVG9rZW4iLCJhZGRXZWVrUGFyc2VUb2tlbiIsIl93IiwiYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4iLCJfYSIsIllFQVIiLCJNT05USCIsIkRBVEUiLCJIT1VSIiwiTUlOVVRFIiwiU0VDT05EIiwiTUlMTElTRUNPTkQiLCJXRUVLIiwiV0VFS0RBWSIsIm1vZCIsIm8iLCJtb2RNb250aCIsImRlZmF1bHRMb2NhbGVNb250aHMiLCJkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQiLCJNT05USFNfSU5fRk9STUFUIiwiZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXgiLCJkZWZhdWx0TW9udGhzUmVnZXgiLCJsb2NhbGVNb250aHMiLCJfbW9udGhzIiwibG9jYWxlTW9udGhzU2hvcnQiLCJfbW9udGhzU2hvcnQiLCJoYW5kbGVTdHJpY3RQYXJzZSIsIm1vbnRoTmFtZSIsImlpIiwibGxjIiwidG9Mb2NhbGVMb3dlckNhc2UiLCJfbW9udGhzUGFyc2UiLCJfbG9uZ01vbnRoc1BhcnNlIiwiX3Nob3J0TW9udGhzUGFyc2UiLCJsb2NhbGVNb250aHNQYXJzZSIsIl9tb250aHNQYXJzZUV4YWN0Iiwic2V0TW9udGgiLCJkYXlPZk1vbnRoIiwiZ2V0U2V0TW9udGgiLCJnZXREYXlzSW5Nb250aCIsImNvbXB1dGVNb250aHNQYXJzZSIsIl9tb250aHNTaG9ydFN0cmljdFJlZ2V4IiwiX21vbnRoc1Nob3J0UmVnZXgiLCJfbW9udGhzU3RyaWN0UmVnZXgiLCJfbW9udGhzUmVnZXgiLCJjbXBMZW5SZXYiLCJzaG9ydFBpZWNlcyIsImxvbmdQaWVjZXMiLCJtaXhlZFBpZWNlcyIsInBhcnNlVHdvRGlnaXRZZWFyIiwiZGF5c0luWWVhciIsImdldFNldFllYXIiLCJnZXRJc0xlYXBZZWFyIiwiY3JlYXRlRGF0ZSIsImdldEZ1bGxZZWFyIiwic2V0RnVsbFllYXIiLCJjcmVhdGVVVENEYXRlIiwiVVRDIiwiZ2V0VVRDRnVsbFllYXIiLCJzZXRVVENGdWxsWWVhciIsImZpcnN0V2Vla09mZnNldCIsImZ3ZCIsImZ3ZGx3IiwiZ2V0VVRDRGF5IiwiZGF5T2ZZZWFyRnJvbVdlZWtzIiwibG9jYWxXZWVrZGF5Iiwid2Vla09mZnNldCIsImRheU9mWWVhciIsInJlc1llYXIiLCJyZXNEYXlPZlllYXIiLCJ3ZWVrT2ZZZWFyIiwicmVzV2VlayIsIndlZWtzSW5ZZWFyIiwid2Vla09mZnNldE5leHQiLCJsb2NhbGVXZWVrIiwiX3dlZWsiLCJkZWZhdWx0TG9jYWxlV2VlayIsImxvY2FsZUZpcnN0RGF5T2ZXZWVrIiwibG9jYWxlRmlyc3REYXlPZlllYXIiLCJnZXRTZXRXZWVrIiwiZ2V0U2V0SVNPV2VlayIsIndlZWtkYXlzTWluUmVnZXgiLCJ3ZWVrZGF5c1Nob3J0UmVnZXgiLCJ3ZWVrZGF5c1JlZ2V4IiwicGFyc2VXZWVrZGF5IiwicGFyc2VJc29XZWVrZGF5Iiwic2hpZnRXZWVrZGF5cyIsIndzIiwiZGVmYXVsdExvY2FsZVdlZWtkYXlzIiwiZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQiLCJkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4iLCJkZWZhdWx0V2Vla2RheXNSZWdleCIsImRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXgiLCJkZWZhdWx0V2Vla2RheXNNaW5SZWdleCIsImxvY2FsZVdlZWtkYXlzIiwiX3dlZWtkYXlzIiwibG9jYWxlV2Vla2RheXNTaG9ydCIsIl93ZWVrZGF5c1Nob3J0IiwibG9jYWxlV2Vla2RheXNNaW4iLCJfd2Vla2RheXNNaW4iLCJoYW5kbGVTdHJpY3RQYXJzZSQxIiwid2Vla2RheU5hbWUiLCJfd2Vla2RheXNQYXJzZSIsIl9zaG9ydFdlZWtkYXlzUGFyc2UiLCJfbWluV2Vla2RheXNQYXJzZSIsImxvY2FsZVdlZWtkYXlzUGFyc2UiLCJfd2Vla2RheXNQYXJzZUV4YWN0IiwiX2Z1bGxXZWVrZGF5c1BhcnNlIiwiZ2V0U2V0RGF5T2ZXZWVrIiwiZ2V0RGF5IiwiZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrIiwiZ2V0U2V0SVNPRGF5T2ZXZWVrIiwiY29tcHV0ZVdlZWtkYXlzUGFyc2UiLCJfd2Vla2RheXNTdHJpY3RSZWdleCIsIl93ZWVrZGF5c1JlZ2V4IiwiX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCIsIl93ZWVrZGF5c1Nob3J0UmVnZXgiLCJfd2Vla2RheXNNaW5TdHJpY3RSZWdleCIsIl93ZWVrZGF5c01pblJlZ2V4IiwibWluUGllY2VzIiwibWlucCIsInNob3J0cCIsImxvbmdwIiwiaEZvcm1hdCIsImtGb3JtYXQiLCJzZWNvbmRzIiwibG93ZXJjYXNlIiwibWF0Y2hNZXJpZGllbSIsIl9tZXJpZGllbVBhcnNlIiwia0lucHV0IiwiX2lzUG0iLCJfbWVyaWRpZW0iLCJwb3MxIiwicG9zMiIsImxvY2FsZUlzUE0iLCJkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZSIsImdldFNldEhvdXIiLCJsb2NhbGVNZXJpZGllbSIsImJhc2VDb25maWciLCJsb2NhbGVzIiwibG9jYWxlRmFtaWxpZXMiLCJnbG9iYWxMb2NhbGUiLCJjb21tb25QcmVmaXgiLCJhcnIxIiwiYXJyMiIsIm1pbmwiLCJub3JtYWxpemVMb2NhbGUiLCJjaG9vc2VMb2NhbGUiLCJsb2FkTG9jYWxlIiwib2xkTG9jYWxlIiwiYWxpYXNlZFJlcXVpcmUiLCJfYWJiciIsImdldFNldEdsb2JhbExvY2FsZSIsImdldExvY2FsZSIsInBhcmVudExvY2FsZSIsInVwZGF0ZUxvY2FsZSIsInRtcExvY2FsZSIsImxpc3RMb2NhbGVzIiwiY2hlY2tPdmVyZmxvdyIsIl9vdmVyZmxvd0RheU9mWWVhciIsIl9vdmVyZmxvd1dlZWtzIiwiX292ZXJmbG93V2Vla2RheSIsImV4dGVuZGVkSXNvUmVnZXgiLCJiYXNpY0lzb1JlZ2V4IiwidHpSZWdleCIsImlzb0RhdGVzIiwiaXNvVGltZXMiLCJhc3BOZXRKc29uUmVnZXgiLCJvYnNPZmZzZXRzIiwiVVQiLCJHTVQiLCJFRFQiLCJFU1QiLCJDRFQiLCJDU1QiLCJNRFQiLCJNU1QiLCJQRFQiLCJQU1QiLCJjb25maWdGcm9tSVNPIiwiYWxsb3dUaW1lIiwiZGF0ZUZvcm1hdCIsInRpbWVGb3JtYXQiLCJ0ekZvcm1hdCIsImNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQiLCJleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzIiwieWVhclN0ciIsIm1vbnRoU3RyIiwiZGF5U3RyIiwiaG91clN0ciIsIm1pbnV0ZVN0ciIsInNlY29uZFN0ciIsInVudHJ1bmNhdGVZZWFyIiwicHJlcHJvY2Vzc1JGQzI4MjIiLCJjaGVja1dlZWtkYXkiLCJ3ZWVrZGF5U3RyIiwicGFyc2VkSW5wdXQiLCJ3ZWVrZGF5UHJvdmlkZWQiLCJ3ZWVrZGF5QWN0dWFsIiwiY2FsY3VsYXRlT2Zmc2V0Iiwib2JzT2Zmc2V0IiwibWlsaXRhcnlPZmZzZXQiLCJudW1PZmZzZXQiLCJjb25maWdGcm9tUkZDMjgyMiIsInBhcnNlZEFycmF5Iiwic2V0VVRDTWludXRlcyIsImdldFVUQ01pbnV0ZXMiLCJjb25maWdGcm9tU3RyaW5nIiwiY3JlYXRlRnJvbUlucHV0RmFsbGJhY2siLCJfdXNlVVRDIiwiY3VycmVudERhdGVBcnJheSIsIm5vd1ZhbHVlIiwiZ2V0VVRDTW9udGgiLCJnZXRVVENEYXRlIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwiY29uZmlnRnJvbUFycmF5IiwiY3VycmVudERhdGUiLCJleHBlY3RlZFdlZWtkYXkiLCJ5ZWFyVG9Vc2UiLCJkYXlPZlllYXJGcm9tV2Vla0luZm8iLCJfZGF5T2ZZZWFyIiwiX25leHREYXkiLCJ3ZWVrWWVhciIsIndlZWtkYXlPdmVyZmxvdyIsImN1cldlZWsiLCJHRyIsIlciLCJFIiwiY3JlYXRlTG9jYWwiLCJnZyIsIklTT184NjAxIiwiUkZDXzI4MjIiLCJza2lwcGVkIiwic3RyaW5nTGVuZ3RoIiwidG90YWxQYXJzZWRJbnB1dExlbmd0aCIsIm1lcmlkaWVtRml4V3JhcCIsImVyYXNDb252ZXJ0WWVhciIsImlzUG0iLCJjb25maWdGcm9tU3RyaW5nQW5kQXJyYXkiLCJ0ZW1wQ29uZmlnIiwiYmVzdE1vbWVudCIsInNjb3JlVG9CZWF0IiwiY3VycmVudFNjb3JlIiwidmFsaWRGb3JtYXRGb3VuZCIsImJlc3RGb3JtYXRJc1ZhbGlkIiwic2NvcmUiLCJjb25maWdGcm9tT2JqZWN0IiwiZGF5T3JEYXRlIiwiY3JlYXRlRnJvbUNvbmZpZyIsInByZXBhcmVDb25maWciLCJjb25maWdGcm9tSW5wdXQiLCJpc1VUQyIsInByb3RvdHlwZU1pbiIsIm90aGVyIiwicHJvdG90eXBlTWF4IiwicGlja0J5IiwibW9tZW50cyIsIm9yZGVyaW5nIiwiaXNEdXJhdGlvblZhbGlkIiwidW5pdEhhc0RlY2ltYWwiLCJpc1ZhbGlkJDEiLCJjcmVhdGVJbnZhbGlkJDEiLCJjcmVhdGVEdXJhdGlvbiIsIkR1cmF0aW9uIiwieWVhcnMiLCJxdWFydGVycyIsIndlZWtzIiwiaXNvV2VlayIsIl9taWxsaXNlY29uZHMiLCJfZGF5cyIsIl9idWJibGUiLCJpc0R1cmF0aW9uIiwiYWJzUm91bmQiLCJjb21wYXJlQXJyYXlzIiwiYXJyYXkxIiwiYXJyYXkyIiwiZG9udENvbnZlcnQiLCJsZW5ndGhEaWZmIiwiZGlmZnMiLCJ1dGNPZmZzZXQiLCJvZmZzZXRGcm9tU3RyaW5nIiwiY2h1bmtPZmZzZXQiLCJtYXRjaGVyIiwiY2xvbmVXaXRoT2Zmc2V0Iiwic2V0VGltZSIsImxvY2FsIiwiZ2V0RGF0ZU9mZnNldCIsImdldFRpbWV6b25lT2Zmc2V0IiwiZ2V0U2V0T2Zmc2V0Iiwia2VlcExvY2FsVGltZSIsImtlZXBNaW51dGVzIiwibG9jYWxBZGp1c3QiLCJfY2hhbmdlSW5Qcm9ncmVzcyIsImFkZFN1YnRyYWN0IiwiZ2V0U2V0Wm9uZSIsInNldE9mZnNldFRvVVRDIiwic2V0T2Zmc2V0VG9Mb2NhbCIsInN1YnRyYWN0Iiwic2V0T2Zmc2V0VG9QYXJzZWRPZmZzZXQiLCJ0Wm9uZSIsImhhc0FsaWduZWRIb3VyT2Zmc2V0IiwiaXNEYXlsaWdodFNhdmluZ1RpbWUiLCJpc0RheWxpZ2h0U2F2aW5nVGltZVNoaWZ0ZWQiLCJfaXNEU1RTaGlmdGVkIiwiaXNMb2NhbCIsImlzVXRjT2Zmc2V0IiwiaXNVdGMiLCJhc3BOZXRSZWdleCIsImlzb1JlZ2V4IiwiZGlmZlJlcyIsInBhcnNlSXNvIiwibW9tZW50c0RpZmZlcmVuY2UiLCJpbnZhbGlkIiwiaW5wIiwicG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZSIsImlzQWZ0ZXIiLCJpc0JlZm9yZSIsImNyZWF0ZUFkZGVyIiwiZGlyZWN0aW9uIiwiZHVyIiwiaXNBZGRpbmciLCJpc1N0cmluZyIsImlzTW9tZW50SW5wdXQiLCJpc051bWJlck9yU3RyaW5nQXJyYXkiLCJpc01vbWVudElucHV0T2JqZWN0Iiwib2JqZWN0VGVzdCIsInByb3BlcnR5VGVzdCIsInByb3BlcnRpZXMiLCJhcnJheVRlc3QiLCJkYXRhVHlwZVRlc3QiLCJpc0NhbGVuZGFyU3BlYyIsImdldENhbGVuZGFyRm9ybWF0IiwibXlNb21lbnQiLCJjYWxlbmRhciQxIiwic29kIiwiY2FsZW5kYXJGb3JtYXQiLCJsb2NhbElucHV0IiwiaXNCZXR3ZWVuIiwiaW5jbHVzaXZpdHkiLCJsb2NhbEZyb20iLCJsb2NhbFRvIiwiaXNTYW1lIiwiaW5wdXRNcyIsImlzU2FtZU9yQWZ0ZXIiLCJpc1NhbWVPckJlZm9yZSIsImFzRmxvYXQiLCJ6b25lRGVsdGEiLCJtb250aERpZmYiLCJ3aG9sZU1vbnRoRGlmZiIsImFuY2hvciIsImFuY2hvcjIiLCJhZGp1c3QiLCJkZWZhdWx0Rm9ybWF0IiwiZGVmYXVsdEZvcm1hdFV0YyIsInRvSVNPU3RyaW5nIiwia2VlcE9mZnNldCIsInRvRGF0ZSIsImluc3BlY3QiLCJ6b25lIiwicHJlZml4Iiwic3VmZml4IiwiaW5wdXRTdHJpbmciLCJodW1hbml6ZSIsImZyb21Ob3ciLCJ0b05vdyIsIm5ld0xvY2FsZURhdGEiLCJsYW5nIiwiTVNfUEVSX1NFQ09ORCIsIk1TX1BFUl9NSU5VVEUiLCJNU19QRVJfSE9VUiIsIk1TX1BFUl80MDBfWUVBUlMiLCJtb2QkMSIsImRpdmlkZW5kIiwiZGl2aXNvciIsImxvY2FsU3RhcnRPZkRhdGUiLCJ1dGNTdGFydE9mRGF0ZSIsInN0YXJ0T2ZEYXRlIiwidW5peCIsImlzVmFsaWQkMiIsInBhcnNpbmdGbGFncyIsImludmFsaWRBdCIsImNyZWF0aW9uRGF0YSIsIm1hdGNoRXJhQWJiciIsIm1hdGNoRXJhTmFtZSIsIm1hdGNoRXJhTmFycm93IiwiZXJhc1BhcnNlIiwibWF0Y2hFcmFZZWFyT3JkaW5hbCIsIl9lcmFZZWFyT3JkaW5hbFJlZ2V4IiwibG9jYWxlRXJhcyIsIl9lcmFzIiwibG9jYWxlRXJhc1BhcnNlIiwiZXJhTmFtZSIsImxvY2FsZUVyYXNDb252ZXJ0WWVhciIsImRpciIsImdldEVyYU5hbWUiLCJnZXRFcmFOYXJyb3ciLCJnZXRFcmFBYmJyIiwiZ2V0RXJhWWVhciIsImVyYXNOYW1lUmVnZXgiLCJjb21wdXRlRXJhc1BhcnNlIiwiX2VyYXNOYW1lUmVnZXgiLCJfZXJhc1JlZ2V4IiwiZXJhc0FiYnJSZWdleCIsIl9lcmFzQWJiclJlZ2V4IiwiZXJhc05hcnJvd1JlZ2V4IiwiX2VyYXNOYXJyb3dSZWdleCIsImFiYnJQaWVjZXMiLCJuYW1lUGllY2VzIiwibmFycm93UGllY2VzIiwiaXNvV2Vla1llYXIiLCJhZGRXZWVrWWVhckZvcm1hdFRva2VuIiwiZ2V0dGVyIiwiZ2V0U2V0V2Vla1llYXIiLCJnZXRTZXRXZWVrWWVhckhlbHBlciIsImdldFNldElTT1dlZWtZZWFyIiwiZ2V0SVNPV2Vla3NJblllYXIiLCJnZXRJU09XZWVrc0luSVNPV2Vla1llYXIiLCJnZXRXZWVrc0luWWVhciIsIndlZWtJbmZvIiwiZ2V0V2Vla3NJbldlZWtZZWFyIiwid2Vla3NUYXJnZXQiLCJzZXRXZWVrQWxsIiwiZGF5T2ZZZWFyRGF0YSIsImdldFNldFF1YXJ0ZXIiLCJnZXRTZXREYXlPZk1vbnRoIiwiZ2V0U2V0RGF5T2ZZZWFyIiwiZ2V0U2V0TWludXRlIiwiZ2V0U2V0U2Vjb25kIiwiZ2V0U2V0TWlsbGlzZWNvbmQiLCJwYXJzZU1zIiwiZ2V0Wm9uZUFiYnIiLCJnZXRab25lTmFtZSIsImZvciIsImVyYU5hcnJvdyIsImVyYUFiYnIiLCJlcmFZZWFyIiwiaXNvV2Vla3MiLCJ3ZWVrc0luV2Vla1llYXIiLCJpc29XZWVrc0luWWVhciIsImlzb1dlZWtzSW5JU09XZWVrWWVhciIsInBhcnNlWm9uZSIsImlzRFNUIiwiem9uZUFiYnIiLCJ6b25lTmFtZSIsImRhdGVzIiwiaXNEU1RTaGlmdGVkIiwiY3JlYXRlVW5peCIsImNyZWF0ZUluWm9uZSIsInByZVBhcnNlUG9zdEZvcm1hdCIsInByb3RvJDEiLCJmaXJzdERheU9mWWVhciIsImZpcnN0RGF5T2ZXZWVrIiwiZ2V0JDEiLCJmaWVsZCIsInNldHRlciIsImxpc3RNb250aHNJbXBsIiwibGlzdFdlZWtkYXlzSW1wbCIsImxvY2FsZVNvcnRlZCIsImxpc3RNb250aHMiLCJsaXN0TW9udGhzU2hvcnQiLCJsaXN0V2Vla2RheXMiLCJsaXN0V2Vla2RheXNTaG9ydCIsImxpc3RXZWVrZGF5c01pbiIsImxhbmdEYXRhIiwibWF0aEFicyIsImFkZFN1YnRyYWN0JDEiLCJhZGQkMSIsInN1YnRyYWN0JDEiLCJhYnNDZWlsIiwibW9udGhzRnJvbURheXMiLCJtb250aHNUb0RheXMiLCJkYXlzVG9Nb250aHMiLCJ2YWx1ZU9mJDEiLCJtYWtlQXMiLCJhbGlhcyIsImFzTWlsbGlzZWNvbmRzIiwiYXNTZWNvbmRzIiwiYXNNaW51dGVzIiwiYXNIb3VycyIsImFzRGF5cyIsImFzV2Vla3MiLCJhc01vbnRocyIsImFzUXVhcnRlcnMiLCJhc1llYXJzIiwiY2xvbmUkMSIsImdldCQyIiwibWFrZUdldHRlciIsInN1YnN0aXR1dGVUaW1lQWdvIiwicmVsYXRpdmVUaW1lJDEiLCJwb3NOZWdEdXJhdGlvbiIsImdldFNldFJlbGF0aXZlVGltZVJvdW5kaW5nIiwicm91bmRpbmdGdW5jdGlvbiIsImdldFNldFJlbGF0aXZlVGltZVRocmVzaG9sZCIsImxpbWl0IiwiYXJnV2l0aFN1ZmZpeCIsImFyZ1RocmVzaG9sZHMiLCJ3aXRoU3VmZml4IiwiYWJzJDEiLCJ0b0lTT1N0cmluZyQxIiwidG90YWxTaWduIiwieW1TaWduIiwiZGF5c1NpZ24iLCJobXNTaWduIiwicHJvdG8kMiIsInRvSXNvU3RyaW5nIiwicmVsYXRpdmVUaW1lUm91bmRpbmciLCJyZWxhdGl2ZVRpbWVUaHJlc2hvbGQiLCJIVE1MNV9GTVQiLCJEQVRFVElNRV9MT0NBTCIsIkRBVEVUSU1FX0xPQ0FMX1NFQ09ORFMiLCJEQVRFVElNRV9MT0NBTF9NUyIsIlRJTUUiLCJUSU1FX1NFQ09ORFMiLCJUSU1FX01TIiwic3NyRG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiY3JlYXRlRWxlbWVudE5TIiwiaW1wb3J0Tm9kZSIsImxvY2F0aW9uIiwiaG9zdG5hbWUiLCJocmVmIiwicGF0aG5hbWUiLCJwcm90b2NvbCIsInNlYXJjaCIsInNzcldpbmRvdyIsIm5hdmlnYXRvciIsImhpc3RvcnkiLCJyZXBsYWNlU3RhdGUiLCJwdXNoU3RhdGUiLCJnbyIsImJhY2siLCJJbWFnZSIsInNjcmVlbiIsIm1hdGNoTWVkaWEiLCJEZXZpY2UiLCJTdXBwb3J0IiwiQnJvd3NlciIsIk9ic2VydmVyIiwiVmlydHVhbCIsIkNPTkZJRyIsImFjY29yZGlvbnMiLCJBQ0NPUkRJT05fVEFSR0VUX0NMQVNTIiwiQUNDT1JESU9OX1RSSUdHRVJfQ0xBU1MiLCJBQ0NPUkRJT05fQ09OVEVOVF9DTEFTUyIsIkFDQ09SRElPTl9DT01QTEFURURfQ0xBU1MiLCJBQ0NPUkRJT05fU1RBVEVfREFUQSIsIkFDQ09SRElPTl9TVEFURV9PUEVOIiwiQUNDT1JESU9OX1NUQVRFX0NMT1NFIiwiQUNDT1JESU9OX09OTFlfUENfREFUQSIsIkFDQ09SRElPTl9PTkxZX1NQX0RBVEEiLCJBY2NvcmRpb24iLCJlbGUiLCJkZWZhdWx0T3BlbiIsInRhcmdldEVsZW1lbnQiLCJ0cmlnZ2VyRWxlbWVudCIsImNvbnRlbnRFbGVtZW50IiwiaXNPbmx5UEMiLCJpc09ubHlTUCIsImlzRGlzYWJsZSIsImlzRGlzYWJsZVN0YXRlIiwiQ1VSUkVOVF9ERVZJQ0UiLCJERVZJQ0UiLCJTUCIsIlBDIiwic2xpZGVEb3duIiwic2xpZGVVcCIsIm9uRGV2aWNlQ2hhbmdlIiwidG9nZ2xlU3RhdGUiLCJybSIsInNldE9uQ2hhbmdlRGV2aWNlQ2FsbGJhY2siLCJTd2lwZXIiLCJTV0lQRVJfQ09OVEFJTkVSX0NMQVNTIiwiU1dJUEVSX1dSQVBQRVJfQ0xBU1MiLCJTV0lQRVJfU0xJREVfQ0xBU1MiLCJTV0lQRVJfUEFHRU5BVElPTl9DTEFTUyIsIkNBUk9VU0VMX1BBR0VOQVRJT05fQ0xBU1MiLCJDYXJvdXNlbCIsIlRSSUdHRVJfQ0xBU1MiLCJDT05UQUlORVJfQ0xBU1MiLCJXUkFQUEVSX0NMQVNTIiwiU0xJREVfQ0xBU1MiLCJQUkVWX0NMQVNTIiwiTkVYVF9DTEFTUyIsIlBBR0lOQVRJT05fQ0xBU1MiLCJBQ1RJVkVfQ0xBU1MiLCJCVUxMRVRfQ0xBU1MiLCJCVUxMRVRfQUNUSVZFX0NMQVNTIiwiU0hPV19DT1VOVF9TUF9EQVRBIiwiU0hPV19DT1VOVF9QQ19EQVRBIiwiQ0VOVEVSX0RBVEEiLCJDRU5URVJfU1BfREFUQSIsIkNFTlRFUl9QQ19EQVRBIiwiTk9fTE9PUF9EQVRBIiwiQ0FST1VTRUxfT05MWV9QQ19EQVRBIiwiQ0FST1VTRUxfT05MWV9TUF9EQVRBIiwiRk9MTE9XRURfREFUQSIsIkZPTExPV19UQVJHRVRfSURfREFUQSIsIkJBU0VfT1BUSU9OUyIsIndyYXBwZXJDbGFzcyIsInNsaWRlQ2xhc3MiLCJzbGlkZUFjdGl2ZUNsYXNzIiwic2xpZGVzUGVyVmlldyIsInRvdWNoUmF0aW8iLCJicmVha3BvaW50cyIsIkNBUk9VU0VMUyIsImNhcm91c2VsIiwiY29udGFpbmVyRWxlIiwid3JhcHBlckVsZSIsInNsaWRlRWxlcyIsInNsaWRlRWxlIiwicGFnaW5hdGlvbiIsImNhcm91c2VsVGFyZ2V0cyIsIm1ha2VTd2lwZXIiLCJjZW50ZXJlZFNsaWRlcyIsInNob3dTbGlkZUNvdW50IiwicHJldkVsZSIsIm5leHRFbGUiLCJwYWdpbmF0aW9uRWxlIiwibmF2aWdhdGlvbiIsInByZXZFbCIsIm5leHRFbCIsImNsaWNrYWJsZSIsImJ1bGxldENsYXNzIiwiYnVsbGV0QWN0aXZlQ2xhc3MiLCJzaG9ydFN3aXBlcyIsIndhdGNoU2xpZGVzVmlzaWJpbGl0eSIsInN3aXBlciIsImZvbGxvd1RhcmdldElkIiwiZm9sbG93VGFyZ2V0IiwiY2Fyb3VzZWxFbGVtZW50SWQiLCJjb250cm9sIiwibGVmdExlbmd0aCIsInNsaWRlIiwic2xpZGVUbyIsImNhcm91c2VsRWxlbWVudCIsImJhckNvbG9yIiwiYmFyTWF4Q29sb3IiLCJiZ0NvbG9ycyIsImN0eEEiLCJkYXRhQSIsImxhYmVsQSIsImJvdW5kYXJ5TWluQSIsImJvdW5kYXJ5TWF4QSIsIm1heEEiLCJtYXhQb3NpdGlvbkEiLCJjaGFydEEiLCJjdHhCIiwiZGF0YUIiLCJsYWJlbEIiLCJib3VuZGFyeU1pbkIiLCJib3VuZGFyeU1heEIiLCJtYXhCIiwibWF4UG9zaXRpb25CIiwiY2hhcnRCIiwiY3R4QyIsImRhdGFDIiwibGFiZWxDIiwiYm91bmRhcnlNaW5DIiwiYm91bmRhcnlNYXhDIiwibWF4QyIsIm1heFBvc2l0aW9uQyIsImNoYXJ0QyIsIlRBUkdFVF9DTEFTUyIsIkNPTVBMRVRFX0NMQVNTIiwiQ2hlY2tib3hBbGxTZWxlY3RhYmxlIiwidGFyZ2V0RWwiLCJjaGVja2JveE5hbWUiLCJQQVJFTlRfRUxFIiwiQ0xJQ0tBQkxFX0VMRSIsImdyb3VwQ2hpbGRDaGVja2JveGVzIiwiYWNjdW0iLCJjYiIsImlzU2FtZU5vZGUiLCJvblBhcmVudENsaWNrIiwiZXYiLCJjaGVja2VkIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJvblBhcmVudENoYW5nZSIsImN1cnJlbnRUYXJnZXQiLCJvbkNoaWxkQ2hhbmdlIiwiQlJFQUtfUE9JTlRTIiwiY2hhbmdlX3dhcmVraSIsIm1tZGQiLCJkYXRlcGlja2VyIiwiY2xvc2VUZXh0IiwicHJldlRleHQiLCJuZXh0VGV4dCIsImN1cnJlbnRUZXh0IiwibW9udGhOYW1lcyIsIm1vbnRoTmFtZXNTaG9ydCIsImRheU5hbWVzIiwiZGF5TmFtZXNTaG9ydCIsImRheU5hbWVzTWluIiwid2Vla0hlYWRlciIsImlzUlRMIiwic2hvd01vbnRoQWZ0ZXJZZWFyIiwieWVhclN1ZmZpeCIsImZpcnN0RGF5Iiwic2hvd0J1dHRvblBhbmVsIiwiZWUiLCJGbG9hdEJveE1hbmFnZXIiLCJUT0dHTEVfQ0xBU1MiLCJTVEFURV9EQVRBIiwiU1RBVEVfT1BFTiIsIlNUQVRFX0NMT1NFIiwiQlROX1RYVF9PUEVOIiwiQlROX1RYVF9DTE9TRSIsIkZMT0FUX0JPWEVTIiwib25DbG9zZSIsImZsb2F0Qm94IiwidG9nZ2xlQnRucyIsImJ0biIsIm9uT3BlbiIsInRhcmdldHMiLCJjb250YWluZXJFbCIsIm9yaWdpbkhUTUwiLCJmbG9hdGJveCIsIkNMT1NFX0NMQVNTIiwiRm9sbG93Q2FyZCIsIlRBUkdFVF9FTEUiLCJDTE9TRV9CTlRzIiwiY2xvc2VCdG4iLCJGbGxvd1BhZ2VCb3R0b20iLCJUQVJHRVRfSUQiLCJESVNQTEFZX1RSSUdHRVJfREFUQSIsIkhJRERFTl9UUklHR0VSX0RBVEEiLCJISURERU5fVFJJR0dFUl9JRCIsIkhJRERFTl9UUklHR0VSX0VMRSIsIkRJU1BMQVlfVFJJR0dFUl9JRCIsIkRJU1BMQVlfVFJJR0dFUl9FTEUiLCJvblZpc2libGUiLCJvbkhpZGRlbiIsIk9CU1JWRV9PUFRJT04iLCJ3aGVuSW50ZXJzZWN0IiwidGFyZ2V0RGlzcGxheVkiLCJ0YXJnZXRZIiwiV1JBUFBFUl9DTEFTU19OQU1FIiwiREFUQV9GSVhFRF9GSUVMRF9OQU1FIiwiREFUQV9GUkVFX0ZJRUxEX05BTUUiLCJEQVRBX01PREFMX0lEIiwiRlJFRV9GSUVMRF9DTEFTU19OQU1FIiwiRlJFRV9CVVRUT05fQ0xBU1NfTkFNRSIsIkNIRUNLQk9YX0NMQVNTX05BTUUiLCJERUxFVEVfQlVUVE9OX0NMQVNTX05BTUUiLCJSRUdJU1RFUl9CVVRUT05fQ0xBU1NfTkFNRSIsIlNFQVJDSF9GSUVMRF9DTEFTU19OQU1FIiwiU0VBUkNIX0xBQkVMX0NMQVNTX05BTUUiLCJNT0RBTF9DTE9TRV9CVVRUT05fQ0xBU1NfTkFNRSIsIlRBR1NfQ0xBU1NfTkFNRSIsIlRBR19URU1QTEFURSIsImFkZFRhZ3MiLCIkd3JhcHBlciIsIiRtb2RhbCIsIiR0YWdzIiwiJGNoZWNrZWQiLCJmaXhlZEZpZWxkTmFtZSIsIm5ld1RhZyIsIm15TmFtZSIsIm15VmFsdWUiLCJhZGRGcmVlVGFnIiwiZnJlZUZpZWxkTmFtZSIsIm1vZGFsSWQiLCIkZnJlZUZpZWxkIiwia2V5d29yZHMiLCJwZk1haWxhZGRyZXNzRG9tYWlucyIsIiRzdWdnZXN0IiwiYWRkciIsImFkZHJFbGVtZW50cyIsInJlZ2V4RG9tYWluIiwic3VnZ2VzdGVkTWFpbEFkZHIiLCJNT0RBTF9PUEVOX1RSSUdHRVIiLCJNT0RBTF9WSVJUVUFMX09QRU5fVFJJR0dFUiIsIk1PREFMX0NMT1NFX1RSSUdHRVIiLCJNT0RBTF9TVEFUVVMiLCJTVEFUVVNfT1BFTiIsIlNUQVRVU19DTE9TRSIsIk9QRU5fUkVBRFlfQ0xBU1MiLCJDTE9TRV9SRUFEWV9DTEFTUyIsIk1PREFMX1RBUkdFVF9EQVRBIiwiREFUQV9PTkxZX1BDIiwiREFUQV9PTkxZX1NQIiwiTW9kYWxNYW5hZ2VyIiwib25Nb2RhbENMb3NlQ2FsbGJhY2tzIiwib3Blbk1vZGFscyIsIm1vZGFsIiwib25DaGFuZ2VEZXZpY2VUeXBlIiwiZGV2aWNlIiwiaGFzQXR0cmlidXRlIiwib3BlbkJ0biIsInRhcmdldE1vZGFsSWQiLCJzZXRPbk1vZGFsQ0xvc2VDYWxsYmFjayIsImFkZE1vZGFsIiwidHJpZ2dlckVsIiwiVW5Gb2N1c2FibGVSYWRpbyIsIkNIRUNLRURfREFUQSIsInJhZGlvIiwicmFkaW9zIiwiY29udGVudHNDb3VudCIsImNvbnRlbnRzQ291bnRfbnVtIiwiUmVzaXplTWFuYWdlciIsIlRIUk9UVExFX1RJTUUiLCJyZXNpemVDYWxsYmFja3MiLCJyZXNpemVUaW1lciIsIm9uQ2hhbmdlRGV2aWNlQ2FsbGJhY2tzIiwianVkZ2VEZXZpY2UiLCJzZXRDYWxsYmFjayIsImhlYWRlckgiLCJsYXN0UG9zIiwiZG9jSCIsIndpbkgiLCJidG1Qb3MiLCJTY3JvbGxNYW5hZ2VyIiwidGhyb3R0bGVUaW1lciIsIlNlYXJjaE1lbnVNYW5hZ2VyIiwiUEFHRV9DTEFTUyIsIlNFQVJDSF9NRU5VIiwiQk9EWSIsIkZPT1QiLCJQQUdFX0VMRXMiLCJDVVJSRU5UX1BBR0VfQ0xBU1MiLCJEQVRBX1BBR0VOQU1FIiwiREFUQV9CQVNFX1BBR0UiLCJEQVRBX0xBTkRJTkdfUEFHRSIsIkRBVEFfUkVRVUlSRV9QQUdFIiwiREFUQV9BQ1RJVkVfQ0hFQ0tFRCIsIkRBVEFfQUNUSVZFX1NUQVRVUyIsIkRBVEFfQUNUSU9OX1RZUEUiLCJQQUdFX0FDVElPTl9UWVBFcyIsIlNFQVJDSCIsIklOUFVUIiwiREFUQV9NT1ZFX1RPIiwiREFUQV9CQUNLX1RPIiwiUkVBRFlfUklHSFRfSU5fQ0xBU1MiLCJSRUFEWV9MRUZUX0lOX0NMQVNTIiwiTU9WRV9CVE5fQ0xBU1MiLCJCQUNLX0JUTl9DTEFTUyIsIlBSRVZfQlROcyIsIlNFTEZfU0VBUkNITUVOVV9JRCIsIkRBVEFfU0VBUkNITUVOVV9TVEFUVVMiLCJEQVRBX1BBR0VfU1RBVFVTIiwiUEFHRV9TVEFUVVMiLCJORVhUIiwiQ09NUExFVEUiLCJBREQiLCJEQVRBX0NBVEVHT1JZIiwiREFUQV9TRUxFQ1RFRF9DQVRFR09SWSIsIklOUFVUX1RSSUdHRVJfQ0xBU1MiLCJEQVRBX0lOUFVUX01PVU5UX1BBR0VzIiwiREFUQV9JTlBVVF9NT1VOVF9QT0lOVCIsIkRBVEFfSU5QVVRfTU9VTlRfUE9JTlRfQ1VTVE9NcyIsIkRBVEFfSU5QVVRfTU9VTlRfRlJPTSIsIkFERF9UUklHR0VSX0NMQVNTIiwiREFUQV9BRERfTU9VTlRfVE8iLCJEQVRBX0FERF9NT1VOVF9QT0lOVCIsInJlZnJlc2giLCJwYWdlIiwib25JbnB1dCIsImN1c3RvbU1vdW50UG9pbnRzIiwiZGF0YUFyciIsInBhZ2VOYW1lIiwibW91bnRQb2ludHNEYXRhIiwibW91bnRQb2ludERhdGEiLCJwYWdlRWwiLCJhbGxDaGVja2VkVmFsdWUiLCJtb3VudFBvaW50cyIsImlucHV0RGF0YSIsIm1vdW50UG9pbnQiLCJ0YWdOYW1lIiwidGFyZ2V0UGFnZU5lbWFzIiwib25BZGQiLCJjdXJyZW50UGFnZSIsInF1ZXJ5IiwibW91bnRQb2ludFF1ZXJ5IiwidG9nZ2xlQ2F0ZWdvcnlWaXNpYmxpdHkiLCJjYXRlZ29yaWVzIiwic2VsZWN0ZWRDYXRvZ29yaWVzIiwic2VsZWN0QnRuIiwiaW5wdXRFbCIsInNlbGVjdGVkQ2F0ZWdvcnkiLCJpc05vdEluY2x1ZGVkIiwidGhpc0NhdGVnb3J5IiwiaXNJbmNsdWRlZCIsIm9uUGFnZUJhY2siLCJiYWNrUGFnZU5hbWUiLCJiYWNrVG9QYWdlTmFtZSIsImJhY2tUb1BhZ2VFbCIsIm9wZW5QYWdlIiwibGFuZGluZ1BhZ2VOYW1lIiwib25QYWdlTW92ZSIsIm1vdmVUb1BhZ2VOYW1lIiwibW92ZVRvUGFnZUVsIiwibW92ZUJ0bnMiLCJiYWNrQnRucyIsImNhdGVnb3J5U2VsZWN0QnRucyIsImlucHV0QnRucyIsImFkZEJ0bnMiLCJzZXRGb290U3RhdHVzIiwib3BlbmVkUGFnZSIsInN0YXR1cyIsIk9ic2VydmVJbnB1dENoYW5nZWQiLCJ0YXJnZXRQYWdlIiwicmVxdWlyZVBhZ2VOYW1lIiwicmVxdWlyZVBhZ2UiLCJyZXF1aXJlUGFnZUlucHV0cyIsInByZXZCdG4iLCJzZXRMYW5kaW5nUGFnZSIsImxhbmRpbmdQYWdlSWQiLCJpbml0UGFnZSIsImJhc2VQYWdlIiwic2V0SW5wdXRUYXJnZXRQYWdlcyIsIm9wZW5lZFRyaWdnZXJFbCIsIm1vdW50UG9pbnRQYWdlcyIsInNldFNlYXJjaFR5cGUiLCJhY3Rpb25UeXBlIiwib25Nb2RhbE9wZW4iLCJvcGVuTW9kYWxJZCIsImNsaWNrZWRFbCIsIm9uTW9kYWxDbG9zZSIsImNsb3NlTW9kYWxJZCIsIk1PVU5UX1RPX0RBVEEiLCJJVEVNX0NMQVNTIiwiSVRFTV9DT05URU5UX0NMQVNTIiwiU2VsZWN0ZWRJbnNlcnRlciIsIlNFTEVDVEVEX0lOU0VSVEVSIiwiU0VMRl9JRCIsIklURU1zIiwiaW5zZXJ0IiwiaW5zZXJ0SXRlbSIsImluc2VydENvbnRlbnQiLCJzZXRNYWluTWluSGVpZ2h0IiwiUEZfTUFJTiIsIlBGX0ZPT1RFUiIsIlBGX0ZPT1RFUl9TVFlMRSIsIlBGX0ZPT1RFUl9NQVJHSU5fVE9QIiwibWFyZ2luVG9wIiwiUEZfRk9PVEVSX0hFSUdIVCIsIm1pbkhlaWdodCIsImZhZGVPdXQiLCIkc2xpZGVTdGVwcyIsIiRzbGlkZU5leHRCdXR0b25zIiwiJHNsaWRlUHJldkJ1dHRvbnMiLCJhY3RpdmVTdGVwIiwic3RpbGxGb3VuZCIsIm1vdmVTdGVwcyIsIiRjdXJyZW50U3RlcCIsIm5leHROdW1iZXIiLCIkbmV4dFN0ZXAiLCIkY2xhc3NGb3JSZW1vdmUiLCIkY2xhc3NGb3JBZGQiLCJtb3ZlUHJldiIsIm1vdmVOZXh0Iiwic3BlZWQiLCJwYWdlUGx1Z2luQ29kZSIsImZhY2Vib29rV3JhcCIsImZiQmVmb3JlV2lkdGgiLCJmYldpZHRoIiwiZmJUaW1lciIsIkZCIiwiWEZCTUwiLCJUQUJfQ0xBU1MiLCJUQUJfQlROX0NMQVNTIiwiVEFCX0NPTlRfQ0xBU1MiLCJUQUJfQUNUSVZFX0NMQVNTIiwiVEFCX05BTUVfREFUQSIsIlRhYk1hbmFnZXIiLCJUQUIiLCJCVE5zIiwiQ09OVHMiLCJzZXRBY3RpdmVUYWIiLCJ0YWJOYW1lIiwiY29udCIsIm9uQ2hhbmdlIiwiYWN0aXZlVGFiTmFtZSIsIlRSVU5DQVRFX1RBUkdFVF9DTEFTUyIsIlRSVU5DQVRFX0xJTkVfREFUQSIsIlRydW5jYXRlTWFuYWdlciIsInRydW5jYXRlcyIsInRydW5jYXRlIiwib3JpZ2luVGV4dCIsInBmVmFsaWRhdGlvblJ1bGVzIiwiJGVsIiwiJGl0ZW0iLCIkZ3JvdXAiLCJ2YWxpZFN0YXR1cyIsInJlcXVpcmVtZW50cyIsImVycm9ycyIsInZhbGlkaXR5IiwibXlWYWxpZGl0eSIsImVycm9yTXNnIiwiJGRhdGVHcm91cCIsIiR5ZWFyIiwiJG1vbnRoIiwiJGRheSIsIm15RGF0ZSIsIiRib3hHcm91cCIsIiRidXR0b24iLCJ0b2RheSIsImRlZmF1bHRZZWFyIiwiZGVmYXVsdERhdGUiLCJnZXRMYXN0RGF5IiwicHJlZnMiLCJhamF4IiwiJHBvc3RhbCIsIiR6aXBjb2RlIiwiJHByZWYiLCIkY2l0eVByZSIsIiRjaXR5IiwiJGFkZHJlc3MiLCJ0aGlzUHJlZiIsIkFqYXhaaXAzIiwiemlwMmFkZHIiLCJwZlBhc3N3b3JkVHlwZXMiLCJwZlBhc3N3b3JkSW5pdCIsInZpc2liaWxpdHkiLCJjc3NfYnJvd3Nlcl9zZWxlY3RvciIsInVhIiwialF1ZXJ5IiwiRyIsInVpIiwiY2xlYW5EYXRhIiwidHJpZ2dlckhhbmRsZXIiLCJ3aWRnZXQiLCJXaWRnZXQiLCJleHByIiwicHNldWRvcyIsIl9jcmVhdGVXaWRnZXQiLCJfcHJvdG8iLCJfY2hpbGRDb25zdHJ1Y3RvcnMiLCJfc3VwZXIiLCJfc3VwZXJBcHBseSIsIndpZGdldEV2ZW50UHJlZml4Iiwid2lkZ2V0TmFtZSIsIndpZGdldEZ1bGxOYW1lIiwiYnJpZGdlIiwiaXNQbGFpbk9iamVjdCIsImpxdWVyeSIsInB1c2hTdGFjayIsIm9wdGlvbiIsIl9pbml0IiwiZGVmYXVsdEVsZW1lbnQiLCJkaXNhYmxlZCIsInV1aWQiLCJldmVudE5hbWVzcGFjZSIsImJpbmRpbmdzIiwiaG92ZXJhYmxlIiwiZm9jdXNhYmxlIiwiY2xhc3Nlc0VsZW1lbnRMb29rdXAiLCJfb24iLCJfZ2V0Q3JlYXRlT3B0aW9ucyIsIl9zZXRPcHRpb25EaXNhYmxlZCIsIl90cmlnZ2VyIiwiX2dldENyZWF0ZUV2ZW50RGF0YSIsIl9kZXN0cm95IiwiX3JlbW92ZUNsYXNzIiwiX3NldE9wdGlvbnMiLCJfc2V0T3B0aW9uIiwiX3NldE9wdGlvbkNsYXNzZXMiLCJfY2xhc3NlcyIsIl90b2dnbGVDbGFzcyIsImVuYWJsZSIsImRpc2FibGUiLCJ1bmlxdWVTb3J0Iiwibm90IiwiX3VudHJhY2tDbGFzc2VzRWxlbWVudCIsImluQXJyYXkiLCJfb2ZmIiwiX2FkZENsYXNzIiwiZ3VpZCIsIl9kZWxheSIsIl9ob3ZlcmFibGUiLCJfZm9jdXNhYmxlIiwiRXZlbnQiLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJlZmZlY3QiLCJpc0VtcHR5T2JqZWN0IiwiZGVsYXkiLCJxdWV1ZSIsIkkiLCJzY3JvbGxiYXJXaWR0aCIsImdldFNjcm9sbEluZm8iLCJpc1dpbmRvdyIsImlzRG9jdW1lbnQiLCJnZXRXaXRoaW5JbmZvIiwib2YiLCJfIiwid2l0aGluIiwiY29sbGlzaW9uIiwiRCIsInBhZ2VZIiwicGFnZVgiLCJhdCIsIm1hcmdpbkxlZnQiLCJ0YXJnZXRXaWR0aCIsInRhcmdldEhlaWdodCIsImVsZW1XaWR0aCIsImVsZW1IZWlnaHQiLCJjb2xsaXNpb25Qb3NpdGlvbiIsImNvbGxpc2lvbldpZHRoIiwiY29sbGlzaW9uSGVpZ2h0IiwiZWxlbSIsInVzaW5nIiwidmVydGljYWwiLCJpbXBvcnRhbnQiLCJmbGlwZml0Iiwia2V5Q29kZSIsIkJBQ0tTUEFDRSIsIkNPTU1BIiwiREVMRVRFIiwiRE9XTiIsIkVORCIsIkVOVEVSIiwiRVNDQVBFIiwiSE9NRSIsIkxFRlQiLCJQQUdFX0RPV04iLCJQQUdFX1VQIiwiUEVSSU9EIiwiUklHSFQiLCJTUEFDRSIsIlVQIiwidW5pcXVlSWQiLCJyZW1vdmVVbmlxdWVJZCIsInNhZmVBY3RpdmVFbGVtZW50IiwiaWNvbnMiLCJzdWJtZW51IiwibWVudXMiLCJyb2xlIiwic2VsZWN0IiwiYWN0aXZlTWVudSIsIm1vdXNlSGFuZGxlZCIsImxhc3RNb3VzZVBvc2l0aW9uIiwidGFiSW5kZXgiLCJfYWN0aXZhdGVJdGVtIiwiaXNQcm9wYWdhdGlvblN0b3BwZWQiLCJfbWVudUl0ZW1zIiwiY29sbGFwc2VBbGwiLCJfY2xvc2VPbkRvY3VtZW50Q2xpY2siLCJwcmV2aW91c0ZpbHRlciIsImFkZEJhY2siLCJfa2V5ZG93biIsInByZXZpb3VzUGFnZSIsIm5leHRQYWdlIiwiX21vdmUiLCJjb2xsYXBzZSIsIl9hY3RpdmF0ZSIsImZyb21DaGFyQ29kZSIsImZpbHRlclRpbWVyIiwiX2ZpbHRlck1lbnVJdGVtcyIsIl9pc0RpdmlkZXIiLCJfaXRlbVJvbGUiLCJtZW51IiwibGlzdGJveCIsIl9zY3JvbGxJbnRvVmlldyIsIl9jbG9zZSIsIl9zdGFydE9wZW5pbmciLCJfaGFzU2Nyb2xsIiwiX29wZW4iLCJpc0ZpcnN0SXRlbSIsImlzTGFzdEl0ZW0iLCJhdXRvRm9jdXMiLCJtaW5MZW5ndGgiLCJyZXNwb25zZSIsInJlcXVlc3RJbmRleCIsInBlbmRpbmciLCJpc011bHRpTGluZSIsIl9pc0NvbnRlbnRFZGl0YWJsZSIsInZhbHVlTWV0aG9kIiwiaXNOZXdNZW51IiwiX2tleUV2ZW50IiwiX3ZhbHVlIiwidGVybSIsIl9zZWFyY2hUaW1lb3V0Iiwic2VsZWN0ZWRJdGVtIiwic2VhcmNoaW5nIiwiX2NoYW5nZSIsIl9pbml0U291cmNlIiwiX2FwcGVuZFRvIiwidW5zZWxlY3RhYmxlIiwibWVudWZvY3VzIiwibGl2ZVJlZ2lvbiIsIm1lbnVzZWxlY3QiLCJiZWZvcmV1bmxvYWQiLCJ4aHIiLCJhYm9ydCIsIl9pc0V2ZW50VGFyZ2V0SW5XaWRnZXQiLCJfY2xvc2VPbkNsaWNrT3V0c2lkZSIsImF1dG9jb21wbGV0ZSIsInVybCIsImRhdGFUeXBlIiwic3VjY2VzcyIsImFsdEtleSIsImN0cmxLZXkiLCJtZXRhS2V5Iiwic2hpZnRLZXkiLCJfc2VhcmNoIiwiY2FuY2VsU2VhcmNoIiwiX3Jlc3BvbnNlIiwiX19yZXNwb25zZSIsIl9ub3JtYWxpemUiLCJfc3VnZ2VzdCIsIl9yZW5kZXJNZW51IiwiX3Jlc2l6ZU1lbnUiLCJfcmVuZGVySXRlbURhdGEiLCJfcmVuZGVySXRlbSIsImVzY2FwZVJlZ2V4IiwiZ3JlcCIsIm1lc3NhZ2VzIiwibm9SZXN1bHRzIiwicmVzdWx0cyIsIl9jdXJJbnN0IiwiX2Rpc2FibGVkSW5wdXRzIiwiX2RhdGVwaWNrZXJTaG93aW5nIiwiX2luRGlhbG9nIiwiX21haW5EaXZJZCIsIl9pbmxpbmVDbGFzcyIsIl9hcHBlbmRDbGFzcyIsIl90cmlnZ2VyQ2xhc3MiLCJfZGlhbG9nQ2xhc3MiLCJfZGlzYWJsZUNsYXNzIiwiX3Vuc2VsZWN0YWJsZUNsYXNzIiwiX2N1cnJlbnRDbGFzcyIsIl9kYXlPdmVyQ2xhc3MiLCJyZWdpb25hbCIsInNlbGVjdE1vbnRoTGFiZWwiLCJzZWxlY3RZZWFyTGFiZWwiLCJzaG93T24iLCJzaG93QW5pbSIsInNob3dPcHRpb25zIiwiYXBwZW5kVGV4dCIsImJ1dHRvblRleHQiLCJidXR0b25JbWFnZSIsImJ1dHRvbkltYWdlT25seSIsImhpZGVJZk5vUHJldk5leHQiLCJuYXZpZ2F0aW9uQXNEYXRlRm9ybWF0IiwiZ290b0N1cnJlbnQiLCJjaGFuZ2VNb250aCIsImNoYW5nZVllYXIiLCJ5ZWFyUmFuZ2UiLCJzaG93T3RoZXJNb250aHMiLCJzZWxlY3RPdGhlck1vbnRocyIsInNob3dXZWVrIiwiY2FsY3VsYXRlV2VlayIsImlzbzg2MDFXZWVrIiwic2hvcnRZZWFyQ3V0b2ZmIiwibWluRGF0ZSIsIm1heERhdGUiLCJiZWZvcmVTaG93RGF5IiwiYmVmb3JlU2hvdyIsIm9uU2VsZWN0Iiwib25DaGFuZ2VNb250aFllYXIiLCJvblVwZGF0ZURhdGVwaWNrZXIiLCJudW1iZXJPZk1vbnRocyIsInNob3dDdXJyZW50QXRQb3MiLCJzdGVwTW9udGhzIiwic3RlcEJpZ01vbnRocyIsImFsdEZpZWxkIiwiYWx0Rm9ybWF0IiwiY29uc3RyYWluSW5wdXQiLCJhdXRvU2l6ZSIsImVuIiwiZHBEaXYiLCJfaXNEaXNhYmxlZERhdGVwaWNrZXIiLCJpbmxpbmUiLCJtYXJrZXJDbGFzc05hbWUiLCJtYXhSb3dzIiwiX3dpZGdldERhdGVwaWNrZXIiLCJzZXREZWZhdWx0cyIsIl9hdHRhY2hEYXRlcGlja2VyIiwiX25ld0luc3QiLCJzZXR0aW5ncyIsIl9jb25uZWN0RGF0ZXBpY2tlciIsIl9pbmxpbmVEYXRlcGlja2VyIiwic2VsZWN0ZWREYXkiLCJzZWxlY3RlZE1vbnRoIiwic2VsZWN0ZWRZZWFyIiwiZHJhd01vbnRoIiwiZHJhd1llYXIiLCJfYXR0YWNobWVudHMiLCJfZG9LZXlEb3duIiwiX2RvS2V5UHJlc3MiLCJfZG9LZXlVcCIsIl9hdXRvU2l6ZSIsIl9kaXNhYmxlRGF0ZXBpY2tlciIsIl9nZXQiLCJfc2hvd0RhdGVwaWNrZXIiLCJhbHQiLCJfbGFzdElucHV0IiwiX2hpZGVEYXRlcGlja2VyIiwic2V0RGF0ZSIsIl9mb3JtYXREYXRlIiwiX3NldERhdGUiLCJfZ2V0RGVmYXVsdERhdGUiLCJfdXBkYXRlRGF0ZXBpY2tlciIsIl91cGRhdGVBbHRlcm5hdGUiLCJfZGlhbG9nRGF0ZXBpY2tlciIsIl9kaWFsb2dJbnN0IiwiX2RpYWxvZ0lucHV0IiwiX3BvcyIsImJsb2NrVUkiLCJfZGVzdHJveURhdGVwaWNrZXIiLCJfZW5hYmxlRGF0ZXBpY2tlciIsIl9nZXRJbnN0IiwiX29wdGlvbkRhdGVwaWNrZXIiLCJfZ2V0RGF0ZURhdGVwaWNrZXIiLCJfZ2V0TWluTWF4RGF0ZSIsIl9jaGFuZ2VEYXRlcGlja2VyIiwiX3JlZnJlc2hEYXRlcGlja2VyIiwiX3NldERhdGVEYXRlcGlja2VyIiwiX3NldERhdGVGcm9tRmllbGQiLCJfZ2V0RGF0ZSIsIl9zZWxlY3REYXkiLCJfYWRqdXN0RGF0ZSIsIl9jbGVhckRhdGUiLCJfZ290b1RvZGF5IiwiX3Bvc3NpYmxlQ2hhcnMiLCJjaGFyQ29kZSIsImxhc3RWYWwiLCJwYXJzZURhdGUiLCJfZ2V0Rm9ybWF0Q29uZmlnIiwiX2ZpbmRQb3MiLCJfY2hlY2tPZmZzZXQiLCJfc2hvdWxkRm9jdXNJbnB1dCIsIl9nZW5lcmF0ZUhUTUwiLCJfYXR0YWNoSGFuZGxlcnMiLCJfZ2V0TnVtYmVyT2ZNb250aHMiLCJ5ZWFyc2h0bWwiLCJyZXBsYWNlV2l0aCIsIl90aWR5RGlhbG9nIiwidW5ibG9ja1VJIiwiX2NoZWNrRXh0ZXJuYWxDbGljayIsIl9hZGp1c3RJbnN0RGF0ZSIsImN1cnJlbnREYXkiLCJjdXJyZW50TW9udGgiLCJjdXJyZW50WWVhciIsIl9ub3RpZnlDaGFuZ2UiLCJfc2VsZWN0TW9udGhZZWFyIiwic2VsZWN0ZWRJbmRleCIsIl9zZWxlY3REYXRlIiwiZm9ybWF0RGF0ZSIsIm5vV2Vla2VuZHMiLCJfdGlja3NUbzE5NzAiLCJfZ2V0RGF5c0luTW9udGgiLCJfZGF5bGlnaHRTYXZpbmdBZGp1c3QiLCJBVE9NIiwiQ09PS0lFIiwiUkZDXzgyMiIsIlJGQ184NTAiLCJSRkNfMTAzNiIsIlJGQ18xMTIzIiwiUlNTIiwiVElDS1MiLCJUSU1FU1RBTVAiLCJXM0MiLCJfcmVzdHJpY3RNaW5NYXgiLCJfZGV0ZXJtaW5lRGF0ZSIsInNldEhvdXJzIiwic2V0TWludXRlcyIsInNldFNlY29uZHMiLCJzZXRNaWxsaXNlY29uZHMiLCJnZXRIb3VycyIsInNlbGVjdERheSIsInNlbGVjdE1vbnRoIiwic2VsZWN0WWVhciIsIk4iLCJZIiwiSCIsIksiLCJVIiwiX2NhbkFkanVzdE1vbnRoIiwiY2xhc3MiLCJvdXRlckhUTUwiLCJfaXNJblJhbmdlIiwiX2dlbmVyYXRlTW9udGhZZWFySGVhZGVyIiwiX2dldEZpcnN0RGF5T2ZNb250aCIsImluaXRpYWxpemVkIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiUmVmZXJlbmNlRXJyb3IiLCJfY2xhc3NDYWxsQ2hlY2siLCJpbnN0YW5jZSIsIkNvbnN0cnVjdG9yIiwiX2RlZmluZVByb3BlcnRpZXMiLCJfY3JlYXRlQ2xhc3MiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJfZGVmaW5lUHJvcGVydHkiLCJfZ2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsIl9pbmhlcml0cyIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl9hcnIiLCJfbiIsIl9zIiwiX2UiLCJfbm9uSXRlcmFibGVSZXN0IiwiYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJfc2V0UHJvdG90eXBlT2YiLCJhcnJheVdpdGhIb2xlcyIsIml0ZXJhYmxlVG9BcnJheUxpbWl0IiwidW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJub25JdGVyYWJsZVJlc3QiLCJfc2xpY2VkVG9BcnJheSIsImFycmF5TGlrZVRvQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJtaW5MZW4iLCJzbSJdLCJzb3VyY2VSb290IjoiIn0=