(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(src) { this.src = src; 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(); 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, offset, pixelCount, pixelMap, pixels, quality, r, sortItem, _i, _ref; 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, res, v1, v2, v3, _ref, _ref1; 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 = _i = 0, _ref = pixelCount - 1; quality > 0 ? _i <= _ref : _i >= _ref; i = _i += quality) { 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, li, liArray, original; if (isIE8() || isIE7()) { imgArray = []; $(elem).parent().find(".loading").remove(); if (!settings.hasAlbum) { $(elem).unslider({ fluid: true, dots: true, delay: 6000 }); } else { canvasArray = (function() { var _i, _len, _results; _results = []; for (_i = 0, _len = liArray.length; _i < _len; _i++) { li = liArray[_i]; image = $(li).find('img')[0]; original = $(image).attr("data-original"); if (original != null) { $(image).attr("src", original); } _results.push(imgArray.push($(image).attr("src"))); } return _results; })(); $(elem).unslider({ fluid: true, dots: true, delay: 6000, albums: imgArray }); } } else { $elem = $(elem); liArray = $elem.find('li'); imgArray = []; canvasArray = []; 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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QUVBLEtBQUEsRUFBTyxJQUZQO0FBQUEsZ0JBR0EsTUFBQSxFQUFRLFFBSFI7ZUFERixDQUFBLENBVkY7YUFOQTttQkFxQkEsS0F2QjRCO1VBQUEsQ0FBOUIsQ0FqQ0EsQ0F6QkY7U0FBQTtlQWtGQSxLQXJGVztNQUFBLENBQU4sQ0FBUCxDQTlKTTtJQUFBLENBQVI7R0FERixDQW5EQSxDQUFBO0FBQUEiLCJmaWxlIjoidm95ZXVyLmpzIiwic291cmNlUm9vdCI6Ii9zb3VyY2UvIiwic291cmNlc0NvbnRlbnQiOlsiJCA9IGpRdWVyeVxyXG5cclxudW5sZXNzIG5hdmlnYXRvci5hcHBOYW1lID09IFwiTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyXCIgYW5kIG5hdmlnYXRvci5hcHBWZXJzaW9uIC5zcGxpdChcIjtcIilbMV0ucmVwbGFjZSgvWyBdL2csXCJcIikgPT0gXCJNU0lFOC4wXCJcclxuICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQucHJvdG90eXBlLm92YWwgPSAoeCwgeSwgd2lkdGgsIGhlaWdodCkgLT5cclxuICAgIGsgPSAoIHdpZHRoIC8gMC43NSApIC8gMlxyXG4gICAgdyA9IHdpZHRoIC8gMlxyXG4gICAgaCA9IGhlaWdodCAvIDJcclxuICAgIEBiZWdpblBhdGgoKVxyXG4gICAgQG1vdmVUbyB4LCB5LWhcclxuICAgIEBiZXppZXJDdXJ2ZVRvKHgrayx5LWgsIHgraywgeStoLCB4LHkraClcclxuICAgIEBtb3ZlVG8geCwgeStoXHJcbiAgICBAYmV6aWVyQ3VydmVUbyh4LWsseStoLCB4LWsseS1oLCB4LHktaClcclxuICAgICMgQG1vdmVUbyB4LWssIHlcclxuICAgICMgQGJlemllckN1cnZlVG8oeC1rLCB5K2gsIHgrayx5K2gsIHgraywgeSlcclxuICAgICMgQGJlemllckN1cnZlVG8oeCtrLHktaCwgeC1rLHktaCwgeC1rLCB5KVxyXG4gICAgIyBAY2xvc2VQYXRoKClcclxuICAgIHJldHVybiBAXHJcblxyXG5pbWFnZUxvYWQgPSAoaW1nLGNhbGxiYWNrKSAtPlxyXG4gICMgY291bnQgPSAwXHJcbiAgIyAkKGltZykub24gJ2xvYWQnLCAoKS0+XHJcbiAgIyAgIGNvdW50Kz0xXHJcblxyXG4gIHRpbWVyID0gc2V0SW50ZXJ2YWwgKCktPlxyXG5cclxuICAgIGlmIGltZy5jb21wbGV0ZT9cclxuICAgICAgaWYgaW1nLm5hdHVyYWxXaWR0aD8gYW5kIGltZy5uYXR1cmFsV2lkdGggIT0gMFxyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwgdGltZXJcclxuICAgICAgICBjYWxsYmFjayhpbWcpXHJcbiAgICAgIGVsc2UgaWYgd2luZG93LmRlZmF1bHRJbWFnZSBpc250IHVuZGVmaW5lZFxyXG4gICAgICAgIGltZy5zcmMgPSB3aW5kb3cuZGVmYXVsdEltYWdlLnNyY1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwgdGltZXJcclxuICAgICAgICBzZWNvbmRUaW1lciA9IHNldEludGVydmFsICgpLT5cclxuXHJcbiAgICAgICAgICBpZiBpbWcuY29tcGxldGU/XHJcbiAgICAgICAgICAgICAgaWYgaW1nLm5hdHVyYWxXaWR0aD8gYW5kIGltZy5uYXR1cmFsV2lkdGggIT0gMFxyXG4gICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCBzZWNvbmRUaW1lclxyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soaW1nKVxyXG4gICAgICAgICw1MFxyXG5cclxuICAsIDUwMFxyXG4gIEBcclxuXHJcblxyXG5jYWNoZSA9IHt9XHJcblxyXG5jbGFzcyBSZXNvdXJjZVxyXG4gIGNvbnN0cnVjdG9yOiAoQHNyYykgLT5cclxuICAgIGNhY2hlWyBzcmMgXSA9IHRoaXNcclxuXHJcblxyXG4kLmZuLmV4dGVuZFxyXG4gIHZveWV1cjogKG9wdGlvbnMpIC0+XHJcbiAgICBzZXR0aW5ncyA9XHJcbiAgICAgIGhhc0FsYnVtIDogdHJ1ZVxyXG4gICAgICBjb2xvclBvc2l0aW9uOlxyXG4gICAgICAgIHg6MFxyXG4gICAgICAgIHk6MFxyXG4gICAgICByZWN0OlxyXG4gICAgICAgIHdpZHRoOiA5NjBcclxuICAgICAgICBoZWlnaHQ6IDQ1MFxyXG4gICAgICBtYXNrOlxyXG4gICAgICAgIHJhZGlhbDpcclxuICAgICAgICAgIHJhZGl1czogWzAsMTBdXHJcbiAgICAgICAgICB6b29tOiA1MFxyXG5cclxuICAgIHNldHRpbmdzID0gJC5leHRlbmQgc2V0dGluZ3MsIG9wdGlvbnNcclxuXHJcbiAgICBcclxuXHJcbiAgICBjb252ZXJ0Q2FudmFzVG9JbWFnZSA9IChjKSAtPlxyXG4gICAgICBjYW52YXMgPSBjLmNhbnZhcy5jYW52YXNcclxuICAgICAgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpXHJcbiAgICAgIHAgPSBjLmNhbnZhcy5kb21haW5Db2xvclxyXG5cclxuICAgICAgdyA9IHNldHRpbmdzLnJlY3Qud2lkdGhcclxuICAgICAgaCA9IHNldHRpbmdzLnJlY3QuaGVpZ2h0XHJcbiAgICAgIG0gPSBzZXR0aW5ncy5tYXNrXHJcbiAgICAgIHIgPSBtLnJhZGlhbC5yYWRpdXNcclxuICAgICAgeiA9IG0ucmFkaWFsLnpvb21cclxuXHJcbiAgICAgICNwaWNrdXAgY29sb3JcclxuICAgICAgcG9zaXRpb24gPSBzZXR0aW5ncy5jb2xvclBvc2l0aW9uXHJcblxyXG4gICAgICBhcmVhUG9pbnQgPSBbIFsgMTAsIDEwIF0gLCBbdy0xMCwgMTBdICxbdy0xMCxoLTEwXSwgWzEwLCBoLTEwXSBdXHJcblxyXG4gICAgICBcclxuXHJcblxyXG4gICAgICAjIGlmIHBpY2t1cENvbG9ycz9cclxuICAgICAgIyAgIGNvbG9yc2NoZW1lQXJyYXkgPSBwaWNrdXBDb2xvcnNcclxuICAgICAgIyBlbHNlXHJcbiAgICAgICMgICBjb2xvcnNjaGVtZUFycmF5ID0gWyBbMTAzLDIxMywyNDEsMjU1XSAsIFsyMTMsMjEzLDIxMywyNTVdICxbIDMxLCAyMjIsMTExLDI1NV0sIFs0NCwxMjMsMTI0LDI1NV0gXVxyXG5cclxuICAgICAgIyBpZHggPSBwYXJzZUludChNYXRoLnJhbmRvbSgpICogY29sb3JzY2hlbWVBcnJheS5sZW5ndGgpXHJcblxyXG5cclxuXHJcbiAgICAgICMgcCA9IGNvbG9yc2NoZW1lQXJyYXlbaWR4XVxyXG4gICAgICBcclxuICAgICAgcCA9IFszNCwzNCwzNF0gaWYgIXBcclxuICAgICAgXHJcbiAgICAgIGVuZCA9IFwicmdiYShcIitwWzBdK1wiLFwiK3BbMV0rXCIsXCIrcFsyXStcIiwgMSlcIlxyXG4gICAgICAjIGNvbnNvbGUubG9nKGVuZClcclxuICAgICAgI2RyYXcgYXJjIHdpdGggZ3JhZGllbnRcclxuICAgICAgZ3JhZGllbnQgPSBjb250ZXh0LmNyZWF0ZVJhZGlhbEdyYWRpZW50KHcgLyAyICxoIC8gMiAsIHJbMF0gLHcgLyAyLGggLyAyLCB3IC8gMityWzFdKVxyXG4gICAgICBncmFkaWVudC5hZGRDb2xvclN0b3AoMCxcInJnYmEoXCIrcFswXStcIixcIitwWzFdK1wiLFwiK3BbMl0rXCIsIDApXCIpXHJcbiAgICAgIGdyYWRpZW50LmFkZENvbG9yU3RvcCgwLjgsXCJyZ2JhKFwiK3BbMF0rXCIsXCIrcFsxXStcIixcIitwWzJdK1wiLCAwLjUpXCIpXHJcbiAgICAgICMgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKDAuNSwgXCJyZ2JhKFwiICsgMjU1IC0gKCAyNTUgLSBwWzBdICkvMiArIFwiLDI0NiwyNDYsMC41KVwiKVxyXG4gICAgICBncmFkaWVudC5hZGRDb2xvclN0b3AoMSxlbmQpXHJcblxyXG5cclxuICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBncmFkaWVudFxyXG4gICAgICBjb250ZXh0LmZpbGxSZWN0KDAsMCx3LGgpXHJcbiAgICAgIGNvbnRleHQuc2F2ZSgpXHJcblxyXG5cclxuXHJcbiAgICAgIGlmIHR5cGVvZihjYW52YXMudG9EYXRhVVJMKSA9PSBcImZ1bmN0aW9uXCJcclxuICAgICAgICBpbWcgPSBjYW52YXMudG9EYXRhVVJMKFwiaW1hZ2UvanBnXCIpXHJcbiAgICAgICAgb3JpU3JjID0gJChjLmltZykuYXR0cignc3JjJylcclxuICAgICAgICAkKGMuaW1nKS5yZXBsYWNlV2l0aCgkKCc8aW1nIHNyYz1cIicrIGltZysgJ1wiLz4nKSlcclxuICAgICAgICAjICQoYy5pbWcpLmNoaWxkcmVuKCdpbWcnKS5jc3MgYmFja2dyb3VuZCA6IFwidXJsKCdvcmlTcmMnKVwiXHJcbiAgICAgIGMuJHBhcmVudC5jc3MgYmFja2dyb3VuZCA6IHJnYlRvSGV4KHApIFxyXG5cclxuICAgIGNvbnZlcnRJbWFnZVRvQ2FudmFzID0gKGltZykgLT5cclxuICAgICAgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKVxyXG5cclxuICAgICAgdyA9IGltZy53aWR0aFxyXG4gICAgICBoID0gaW1nLmhlaWdodFxyXG4gICAgICBpZiAhY2FudmFzLmdldENvbnRleHQgdGhlbiBHX3ZtbENhbnZhc01hbmFnZXIuaW5pdEVsZW1lbnQoY2FudmFzKSBcclxuICAgICAgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIilcclxuXHJcbiAgICAgIGdldERvbWFpbkNvbG9yID0gKCktPlxyXG5cclxuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShpbWcsIDAsMCx3LGgpXHJcblxyXG4gICAgICAgIGlmIHR5cGVvZihjb250ZXh0LmdldEltYWdlRGF0YSk9PVwiZnVuY3Rpb25cIlxyXG4gICAgICAgICAgcGl4ZWxzID0gY29udGV4dC5nZXRJbWFnZURhdGEoMCwwLHcsaCkuZGF0YVxyXG4gICAgICAgICAgcGl4ZWxDb3VudCA9IHcqaFxyXG4gICAgICAgICAgcGl4ZWxNYXAgPSB7fVxyXG4gICAgICAgICAgcXVhbGl0eSA9IDUwMDBcclxuICAgICAgICAgIGNvbG9yQXJyeSA9IFtdXHJcbiAgICAgICAgICBzb3J0SXRlbSA9ICgpIC0+XHJcbiAgICAgICAgICAgIHJlcyA9IFtdXHJcbiAgICAgICAgICAgIHBpeGVsQXJyeSA9IE9iamVjdC5rZXlzKHBpeGVsTWFwKS5zb3J0IChhLGIpIC0+IHBpeGVsTWFwW2FdIDwgcGl4ZWxNYXBbYl1cclxuICAgICAgICAgICAgdjEgPSBwaXhlbEFycnlbMF1cclxuICAgICAgICAgICAgdjIgPSBwaXhlbEFycnlbMV1cclxuICAgICAgICAgICAgdjMgPSBwaXhlbEFycnlbcGl4ZWxBcnJ5Lmxlbmd0aCAtIDFdXHJcbiAgICAgICAgICAgIGZvciBjbyBvZiBjb2xvckFycnlcclxuICAgICAgICAgICAgICBpZiBjb2xvckFycnlbY29dPy5pbmRleCA9PSB2MSBvciBjb2xvckFycnlbY29dLmluZGV4ID09IHYyIG9yIGNvbG9yQXJyeVtjb10uaW5kZXggPT0gdjNcclxuICAgICAgICAgICAgICAgIHJlcy5wdXNoKGNvbG9yQXJyeVtjb10pXHJcbiAgICAgICAgICAgIHJldHVybiByZXNbMF0/LmNvbG9yXHJcbiAgICAgICAgICBcclxuICAgICAgICAgIGZvciBpIGluIFswLi5waXhlbENvdW50LTFdIGJ5IHF1YWxpdHlcclxuICAgICAgICAgICAgb2Zmc2V0ID0gaSAqNFxyXG4gICAgICAgICAgICByID0gcGl4ZWxzW29mZnNldCArIDBdO1xyXG4gICAgICAgICAgICBnID0gcGl4ZWxzW29mZnNldCArIDFdO1xyXG4gICAgICAgICAgICBiID0gcGl4ZWxzW29mZnNldCArIDJdO1xyXG4gICAgICAgICAgICBhID0gcGl4ZWxzW29mZnNldCArIDNdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgYSA+PSAxMjVcclxuICAgICAgICAgICAgICB1bmxlc3MgciA+IDI1MCBhbmQgZyA+IDI1MCBhbmQgYiA+IDI1MFxyXG4gICAgICAgICAgICAgICAgaW5kZXggPSAnYycrIChyIDw8ICgyKjUpICkrIChnIDw8ICg1KSkgKyBiXHJcblxyXG4gICAgICAgICAgICAgICAgaWYgcGl4ZWxNYXBbaW5kZXhdPyBcclxuICAgICAgICAgICAgICAgICAgcGl4ZWxNYXBbaW5kZXhdICs9MSBcclxuICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBlbHNlIFxyXG4gICAgICAgICAgICAgICAgICBjb2xvckFycnkucHVzaCh7Y29sb3I6W3IsZyxiXSxpbmRleDppbmRleH0pXHJcbiAgICAgICAgICAgICAgICAgIHBpeGVsTWFwW2luZGV4XSA9IDBcclxuXHJcbiAgICAgICAgICByZXR1cm4gIHNvcnRJdGVtKClcclxuICAgICAgICBlbHNlIFxyXG4gICAgICAgICAgcmV0dXJuIFsxMDMsMjEzLDI0MSwyNTVdXHJcblxyXG4gICAgICBkb21haW5Db2xvciA9IGdldERvbWFpbkNvbG9yKClcclxuICAgICAgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSBcclxuICAgICAgY2FudmFzLndpZHRoID0gc2V0dGluZ3MucmVjdC53aWR0aFxyXG4gICAgICBjYW52YXMuaGVpZ2h0ID0gc2V0dGluZ3MucmVjdC5oZWlnaHRcclxuICAgICAgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIilcclxuICAgICAgdHJ5IFxyXG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGltZywwLDAsc2V0dGluZ3MucmVjdC53aWR0aCwgc2V0dGluZ3MucmVjdC5oZWlnaHQpXHJcbiAgICAgIGNhdGNoIGVycm9yXHJcbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2Uod2luZG93LmRlZmF1bHRJbWFnZSwwLDAsc2V0dGluZ3MucmVjdC53aWR0aCwgc2V0dGluZ3MucmVjdC5oZWlnaHQpXHJcblxyXG4gICAgICAgICAgXHJcbiAgICAgIHJldHVybiB7Y2FudmFzOmNhbnZhcywgZG9tYWluQ29sb3J9XHJcblxyXG4gICAgc3F1YXJlID0gKHgpIC0+IHhbMF0qeFsxXVxyXG5cclxuICAgIGhleFRvUmdiID0gKGhleCkgLT5cclxuICAgICAgaGV4ID0gaWYgaGV4LmNoYXJBdCgwKSA9PSBcIiNcIiB0aGVuIGhleC5zdWJzdHJpbmcoMSw3KSBlbHNlIGhleFxyXG4gICAgICByID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZygwLDIpLDE2KVxyXG4gICAgICBnID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZygyLDQpLCAxNilcclxuICAgICAgYiA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoNCw2KSwgMTYpXHJcbiAgICAgIFtyLGcsYl1cclxuXHJcblxyXG5cclxuICAgIHJnYlRvSGV4ID0gKHJnYikgLT5cclxuICAgICAgW3IsIGcsIGJdID0gcmdiXHJcbiAgICAgIFwiI1wiKyhcIjAwMDAwMFwiKygocjw8IDE2IHwgZzw8OCB8IGIpLnRvU3RyaW5nKDE2KSkpLnNsaWNlKC02KVxyXG5cclxuICAgIGlzSUU4ID0gKCkgLT5cclxuICAgICAgdHJ1ZSBpZiBuYXZpZ2F0b3IuYXBwTmFtZSA9PSBcIk1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlclwiIGFuZCBuYXZpZ2F0b3IuYXBwVmVyc2lvbiAuc3BsaXQoXCI7XCIpWzFdLnJlcGxhY2UoL1sgXS9nLFwiXCIpID09IFwiTVNJRTguMFwiXHJcblxyXG4gICAgaXNJRTcgPSAoKSAtPlxyXG4gICAgICB0cnVlIGlmIG5hdmlnYXRvci5hcHBOYW1lID09IFwiTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyXCIgYW5kIG5hdmlnYXRvci5hcHBWZXJzaW9uIC5zcGxpdChcIjtcIilbMV0ucmVwbGFjZSgvWyBdL2csXCJcIikgPT0gXCJNU0lFNy4wXCJcclxuXHJcbiAgICByZXR1cm4gQGVhY2ggKGlkeCxlbGVtKS0+XHJcblxyXG5cclxuICAgICAgaWYgaXNJRTgoKSBvciBpc0lFNygpXHJcbiAgICAgICAgaW1nQXJyYXkgPSBbXVxyXG4gICAgICAgICQoZWxlbSkucGFyZW50KCkuZmluZChcIi5sb2FkaW5nXCIpLnJlbW92ZSgpXHJcblxyXG4gICAgICAgIGlmKCFzZXR0aW5ncy5oYXNBbGJ1bSlcclxuICAgICAgICAgICQoZWxlbSkudW5zbGlkZXJcclxuICAgICAgICAgICAgZmx1aWQ6IHRydWVcclxuICAgICAgICAgICAgZG90czogdHJ1ZVxyXG4gICAgICAgICAgICBkZWxheTogNjAwMFxyXG4gICAgICAgIGVsc2VcclxuXHJcbiAgICAgICAgICBjYW52YXNBcnJheSA9IGZvciBsaSBpbiBsaUFycmF5XHJcbiAgICAgICAgICAgIGltYWdlID0gJChsaSkuZmluZCgnaW1nJylbMF1cclxuICAgICAgICAgICAgb3JpZ2luYWwgPSAkKGltYWdlKS5hdHRyKFwiZGF0YS1vcmlnaW5hbFwiKVxyXG4gICAgICAgICAgICBpZiBvcmlnaW5hbD9cclxuICAgICAgICAgICAgICAkKGltYWdlKS5hdHRyKFwic3JjXCIsb3JpZ2luYWwpXHJcbiAgICAgICAgICAgIGltZ0FycmF5LnB1c2ggJChpbWFnZSkuYXR0cihcInNyY1wiKVxyXG5cclxuICAgICAgICAgICQoZWxlbSkudW5zbGlkZXJcclxuICAgICAgICAgICAgZmx1aWQ6IHRydWVcclxuICAgICAgICAgICAgZG90czogdHJ1ZVxyXG4gICAgICAgICAgICBkZWxheTogNjAwMFxyXG4gICAgICAgICAgICBhbGJ1bXM6IGltZ0FycmF5XHJcblxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgJGVsZW0gPSAkKGVsZW0pXHJcbiAgICAgICAgbGlBcnJheSA9ICRlbGVtLmZpbmQoJ2xpJylcclxuICAgICAgICBpbWdBcnJheSA9IFtdXHJcbiAgICAgICAgY2FudmFzQXJyYXkgPSBbXVxyXG5cclxuICAgICAgICBsaUFycmF5LmVhY2ggKGkpLT5cclxuICAgICAgICAgIGxpID0gbGlBcnJheVtpXVxyXG4gICAgICAgICAgJGltZyA9JChsaSkuZmluZCgnaW1nJylcclxuICAgICAgICAgIGltYWdlID0gJGltZ1swXVxyXG5cclxuICAgICAgICAgIG9yaWdpbmFsID0gJChpbWFnZSkuYXR0cihcImRhdGEtb3JpZ2luYWxcIilcclxuICAgICAgICAgIGlmIG9yaWdpbmFsP1xyXG4gICAgICAgICAgICAkKGltYWdlKS5hdHRyKFwic3JjXCIsb3JpZ2luYWwpXHJcblxyXG5cclxuICAgICAgICAgIGltYWdlTG9hZCBpbWFnZSwgKGltZyktPlxyXG4gICAgICAgICAgICBpbWdBcnJheS5wdXNoICQoaW1nKS5hdHRyKFwic3JjXCIpXHJcbiAgICAgICAgICAgICRlbGVtLnRyaWdnZXIgJ2ltYWdlTG9hZGVkJ1xyXG5cclxuICAgICAgICAgIGNhbnZhc0FycmF5LnB1c2ggXHJcbiAgICAgICAgICAgICAgY2FudmFzIDogIGltYWdlXHJcbiAgICAgICAgICAgICAgaW1nIDogaW1hZ2VcclxuICAgICAgICAgICAgICAkcGFyZW50OiAkKGxpKVxyXG5cclxuXHJcblxyXG4gICAgICAgIGltYWdlQ291bnQgPSBsaUFycmF5Lmxlbmd0aFxyXG4gICAgICAgICRlbGVtLm9uICdpbWFnZUxvYWRlZCcsIChlKSAtPlxyXG4gICAgICAgICAgaW1hZ2VDb3VudC0tXHJcbiAgICAgICAgICBpZiBpbWFnZUNvdW50ID09IDAgXHJcbiAgICAgICAgICAgICRlbGVtLnRyaWdnZXIgJ2ltYWdlc0FsbExvYWRlZCdcclxuXHJcblxyXG4gICAgICAgICQoZWxlbSkub24gJ2ltYWdlc0FsbExvYWRlZCcsIC0+XHJcblxyXG4gICAgICAgICAgJChlbGVtKS5wYXJlbnQoKS5maW5kKFwiLmxvYWRpbmdcIikucmVtb3ZlKClcclxuICAgICAgICBcclxuICAgICAgICAgIGNhbnZhc0FycmF5Lm1hcCAoYykgLT5cclxuICAgICAgICAgICAgYy5jYW52YXMgPSBjb252ZXJ0SW1hZ2VUb0NhbnZhcyBjLmNhbnZhc1xyXG4gICAgICAgICAgICBjb252ZXJ0Q2FudmFzVG9JbWFnZSBjXHJcbiAgICAgICAgICBcclxuICAgICAgICAgIGlmKCFzZXR0aW5ncy5oYXNBbGJ1bSlcclxuICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAkKGVsZW0pLnVuc2xpZGVyXHJcbiAgICAgICAgICAgICAgZmx1aWQ6IHRydWVcclxuICAgICAgICAgICAgICBkb3RzOiB0cnVlXHJcbiAgICAgICAgICAgICAgZGVsYXk6IDYwMDBcclxuXHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgICQoZWxlbSkudW5zbGlkZXJcclxuICAgICAgICAgICAgICBmbHVpZDogdHJ1ZVxyXG4gICAgICAgICAgICAgIGRvdHM6IHRydWVcclxuICAgICAgICAgICAgICBkZWxheTogNjAwMFxyXG4gICAgICAgICAgICAgIGFsYnVtczogaW1nQXJyYXlcclxuICAgICAgICAgIEBcclxuICAgICAgQCJdfQ== ;