(function() { var $, Resource, cache, imageLoad; $ = jQuery; if (!(navigator.appName === "Microsoft Internet Explorer" && navigator.appVersion.split(";")[1].replace(/[ ]/g, "") === "MSIE8.0")) { CanvasRenderingContext2D.prototype.oval = function(x, y, width, height) { var h, k, w; k = (width / 0.75) / 2; w = width / 2; h = height / 2; this.beginPath(); this.moveTo(x, y - h); this.bezierCurveTo(x + k, y - h, x + k, y + h, x, y + h); this.moveTo(x, y + h); this.bezierCurveTo(x - k, y + h, x - k, y - h, x, y - h); return this; }; } imageLoad = function(img, callback) { var timer; timer = setInterval(function() { var secondTimer; if (img.complete != null) { if ((img.naturalWidth != null) && img.naturalWidth !== 0) { clearInterval(timer); return callback(img); } else if (window.defaultImage !== void 0) { img.src = window.defaultImage.src; clearInterval(timer); return secondTimer = setInterval(function() { if (img.complete != null) { if ((img.naturalWidth != null) && img.naturalWidth !== 0) { clearInterval(secondTimer); return callback(img); } } }, 50); } } }, 500); return this; }; cache = {}; Resource = (function() { function Resource(src1) { this.src = src1; cache[src] = this; } return Resource; })(); $.fn.extend({ voyeur: function(options) { var convertCanvasToImage, convertImageToCanvas, hexToRgb, isIE7, isIE8, rgbToHex, settings, square; settings = { hasAlbum: true, colorPosition: { x: 0, y: 0 }, rect: { width: 960, height: 450 }, mask: { radial: { radius: [0, 10], zoom: 50 } } }; settings = $.extend(settings, options); convertCanvasToImage = function(c) { var areaPoint, canvas, context, end, gradient, h, img, m, oriSrc, p, position, r, w, z; canvas = c.canvas.canvas; context = canvas.getContext('2d'); p = c.canvas.domainColor; w = settings.rect.width; h = settings.rect.height; m = settings.mask; r = m.radial.radius; z = m.radial.zoom; position = settings.colorPosition; areaPoint = [[10, 10], [w - 10, 10], [w - 10, h - 10], [10, h - 10]]; if (!p) { p = [34, 34, 34]; } end = "rgba(" + p[0] + "," + p[1] + "," + p[2] + ", 1)"; gradient = context.createRadialGradient(w / 2, h / 2, r[0], w / 2, h / 2, w / 2 + r[1]); gradient.addColorStop(0, "rgba(" + p[0] + "," + p[1] + "," + p[2] + ", 0)"); gradient.addColorStop(0.8, "rgba(" + p[0] + "," + p[1] + "," + p[2] + ", 0.5)"); gradient.addColorStop(1, end); context.fillStyle = gradient; context.fillRect(0, 0, w, h); context.save(); context.shadowColor = '#999'; context.shadowBlur = 12; context.shadowOffsetX = -1; context.shadowOffsetY = 0; context.fillRect(0, h, w, 3); context.save(); if (typeof canvas.toDataURL === "function") { img = canvas.toDataURL("image/jpg"); oriSrc = $(c.img).attr('src'); $(c.img).replaceWith($('')); } return c.$parent.css({ background: rgbToHex(p) }); }; convertImageToCanvas = function(img) { var canvas, context, domainColor, error, getDomainColor, h, w; canvas = document.createElement("canvas"); w = img.width; h = img.height; if (!canvas.getContext) { G_vmlCanvasManager.initElement(canvas); } context = canvas.getContext("2d"); getDomainColor = function() { var a, b, colorArry, g, i, index, j, offset, pixelCount, pixelMap, pixels, quality, r, ref, ref1, sortItem; context.drawImage(img, 0, 0, w, h); if (typeof context.getImageData === "function") { pixels = context.getImageData(0, 0, w, h).data; pixelCount = w * h; pixelMap = {}; quality = 5000; colorArry = []; sortItem = function() { var co, pixelArry, ref, ref1, res, v1, v2, v3; res = []; pixelArry = Object.keys(pixelMap).sort(function(a, b) { return pixelMap[a] < pixelMap[b]; }); v1 = pixelArry[0]; v2 = pixelArry[1]; v3 = pixelArry[pixelArry.length - 1]; for (co in colorArry) { if (((ref = colorArry[co]) != null ? ref.index : void 0) === v1 || colorArry[co].index === v2 || colorArry[co].index === v3) { res.push(colorArry[co]); } } return (ref1 = res[0]) != null ? ref1.color : void 0; }; for (i = j = 0, ref = pixelCount - 1, ref1 = quality; ref1 > 0 ? j <= ref : j >= ref; i = j += ref1) { offset = i * 4; r = pixels[offset + 0]; g = pixels[offset + 1]; b = pixels[offset + 2]; a = pixels[offset + 3]; if (a >= 125) { if (!(r > 250 && g > 250 && b > 250)) { index = 'c' + (r << (2 * 5)) + (g << 5) + b; if (pixelMap[index] != null) { pixelMap[index] += 1; } else { colorArry.push({ color: [r, g, b], index: index }); pixelMap[index] = 0; } } } } return sortItem(); } else { return [103, 213, 241, 255]; } }; domainColor = getDomainColor(); canvas = document.createElement("canvas"); canvas.width = settings.rect.width; canvas.height = settings.rect.height; context = canvas.getContext("2d"); try { context.drawImage(img, 0, 0, settings.rect.width, settings.rect.height); } catch (_error) { error = _error; context.drawImage(window.defaultImage, 0, 0, settings.rect.width, settings.rect.height); } return { canvas: canvas, domainColor: domainColor }; }; square = function(x) { return x[0] * x[1]; }; hexToRgb = function(hex) { var b, g, r; hex = hex.charAt(0) === "#" ? hex.substring(1, 7) : hex; r = parseInt(hex.substring(0, 2), 16); g = parseInt(hex.substring(2, 4), 16); b = parseInt(hex.substring(4, 6), 16); return [r, g, b]; }; rgbToHex = function(rgb) { var b, g, r; r = rgb[0], g = rgb[1], b = rgb[2]; return "#" + ("000000" + ((r << 16 | g << 8 | b).toString(16))).slice(-6); }; isIE8 = function() { if (navigator.appName === "Microsoft Internet Explorer" && navigator.appVersion.split(";")[1].replace(/[ ]/g, "") === "MSIE8.0") { return true; } }; isIE7 = function() { if (navigator.appName === "Microsoft Internet Explorer" && navigator.appVersion.split(";")[1].replace(/[ ]/g, "") === "MSIE7.0") { return true; } }; return this.each(function(idx, elem) { var $elem, canvasArray, image, imageCount, imgArray, imgSrc, j, len, li, liArray, original; $elem = $(elem); liArray = $elem.find('li'); imgArray = []; canvasArray = []; if (isIE8() || isIE7()) { $elem.parent().find(".loading").remove(); if (!settings.hasAlbum) { $elem.unslider({ fluid: true, dots: true, delay: 6000 }); } else { $elem.find('ul').css("height", $elem.height()); liArray = $elem.find('li'); for (j = 0, len = liArray.length; j < len; j++) { li = liArray[j]; image = $(li).find('img')[0]; $(image).css("height", $elem.height()); imgSrc = $(image).attr("src"); original = $(image).attr("data-original"); if (original != null) { imgSrc = original; } imgArray.push(imgSrc); } $(elem).unslider({ fluid: true, dots: true, delay: 6000, albums: imgArray }); } } else { liArray.each(function(i) { var $img; li = liArray[i]; $img = $(li).find('img'); image = $img[0]; original = $(image).attr("data-original"); if (original != null) { $(image).attr("src", original); } imageLoad(image, function(img) { imgArray.push($(img).attr("src")); return $elem.trigger('imageLoaded'); }); return canvasArray.push({ canvas: image, img: image, $parent: $(li) }); }); imageCount = liArray.length; $elem.on('imageLoaded', function(e) { imageCount--; if (imageCount === 0) { return $elem.trigger('imagesAllLoaded'); } }); $(elem).on('imagesAllLoaded', function() { $(elem).parent().find(".loading").remove(); canvasArray.map(function(c) { c.canvas = convertImageToCanvas(c.canvas); return convertCanvasToImage(c); }); if (!settings.hasAlbum) { $(elem).unslider({ fluid: true, dots: true, delay: 6000 }); } else { $(elem).unslider({ fluid: true, dots: true, delay: 6000, albums: imgArray }); } return this; }); } return this; }); } }); }).call(this); //# sourceMappingURL=data:application/json;base64,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QSxDQUFBO0FBQUEsWUFFQSxXQUFXLENBQUMsR0FBWixDQUFnQixTQUFDLENBQUQsR0FBQTtBQUNkLGNBQUEsQ0FBQyxDQUFDLE1BQUYsR0FBVyxvQkFBQSxDQUFxQixDQUFDLENBQUMsTUFBdkIsQ0FBWCxDQUFBO3FCQUNBLG9CQUFBLENBQXFCLENBQXJCLEVBRmM7WUFBQSxDQUFoQixDQUZBLENBQUE7QUFNQSxZQUFBLElBQUcsQ0FBQSxRQUFTLENBQUMsUUFBYjtBQUdFLGNBQUEsQ0FBQSxDQUFFLElBQUYsQ0FBTyxDQUFDLFFBQVIsQ0FDRTtBQUFBLGdCQUFBLEtBQUEsRUFBTyxJQUFQO0FBQUEsZ0JBQ0EsSUFBQSxFQUFNLElBRE47QUFBQSxnQkFFQSxLQUFBLEVBQU8sSUFGUDtlQURGLENBQUEsQ0FIRjthQUFBLE1BQUE7QUFVRSxjQUFBLENBQUEsQ0FBRSxJQUFGLENBQU8sQ0FBQyxRQUFSLENBQ0U7QUFBQSxnQkFBQSxLQUFBLEVBQU8sSUFBUDtBQUFBLGdCQUNBLElBQUEsRUFBTSxJQUROO0FBQUEsZ0JBRUEsS0FBQSxFQUFPLElBRlA7QUFBQSxnQkFHQSxNQUFBLEVBQVEsUUFIUjtlQURGLENBQUEsQ0FWRjthQU5BO21CQXFCQSxLQXZCNEI7VUFBQSxDQUE5QixDQTVCQSxDQTFDRjtTQU5BO2VBb0dBLEtBckdXO01BQUEsQ0FBTixDQUFQLENBdktNO0lBQUEsQ0FBUjtHQURGLENBbkRBLENBQUE7QUFBQSIsImZpbGUiOiJ2b3lldXIuanMiLCJzb3VyY2VSb290IjoiL3NvdXJjZS8iLCJzb3VyY2VzQ29udGVudCI6WyIkID0galF1ZXJ5XG5cbnVubGVzcyBuYXZpZ2F0b3IuYXBwTmFtZSA9PSBcIk1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlclwiIGFuZCBuYXZpZ2F0b3IuYXBwVmVyc2lvbiAuc3BsaXQoXCI7XCIpWzFdLnJlcGxhY2UoL1sgXS9nLFwiXCIpID09IFwiTVNJRTguMFwiXG4gIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5wcm90b3R5cGUub3ZhbCA9ICh4LCB5LCB3aWR0aCwgaGVpZ2h0KSAtPlxuICAgIGsgPSAoIHdpZHRoIC8gMC43NSApIC8gMlxuICAgIHcgPSB3aWR0aCAvIDJcbiAgICBoID0gaGVpZ2h0IC8gMlxuICAgIEBiZWdpblBhdGgoKVxuICAgIEBtb3ZlVG8geCwgeS1oXG4gICAgQGJlemllckN1cnZlVG8oeCtrLHktaCwgeCtrLCB5K2gsIHgseStoKVxuICAgIEBtb3ZlVG8geCwgeStoXG4gICAgQGJlemllckN1cnZlVG8oeC1rLHkraCwgeC1rLHktaCwgeCx5LWgpXG4gICAgIyBAbW92ZVRvIHgtaywgeVxuICAgICMgQGJlemllckN1cnZlVG8oeC1rLCB5K2gsIHgrayx5K2gsIHgraywgeSlcbiAgICAjIEBiZXppZXJDdXJ2ZVRvKHgrayx5LWgsIHgtayx5LWgsIHgtaywgeSlcbiAgICAjIEBjbG9zZVBhdGgoKVxuICAgIHJldHVybiBAXG5cbmltYWdlTG9hZCA9IChpbWcsY2FsbGJhY2spIC0+XG4gICMgY291bnQgPSAwXG4gICMgJChpbWcpLm9uICdsb2FkJywgKCktPlxuICAjICAgY291bnQrPTFcblxuICB0aW1lciA9IHNldEludGVydmFsICgpLT5cblxuICAgIGlmIGltZy5jb21wbGV0ZT9cbiAgICAgIGlmIGltZy5uYXR1cmFsV2lkdGg/IGFuZCBpbWcubmF0dXJhbFdpZHRoICE9IDBcbiAgICAgICAgY2xlYXJJbnRlcnZhbCB0aW1lclxuICAgICAgICBjYWxsYmFjayhpbWcpXG4gICAgICBlbHNlIGlmIHdpbmRvdy5kZWZhdWx0SW1hZ2UgaXNudCB1bmRlZmluZWRcbiAgICAgICAgaW1nLnNyYyA9IHdpbmRvdy5kZWZhdWx0SW1hZ2Uuc3JjXG4gICAgICAgIGNsZWFySW50ZXJ2YWwgdGltZXJcbiAgICAgICAgc2Vjb25kVGltZXIgPSBzZXRJbnRlcnZhbCAoKS0+XG5cbiAgICAgICAgICBpZiBpbWcuY29tcGxldGU/XG4gICAgICAgICAgICAgIGlmIGltZy5uYXR1cmFsV2lkdGg/IGFuZCBpbWcubmF0dXJhbFdpZHRoICE9IDBcbiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsIHNlY29uZFRpbWVyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soaW1nKVxuICAgICAgICAsNTBcblxuICAsIDUwMFxuICBAXG5cblxuY2FjaGUgPSB7fVxuXG5jbGFzcyBSZXNvdXJjZVxuICBjb25zdHJ1Y3RvcjogKEBzcmMpIC0+XG4gICAgY2FjaGVbIHNyYyBdID0gdGhpc1xuXG5cbiQuZm4uZXh0ZW5kXG4gIHZveWV1cjogKG9wdGlvbnMpIC0+XG4gICAgc2V0dGluZ3MgPVxuICAgICAgaGFzQWxidW0gOiB0cnVlXG4gICAgICBjb2xvclBvc2l0aW9uOlxuICAgICAgICB4OjBcbiAgICAgICAgeTowXG4gICAgICByZWN0OlxuICAgICAgICB3aWR0aDogOTYwXG4gICAgICAgIGhlaWdodDogNDUwXG4gICAgICBtYXNrOlxuICAgICAgICByYWRpYWw6XG4gICAgICAgICAgcmFkaXVzOiBbMCwxMF1cbiAgICAgICAgICB6b29tOiA1MFxuXG4gICAgc2V0dGluZ3MgPSAkLmV4dGVuZCBzZXR0aW5ncywgb3B0aW9uc1xuXG4gICAgXG5cbiAgICBjb252ZXJ0Q2FudmFzVG9JbWFnZSA9IChjKSAtPlxuICAgICAgY2FudmFzID0gYy5jYW52YXMuY2FudmFzXG4gICAgICBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJylcbiAgICAgIHAgPSBjLmNhbnZhcy5kb21haW5Db2xvclxuXG4gICAgICB3ID0gc2V0dGluZ3MucmVjdC53aWR0aFxuICAgICAgaCA9IHNldHRpbmdzLnJlY3QuaGVpZ2h0XG4gICAgICBtID0gc2V0dGluZ3MubWFza1xuICAgICAgciA9IG0ucmFkaWFsLnJhZGl1c1xuICAgICAgeiA9IG0ucmFkaWFsLnpvb21cblxuICAgICAgI3BpY2t1cCBjb2xvclxuICAgICAgcG9zaXRpb24gPSBzZXR0aW5ncy5jb2xvclBvc2l0aW9uXG5cbiAgICAgIGFyZWFQb2ludCA9IFsgWyAxMCwgMTAgXSAsIFt3LTEwLCAxMF0gLFt3LTEwLGgtMTBdLCBbMTAsIGgtMTBdIF1cblxuICAgICAgXG5cblxuICAgICAgIyBpZiBwaWNrdXBDb2xvcnM/XG4gICAgICAjICAgY29sb3JzY2hlbWVBcnJheSA9IHBpY2t1cENvbG9yc1xuICAgICAgIyBlbHNlXG4gICAgICAjICAgY29sb3JzY2hlbWVBcnJheSA9IFsgWzEwMywyMTMsMjQxLDI1NV0gLCBbMjEzLDIxMywyMTMsMjU1XSAsWyAzMSwgMjIyLDExMSwyNTVdLCBbNDQsMTIzLDEyNCwyNTVdIF1cblxuICAgICAgIyBpZHggPSBwYXJzZUludChNYXRoLnJhbmRvbSgpICogY29sb3JzY2hlbWVBcnJheS5sZW5ndGgpXG5cblxuXG4gICAgICAjIHAgPSBjb2xvcnNjaGVtZUFycmF5W2lkeF1cbiAgICAgIFxuICAgICAgcCA9IFszNCwzNCwzNF0gaWYgIXBcbiAgICAgIFxuICAgICAgZW5kID0gXCJyZ2JhKFwiK3BbMF0rXCIsXCIrcFsxXStcIixcIitwWzJdK1wiLCAxKVwiXG4gICAgICAjIGNvbnNvbGUubG9nKGVuZClcbiAgICAgICNkcmF3IGFyYyB3aXRoIGdyYWRpZW50XG4gICAgICBncmFkaWVudCA9IGNvbnRleHQuY3JlYXRlUmFkaWFsR3JhZGllbnQodyAvIDIgLGggLyAyICwgclswXSAsdyAvIDIsaCAvIDIsIHcgLyAyK3JbMV0pXG4gICAgICBncmFkaWVudC5hZGRDb2xvclN0b3AoMCxcInJnYmEoXCIrcFswXStcIixcIitwWzFdK1wiLFwiK3BbMl0rXCIsIDApXCIpXG4gICAgICBncmFkaWVudC5hZGRDb2xvclN0b3AoMC44LFwicmdiYShcIitwWzBdK1wiLFwiK3BbMV0rXCIsXCIrcFsyXStcIiwgMC41KVwiKVxuICAgICAgIyBncmFkaWVudC5hZGRDb2xvclN0b3AoMC41LCBcInJnYmEoXCIgKyAyNTUgLSAoIDI1NSAtIHBbMF0gKS8yICsgXCIsMjQ2LDI0NiwwLjUpXCIpXG4gICAgICBncmFkaWVudC5hZGRDb2xvclN0b3AoMSxlbmQpXG5cblxuICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBncmFkaWVudFxuICAgICAgY29udGV4dC5maWxsUmVjdCgwLDAsdyxoKVxuICAgICAgY29udGV4dC5zYXZlKClcblxuICAgICAgY29udGV4dC5zaGFkb3dDb2xvciA9ICcjOTk5J1xuXG4gICAgICBjb250ZXh0LnNoYWRvd0JsdXIgPSAxMlxuICAgICAgY29udGV4dC5zaGFkb3dPZmZzZXRYID0gLTFcbiAgICAgIGNvbnRleHQuc2hhZG93T2Zmc2V0WSA9IDBcblxuXG4gICAgICBjb250ZXh0LmZpbGxSZWN0KDAsaCx3LDMpXG5cbiAgICAgIGNvbnRleHQuc2F2ZSgpXG5cbiAgICAgIGlmIHR5cGVvZihjYW52YXMudG9EYXRhVVJMKSA9PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgaW1nID0gY2FudmFzLnRvRGF0YVVSTChcImltYWdlL2pwZ1wiKVxuICAgICAgICBvcmlTcmMgPSAkKGMuaW1nKS5hdHRyKCdzcmMnKVxuICAgICAgICAkKGMuaW1nKS5yZXBsYWNlV2l0aCgkKCc8aW1nIHNyYz1cIicrIGltZysgJ1wiLz4nKSlcbiAgICAgICAgIyAkKGMuaW1nKS5jaGlsZHJlbignaW1nJykuY3NzIGJhY2tncm91bmQgOiBcInVybCgnb3JpU3JjJylcIlxuICAgICAgYy4kcGFyZW50LmNzcyBiYWNrZ3JvdW5kIDogcmdiVG9IZXgocCkgXG5cbiAgICBjb252ZXJ0SW1hZ2VUb0NhbnZhcyA9IChpbWcpIC0+XG4gICAgICBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpXG5cbiAgICAgIHcgPSBpbWcud2lkdGhcbiAgICAgIGggPSBpbWcuaGVpZ2h0XG4gICAgICBpZiAhY2FudmFzLmdldENvbnRleHQgdGhlbiBHX3ZtbENhbnZhc01hbmFnZXIuaW5pdEVsZW1lbnQoY2FudmFzKSBcbiAgICAgIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpXG5cbiAgICAgIGdldERvbWFpbkNvbG9yID0gKCktPlxuXG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGltZywgMCwwLHcsaClcblxuICAgICAgICBpZiB0eXBlb2YoY29udGV4dC5nZXRJbWFnZURhdGEpPT1cImZ1bmN0aW9uXCJcbiAgICAgICAgICBwaXhlbHMgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLDAsdyxoKS5kYXRhXG4gICAgICAgICAgcGl4ZWxDb3VudCA9IHcqaFxuICAgICAgICAgIHBpeGVsTWFwID0ge31cbiAgICAgICAgICBxdWFsaXR5ID0gNTAwMFxuICAgICAgICAgIGNvbG9yQXJyeSA9IFtdXG4gICAgICAgICAgc29ydEl0ZW0gPSAoKSAtPlxuICAgICAgICAgICAgcmVzID0gW11cbiAgICAgICAgICAgIHBpeGVsQXJyeSA9IE9iamVjdC5rZXlzKHBpeGVsTWFwKS5zb3J0IChhLGIpIC0+IHBpeGVsTWFwW2FdIDwgcGl4ZWxNYXBbYl1cbiAgICAgICAgICAgIHYxID0gcGl4ZWxBcnJ5WzBdXG4gICAgICAgICAgICB2MiA9IHBpeGVsQXJyeVsxXVxuICAgICAgICAgICAgdjMgPSBwaXhlbEFycnlbcGl4ZWxBcnJ5Lmxlbmd0aCAtIDFdXG4gICAgICAgICAgICBmb3IgY28gb2YgY29sb3JBcnJ5XG4gICAgICAgICAgICAgIGlmIGNvbG9yQXJyeVtjb10/LmluZGV4ID09IHYxIG9yIGNvbG9yQXJyeVtjb10uaW5kZXggPT0gdjIgb3IgY29sb3JBcnJ5W2NvXS5pbmRleCA9PSB2M1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKGNvbG9yQXJyeVtjb10pXG4gICAgICAgICAgICByZXR1cm4gcmVzWzBdPy5jb2xvclxuICAgICAgICAgIFxuICAgICAgICAgIGZvciBpIGluIFswLi5waXhlbENvdW50LTFdIGJ5IHF1YWxpdHlcbiAgICAgICAgICAgIG9mZnNldCA9IGkgKjRcbiAgICAgICAgICAgIHIgPSBwaXhlbHNbb2Zmc2V0ICsgMF07XG4gICAgICAgICAgICBnID0gcGl4ZWxzW29mZnNldCArIDFdO1xuICAgICAgICAgICAgYiA9IHBpeGVsc1tvZmZzZXQgKyAyXTtcbiAgICAgICAgICAgIGEgPSBwaXhlbHNbb2Zmc2V0ICsgM107XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIGEgPj0gMTI1XG4gICAgICAgICAgICAgIHVubGVzcyByID4gMjUwIGFuZCBnID4gMjUwIGFuZCBiID4gMjUwXG4gICAgICAgICAgICAgICAgaW5kZXggPSAnYycrIChyIDw8ICgyKjUpICkrIChnIDw8IDUpICsgYlxuXG4gICAgICAgICAgICAgICAgaWYgcGl4ZWxNYXBbaW5kZXhdPyBcbiAgICAgICAgICAgICAgICAgIHBpeGVsTWFwW2luZGV4XSArPTEgXG4gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBlbHNlIFxuICAgICAgICAgICAgICAgICAgY29sb3JBcnJ5LnB1c2goe2NvbG9yOltyLGcsYl0saW5kZXg6aW5kZXh9KVxuICAgICAgICAgICAgICAgICAgcGl4ZWxNYXBbaW5kZXhdID0gMFxuXG4gICAgICAgICAgcmV0dXJuICBzb3J0SXRlbSgpXG4gICAgICAgIGVsc2UgXG4gICAgICAgICAgcmV0dXJuIFsxMDMsMjEzLDI0MSwyNTVdXG5cbiAgICAgIGRvbWFpbkNvbG9yID0gZ2V0RG9tYWluQ29sb3IoKVxuICAgICAgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSBcbiAgICAgIGNhbnZhcy53aWR0aCA9IHNldHRpbmdzLnJlY3Qud2lkdGhcbiAgICAgIGNhbnZhcy5oZWlnaHQgPSBzZXR0aW5ncy5yZWN0LmhlaWdodFxuICAgICAgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIilcbiAgICAgIHRyeSBcbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoaW1nLDAsMCxzZXR0aW5ncy5yZWN0LndpZHRoLCBzZXR0aW5ncy5yZWN0LmhlaWdodClcbiAgICAgIGNhdGNoIGVycm9yXG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKHdpbmRvdy5kZWZhdWx0SW1hZ2UsMCwwLHNldHRpbmdzLnJlY3Qud2lkdGgsIHNldHRpbmdzLnJlY3QuaGVpZ2h0KVxuXG4gICAgICAgICAgXG4gICAgICByZXR1cm4ge2NhbnZhczpjYW52YXMsIGRvbWFpbkNvbG9yfVxuXG4gICAgc3F1YXJlID0gKHgpIC0+IHhbMF0qeFsxXVxuXG4gICAgaGV4VG9SZ2IgPSAoaGV4KSAtPlxuICAgICAgaGV4ID0gaWYgaGV4LmNoYXJBdCgwKSA9PSBcIiNcIiB0aGVuIGhleC5zdWJzdHJpbmcoMSw3KSBlbHNlIGhleFxuICAgICAgciA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoMCwyKSwxNilcbiAgICAgIGcgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDIsNCksIDE2KVxuICAgICAgYiA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoNCw2KSwgMTYpXG4gICAgICBbcixnLGJdXG5cblxuXG4gICAgcmdiVG9IZXggPSAocmdiKSAtPlxuICAgICAgW3IsIGcsIGJdID0gcmdiXG4gICAgICBcIiNcIisoXCIwMDAwMDBcIisoKHI8PCAxNiB8IGc8PDggfCBiKS50b1N0cmluZygxNikpKS5zbGljZSgtNilcblxuICAgIGlzSUU4ID0gKCkgLT5cbiAgICAgIHRydWUgaWYgbmF2aWdhdG9yLmFwcE5hbWUgPT0gXCJNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXJcIiBhbmQgbmF2aWdhdG9yLmFwcFZlcnNpb24gLnNwbGl0KFwiO1wiKVsxXS5yZXBsYWNlKC9bIF0vZyxcIlwiKSA9PSBcIk1TSUU4LjBcIlxuXG4gICAgaXNJRTcgPSAoKSAtPlxuICAgICAgdHJ1ZSBpZiBuYXZpZ2F0b3IuYXBwTmFtZSA9PSBcIk1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlclwiIGFuZCBuYXZpZ2F0b3IuYXBwVmVyc2lvbiAuc3BsaXQoXCI7XCIpWzFdLnJlcGxhY2UoL1sgXS9nLFwiXCIpID09IFwiTVNJRTcuMFwiXG5cbiAgICByZXR1cm4gQGVhY2ggKGlkeCxlbGVtKS0+XG4gICAgICAkZWxlbSA9ICQoZWxlbSlcbiAgICAgIGxpQXJyYXkgPSAkZWxlbS5maW5kKCdsaScpXG4gICAgICBpbWdBcnJheSA9IFtdXG4gICAgICBjYW52YXNBcnJheSA9IFtdXG5cblxuICAgICAgaWYgaXNJRTgoKSBvciBpc0lFNygpXG5cbiAgICAgICAgJGVsZW0ucGFyZW50KCkuZmluZChcIi5sb2FkaW5nXCIpLnJlbW92ZSgpXG5cbiAgICAgICAgaWYoIXNldHRpbmdzLmhhc0FsYnVtKVxuICAgICAgICAgICRlbGVtLnVuc2xpZGVyXG4gICAgICAgICAgICBmbHVpZDogdHJ1ZVxuICAgICAgICAgICAgZG90czogdHJ1ZVxuICAgICAgICAgICAgZGVsYXk6IDYwMDBcbiAgICAgICAgZWxzZVxuXG4gICAgICAgICAgJGVsZW0uZmluZCgndWwnKS5jc3MoXCJoZWlnaHRcIiwkZWxlbS5oZWlnaHQoKSlcbiAgICAgICAgICBsaUFycmF5ID0gJGVsZW0uZmluZCgnbGknKVxuXG4gICAgICAgICAgIyBsaUFycmF5LmVhY2ggKGkpLT5cbiAgICAgICAgICAjICAgbGkgPSBsaUFycmF5W2ldXG4gICAgICAgICAgIyAgICRpbWcgPSQobGkpLmZpbmQoJ2ltZycpXG4gICAgICAgICAgIyAgIGltYWdlID0gJGltZ1swXVxuXG4gICAgICAgICAgIyAgIG9yaWdpbmFsID0gJChpbWFnZSkuYXR0cihcImRhdGEtb3JpZ2luYWxcIilcbiAgICAgICAgICAjICAgaWYgb3JpZ2luYWw/XG4gICAgICAgICAgIyAgICAgJChpbWFnZSkuYXR0cihcInNyY1wiLFwiaHR0cDpcIitvcmlnaW5hbClcblxuXG4gICAgICAgICAgZm9yIGxpIGluIGxpQXJyYXlcblxuICAgICAgICAgICAgaW1hZ2UgPSAkKGxpKS5maW5kKCdpbWcnKVswXVxuXG4gICAgICAgICAgICAkKGltYWdlKS5jc3MgXCJoZWlnaHRcIiAsICRlbGVtLmhlaWdodCgpXG4gICAgICAgICAgICBpbWdTcmMgPSAkKGltYWdlKS5hdHRyKFwic3JjXCIpXG4gICAgICAgICAgICBvcmlnaW5hbCA9ICQoaW1hZ2UpLmF0dHIoXCJkYXRhLW9yaWdpbmFsXCIpXG4gICAgICAgICAgICBpZiBvcmlnaW5hbD8gdGhlbiAgaW1nU3JjID0gb3JpZ2luYWxcbiAgICAgICAgICAgIGltZ0FycmF5LnB1c2ggaW1nU3JjXG5cbiAgICAgICAgICAkKGVsZW0pLnVuc2xpZGVyXG4gICAgICAgICAgICBmbHVpZDogdHJ1ZVxuICAgICAgICAgICAgZG90czogdHJ1ZVxuICAgICAgICAgICAgZGVsYXk6IDYwMDBcbiAgICAgICAgICAgIGFsYnVtczogaW1nQXJyYXlcblxuICAgICAgZWxzZVxuXG4gICAgICAgIGxpQXJyYXkuZWFjaCAoaSktPlxuICAgICAgICAgIGxpID0gbGlBcnJheVtpXVxuICAgICAgICAgICRpbWcgPSQobGkpLmZpbmQoJ2ltZycpXG4gICAgICAgICAgaW1hZ2UgPSAkaW1nWzBdXG5cbiAgICAgICAgICBvcmlnaW5hbCA9ICQoaW1hZ2UpLmF0dHIoXCJkYXRhLW9yaWdpbmFsXCIpXG4gICAgICAgICAgaWYgb3JpZ2luYWw/XG4gICAgICAgICAgICAkKGltYWdlKS5hdHRyKFwic3JjXCIsb3JpZ2luYWwpXG5cblxuICAgICAgICAgIGltYWdlTG9hZCBpbWFnZSwgKGltZyktPlxuICAgICAgICAgICAgaW1nQXJyYXkucHVzaCAkKGltZykuYXR0cihcInNyY1wiKVxuICAgICAgICAgICAgJGVsZW0udHJpZ2dlciAnaW1hZ2VMb2FkZWQnXG5cbiAgICAgICAgICBjYW52YXNBcnJheS5wdXNoIFxuICAgICAgICAgICAgICBjYW52YXMgOiAgaW1hZ2VcbiAgICAgICAgICAgICAgaW1nIDogaW1hZ2VcbiAgICAgICAgICAgICAgJHBhcmVudDogJChsaSlcblxuXG5cbiAgICAgICAgaW1hZ2VDb3VudCA9IGxpQXJyYXkubGVuZ3RoXG4gICAgICAgICRlbGVtLm9uICdpbWFnZUxvYWRlZCcsIChlKSAtPlxuICAgICAgICAgIGltYWdlQ291bnQtLVxuICAgICAgICAgIGlmIGltYWdlQ291bnQgPT0gMCBcbiAgICAgICAgICAgICRlbGVtLnRyaWdnZXIgJ2ltYWdlc0FsbExvYWRlZCdcblxuXG4gICAgICAgICQoZWxlbSkub24gJ2ltYWdlc0FsbExvYWRlZCcsIC0+XG5cbiAgICAgICAgICAkKGVsZW0pLnBhcmVudCgpLmZpbmQoXCIubG9hZGluZ1wiKS5yZW1vdmUoKVxuICAgICAgICBcbiAgICAgICAgICBjYW52YXNBcnJheS5tYXAgKGMpIC0+XG4gICAgICAgICAgICBjLmNhbnZhcyA9IGNvbnZlcnRJbWFnZVRvQ2FudmFzIGMuY2FudmFzXG4gICAgICAgICAgICBjb252ZXJ0Q2FudmFzVG9JbWFnZSBjXG4gICAgICAgICAgXG4gICAgICAgICAgaWYoIXNldHRpbmdzLmhhc0FsYnVtKVxuICAgICAgICAgXG5cbiAgICAgICAgICAgICQoZWxlbSkudW5zbGlkZXJcbiAgICAgICAgICAgICAgZmx1aWQ6IHRydWVcbiAgICAgICAgICAgICAgZG90czogdHJ1ZVxuICAgICAgICAgICAgICBkZWxheTogNjAwMFxuXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICBcbiAgICAgICAgICAgICQoZWxlbSkudW5zbGlkZXJcbiAgICAgICAgICAgICAgZmx1aWQ6IHRydWVcbiAgICAgICAgICAgICAgZG90czogdHJ1ZVxuICAgICAgICAgICAgICBkZWxheTogNjAwMFxuICAgICAgICAgICAgICBhbGJ1bXM6IGltZ0FycmF5XG4gICAgICAgICAgQFxuICAgICAgQCJdfQ== ;