UNPKG

@wellwind/thanos-snap

Version:

Use [Thanos](https://www.google.com/search?q=Thanos) snap to destory your DOM elements.

95 lines 16.5 kB
// to fix error: Cannot call a namespace ('html2canvas') import * as html2canvas_ from 'html2canvas'; import { range } from 'ramda'; const html2canvas = html2canvas_; const LAYERS = 32; const TRANSITION_DURATION = 1.5; const TRANSITION_DELAY = 1.35; const sampler = (layerImages, sourceImgData, width, height) => { const layerCount = layerImages.length; const repeat = 2; range(0, width).forEach(x => { range(0, height).forEach(y => { range(0, repeat).forEach(n => { const pieceIndex = Math.floor((layerCount * (Math.random() + (2 * x) / width)) / 3); const pixelPos = 4 * (y * width + x); for (let rgbaIndex = 0; rgbaIndex < 4; rgbaIndex++) { const dataPos = pixelPos + rgbaIndex; layerImages[pieceIndex].data[dataPos] = sourceImgData.data[dataPos]; } }); }); }); }; const ɵ0 = sampler; const transformLayerCanvas = (canvas) => { const rotate1 = 15 * (Math.random() - 0.5); const rotate2 = 15 * (Math.random() - 0.5); const fac = 2 * Math.PI * (Math.random() - 0.5); const translateX = 60 * Math.cos(fac); const translateY = 30 * Math.sin(fac); canvas.style.transform = `rotate(${rotate1}deg) translate(${translateX}px, ${translateY}px) rotate(${rotate2}deg)`; canvas.style.opacity = '0'; const removeDelay = 1e3 * (TRANSITION_DURATION + 1 + Math.random()); setTimeout(() => canvas.remove(), removeDelay); }; const ɵ1 = transformLayerCanvas; // fix retina problem // https://github.com/cburgmer/rasterizeHTML.js/blob/master/examples/retina.html const backingScale = () => { if (window.devicePixelRatio && window.devicePixelRatio > 1) { return window.devicePixelRatio; } return 1; }; const ɵ2 = backingScale; export const thanosRewind = (target) => new Promise(resolve => { target.style.opacity = '1'; target.style.visibility = 'visible'; resolve(); }); export const thanosSnap = (target) => new Promise(resolve => { const effect = document.createElement('div'); effect.classList.add('thanos'); target.parentNode.insertBefore(effect, target); const targetRect = target.getBoundingClientRect(); html2canvas(target).then((canvas) => { const context = canvas.getContext('2d'); effect.style.position = 'absolute'; effect.style.left = targetRect.left + 'px'; effect.style.top = targetRect.top + 'px'; effect.style.width = targetRect.width + 'px'; effect.style.height = targetRect.height + 'px'; const { width, height } = canvas; // get element imageData const imgData = context.getImageData(0, 0, width, height); const layerImages = range(0, LAYERS).map(_ => context.createImageData(width, height)); sampler(layerImages, imgData, width, height); layerImages.forEach((effectImage, index) => { const newCanvas = document.createElement('canvas'); newCanvas.style.position = 'absolute'; newCanvas.style.transition = `all ${TRANSITION_DURATION}s`; newCanvas.width = targetRect.width * backingScale(); newCanvas.height = targetRect.height * backingScale(); newCanvas.style.width = `${newCanvas.width / backingScale()}px`; newCanvas.style.height = `${newCanvas.height / backingScale()}px`; const newContext = newCanvas.getContext('2d'); newContext.putImageData(effectImage, 0, 0); effect.appendChild(newCanvas); const transitionDelay = TRANSITION_DELAY * (index / layerImages.length); newCanvas.style.transitionDelay = `${transitionDelay}s`; setTimeout(() => transformLayerCanvas(newCanvas), 0); }); target.style.transition = `opacity ${TRANSITION_DURATION} ease`; target.style.opacity = '0'; setTimeout(() => { target.style.visibility = 'hidden'; effect.remove(); resolve({ rewind: () => thanosRewind(target) }); }, 1e3 * TRANSITION_DURATION); }); }); export { ɵ0, ɵ1, ɵ2 }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhhbm9zLXNuYXAuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ad2VsbHdpbmQvdGhhbm9zLXNuYXAvIiwic291cmNlcyI6WyJsaWIvdGhhbm9zLXNuYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0RBQXdEO0FBQ3hELE9BQU8sS0FBSyxZQUFZLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFOUIsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDO0FBRWpDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNsQixNQUFNLG1CQUFtQixHQUFHLEdBQUcsQ0FBQztBQUNoQyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQztBQUU5QixNQUFNLE9BQU8sR0FBRyxDQUNkLFdBQXdCLEVBQ3hCLGFBQXdCLEVBQ3hCLEtBQWEsRUFDYixNQUFjLEVBQ2QsRUFBRTtJQUNGLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7SUFDdEMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQzFCLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzNCLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUMzQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUMzQixDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDckQsQ0FBQztnQkFDRixNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNyQyxLQUFLLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxTQUFTLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFO29CQUNsRCxNQUFNLE9BQU8sR0FBRyxRQUFRLEdBQUcsU0FBUyxDQUFDO29CQUNyQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ3JFO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDOztBQUVGLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxNQUF5QixFQUFFLEVBQUU7SUFDekQsTUFBTSxPQUFPLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sT0FBTyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNoRCxNQUFNLFVBQVUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QyxNQUFNLFVBQVUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV0QyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxVQUFVLE9BQU8sa0JBQWtCLFVBQVUsT0FBTyxVQUFVLGNBQWMsT0FBTyxNQUFNLENBQUM7SUFDbkgsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0lBRTNCLE1BQU0sV0FBVyxHQUFHLEdBQUcsR0FBRyxDQUFDLG1CQUFtQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNwRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ2pELENBQUMsQ0FBQzs7QUFFRixxQkFBcUI7QUFDckIsZ0ZBQWdGO0FBQ2hGLE1BQU0sWUFBWSxHQUFHLEdBQUcsRUFBRTtJQUN4QixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFO1FBQzFELE9BQU8sTUFBTSxDQUFDLGdCQUFnQixDQUFDO0tBQ2hDO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDLENBQUM7O0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsTUFBbUIsRUFBRSxFQUFFLENBQ2xELElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0lBQ3BCLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztJQUMzQixNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7SUFDcEMsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDLENBQUMsQ0FBQztBQUVMLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQW1CLEVBQUUsRUFBRSxDQUNoRCxJQUFJLE9BQU8sQ0FBdUIsT0FBTyxDQUFDLEVBQUU7SUFDMUMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvQixNQUFNLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDL0MsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFFbEQsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQXlCLEVBQUUsRUFBRTtRQUNyRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUMzQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztRQUN6QyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUM3QyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUUvQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUVqQyx3QkFBd0I7UUFDeEIsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUUxRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUMzQyxPQUFPLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FDdkMsQ0FBQztRQUNGLE9BQU8sQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU3QyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3pDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFbkQsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO1lBQ3RDLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sbUJBQW1CLEdBQUcsQ0FBQztZQUUzRCxTQUFTLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLEdBQUcsWUFBWSxFQUFFLENBQUM7WUFDcEQsU0FBUyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxHQUFHLFlBQVksRUFBRSxDQUFDO1lBRXRELFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxZQUFZLEVBQUUsSUFBSSxDQUFDO1lBQ2hFLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxZQUFZLEVBQUUsSUFBSSxDQUFDO1lBRWxFLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRTNDLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFOUIsTUFBTSxlQUFlLEdBQUcsZ0JBQWdCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hFLFNBQVMsQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLEdBQUcsZUFBZSxHQUFHLENBQUM7WUFFeEQsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsV0FBVyxtQkFBbUIsT0FBTyxDQUFDO1FBQ2hFLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUUzQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO1lBQ25DLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixPQUFPLENBQUM7Z0JBQ04sTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7YUFDbkMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxFQUFFLEdBQUcsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ2hDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0byBmaXggZXJyb3I6IENhbm5vdCBjYWxsIGEgbmFtZXNwYWNlICgnaHRtbDJjYW52YXMnKVxyXG5pbXBvcnQgKiBhcyBodG1sMmNhbnZhc18gZnJvbSAnaHRtbDJjYW52YXMnO1xyXG5pbXBvcnQgeyByYW5nZSB9IGZyb20gJ3JhbWRhJztcclxuXHJcbmNvbnN0IGh0bWwyY2FudmFzID0gaHRtbDJjYW52YXNfO1xyXG5cclxuY29uc3QgTEFZRVJTID0gMzI7XHJcbmNvbnN0IFRSQU5TSVRJT05fRFVSQVRJT04gPSAxLjU7XHJcbmNvbnN0IFRSQU5TSVRJT05fREVMQVkgPSAxLjM1O1xyXG5cclxuY29uc3Qgc2FtcGxlciA9IChcclxuICBsYXllckltYWdlczogSW1hZ2VEYXRhW10sXHJcbiAgc291cmNlSW1nRGF0YTogSW1hZ2VEYXRhLFxyXG4gIHdpZHRoOiBudW1iZXIsXHJcbiAgaGVpZ2h0OiBudW1iZXJcclxuKSA9PiB7XHJcbiAgY29uc3QgbGF5ZXJDb3VudCA9IGxheWVySW1hZ2VzLmxlbmd0aDtcclxuICBjb25zdCByZXBlYXQgPSAyO1xyXG4gIHJhbmdlKDAsIHdpZHRoKS5mb3JFYWNoKHggPT4ge1xyXG4gICAgcmFuZ2UoMCwgaGVpZ2h0KS5mb3JFYWNoKHkgPT4ge1xyXG4gICAgICByYW5nZSgwLCByZXBlYXQpLmZvckVhY2gobiA9PiB7XHJcbiAgICAgICAgY29uc3QgcGllY2VJbmRleCA9IE1hdGguZmxvb3IoXHJcbiAgICAgICAgICAobGF5ZXJDb3VudCAqIChNYXRoLnJhbmRvbSgpICsgKDIgKiB4KSAvIHdpZHRoKSkgLyAzXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBwaXhlbFBvcyA9IDQgKiAoeSAqIHdpZHRoICsgeCk7XHJcbiAgICAgICAgZm9yIChsZXQgcmdiYUluZGV4ID0gMDsgcmdiYUluZGV4IDwgNDsgcmdiYUluZGV4KyspIHtcclxuICAgICAgICAgIGNvbnN0IGRhdGFQb3MgPSBwaXhlbFBvcyArIHJnYmFJbmRleDtcclxuICAgICAgICAgIGxheWVySW1hZ2VzW3BpZWNlSW5kZXhdLmRhdGFbZGF0YVBvc10gPSBzb3VyY2VJbWdEYXRhLmRhdGFbZGF0YVBvc107XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH0pO1xyXG59O1xyXG5cclxuY29uc3QgdHJhbnNmb3JtTGF5ZXJDYW52YXMgPSAoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCkgPT4ge1xyXG4gIGNvbnN0IHJvdGF0ZTEgPSAxNSAqIChNYXRoLnJhbmRvbSgpIC0gMC41KTtcclxuICBjb25zdCByb3RhdGUyID0gMTUgKiAoTWF0aC5yYW5kb20oKSAtIDAuNSk7XHJcbiAgY29uc3QgZmFjID0gMiAqIE1hdGguUEkgKiAoTWF0aC5yYW5kb20oKSAtIDAuNSk7XHJcbiAgY29uc3QgdHJhbnNsYXRlWCA9IDYwICogTWF0aC5jb3MoZmFjKTtcclxuICBjb25zdCB0cmFuc2xhdGVZID0gMzAgKiBNYXRoLnNpbihmYWMpO1xyXG5cclxuICBjYW52YXMuc3R5bGUudHJhbnNmb3JtID0gYHJvdGF0ZSgke3JvdGF0ZTF9ZGVnKSB0cmFuc2xhdGUoJHt0cmFuc2xhdGVYfXB4LCAke3RyYW5zbGF0ZVl9cHgpIHJvdGF0ZSgke3JvdGF0ZTJ9ZGVnKWA7XHJcbiAgY2FudmFzLnN0eWxlLm9wYWNpdHkgPSAnMCc7XHJcblxyXG4gIGNvbnN0IHJlbW92ZURlbGF5ID0gMWUzICogKFRSQU5TSVRJT05fRFVSQVRJT04gKyAxICsgTWF0aC5yYW5kb20oKSk7XHJcbiAgc2V0VGltZW91dCgoKSA9PiBjYW52YXMucmVtb3ZlKCksIHJlbW92ZURlbGF5KTtcclxufTtcclxuXHJcbi8vIGZpeCByZXRpbmEgcHJvYmxlbVxyXG4vLyBodHRwczovL2dpdGh1Yi5jb20vY2J1cmdtZXIvcmFzdGVyaXplSFRNTC5qcy9ibG9iL21hc3Rlci9leGFtcGxlcy9yZXRpbmEuaHRtbFxyXG5jb25zdCBiYWNraW5nU2NhbGUgPSAoKSA9PiB7XHJcbiAgaWYgKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvICYmIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvID4gMSkge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xyXG4gIH1cclxuICByZXR1cm4gMTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCB0aGFub3NSZXdpbmQgPSAodGFyZ2V0OiBIVE1MRWxlbWVudCkgPT5cclxuICBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgIHRhcmdldC5zdHlsZS5vcGFjaXR5ID0gJzEnO1xyXG4gICAgdGFyZ2V0LnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcbiAgICByZXNvbHZlKCk7XHJcbiAgfSk7XHJcblxyXG5leHBvcnQgY29uc3QgdGhhbm9zU25hcCA9ICh0YXJnZXQ6IEhUTUxFbGVtZW50KSA9PlxyXG4gIG5ldyBQcm9taXNlPHsgcmV3aW5kOiAoKSA9PiB7fSB9PihyZXNvbHZlID0+IHtcclxuICAgIGNvbnN0IGVmZmVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgZWZmZWN0LmNsYXNzTGlzdC5hZGQoJ3RoYW5vcycpO1xyXG4gICAgdGFyZ2V0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGVmZmVjdCwgdGFyZ2V0KTtcclxuICAgIGNvbnN0IHRhcmdldFJlY3QgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gICAgaHRtbDJjYW52YXModGFyZ2V0KS50aGVuKChjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50KSA9PiB7XHJcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgZWZmZWN0LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcclxuICAgICAgZWZmZWN0LnN0eWxlLmxlZnQgPSB0YXJnZXRSZWN0LmxlZnQgKyAncHgnO1xyXG4gICAgICBlZmZlY3Quc3R5bGUudG9wID0gdGFyZ2V0UmVjdC50b3AgKyAncHgnO1xyXG4gICAgICBlZmZlY3Quc3R5bGUud2lkdGggPSB0YXJnZXRSZWN0LndpZHRoICsgJ3B4JztcclxuICAgICAgZWZmZWN0LnN0eWxlLmhlaWdodCA9IHRhcmdldFJlY3QuaGVpZ2h0ICsgJ3B4JztcclxuXHJcbiAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gY2FudmFzO1xyXG5cclxuICAgICAgLy8gZ2V0IGVsZW1lbnQgaW1hZ2VEYXRhXHJcbiAgICAgIGNvbnN0IGltZ0RhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcclxuXHJcbiAgICAgIGNvbnN0IGxheWVySW1hZ2VzID0gcmFuZ2UoMCwgTEFZRVJTKS5tYXAoXyA9PlxyXG4gICAgICAgIGNvbnRleHQuY3JlYXRlSW1hZ2VEYXRhKHdpZHRoLCBoZWlnaHQpXHJcbiAgICAgICk7XHJcbiAgICAgIHNhbXBsZXIobGF5ZXJJbWFnZXMsIGltZ0RhdGEsIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgICAgbGF5ZXJJbWFnZXMuZm9yRWFjaCgoZWZmZWN0SW1hZ2UsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgY29uc3QgbmV3Q2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcblxyXG4gICAgICAgIG5ld0NhbnZhcy5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XHJcbiAgICAgICAgbmV3Q2FudmFzLnN0eWxlLnRyYW5zaXRpb24gPSBgYWxsICR7VFJBTlNJVElPTl9EVVJBVElPTn1zYDtcclxuXHJcbiAgICAgICAgbmV3Q2FudmFzLndpZHRoID0gdGFyZ2V0UmVjdC53aWR0aCAqIGJhY2tpbmdTY2FsZSgpO1xyXG4gICAgICAgIG5ld0NhbnZhcy5oZWlnaHQgPSB0YXJnZXRSZWN0LmhlaWdodCAqIGJhY2tpbmdTY2FsZSgpO1xyXG5cclxuICAgICAgICBuZXdDYW52YXMuc3R5bGUud2lkdGggPSBgJHtuZXdDYW52YXMud2lkdGggLyBiYWNraW5nU2NhbGUoKX1weGA7XHJcbiAgICAgICAgbmV3Q2FudmFzLnN0eWxlLmhlaWdodCA9IGAke25ld0NhbnZhcy5oZWlnaHQgLyBiYWNraW5nU2NhbGUoKX1weGA7XHJcblxyXG4gICAgICAgIGNvbnN0IG5ld0NvbnRleHQgPSBuZXdDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICBuZXdDb250ZXh0LnB1dEltYWdlRGF0YShlZmZlY3RJbWFnZSwgMCwgMCk7XHJcblxyXG4gICAgICAgIGVmZmVjdC5hcHBlbmRDaGlsZChuZXdDYW52YXMpO1xyXG5cclxuICAgICAgICBjb25zdCB0cmFuc2l0aW9uRGVsYXkgPSBUUkFOU0lUSU9OX0RFTEFZICogKGluZGV4IC8gbGF5ZXJJbWFnZXMubGVuZ3RoKTtcclxuICAgICAgICBuZXdDYW52YXMuc3R5bGUudHJhbnNpdGlvbkRlbGF5ID0gYCR7dHJhbnNpdGlvbkRlbGF5fXNgO1xyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRyYW5zZm9ybUxheWVyQ2FudmFzKG5ld0NhbnZhcyksIDApO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRhcmdldC5zdHlsZS50cmFuc2l0aW9uID0gYG9wYWNpdHkgJHtUUkFOU0lUSU9OX0RVUkFUSU9OfSBlYXNlYDtcclxuICAgICAgdGFyZ2V0LnN0eWxlLm9wYWNpdHkgPSAnMCc7XHJcblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0YXJnZXQuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG4gICAgICAgIGVmZmVjdC5yZW1vdmUoKTtcclxuICAgICAgICByZXNvbHZlKHtcclxuICAgICAgICAgIHJld2luZDogKCkgPT4gdGhhbm9zUmV3aW5kKHRhcmdldClcclxuICAgICAgICB9KTtcclxuICAgICAgfSwgMWUzICogVFJBTlNJVElPTl9EVVJBVElPTik7XHJcbiAgICB9KTtcclxuICB9KTtcclxuIl19